web入门115
首先要注意一点
像这样,我们只要保证v2中第一项(1===1)正确即可,后面不用管
但如果直接再if判断中,都要满足
所以本题需要找到一个num,满足:数字,不全是36,trim后不全是36,filter函数后==36,并且num==36
trim()
是 PHP 中的一个内置函数,用于去除字符串两端的空白字符或其他预定义字符
首先是is_numeric的绕过,我们可以加入%00 %0a %20等字符绕过
到这里,前两个都满足了
接下来是trim函数
那就选择0c吧,接下来是第四个条件%0c36也满足
需要注意的是,代码中的$num!=='36'是一个强比较,即不会进行数据转换
而$num=='36'是一个弱比较,所以%0c36会转化为36
web入门123
我们要POST提交一个CTF_SHOW和CTF_SHOW.COM
因为有eval再,我们可以直接echo $flag
但是注意,如果直接CTF_SHOW.COM的话,"."这个符号会被替换(php变量名中不能出现.)
根据替换的规则
被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换,所以 . 可以保留
所以得到payload:
CTF_SHOW=1&CTF[SHOW.COM=2&fun=echo $flag
当然,还有另外一种解法
fun=echo implode(get_defined_vars())
web入门125
增加了对c的过滤
测试发现可以用var_export
所以就
CTF_SHOW=1&CTF[SHOW.COM=2&fun=var_export(get_defined_vars())
看了payload,发现还有多种解法:
CTF_SHOW=1&CTF[SHOW.COM=1&fun=extract($_POST)&fl0g=flag_give_me
这个是变量覆盖, 使用extract函数,将数组里面的元素转化为变量 ,直接给fl0g赋值
高亮
CTF_SHOW=1&CTF[SHOW.COM=2&fun=include($_POST[1])&1=php://filter/read=convert.base64-encode/resource=flag.php(rot13不行)
web入门126
加了对字母gifcod的禁止
我们使用变量覆盖,但是extract不能用
CTF_SHOW=1&CTF[SHOW.COM=2&fun=parse_str($a[])
用来获取命令行参数,
这里a是传入argv的一个参数,被当做一个数组传入进去,数组他是以空格进行分割的,比如ls /-a,(斜杠前面有个空格),ls就是argv[0],/-a就是argv[2],+会解析为空格
还有一种:fun=assert($a[0])
?$fl0g=flag_give_me
(还没搞懂【悲】)
web入门127
当前页面 URL 中的查询字符串部分赋值给变量 $url
然后要过滤上面的字符,从而让extract函数变量覆盖
ctf_show=ilove36d
但是_有被过滤,所以我们通过加空格(空格会被替换为_)
还有编码绕过:%63%74%66%5f%73%68%6f%77=ilove36d