1.ctfshow web90
相关知识:
intval($var,$base),其中var必填,base可选.这里base=0,则表示根据var开始的数字决定使用的进制: 0x或0X开头使用十六进制,0开头使用八进制,否则使用十进制。
可知需要将4476转化为八进制或十六进制
paylod:?num=010574或num=0x117c
另web93
增加正则匹配过滤字母,进制转化不受影响
web 94
在93基础上再过滤开头为零的数字,可以通过 intval函数转化为整型的功能,增加小数点
paylod:?num=4476.0
2.ctfshow web91
考察正则匹配,相关知识:
i 不区分(ignore)大小写
m 多(more)行匹配 若存在换行n并且有开始^或结束$符的情况下, 将以换行为分隔符,逐行进行匹配
可知第一个为多行匹配,第二个为单行匹配,需要绕过第二个
则可以构造: ?cmd=%0Aphp
注:%0A为回车即换行,第一个可以匹配多行,第二个只匹配第一行的%0A,成功绕过。
3.ctfshow web100
存在eval函数,可知考察命令执行 。get传参v1为数字时,v0为true,进入if,接着v2过滤分号;v3匹配分号
paylod:/?v1=1&v2=system('tac ctfshow.php')/*&v3=*/;
注:/* */为注释字符,即将v3注释,v3=*/;存在分号,匹配通过,且v3被注释,留下分号,与v2形成闭环,成功命令执行。
解法二:可以直接var_dump ctfshow变量
相关知识:var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.
paylod:?v1=1&v2=var_dump($ctfshow)&v3=;