CTF-Web
Web攻防世界
前期在bilibili学习Web知识、基本漏洞原理、burp、正则表达式的用法…(菜鸟第八天)
unserialize3

题目为一段代码,做了挺多题的,对于这种题,上来首先代码审计:
创建了一个xctf类,一个参数为flag,重构方法_wakeup()。对于_wakeup(),其一般在序列化后被调用,所以构造一个.php文件
下面展示一些 代码片。
<?php
class xctf{
public $flag = '111';
pubilc function __wakeup(){
exit('bad requests');
}
}
$a = new xctf();
echo(serialize($a)); //序列化函数,将一个字符串转变为一个对象
?>

赋值给code,发现其调用了_wakeup()方法

查阅方法得到:
wakeup()漏洞就是与整个属性个数值有关:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过wakeup的执行
所以构造code = O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;},可以跳过_wakeup()方法得到flag。

NewsCenter
题目显示功能为检索



不存在XSS漏洞
判断是否存在注入

单独添加单引号报错;使用该语句页面正常,存在sql注入
查询表中属性有几列
使用order by语句


确定属性列数目为3
查询数据库表名 、属性名

发现回显2,3,则可以在2,3写上想得到的数据;

当前数据库为news,用户为user@10.42.163.171
存在information_schema.columns表

存在表:news、secret_table
news表属性列:

secret_table表属性列:

flag存在secret_table表中,属性名有id、fl4g
查看flag

QCTF{sq1_inJec7ion_ezzz}
总结
通过这道题学习了序列化、反序列化
以下列举一些序列化会用到的方法:
serialize(); //序列化函数,把一个对象转变成一个字符串,并保存对象的值方便传递、使用
unserialize(); //反序列函数,将一个字符串转变为相对应的对象
_construct(); //构造函数,对象创建时自动调用
_destruct(); //析构函数,对象销毁时自动调用
_wakeup(); //使用unserialize()时自动调用
_sleep(); //对象序列化前调用
_toString(); //将一个对象转换成一个字符串使用
1225

被折叠的 条评论
为什么被折叠?



