LFI攻击

# LFI攻击

LFI, Local File Include, 直译为本地文件包含。文件包含漏洞是代码注入攻击(Remote File Inclusion)的一种。

代码注入攻击

对网络用户端的攻击

注入一段网络用户端 (浏览器等) 能控制的脚本或代码,并让服务器端执行。

对应用程序客户端的攻击

例如 Javascript,属于跨站脚本攻击(XSS)。

更多介绍详见博客

实例 Slider Revolution

在2014年,滑块插件 Slider Revolution 存在严重漏洞,该漏洞允许黑客从服务器的wordpress里下载和上传文件。

漏洞插件源码, 漏洞利用版本为4.2.0以下。

1. 下载文件

由于用户输入过滤器(user input filters)未能正确处理通过action 的请求“revslider_show_image”传递给“admin-ajax.php”的“img”参数值,导致黑客通过浏览器下载wordpress的有关文件,如:

http://example.com/wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php`

下载的任何文件名均为admin-ajax.php,这里实则下载的是wp-config.php,打开:

获得的是服务器数据库的database名称,管理员login和password,若该服务器的数据库接口暴露在外网,则可以直接访问。

2. 上传文件

分析漏洞

通过制作http请求访问以上传文件。参考于博客(找超久的),接下来了解一下漏洞所在处:

`http://example.com/wp-admin/admin-ajax.php?action=revslider_ajax_action&client_action=get_captions_css`

通过向admin-ajax.phpaction发送POST请求,请求参数为?action=...... get_captions_css,相当于:

`array(“action” => “revslider_ajax_action”,”client_action” => “get_captions_css”, “data” => “return content of css”);`

‌ 于是在插件源码中被执行的函数是 onAjaxAction(),位于revslider_admin.php。getPostGetVar() 接收POST或GET的参数

其中触发了该函数的case语句get_captions_css

最后,返回的是captions.css的文本内容:

若请求参数为?action=......update_captions_css,相当于:

array(“action” => “revslider_ajax_action”,”client_action” => “update_captions_css”, “data” => “HTML-Update-Data here”);

其中触发了该函数的case语句update_captions_css:

Enter a caption for this image (optional)

其中函数updateCaptionsContentData(), 位于inc_php/revslider_operations.class.php

‌ 其中writeFile()是UniteFunctionsRev类的函数该类位于inc_php/functions.class.phpinc_php/framework/functions.class.php

终于找到了漏洞点,函数fwrite()和没有进行任何处理的参数$str

3. 实战

理一下思路,post请求中的data = 一段html恶意代码data 被函数onAjaxAction()接收并放入$data里,接着执行该函数的case语句update_captions_css,把$data传到函数updateCaptionsContentData(), 此时$data相当于$content, 把$content传到函数writeFile(),此时$content相当于$str, 然后把$str传到函数fwrite()中, 执行完毕。

还有一点很重要的是站点服务器others组写入权限应该对captions.css起效才行:

攻击的源码的链接这里查看

执行之后,相当于把captions.css文件内容改为<h1>Bonjour!</h1>, 在浏览器输入

example.com/wp-admin/admin-ajax.php?action=revslider_ajax_action&client_action=get_captions_css

就可以看到结果.

最后更新于

这有帮助吗?