PHP文件操作Trick
前言
文件包含,想必大家对此都有过研究,这里记录下只有传入点,但不存在可包含的文件时的一些Trick
利用条件
1 | 7.0.0 <= PHP Version < 7.0.28 |
php代码中使用php://filter的strip_tags
过滤器, 可以让 php 执行的时候直接出现 Segment Fault , 这样 php 的垃圾回收机制就不会在继续执行 , 导致 POST 的文件会保存在系统的缓存目录下不会被清除而不像phpinfo那样上传的文件很快就会被删除,这样的情况下我们只需要知道其文件名就可以包含我们的恶意代码.这种 包含 会导致php执行过程中出现segment fault,此时 上传文件,临时文件会被保存在upload_tmp_dir
所指定的目录下,不会被删除,这样就能达成getshell的目的
命名规则
linux
Linux临时文件主要存储在/tmp/
目录下,格式通常是(/tmp/php[6个随机字符]
)
windows
Windows临时文件主要存储在C:/Windows/
目录下,格式通常是(C:/Windows/php[4个随机字符].tmp
)
题目分析
[NPUCTF2020]ezinclude
打开题目查看源代码发现提示
抓包传入name值,得到的HASH值传入pass
这里可以直接传入pass为自带的HASH,传入后发现自动跳转到404.html,发现flag文件
访问后看到GET参数file,然后通过filter读取源码
1 |
|
正则过滤了伪协议之后就不能用伪协议写马了,这里就可以用php7 segment fault特性:php://filter/string.strip_tags=/etc/passwd
php执行过程中出现 Segment Fault,这样如果在此同时上传文件,那么临时文件就会被保存在/tmp目录,不会被删除
exp
1 | import requests |
然后通过dir.php获取文件名,然后去访问即可,flag就在phpinfo中
传入一句话马 然后蚁剑连接后bypass_disable functions