PHP文件包含到远程代码执行【翻译】

一、原文部分翻译

搞web安全的都知道,黑客通常利用/proc/self/environ/var/log/apache2/error.logLFI漏洞getshell,但是极少数人知道利用临时文件名getshell这种方法。

它比其它方法技巧性更强,因为它只需要一个LFI漏洞。相反,其它可能需要访问proc或者/var/log或者需要一个可控的$_SESSION变量。此漏洞于2011年被研究人员发现,这篇文章是对这些技术的一个改进。

RFC-1867中提到,文件上传的时候临时文件默认会存储在服务器默认的一个临时目录中,如果最后文件没有被移动或者没有被重命名,该临时文件就会被删除

如果我们能够赢得竞争,利用LFI包含临时文件的话便可以getshell了。不幸的是,临时文件名是由6位混合大小写字母以及数字组成,所以我们不可能一次就猜到它的名字。

如果我们找到一种方法能够阻止PHP删除临时文件?幸运的是,PHP就是PHP,当它无限递归包含一个文件的时候,就会导致SIGSEGV异常从而不能删除临时文件。

 


 

因此步骤如下:

  • 上传文件并出发自我包含
  • 重复上述步骤
  • 爆破包含文件/tmp/[0-9a-zA-Z]
  • getshell

 

利用脚本如下:

 

二、自己的测试


 

接着以表单的形式上传文件,目的地址为/test.php?file=test.php。至于为什么要以表单的形式,可以参考RFC-1867

 


 

最后你会发现,/tmp目录下的临时文件不会被删除。现在你要做的就是上传大量的文件进行爆破吧!

 

三、感悟

最初的时候,想法还是蛮天真的。LFI+phpinfogetshell的例子网上不胜枚举,我竟然天真的想利用此漏洞+phpinfo直接获取临时文件名,这完全是在扯淡~~~,不过现在基本上弄得很清楚明了了。

四、原文链接

From LFI to RCE in php

此条目发表在黑盒渗透分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

6 则回应给 PHP文件包含到远程代码执行【翻译】

  1. 隔壁老王说:

    接不接渗透业务。

  2. Melody说:

    我一开始看到这个也想得挺好的,爆破一天有可能弄得出来,或者上传半天爆破半天之类的。
    现在寻思要是在加个目录遍历或者其他漏洞就是个非常不错的思路了,类似于kindeditor的目录遍历漏洞

  3. 恶魔焦说:

    我竟然天真的想利用此漏洞+phpinfo直接获取临时文件名,这完全是在扯淡~~~
    为啥扯淡= =,不应该可以么。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注