一种LFI利用可能性探索

0x00

虽然是一个比较偏,使用中也比较少产生歧义的问题,但是和师弟讨论和自己做对比分析的时候纠正了一个认识上的错误(超全局变量的作用域是什么)。有时候思考问题的方法价值会大于问题本身吧。

思考这个问题的起点是这篇博客16/06/24提到:在上传页面,通过自包含来产生一个无限循环来产生一个SIGSEGV错误,这个错误将造成上传的缓存文件无法被删除而获得一个永久文件。这样的一个新LFI利用方法。

link: https://dustri.org/b/from-lfi-to-rce-in-php.html

1

0x01

那么,通过临时文件来利用LFI自然会想到:phpinfo通过时间竞争包来含缓存文件的方法。

link:https://www.insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf

之前研究临时文件包含的时候看过官方解释,于是又去确认了一下,发现这里对作用域只是含糊的用“全部”这个词来解释的。所以一直以来我认为的是,$_FILES和$_SESSION是一致的(开发中$SESSION使用在权限控制上非常普遍,直观感受就是“同源”的任何脚本在其存活期间都能使用它的)。

而phpinfo函数会在页面打印所有当前脚本能获取到的所有超全局变量。如果上面的想法是正确的,那么最初提到的文章中描述的方法就可以不需要时间竞争而直接得到一个永久文件,并且在phpinfo页看到这个临时文件的名字。但是本地测试这种方法是不能成功的,phpinfo页中并不能获取到$_FILES的值,于是有了接下来的探索,寻找问题出在哪一步。

2

0x03

先描述一下第一个失败的模拟环境。因为最初没有注意到$_FILES的作用域,所以写的是往index.php构造表单上传,然后在info.php中查看phpinfo的内容。如下图所示的一个模拟环境。

3

开始认为info.php页获取不到变量值是变量存在时间太短了,上传结束就销毁了。于是在上传目标页同时用另一个脚本去请求$_FILES变量值保存在文本中。结果是这个值是空白的。

这里要得出并不是被销毁了而是获取不到有一个关键要素:通过浏览器执行php脚本和通过php解释器执行php脚本是不是共用一个缓存区。于是把file页面改写成下面的逻辑,目的就是避免循环的自包含一次,产生两个文件b.txt和c.txt分别记录浏览器执行的和解释器执行的$_FILES的值。

4

结果就是浏览器执行的写文件操作获取到了$_FILES的值,而php解释器获取到的并没有得到这个值。最起码,从$_FILES来看,他们并不能共用这个值。

5

这表示最初提出的上传环境中,无法判断出info脚本没有读到值的原因是$_FILES变量被销毁还是没有使用权限。

0x04

和小伙伴讨论了一下,脚本更改为引入一个时间延迟,把上传表单的目的地址改为file.php?1=20

6

延迟结束后再输出S_FILES的值,按照逻辑,php的顺序执行让我们可以认为,这20秒的延迟时间中$_FILES是没有被销毁的。在马上开启的另一个会话中同样无法获取到这个值。

7

0x05

因为对php解释器并不了解,所以只能构造场景还查看变化来猜测发生了什么。于是回去查看了一下phpinfo来临时文件包含的那个的利用方法,使用过的大牛的优化代码中是向info页面上传。这么看来只能向info页上传,info页才能获取到$_FILES的值。

8

那么回到最初提到的通过错误来制造一个永久的零时文件(除非文件包含的页面同时输出phpinfo这种极端环境),是无法通过phpinfo页来获取到这个临时文件的名字的。

查了各种文档都并没有详细的解释$_FILES这个变量的作用域(因为正常使用multipart写上传功能是不会有这个问题的)。所以就直观感受来看,$_FILES这个超全局变量的作用域和$_SERVER、$_SESSION并不一样,只用表单中指定的POST的脚本才能正常的使用它。

那么这个LFI利用方法就显得有些鸡肋了,因为原文中很关键的一步

” Bruteforce the inclusion of /tmp/[0-9a-zA-Z]{6}”

需要爆破这个临时文件的名字,而62^6约为5.68*10^10,最恶劣环境要爆破500亿次左右。

参考链接:

https://dustri.org/b/from-lfi-to-rce-in-php.html

http://php.net/manual/zh/language.variables.superglobals.php

https://www.insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf

http://ecma.io/

 

*作者:ksss,转载请注明来自MottoIN

原创文章,作者:ksss,如若转载,请注明出处:http://www.mottoin.com/article/web/86323.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code