SQL注入-SQL数据库操作基础
实验目的
熟悉MySQL(MariaDB)数据库的基础与进阶语法,加深对SQL命令语句的理解,为后续SQL注入攻击与防护实验打下坚实的基础。
实验环境
操作机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
MySQL(MariaDB)数据库帐号root,密码为空
实验原理
MySQL(MariaDB)数据库基本命令的功能。
实验步骤
第一部分:MySQL(MariaDB)基础操作
1 连接数据库
输入命令:
1 |
|
之后出现“Enter password:”的提示,由于root密码为空,此处直接按下回车键即可登录。
成功登录数据库后,会出现“MariaDB[(none)]”的提示符。
2 显示系统中所有数据库的名称
输入命令:
1 |
|
注意:绝大部分SQL命令都以分号作为结束符,请不要遗漏!
3 新建数据库student
命令:
1 |
|
新建成功后,可再次使用下列命令查看结果:
1 |
|
4 使用数据库student
命令:
1 |
|
5 在数据库student中创建表result
命令:
1 |
|
6 在表result中增加数据
本步骤在result中插入如下5行数据:
命令:
1 |
|
注意:如果数据是字符型(varchar),必须使用单引号或者双引号包裹!
插入成功后,可用如下命令查询result表中的全部内容:
1 |
|
7 在表result中删除1条数据
例如,删除id=7的数据,可使用以下命令:
1 |
|
删除成功后,仍然可以用以下命令查看结果:
1 |
|
8 修改表result中的1条数据
例如,修改id=5的数据,将其score设置为60,可使用以下命令:
1 |
|
修改成功后,仍然可以用以下命令查看结果:
1 |
|
9 查询表result中的数据
例如:
1 |
|
1 |
|
1 |
|
第二部分:MySQL(MariaDB)进阶操作
1 order by的用法
(1)将result表中的数据按照分数(score)从高到低进行排序:
1 |
|
其中,desc表示降序(递减);如果从低到高(升序)进行排列,则可以将desc换成asc;如果不加此参数,默认情况下按升序方式排列。
(2)分别尝试以下命令:
1 |
|
正常显示以id升序排列的结果。
1 |
|
正常显示以name升序排列的结果!
1 |
|
正常显示以score升序排列的结果!
1 |
|
报错!
从以上结果可以总结出,对于以下命令:
1 |
|
order by后面的数字(M)必须小于或等于n(数据库查询的字段数),才能正常显示。如果M>n,数据库就会报错。可以利用这个特点判断数据库查询的字段数。
2 limit的用法
基本格式为:
1 |
|
尝试执行以下两条命令:
1 |
|
1 |
|
3 union select的用法
1 |
|
此语句的查询结果,即是select * from result和select 1,2,3,4查询结果的拼接。
(2)尝试执行以下3条语句:
1 |
|
正常显示!
1 |
|
报错!
1 |
|
报错!
从以上结果可以总结,对于以下命令:
1 |
|
后半句union select查询的字段数(m)必须与前半句select查询的字段数(n)相等,数据库才能正常显示结果。与order by相似,可以利用这个特点判断数据库查询的字段数。
(3)尝试执行下列语句
1 |
|
从以上结果可以总结,在已知字段名的情况下,攻击者只要将该字段置于任何能够显示的位置,就可以暴露该字段的值。
4 union select结合information_schema数据库
MySQL(MariaDB)5.5以上版本自带information_schema数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等。可以把information_schema数据库看作MySQL(MariaDB)的“目录”!
(1)尝试执行以下两条语句:
1 |
|
两条语句执行结果相同!
(2)尝试执行以下两组语句:
第一组:
1 |
|
第二组:
1 |
|
两组命令执行结果相同!
实验总结
通过本实验熟悉了SQL基本语法,为后面SQL注入学习打下深厚基础。
完成实验后请思考:如何做好SQL数据库的安全运维工作,既保障数据库的正常运行,又不带来意外风险?
SQL注入-基于联合查询的数字型GET注入
实验目的
理解数字型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
数字型GET注入,其注入点存在于URL中的GET参数处,如http://www.testweb.com/user.php?id=8,而服务器后端实际查询代码原型诸如:“select … from … where id=$id…” 。
攻击者可以通过构造恶意的GET输入参数,利用union select命令进行注入,暴露数据库中存储的信息。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-2为入口,利用联合查询(union select)的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-2。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,先给定一个GET参数,即:
1 |
|
此时页面显示id=1的用户名Dump、密码Dump。
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型:
1 |
|
运行后报错!
1 |
|
运行后正常显示!
1 |
|
运行后未正常显示!
由上述结果可以判断,网站存在数字型注入点。
3 判断网站查询的字段数
尝试使用以下payload获取网站查询的字段数(关键字order by):
1 |
|
正常显示!
1 |
|
正常显示!
1 |
|
正常显示!
1 |
|
报错!
由上述结果可以判断,网站查询的字段数为3。
4 判断网站的回显位置
利用以下payload判断网站的回显位置:
1 |
|
执行的结果是:2号位和3号位可以回显!
后面的步骤中,我们可以在2号位或3号位设置一些具有特殊功能的函数或命令来执行SQL注入!
5 获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。
6 获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
1 |
|
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
7 获取users表的全部字段名
使用以下payload获取users表的全部字段名:
1 |
|
显示结果,users表中有id、username和password三个字段。
8 获取users表id、username和password字段的全部值。
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在数字型GET注入点的网站的手工SQL注入,掌握了基于联合查询的注入方法和流程。
SQL注入-基于联合查询的字符型GET注入
实验目的
理解字符型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
字符型GET注入,其注入点存在于URL中的GET参数处,如http://www.testweb.com/user.php?id=admin,而服务器后端实际查询代码原型诸如:“select … from … where id=’$id’…” 。
攻击者可以通过构造恶意的GET输入参数,利用union select命令进行注入,暴露数据库中存储的信息。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-1为入口,利用联合查询(union select)的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-1。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,先给定一个GET参数,即:
1 |
|
此时页面显示id=1的用户名Dump、密码Dump。
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型:
1 |
|
运行后报错!
1 |
|
运行后正常显示!
1 |
|
运行后未正常显示!
由上述结果可以判断,网站存在字符型注入点。
3 判断网站查询的字段数
尝试使用以下payload获取网站查询的字段数(关键字order by):
1 |
|
正常显示!
1 |
|
正常显示!
1 |
|
正常显示!
1 |
|
报错!
由上述结果可以判断,网站查询的字段数为3。
4 判断网站的回显位置
利用以下payload判断网站的回显位置:
1 |
|
执行的结果是:2号位和3号位可以回显!
5 获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。
6 获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
1 |
|
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
7 获取users表的全部字段名
使用以下payload获取users表的全部字段名:
1 |
|
显示结果,users表中有id、username和password三个字段。
8 获取users表id、username和password字段的全部值。
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,掌握了基于联合查询的注入方法和流程。
SQL注入-基于联合查询的POST注入
实验目的
理解POST注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
POST注入,其注入点存在于POST表单中的参数处。攻击者可以通过代理抓包工具(如Burpsuite)拦截并修改POST表单中的参数,利用union select命令进行注入,暴露数据库中存储的信息。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-11为入口,利用联合查询(union select)的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-11。访问的URL为:
1 |
|
(注意大小写)
2 利用Burpsuite工具抓包
(1)启动Burpsuite
在攻击机Pentest-Atk的桌面文件夹Burp中,鼠标左键双击BURP.cmd程序,启动Burpsuite。
(2)设置Burpsuite的代理服务端口
在Burpsuite软件界面上选择选项卡“Proxy”->“Options”,在Proxy Listeners模块下,将Burpsuite的代理服务端口设置为8080(此为Burpsuite默认的服务端口)。
(3)开启Burpsuite的代理拦截功能
在Burpsuite软件界面上选择选项卡“Proxy”->“Intercept”,将拦截开关按钮的状态设置为“Intercept is on”。
注意:上述设置完成之后,不要关闭Burpsuite!
(4)设置Firefox代理
回到FireFox浏览器界面,鼠标右键单击浏览器地址栏右方的FoxyProxy插件图标按钮,在弹出的菜单中选择“为全部URLs启用代理服务器127.0.0.1:8080”:
代理设置成功后,FoxyProxy插件图标会变成蓝色。
(5)利用Burpsuite工具拦截HTTP请求包
在FireFox浏览器访问的Less-11登录验证界面,输入用户名admin、
密码任意(本例中为1),然后点击Submit按钮,
此时Burpsuite会拦截到HTTP请求包:
(6)将Burpsuite工具拦截到的HTTP请求包发送至Repeater模块。
选中拦截到的HTTP请求包全部内容,单击鼠标右键,在弹出的菜单中选择“Send to Repeater”,将其发送给Burpsuite的Repeater模块。
发送成功后,在Burpsuite的Repeater选项卡下能够看到刚刚拦截的HTTP请求包内容。
后续的步骤中,可以在Repeater选项卡下的Request栏中设置注入的payload,设置完成后点击Send按钮发送,并在Response栏中观察目标服务器的响应。
3 寻找注入点
在POST表单处,分别使用以下2条payload寻找注入点及判断注入点的类型:
1 |
|
报错!
1 |
|
目标正常回显用户名和密码!
由此可以判断,目标网站在POST参数处存在字符型注入点。
4 判断网站查询的字段数
尝试使用以下payload获取网站查询的字段数(关键字order by):
1 |
|
目标正常回显用户名和密码!
1 |
|
目标正常回显用户名和密码!
1 |
|
报错!
由此可以判断,网站查询的字段数为2。
5 判断网站的回显位置
利用以下payload判断网站的回显位置:
1 |
|
运行结果,1号位和2号位均可以回显!
6 获取网站当前所在数据库的库名
利用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。
7 获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
1 |
|
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
8 获取users表的全部字段名
使用以下payload获取users表的全部字段名:
1 |
|
显示结果,users表中有id、username和password三个字段。
9 获取users表id、username和password字段的全部值。
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在POST注入点的网站的手工SQL注入,掌握了基于联合查询的注入方法和流程。
SQL注入-基于报错的注入1
实验目的
熟悉报错功能函数extractvalue()的用法,掌握基于报错的SQL注入基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
(1)关于报错注入
基于报错的注入,是指通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名、版本号、用户名等)通过页面的错误提示回显出来。
报错注入一般需要具备两个前提条件:(1)Web应用程序未关闭数据库报错函数,对于一些SQL语句的错误直接回显在页面上;(2)后台未对一些具有报错功能的函数进行过滤。
常用的报错功能函数包括extractvalue()、updatexml()、floor()、exp()等。
(2)关于extractvalue()函数
作用:对XML文档进行查询,相当于在HTML文件中用标签查找元素。
语法:extractvalue(XML_document, XPath_string)
参数1:XML_document是String格式,为XML文档对象的名称;
参数2:XPath_string(Xpath格式的字符串),注入时可操作的地方。
报错原理:xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果写入其他格式就会报错,并且会返回写入的非法格式内容,错误信息如:XPATH syntax error:’xxxxxxxx’。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-1为入口,借助extractvalue()函数,利用基于报错的注入方式获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-1。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,先给定一个GET参数,即:
1 |
|
此时页面显示id=1的用户名Dump、密码Dump。
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型:
1 |
|
运行后报错!
1 |
|
运行后正常显示!
1 |
|
运行后未正常显示!
由上述结果可以判断,网站存在字符型注入点。
3 获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。
4 获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
1 |
|
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
注意:extractvalue() 函数所能显示的错误信息最大长度为32,如果错误信息超过了最大长度,有可能导致显示不全。因此,有时需要借助limit来做分行显示,上述payload可以改为:
1 |
|
5 获取users表的全部字段名
使用以下payload获取users表的全部字段名:
1 |
|
显示结果,users表中有id、username和password三个字段。
同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示,上述payload可以改为:
1 |
|
6 获取users表id、username和password字段的全部值。
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉了extractvalue()函数的用法,掌握了基于报错的注入方法和流程。
SQL注入-基于报错的注入2
实验目的
熟悉报错功能函数floor()的用法,掌握基于报错的SQL注入基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
(1)关于报错注入
基于报错的注入,是指通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名、版本号、用户名等)通过页面的错误提示回显出来。
报错注入一般需要具备两个前提条件:(1)Web应用程序未关闭数据库报错函数,对于一些SQL语句的错误直接回显在页面上;(2)后台未对一些具有报错功能的函数进行过滤。
常用的报错功能函数包括extractvalue()、updatexml()、floor()、exp()等。
(2)关于floor()函数
在进行报错注入时,floor()函数一般需要与rand()、count()、group by联用。
作用:
floor(x):对参数x向下取整;
rand():生成一个0~1之间的随机浮点数;
count(*):统计某个表下总共有多少条记录;
group by x:按照(by)一定的规则(x)进行分组;
报错原理:floor()函数与group
by、rand()联用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group
by将计算出来的主键直接插入到临时表格中,导致主键重复报错,错误信息如:Duplicate entry ‘…’ for key
‘group_key’。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-1为入口,借助floor()函数与rand()、count()、group by的联用,利用基于报错的注入方式获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-1。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,先给定一个GET参数,即:
1 |
|
此时页面显示id=1的用户名Dump、密码Dump。
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型:
1 |
|
运行后报错!
1 |
|
运行后正常显示!
1 |
|
运行后未正常显示!
由上述结果可以判断,网站存在字符型注入点。
3 获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。注意:请忽略后面的1。
4 获取数据库security的全部表名
使用以下payload获取数据库security的表名:
1 |
|
显示security库中的第1张表的名字为emails。
1 |
|
显示security库中的第2张表的名字为referers。
1 |
|
显示security库中的第3张表的名字为uagents。
1 |
|
显示security库中的第4张表的名字为users。
…
以上显示结果中,第4张表users当中可能存放着网站用户的基本信息。
5 获取users表的全部字段名
使用以下payload获取users表的字段名:
1 |
|
显示users表中的第1个字段名字为id。
1 |
|
显示users表中的第2个字段名字为username。
1 |
|
显示users表中的第3个字段名字为password。
…
综合以上显示结果,users表中有id、username和password三个字段。
6 获取users表id、username和password字段的全部值。
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉了floor()、rand()、count()、group by的用法,掌握了基于报错的注入方法和流程。
SQL注入-基于布尔的盲注
实验目的
了解布尔盲注技术的运用场景及条件,熟悉length()、substr()、ascii()等函数的用法,掌握基于布尔的盲注基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
(1)关于布尔盲注
某些场合下,页面返回的结果只有两种(正常或错误)。通过构造SQL判断语句,查看页面的返回结果(True or False)来判断哪些SQL判断条件成立,通过此来获取数据库中的数据。
(2)一些功能函数的说明
length(str):返回字符串(str)的长度,以字节为单位。
substr(str,pos,len):从指定的位置(pos)开始,截取并返回字符串(str)指定长度(len)的子串。
ascii(str):返回字符串(str)最左边字符的ASCII码。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-8为入口,利用基于布尔的盲注方式获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-8。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,给定一个?id=1的参数,即:
1 |
|
此时页面显示信息为You are in…,显示状态为True。
如果给定一个?id=-1的参数,即:
1 |
|
此时页面显示信息为空,显示状态为False。
可以继续给定不同的id参数进行尝试,发现页面的显示结果只有两种:True或False。由此可以判断,这是一种典型的布尔盲注场景!
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型:
1 |
|
运行后页面显示为False!
1 |
|
运行后页面显示为True!
1 |
|
运行后页面显示为False!
由上述结果可以判断,网站存在字符型注入点。
3 盲猜网站当前所在数据库的库名长度
假设当前所在数据库的库名长度为N,尝试使用判断语句length(database())=M,不断变化M的值去猜测,如果M不等于N,页面应该显示为False;如果M等于N,页面应该显示为True。
例如执行如下payload:
1 |
|
显示结果为False,说明网站当前所在数据库的库名长度不是7个字符!
1 |
|
显示结果为True,说明网站当前所在数据库的库名长度为8个字符!
4 盲猜网站当前所在数据库的库名字符串
本步骤通过逐个字母盲猜的方式进行。
假设库名字符串的第1个字母为a,那么条件判断语句 substr(库名字符串,1,1)=‘a’ 以及 ascii(substr(库名字符串,1,1))=97 返回的结果均应为True(小写字母a的ASCII码为97);
假设库名字符串的第2个字母为b,那么条件判断语句 substr(库名字符串,2,1))=‘b’ 以及 ascii(substr(库名字符串,2,1))=98 返回的结果均应为True(小写字母b的ASCII码为98);
…
以此类推。
猜测库名的第1个字母:
1 |
|
库名的第1个字母为s。
猜测库名的第2个字母:
1 |
|
库名的第2个字母为e。
…
以此类推,最终得到的字符串结果为security。
5 盲猜数据库security的全部表名
(1)猜测第1张表的表名
猜测第1张表的表名的第1个字符:
1 |
|
第1张表的表名的第1个字符为e。
猜测第1张表的表名的第2个字符:
1 |
|
第1张表的表名的第2个字符为m。
…
以此类推,得到security库中的第1张表的名字为emails。
(2)猜测第2张表的表名
猜测第2张表的表名的第1个字符:
1 |
|
第2张表的表名的第1个字符为r。
猜测第2张表的表名的第2个字符:
1 |
|
第2张表的表名的第2个字符为e。
…
以此类推,得到security库中的第2张表的名字为referers。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到security库中所有表的表名:emails、referers、uagents和users。其中,第4张表users当中可能存放着网站用户的基本信息。
6 盲猜users表的全部字段名
(1)猜测第1个字段名
猜测第1个字段名的第1个字符:
1 |
|
第1个字段名的第1个字符为i。
猜测第1个字段名的第2个字符:
1 |
|
第1个字段名的第2个字符为d。
…
以此类推,得到users表中的第1个字段名为id。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中所有字段名:id、username和password。
7 盲猜users表username和password字段的全部值
(1)猜测第1组数据
猜测第1组数据的第1个字符:
1 |
|
第1组数据的第1个字符为D。
猜测第1组数据的第2个字符:
1 |
|
第1组数据的第2个字符为u。
…
以此类推,得到第1组数据为“Dump,Dump”。
注意:字符串中的逗号(,)也是需要进行猜测比对的!例如第1组数据的第5个字符:
1 |
|
(2)猜测第2组数据
猜测第2组数据的第1个字符:
1 |
|
第2组数据的第1个字符为A。
猜测第2组数据的第2个字符:
1 |
|
第2组数据的第2个字符为n。
…
以此类推,得到第2组数据为“Angelina,I-kill-you”。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中username和password字段的全部值。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉了length()、substr()等函数的用法,掌握了基于布尔的盲注方法和流程。
SQL注入-基于时间的盲注
实验目的
了解延时盲注技术的运用场景及条件,熟悉length()、substr()、ascii()、sleep()、if()等函数的用法,掌握基于时间的盲注基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
(1)关于时间(延时)盲注
某些场合下,页面只有一种返回结果,使用具有延时功能的函数sleep()、benchmark()等,通过判断这些函数是否正常执行来获取数据库中的数据。
(2)一些功能函数的说明
length(str):返回字符串(str)的长度,以字节为单位。
substr(str,pos,len):从指定的位置(pos)开始,截取并返回字符串(str)指定长度(len)的子串。
ascii(str):返回字符串(str)最左边字符的ASCII码。
if(expr1,expr2,expr3):条件判断函数,expr1为true则返回expr2,expr1为false则返回expr3。
sleep(N):让语句延迟执行一段时间(N秒),执行成功后返回0。
benchmark(count,expr):让expr执行count次,执行成功后返回0。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-9为入口,利用基于时间的盲注方式获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-9。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,给定一个?id=1的参数,即:
1 |
|
此时页面显示信息为You are in…。
如果给定一个?id=-1的参数,即:
1 |
|
此时页面显示信息仍然为You are in…。
可以继续给定不同的id参数进行尝试,发现页面的显示结果只有一种:You are in…。由此可以判断,这是一种典型的时间(延时)盲注场景!
说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!
2 寻找注入点
使用sleep()函数判断注入点的类型:
1 |
|
sleep(5)未执行,页面无明显延迟。
1 |
|
sleep(5)成功执行,页面有明显延迟!
由上述结果可以判断,网站存在字符型注入点。
3 盲猜网站当前所在数据库的库名长度
假设当前所在数据库的库名长度为N,尝试使用判断语句if((length(database())=M),sleep(5),1),不断变化M的值去猜测,如果M等于N,此时sleep(5)会成功执行,页面应该会有明显延迟。
例如执行如下payload:
1 |
|
页面无明显延迟,说明网站当前所在数据库的库名长度不是7个字符。
1 |
|
页面有明显延迟,说明网站当前所在数据库的库名长度为8个字符!
4 盲猜网站当前所在数据库的库名字符串
本步骤通过逐个字母盲猜的方式进行。
假设库名字符串的第1个字母为a,那么条件判断语句 if(substr(库名字符串,1,1)=‘a’,sleep(5),1) 以及
if(ascii(substr(库名字符串,1,1))=97,sleep(5),1) 中,sleep(5)能成功执行,页面应该会有明显延迟;
假设库名字符串的第2个字母为b,那么条件判断语句 if(substr(库名字符串,2,1)=‘b’,sleep(5),1) 以及
if(ascii(substr(库名字符串,2,1))=98,sleep(5),1) 中,sleep(5)能成功执行,页面应该会有明显延迟;
…
以此类推。
猜测库名的第1个字母:
1 |
|
页面有明显延迟,证明库名的第1个字母为s,猜测正确。
猜测库名的第2个字母:
1 |
|
页面有明显延迟,证明库名的第2个字母为e,猜测正确。
…
以此类推,最终得到的字符串结果为security。
5 盲猜数据库security的全部表名
(1)猜测第1张表的表名
猜测第1张表的表名的第1个字符:
1 |
|
页面有明显延迟,证明第1张表的表名的第1个字符为e,猜测正确。
猜测第1张表的表名的第2个字符:
1 |
|
页面有明显延迟,证明第1张表的表名的第2个字符为m,猜测正确。
…
以此类推,得到security库中的第1张表的名字为emails。
(2)猜测第2张表的表名
猜测第2张表的表名的第1个字符:
1 |
|
页面有明显延迟,证明第2张表的表名的第1个字符为r,猜测正确。
猜测第2张表的表名的第2个字符:
1 |
|
页面有明显延迟,证明第2张表的表名的第2个字符为e,猜测正确。
…
以此类推,得到security库中的第2张表的名字为referers。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到security库中所有表的表名:emails、referers、uagents和users。其中,第4张表users当中可能存放着网站用户的基本信息。
6 盲猜users表的全部字段名
(1)猜测第1个字段名
猜测第1个字段名的第1个字符:
1 |
|
页面有明显延迟,证明第1个字段名的第1个字符为i,猜测正确。
猜测第1个字段名的第2个字符:
1 |
|
页面有明显延迟,证明第1个字段名的第2个字符为d,猜测正确。
…
以此类推,得到users表中的第1个字段名为id。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中所有字段名:id、username和password。
7 盲猜users表username和password字段的全部值
(1)猜测第1组数据
猜测第1组数据的第1个字符:
1 |
|
页面有明显延迟,证明第1组数据的第1个字符为D,猜测正确。
猜测第1组数据的第2个字符:
1 |
|
页面有明显延迟,证明第1组数据的第2个字符为u,猜测正确。
…
以此类推,得到第1组数据为“Dump,Dump”。
注意:字符串中的逗号(,)也是需要进行猜测比对的!例如第1组数据的第5个字符:
1 |
|
(2)猜测第2组数据
猜测第2组数据的第1个字符:
1 |
|
页面有明显延迟,证明第2组数据的第1个字符为A,猜测正确。
猜测第2组数据的第2个字符:
1 |
|
页面有明显延迟,证明第2组数据的第2个字符为n,猜测正确。
…
以此类推,得到第2组数据为“Angelina,I-kill-you”。
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中username和password字段的全部值。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉了length()、substr()、ascii()、sleep()、if()等函数的用法,掌握了基于时间的盲注方法和流程。
SQL注入-HTTP头部注入1
实验目的
理解HTTP头部字段User-Agent、Referer、Cookie、X-Forwarded-For等的含义和作用,掌握HTTP头部注入的原理、方法及基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证等)或者通过HTTP
Header头信息获取客户端的一些信息(比如User-Agent、Accept字段等),会对客户端HTTP
Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。
常见的HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注入、XFF注入等。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-18为入口,利用报错注入的方式实施SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-11。访问的URL为:
1 |
|
(注意大小写)
2 利用Burpsuite工具抓包
(1)启动Burpsuite
在攻击机Pentest-Atk的桌面文件夹Burp中,鼠标左键双击BURP.cmd程序,启动Burpsuite。
(2)设置Burpsuite的代理服务端口
在Burpsuite软件界面上选择选项卡“Proxy”->“Options”,在Proxy Listeners模块下,将Burpsuite的代理服务端口设置为8080(此为Burpsuite默认的服务端口)。
(3)开启Burpsuite的代理拦截功能
在Burpsuite软件界面上选择选项卡“Proxy”->“Intercept”,将拦截开关按钮的状态设置为“Intercept is on”。
注意:上述设置完成之后,不要关闭Burpsuite!
(4)设置Firefox代理
回到FireFox浏览器界面,鼠标右键单击浏览器地址栏右方的FoxyProxy插件图标按钮,在弹出的菜单中选择“为全部URLs启用代理服务器127.0.0.1:8080”:
代理设置成功后,FoxyProxy插件图标会变成蓝色。
(5)利用Burpsuite工具拦截HTTP请求包
在FireFox浏览器访问的Less-18登录验证界面,输入用户名admin、
密码admin,然后点击Submit按钮,
此时Burpsuite会拦截到HTTP请求包:
(6)将Burpsuite工具拦截到的HTTP请求包发送至Repeater模块。
选中拦截到的HTTP请求包全部内容,单击鼠标右键,在弹出的菜单中选择“Send to Repeater”,将其发送给Burpsuite的Repeater模块。
发送成功后,在Burpsuite的Repeater选项卡下能够看到刚刚拦截的HTTP请求包内容。
后续的步骤中,可以在Repeater选项卡下的Request栏中设置注入的payload,设置完成后点击Send按钮发送,并在Response栏中观察目标服务器的响应。
3 寻找注入点
在原始HTTP请求包的头部字段User-Agent末尾添加单引号,即使用如下payload:
1 |
|
发现服务器端报错!
在原始HTTP请求包的头部字段User-Agent末尾添加如下符号,使用如下payload:
1 |
|
服务器端未报错!
由此可以判断,目标网站在POST参数处存在字符型注入点。
注:如果在服务器端(靶机)上查看Less-18的php代码,会发现其中存在这样一段代码:
1 |
|
这也是一种基于Insert的注入场景。
4 获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:
1 |
|
显示结果为security。
5 获取数据库security的全部表名
使用以下payload获取数据库security的全部表名:
1 |
|
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
注意:extractvalue()函数所能显示的错误信息最大长度为32,如果错误信息超过了最大长度,有可能导致显示不全。因此,有时需要借助limit来做分行显示,上述payload可以改为:
1 |
|
6 获取users表的全部字段名
使用以下payload获取users表的全部字段名:
1 |
|
显示结果,users表中有id、username和password三个字段。
同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示,上述payload可以改为:
1 |
|
7 获取users表id、username和password字段的全部值
由于users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我们可以通过limit M,N的方式逐条显示,如
(1)显示第1组数据
1 |
|
显示结果为Dump,Dump。
(2)显示第2组数据
1 |
|
显示结果为Angelina,I-kill-you。
(3)显示第3组数据
1 |
|
显示结果为Dummy,p@ssword。
…
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
实验至此结束。
实验总结
本次实验,成功实现了对存在HTTP头部(User-Agent)注入点的网站的手工SQL注入,掌握了HTTP头部注入的原理、方法和流程。
SQL注入-HTTP头部注入2
实验目的
理解HTTP头部字段User-Agent、Referer、Cookie、X-Forwarded-For等的含义和作用,掌握HTTP头部注入的原理、方法及基本流程。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证等)或者通过HTTP
Header头信息获取客户端的一些信息(比如User-Agent、Accept字段等),会对客户端HTTP
Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。
常见的HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注入、XFF注入等。
实验步骤
本实验的目标是:以Webug3.0网站的第五关为入口,利用报错注入的方式实施SQL注入,获取网站后台数据库中存放的flag。
1 访问Webug网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的Webug网站。访问的URL为:
1 |
|
(注意大小写)
2 利用Burpsuite工具抓包
(1)启动Burpsuite
在攻击机Pentest-Atk的桌面文件夹Burp中,鼠标左键双击BURP.cmd程序,启动Burpsuite。
(2)设置Burpsuite的代理服务端口
在Burpsuite软件界面上选择选项卡“Proxy”->“Options”,在Proxy Listeners模块下,将Burpsuite的代理服务端口设置为8080(此为Burpsuite默认的服务端口)。
(3)开启Burpsuite的代理拦截功能
在Burpsuite软件界面上选择选项卡“Proxy”->“Intercept”,将拦截开关按钮的状态设置为“Intercept is on”。
注意:上述设置完成之后,不要关闭Burpsuite!
(4)设置Firefox代理
回到FireFox浏览器界面,鼠标右键单击浏览器地址栏右方的FoxyProxy插件图标按钮,在弹出的菜单中选择“为全部URLs启用代理服务器127.0.0.1:8080”:
代理设置成功后,FoxyProxy插件图标会变成蓝色。
(5)利用Burpsuite工具拦截HTTP请求包
在Webug网站主页选择第五关(“头部的一个注入”):
此时Burpsuite会拦截到HTTP请求包:
(6)将Burpsuite工具拦截到的HTTP请求包发送至Repeater模块
选中拦截到的HTTP请求包全部内容,单击鼠标右键,在弹出的菜单中选择“Send to Repeater”,将其发送给Burpsuite的Repeater模块。
发送成功后,在Burpsuite的Repeater选项卡下能够看到刚刚拦截的HTTP请求包内容。
后续的步骤中,可以在Repeater选项卡下的Request栏中设置注入的payload,设置完成后点击Send按钮发送,并在Response栏中观察目标服务器的响应。
3 寻找注入点
(1)对拦截到的HTTP请求包不做任何修改,直接点击Send发送,此时Response->Pretty下显示的内容:
Response->Render下显示的内容:
(2)在原始的HTTP请求包中添加头部字段X-Forwarded-For,并使用如下payload:
1 |
|
此时,服务器端报错!
由此可以判断,目标网站在头部字段XFF处存在注入点。
4 判断网站查询的字段数
使用如下payload判断网站查询的字段数:
1 |
|
未报错!
1 |
|
未报错!
1 |
|
未报错!
1 |
|
报错!
由上述结果可以判断,网站查询的字段数为4。
5 判断网站的回显位置
使用如下payload判断网站的回显位置:
1 |
|
由上述结果可以判断,网站有三个回显位置:2号位、3号位和4号位。
6 获取网站当前所在的数据库的库名
使用如下payload获取网站当前所在的数据库的库名:
1 |
|
由上述结果可以得知,网站当前所在的数据库的库名为pentesterlab。
7 获取pentesterlab数据库中所有的表名
使用如下payload获取pentesterlab数据库中所有的表名:
1 |
|
由上述结果可以得知,pentesterlab数据库中含有comment、flag、goods和user四张表。其中,flag表中可能存放着flag信息。
8 获取flag表中的字段名
使用如下payload获取flag表中的字段名:
1 |
|
由上述结果可以得知,flag表中有两个字段id、flag。
9 获取flag表中的flag字段的内容
使用如下payload获取flag表中的flag字段的内容:
1 |
|
由上述结果可以得知,该flag字段的内容为204f704fbbcf6acf398ffee11989b377。
实验至此结束。
实验总结
本次实验,成功实现了对存在HTTP头部(X-Forwarded-For)注入点的网站的手工SQL注入,掌握了HTTP头部注入的原理、方法和流程。
SQL注入-SQLMAP基础使用1
实验目的
了解SQLMAP的工作原理,熟悉SQLMAP的常用命令,掌握SQLMAP的-u参数的基本使用方法。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
SQLMAP是一个开源的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。
SQLMAP的基本功能包括:判断可注入的参数、判断可以使用哪一种SQL注入技术进行注入、判断识别数据库的类型以及根据用户的选择从数据库中读取数据。
SQLMAP支持的注入技术包括以下五种:
(1)基于布尔的盲注:根据返回页面判断条件真假的注入。
(2)基于时间的盲注:不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
(3)基于报错的注入:页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
(4)基于联合查询的注入:可以使用UNION的情况下的注入。
(5)堆查询注入:同时执行多条语句的注入。
SQLMAP支持的数据库类型主要包括一些关系型数据库(RMDBS),如MySQL、Oracle、PostgreSQL、Microsoft SQL
Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP
MaxDB、Informix、HSQLDB等。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-3为入口,利用SQLMAP实施自动化SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-3。访问的URL为:
1 |
|
(注意大小写)
登录后,根据网页提示,先给定一个GET参数,即:
1 |
|
此时页面显示id=1的用户名Dump、密码Dump。
2 启动SQLMAP
启动Windows操作系统的命令行工具cmd:
在命令行工具cmd中输入以下命令,进入SQLMAP程序所在的路径:
1 |
|
进入SQLMAP程序所在的路径后,使用以下命令启动SQLMAP帮助:
1 |
|
3 寻找注入点
使用以下命令自动寻找网站的注入点,并获取网站及后台数据库的基本信息:
1 |
|
检测结果如下图所示:
4 获取所有数据库的库名
(1)使用以下命令获取所有数据库的库名:
1 |
|
检测结果如下图所示:
(2)使用以下命令获取网站当前所在数据库的库名:
1 |
|
检测结果:网站当前所在数据库的库名为security。
5 获取security数据库中所有的表名
使用以下命令获取security数据库中所有的表名:
1 |
|
检测结果:security数据库中含有emails、referers、uagents、users四张表。
其中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
6 获取users表的全部字段名
使用以下命令获取users表的全部字段名:
1 |
|
检测结果:users表中有三个字段id、username和password。
7 获取users表id、username和password字段的全部值
使用以下命令获取users表id、username和password字段的全部值:
1 |
|
检测结果如下图所示:
实验至此结束。
实验总结
本次实验,成功利用SQLMAP对存在GET型注入点的网站进行了自动化SQL注入,掌握了SQLMAP的-u参数的基本使用方法。
SQL注入-SQLMAP基础使用2
实验目的
了解SQLMAP的工作原理,熟悉SQLMAP的常用命令,掌握SQLMAP的-r参数的基本使用方法。
实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows 10
(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等
(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
SQLMAP是一个开源的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。
SQLMAP的基本功能包括:判断可注入的参数、判断可以使用哪一种SQL注入技术进行注入、判断识别数据库的类型以及根据用户的选择从数据库中读取数据。
SQLMAP支持的注入技术包括以下五种:
(1)基于布尔的盲注:根据返回页面判断条件真假的注入。
(2)基于时间的盲注:不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
(3)基于报错的注入:页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
(4)基于联合查询的注入:可以使用UNION的情况下的注入。
(5)堆查询注入:同时执行多条语句的注入。
SQLMAP支持的数据库类型主要包括一些关系型数据库(RMDBS),如MySQL、Oracle、PostgreSQL、Microsoft SQL
Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP
MaxDB、Informix、HSQLDB等。
实验步骤
本实验的目标是:以SQLi-Labs网站的Less-4为入口,利用SQLMAP实施自动化SQL注入,获取SQLi-Labs网站的登录用户名和密码。
1 访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-4。访问的URL为:
1 |
|
(注意大小写)
2 利用Burpsuite工具抓包
(1)启动Burpsuite
在攻击机Pentest-Atk的桌面文件夹Burp中,鼠标左键双击BURP.cmd程序,启动Burpsuite。
(2)设置Burpsuite的代理服务端口
在Burpsuite软件界面上选择选项卡“Proxy”->“Options”,在Proxy Listeners模块下,将Burpsuite的代理服务端口设置为8080(此为Burpsuite默认的服务端口)。
(3)开启Burpsuite的代理拦截功能
在Burpsuite软件界面上选择选项卡“Proxy”->“Intercept”,将拦截开关按钮的状态设置为“Intercept is on”。
注意:上述设置完成之后,不要关闭Burpsuite!
(4)设置Firefox代理
回到FireFox浏览器界面,鼠标右键单击浏览器地址栏右方的FoxyProxy插件图标按钮,在弹出的菜单中选择“为全部URLs启用代理服务器127.0.0.1:8080”:
代理设置成功后,FoxyProxy插件图标会变成蓝色。
(5)利用Burpsuite工具拦截HTTP请求包
在Firefox地址栏中给定一个GET参数,将URL修改为:
1 |
|
回车提交,此时观察Burpsuite是否能正常拦截到此HTTP请求报文。
(6)保存此HTTP请求包
在Burpsuite的Proxy->Intercept界面下选中刚刚拦截到的HTTP请求报文的全部内容,单击鼠标右键,在弹出的菜单中选择copy,将请求包的内容拷贝至文本文档a.txt中,并保存至C盘根目录。
3 启动SQLMAP
启动Windows操作系统的命令行工具cmd:
在命令行工具cmd中输入以下命令,进入SQLMAP程序所在的路径:
1 |
|
进入SQLMAP程序所在的路径后,使用以下命令启动SQLMAP帮助:
1 |
|
4 寻找注入点
使用以下命令自动寻找网站的注入点,并获取网站及后台数据库的基本信息:
1 |
|
检测结果如下图所示:
5 获取所有数据库的库名
(1)使用以下命令获取所有数据库的库名:
1 |
|
检测结果如下图所示:
(2)使用以下命令获取网站当前所在数据库的库名:
1 |
|
检测结果:网站当前所在数据库的库名为security。
6 获取security数据库中所有的表名
使用以下命令获取security数据库中所有的表名:
1 |
|
检测结果:security数据库中含有emails、referers、uagents、users四张表。
其中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
7 获取users表的全部字段名
使用以下命令获取users表的全部字段名:
1 |
|
检测结果:users表中有三个字段id、username和password。
8 获取users表id、username和password字段的全部值
使用以下命令获取users表id、username和password字段的全部值:
1 |
|
检测结果如下图所示:
实验至此结束。
实验总结
本次实验,成功利用SQLMAP对存在GET型注入点的网站进行了自动化SQL注入,掌握了SQLMAP的-r参数的基本使用方法。