您现在的位置是:百科 >>正文

php文件包含漏洞利用

百科1人已围观

简介```html php文件包含漏洞利用 php文件包含漏洞利用 一个网站如果写成 include($_GET['page']);,基本等于把服务器钥匙插在门上。去年我帮朋友看一个CMS, ...

```html php文件包含漏洞利用

php文件包含漏洞利用

一个网站如果写成 include($_GET['page']);,含漏基本等于把服务器钥匙插在门上。洞利去年我帮朋友看一个CMS,含漏后台功能正常,洞利前台却能在URL里塞 ?含漏page=../../../../etc/passwd,页面直接回显了系统用户列表。洞利他当时还觉得“只是含漏读个文件而已”,直到我给他看了目录里有个 upload/ 文件夹,洞利里面躺着他自己传上去的含漏“头像”——一个改名为 .jpg 的PHP文件。

文件包含漏洞分两种:本地包含(LFI)和远程包含(RFI)。洞利LFI更常见,含漏因为不需要服务器开 allow_url_include。洞利RFI现在基本绝迹,含漏除非运维把PHP配置改回十几年前的洞利状态。所以重点看LFI——它不直接执行代码,含漏但配合文件上传、日志投毒、伪协议,就能变成任意代码执行。

伪协议是突破口

PHP内置的 php://filter 是LFI利用里最顺手的东西。比如 ?page=php://filter/convert.base64-encode/resource=index.php,页面不会执行index.php,而是把它的源码base64编码后打印出来。我试过一个站,用这个方法读到了数据库配置文件,里面写着明文密码。更狠的是 php://input,配合POST数据可以直接执行PHP代码,条件是 allow_url_include=On——很多老版本PHP默认开着。

另一个冷门但好用的协议是 data://。构造 ?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+,如果服务器允许,直接弹phpinfo。不过这个协议受 allow_url_include 限制,和 php://input 一样,不是每个环境都能用。

日志投毒——不需要上传点

没有上传功能怎么办?看日志。Apache的 access.log 会记录User-Agent,而User-Agent完全可控。用Burp Suite把UA改成 <?php system($_GET['cmd']); ?>,然后包含日志文件:?page=../../../../var/log/apache2/access.log&cmd=id。服务器会先执行日志里的PHP代码,再输出日志内容。我第一次成功时,屏幕上混着乱码和 uid=33(www-data),那种感觉比拿webshell还爽。

Nginx的日志路径通常不同,/var/log/nginx/access.log 更常见。SSH日志 /var/log/auth.log 也可以,把用户名写成PHP代码,登录失败时就会记录。不过有些系统会过滤特殊字符,得先测一下。

临时文件包含

PHP上传文件时会产生临时文件,路径在 /tmp/ 下,文件名随机但可以通过 phpinfo 泄露。先包含 phpinfo.php 页面找到 $_FILES['file']['tmp_name'],然后在文件被删除前快速包含它。这个窗口期很短,通常几毫秒,需要写脚本竞争。我见过有人用Python的requests多线程跑,成功率大概三成。麻烦,但没其他办法时值得一试。

防御比利用简单

别用用户输入拼接路径。白名单永远比黑名单可靠——只允许 home、about、contact 这几个值,其他一律拒绝。如果非要动态包含,用 basename() 过滤掉目录分隔符,再检查文件是否存在。关掉 allow_url_include 和 allow_url_fopen,能挡掉一大半远程包含和伪协议。日志文件权限设成 640,Web用户读不到,投毒就白费。

最后说个真实案例。某次渗透测试,目标站用 ?module=news 加载模块,我试了 ?module=../../../../etc/passwd 没反应,但 ?module=php://filter/convert.base64-encode/resource=config.php 读出了数据库账号。登录phpMyAdmin后,直接 SELECT '' INTO OUTFILE '/var/www/html/shell.php'。从LFI到RCE,全程不到十分钟。漏洞本身不复杂,复杂的是找到那个没过滤的参数。

```

Tags:

相关文章

  • 缴费时间

    百科

    手机屏幕亮着,晚上十一点四十七分。我盯着那条来自电力公司的短信,第三遍了——"您户号尾数为0827的电费账单已逾期,请及时缴费,否则将于三日后停电。" 其实我早就知道有这回事。月初收到电子账单时还想着 ...

    【百科】

    阅读更多
  • 网络防护措施有哪些

    百科

    ```html 网络防护措施有哪些 去年秋天,一个做电商的朋友半夜给我打电话,说店铺后台被人改了收款账户,半小时内损失了四万多。他服务器没打补丁,管理员密码是“admin123”。这件事让 ...

    【百科】

    阅读更多
  • 手机号码定位精确找人

    百科

    手机号码能定位到人,这事不假。但精确到什么程度,大多数人想错了。 去年冬天,我一个朋友的孩子放学没回家。两口子急疯了,第一个念头就是找运营商查手机定位。打客服电话,对方说需要公安机关介入。打110,警 ...

    【百科】

    阅读更多


友情链接