Web安全与防护 实训指南 3.1手动SQL注入.pdf
手动SQL注入
【实训目的】
1.理解SQL注入的原理。
2.掌握手动查找注入点的技术。
3.能够利用SQL注入点,暴出表中所有数据。
【实训原理】
SQL注入实质就是利用WEB系统对用户的输入过滤不严的漏洞,输入恶意
代码,重构SQL语句,从而达到注入SQL命令的目的。
【实训步骤】
步骤一、分析SQL注入漏洞所在页面功能。
登录DVWA系统,选择左侧“DVWASecurity”中的low级别,再单击左侧
的“SQLInjection”,出现如下图界面。
图3-2DVWA系统SQLInjection界面
这里有UserID输入框,输入用户ID,点击“submit”按钮,将会显示用户
ID、First_name、Sunname,如我们输入1,则显示ID:1,First_name:admin,
Sunname:admin。根据显示,可以猜测,应用程序的SQL语句:
selectfirst_name,sunnamefrom表名whereID=XX;
或selectfirst_name,sunnamefrom表名whereIDXX;
其中“XX”为用户输入的值。
步骤二、SQL注入漏洞测试。
在输入框中输入“1”,SQL回显报错,显示:“YouhaveanerrorinyourSQL
syntax;checkthemanualthatcorrespondstoyourMariaDBserverversionfortheright
syntaxtousenear1atline1”。
报错原因是单引号没有闭合,初步可以判断这里存在SQL注入点。
我们通过单引号及注释符号重构SQL语句进行测试。
在UserID输入框中输入“1#”,提交后会有如下显示:
图3-3DVWA注入1#语句结果图
说明该页面存在字符型SQL注入漏洞,原SQL语句为:
selectfirst_name,sunnamefrom表名whereIDXX;
输入“1#”后,SQL语句被重构变为:
selectfirst_name,sunnamefrom表名whereID1#;
即程序中的第一个单引号和输入的单引号配对,而程序中原先的第二个单引
号被#注释,失去作用。因此回显内容的first_name、sunname与输入1内容是一
致的。
步骤三、暴出表中的所有数据。
在UserID输入框中输入1or1=1#
此时,将会有如下回显,暴出了表中的所有数据。
图3-4DVWA被暴库的结果图
当输入1or1=1#时,SQL语句变为:selectfirst_name,sunnamefrom表名
whereID1or1=1#;
此时“1=1”始终为真,真与任何值相或计算始终为真,因此显示该表中所
有行的相关信息。
步骤四、利用语句orderbynum测试查询信息列数。
利用“orderby1”、“orderby2”、“orderby3”、……猜测查询信息的列
数。
在输入框中输入“1orderby1#”
图3-5DVWA注入orderby命令的结果图
此时SQL语句变为:selectfirst_name,sunnamefrom表名whereID1order
by1--;即以第一列查询值进行排序。
当输入“1orderby2#”时和第一种情况是一样的。但当输入“1’orderby
3#”时,出现“Unkowncolumn3inorderclause”,即“在order子句中不存在3
列”,说明查询的数据有2列。
【实训总结】
通过实验可以看到