搞web安全的都知道,黑客通常利用 /proc/self/environ 和 /var/log/apache2/error.log 从 LFI 漏洞getshell,但是极少数人知道利用临时文件名getshell这种方法。 它比其它方法技巧性更强,因为它只需要一个LFI漏洞。相反,其它可能需要访问 proc 或者 /var/log 或者需要一个可控的 $_SESSION 变量。此漏洞于2011年被研究人员发现,这篇文章是对这些技术的一个改进。 RFC-1867 中提到, 文件上传的时候临时文件默认会存储在服务器默认的一个临时目录中,如果最后文件没有被移动或者没有被重命名,该临时文件就会被删除 。 如果我们能够赢得竞争,利用 LFI 包含临时文件的话便可以getshell了。不幸的是,临时文件名是由6位混合大小写字母以及数字组成,所以我们不可能一次就猜到它的名字。 如果我们找到一种方法能够阻止PHP删除临时文件?幸运的是,PHP就是PHP,当它无限递归包含一个文件的时候,就会导致 SIGSEGV 异常从而不能删除临时文件。 <?php # test.php include 'test.php'; ?> $ gdb -q php Readingsymbolsfrom /usr/bin/php...(nodebuggingsymbolsfound)...done. (gdb) r -f test.php Startingprogram: /usr/bin/php -f test.php [Threaddebuggingusinglibthread_dbenabled] Usinghostlibthread_dblibrary "/lib/x86_64-linux-gnu/libthread_db.so.1". ProgramreceivedsignalSIGSEGV, Segmentationfault. 0x00005555557deb60 in ?? () (gdb) bt 24 #0 0x00005555557deb60 in ?? () #1 0x00005555557dfd31 in virtual_file_ex () #2 0x00005555557e120f in tsrm_realpath ()(责任编辑:最模板) |