前言

之前对反序列化原生类进行过总结,但可能总结的方面不同,在ctf用到的很少,所以这里在对ctf常用原生类进行一次总结。

原生类

php中内置很多原生的类,在CTF中常以echo new $a($b);这种形式出现,当看到这种关键字眼时,就要考虑本题是不是需要原生类利用了。

先看下都有什么内置原生类

<?php
$classes = get_declared_classes();
foreach ($classes as $class) {$methods = get_class_methods($class);foreach ($methods as $method) {if (in_array($method, array('__destruct','__toString','__wakeup','__call','__callStatic','__get','__set','__isset','__unset','__invoke','__set_state'))) {print $class . '::' . $method . "\n";}}
}

目录遍历类

测试代码

<?php
$a = $_GET['a'];
$b = $_GET['b'];
echo new $a($b);
?>

DirectoryIterator

这个类会创建一个指定目录的迭代器,当遇到echo输出时会触发Directorylterator中的__toString()方法,输出指定目录里面经过排序之后的第一个文件名。

可以结合glob协议使用

FilesystemIterator

该类继承于Directorylterator,所以在用法上基本也是一样的。

GlobIterator

通过类名也不难看出,这是个自带glob协议的类,所以调用时就不必再加上glob://

文件读取类

SplFileObject

当用文件目录遍历到了敏感文件时,可以用SplFileObject类,同样通过echo触发SplFileObject中的__toString()方法。(该类不支持通配符,所以必须先获取到完整文件名称才行)

除此之外其实SplFileObject类,只能读取文件的第一行内容,如果想要全部读取就需要用到foreach函数,但若题目中没有给出foreach函数的话,就要用伪协议读取文件的内容

http://127.0.0.1/1.php?a=SplFileObject&b=php://filter/read=convert.base64-encode/resource=flag


例题:极客大挑战-SoEzUnser

报错类

Error/Exception 触发XSS

Error/Exception中也有个__toString()方法,能将我们输入的xss内容输出

例题:[BJDCTF 2nd]xss之光

Error/Exception 绕过哈希比较

测试代码

<?php
$a = new Error("payload",1);$b = new Error("payload",2);
echo $a;
echo "<br>";
echo $b;
echo "<br>";
if($a != $b)
{echo "a!=b";
}
echo "<br>";
if(md5($a) === md5($b))
{echo "md5相等"."<br>";
}
if(sha1($a)=== sha1($b)){echo "sha1相等";
}

当变量a,b同时触发__toString()方法时,虽对象不同,但执行__toString()方法后,返回结果相同

这里需要注意a,a,a,b赋值时,必须要在同一行上,因为执行__toString()方法时会返回行号

例题:[2020 极客大挑战]Greatphp

命令执行

若代码是这种有eval的形式,则可以进行命令执行

<?php
$a = $_GET['a'];
$b = $_GET['b'];
eval("echo new $a($b());");
?>


这里就不仅限于Error和Exception了,基本上所有的原生类都可以

例题:ctfshow web110

其它类

ReflectionMethod 获取类方法的相关信息

想起了去年的国赛,第一次遇到这种类型的题[2021 CISCN]easy_source

可以结合getDocComment() 方法,用它来获取类中各个函数注释内容

<?php
class Sentiment{/** flag{asdasd} */public function a(){}
}
$a = $_GET['a'];
$b = $_GET['b'];
$c= $_GET['c'];
$d=new $a($b,$c);
var_dump($d->getDocComment());
?>

ZipArchive 文件操作

可以通过本类执行一些文件操作,在CTF可以用来删除waf

常用类方法

ZipArchive::addEmptyDir:添加一个新的文件目录
ZipArchive::addFile:将文件添加到指定zip压缩包中
ZipArchive::addFromString:添加新的文件同时将内容添加进去
ZipArchive::close:关闭ziparchive
ZipArchive::extractTo:将压缩包解压
ZipArchive::open:打开一个zip压缩包
ZipArchive::deleteIndex:删除压缩包中的某一个文件,如:deleteIndex(0)代表删除第一个文件
ZipArchive::deleteName:删除压缩包中的某一个文件名称,同时也将文件删除

实例代码

<?php
$zip = new ZipArchive;
$zip->open('web.zip', ZipArchive::CREATE)
?>

第一个参数:要打开的压缩包文件

第二个参数:

ZIPARCHIVE::OVERWRITE总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉。ZIPARCHIVE::CREATE如果指定的zip文件不存在,则新建一个。ZIPARCHIVE::EXCL如果指定的zip文件存在,则会报错。ZIPARCHIVE::CHECKCONS对指定的zip执行其他一致性测试。

之后会在当前目录创建个web.zip,但可能由于环境原因没有打出来

其他命令可以参考:php利用ZipArchive类操作文件的实例_php技巧_脚本之家 (jb51.net)

例题:NepCTF2021 梦里花开牡丹亭

魔法方法

SQLite3

除了原生类外还有一个魔法方法SQLite3也可以使用,基于__construct()方法,可以在指定目录下创建文件需要将php这两项前的;去除

http://127.0.0.1/1.php?a=SQLite3&b=f:/2.txt

执行后在f盘创建了一个2.txt空文件

PHP反序列化原生类利用相关推荐

  1. PHP原生类反序列化

    前言: PHP原生类反序列化之前没遇到过,这次BJDCTF恰好碰到了,通过具体的题目来学习一下 利用魔法方法 __toString Error----适用于php7版本----XSS Error类就是 ...

  2. 怎么访问原生php类,关于如何利用php的原生类进行XSS

    在CTF中,这一类型的题目一般会在代码中给出反序列化点,但是却找不到pop链,类似于[BJDCTF 2nd]xss之光这一题,通过GitHack下载代码后,发现如下: 我们可以看到题目代码给出了反序列 ...

  3. SoapClient原生类在开发以及安全中利用

    原创稿件征集 邮箱:edu@antvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里的热点话题漏洞.技术相关的调查或分析,稿件通过并发布还能收获200-800元不等的稿酬 ...

  4. java远程代码注入_Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 )...

    原标题:Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 ) 本打算慢慢写出来的,但前几天发现国外有研究员发了一篇关于这个CVE的文章,他和我找到的地方很相似.然而不知 ...

  5. Java反序列化漏洞通用利用分析

    2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSpher ...

  6. Lib之过?Java反序列化漏洞通用利用分析

    1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来***最新版的WebLogic.We ...

  7. 风炫安全Web安全学习第四十节课 反序列化漏洞攻击利用演示

    风炫安全Web安全学习第四十节课 反序列化漏洞攻击利用演示 0x02 反序列化漏洞利用 反序列化漏洞的成因在于代码中的 unserialize() 接收的参数可控,从上面的例子看,这个函数的参数是一个 ...

  8. php5.5 反序列化利用工具_%00截断配合反序列化的奇妙利用

    文章来源:安全客 原文链接:%00截断配合反序列化的奇妙利用 - 安全客,安全资讯平台 前言 前段时间做了一个CTF题目,发现这道题目相当的精妙,主要是利用了%00的截断来绕过安全校验,最终利用反序列 ...

  9. 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用

    前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...

最新文章

  1. CMM中18个KPA
  2. 洛谷 2585 [ZJOI2006]三色二叉树——树形dp
  3. Unity Android记录
  4. MongoDb学习(四)--Repository
  5. redis安装部署(1)
  6. apache 的 配置项
  7. 基于采样的路径规划方法
  8. 贴片led极性_贴片发光二极管正负极判断方法详解
  9. php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
  10. 3D全息投影 大家可以自己动手制作
  11. i78700k配什么显卡好_i78700配什么显卡
  12. Nikto v2.1.0-手册
  13. 如何解密pdf加密文件
  14. CHI的Cache Stashing和DVM操作
  15. 增加PRODUCT_BOOT_JARS及类 提供jar包给应用
  16. Ant design vue pro 添加多页签
  17. sql Mirroring
  18. 基于RedHat6.5的Greenplum环境配置
  19. Python:爬虫乱码
  20. 114 西崖 柳成龍

热门文章

  1. Unity3D插件 Doozy UI 学习(三):UI Element
  2. GIF动态图制作工具(免费),附教程
  3. 汇编jnl_汇编指令 JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
  4. Elasticsearch镜像打包记录
  5. 什么是NP-Hard
  6. Redis知识点整理(详讲)
  7. SparkSteaming运行流程分析以及CheckPoint操作
  8. among us私服搭建
  9. LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
  10. isis宣告网络_ISIS是一个分级的链接状态路由协议