作者名:Demo不是emo
主页面链接: 主页传送门
创作初心: 舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭: 不要让时代的悲哀成为你的悲哀
专研方向: web安全,后渗透技术
每日emo: 庆幸的是我们相遇过
一、覆盖参数绕过
题目 :web33
训练平台 :ctfshow
题目描述: 命令执行,需要严格的过滤
容器环境打开如下
代码逻辑这里就不再讲了,跟前面一样,就是get传入一个c变量,只要你能绕过它的限制,就能将c作为命令执行,要求读取flag.php文件
可以看到比前面几关的过滤就严格了很多,但都是针对c变量的,这里还是用我们的参数覆盖大法配合include和php伪协议查看flag文件,payload如下
url/?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
这样就可以得到经过base64编码后的flag.php,再拿去解码就能拿到flag,
二、覆盖等号绕过
题目 :web35
训练平台 :ctfshow
题目描述: 命令执行,需要严格的过滤
环境打开如下
代码逻辑和上面差不多,只是过滤中多了等于号,但还是对c进行过滤,其实你仔细看上面那道题的payload就能发现我们给c传入的值只是include$_GET[1],并没有等于号,所以上面那道题的payload在这里还是可以用的,即
url/?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
效果同上
三、覆盖数字绕过
题目 :web36
训练平台 :ctfshow
题目描述: 命令执行,需要严格的过滤
环境打开如下
也没啥说的,多了一个对数字的限制而已,还是用上面的payload就可以了,但是上面传的参数是1,所以这里就要换一下了,随便换个变量名,只要不是数字就可以了,如下
url/?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php