中山大学实验3-SQL注入攻击实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.实验报告如有雷同,雷同各方当次实验成绩均以0分计。

2.当次小组成员成绩只计学号、姓名登录在下表中的。

警示

3.在规定时间内未上交实验报告的,不得以其他方式补交,当次成绩按0分计。

4.实验报告文件以PDF格式提交。

院系班级组长

学号

学生

实验分工

SQL注入攻击实验

【实验目的】

了解SQL注入攻击的过程。通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的危害,加强对Web攻击的防范。

禁止恶意入侵,不可对他人网站造成不良影响。建议自行搭建简易网站进行实验。

【实验原理】

结构化查询语言SQL是一种用来和数据库交互的文本语言,SQL注入就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。

在下面的攻击实验中,需要用到wed.exe和wis.exe两个命令行工具(从网络上下载),其中wis.exe 用于扫描某个站点中是否存在SQL注入漏洞;wed.exe是用于破解SQL注入用户名和密码。将两个工具结合起来,就可以体验从寻找注入点到注入攻击完成的整个过程。

【实验过程】(给出实验使用的真实网址,测试需要贴出适当的截图)

(1)判断环境,寻找注入点

使用wis.exe寻找注入漏洞,其使用格式:wis 网址

例如,检测某个网址/,首先进入命令提示窗口,然后输入命令:

wis /

命令输入结束后,单击回车键,即可开始扫描。

注意命令格式,在输入网址时,网址需放在http://和/之间,否则扫描无法进行。

你找到有SQL注入漏洞的网站是:

(2)查看SQL注入攻击漏洞

扫描结束后,可以看到网站上有否存在SQL注入攻击漏洞。漏洞信息一般以红色字体显示,以“SQL Injection Format”开头的那些行。假设扫描后其中某行如下:

SQL Injection Format:/xygk.asp?typeid=34&bigclassid=98

这是特征明显的数据库查询语句,可以选择其来做破解用户名和密码实验。如果要将其网页打开,可在浏览器地址栏中输入完整网址/xygk. asp?typeid=34&bigclassid=98。

你的扫描结果是:

/rjz/sort.asp?classid=1

/dyz/sort.asp?classid=1

/dyz/list.asp?id=2705

其中的漏洞信息是:

在地址栏中输入“/rjz/sort.asp?classid=1”,打开了网站页面,是一个下载网页。

(3)SQL注入破解管理员账号

使用wed.exe破解管理员账号,其使用格式:wed 网址

进入命令提示窗口,输入命令:

wed /xygk.asp?typeid=34&bigclassid=98asp?

回车后查看运行情况。

注意输入网址时,最后面不要加上符号/,但前面的的http://不可缺。

该程序在运行时,使用了用来破解用户数据库中的字表名、用户名和用户密码所需的字典文件。如TableName.dic、UserField.dic和PassField.dic。

在破解过程中还可以看到“SQL Injection Detected.”的字符串字样,表示程序还会对需要注入破解的网站进行检测,以确定是否存在SQL注入漏洞,成功后才开始猜测用户名。

如果检测成功,很快就获得了数据库表名,例如是“admin”;然后得到用户表名和字长,例如为“username”和“6”;再检测到密码表名和字长,例如为“password”和“8”。系统继续执行,wed.exe程序开始用户名和密码的破解,最终获得了用户名和密码。

你的破解结果是:

获得了数据库表名“admin”,然后得到用户表名和字长,为“username”和“6”;再检测到密码表名和字长,为“password”和“8”随后得到了用户名和密码了——“admina”、“pbk&7*8r”

如果不通破解,说明原因是:

输入网址时,最后面加上了那个“/”,或者前面的“http://”头也少了。

(4)搜索隐藏的管理登录页面

重新回到(1)打开的网站页面中,用已经检测到的管理员的帐号和密码,进入管理登录页面,但当前的页面中还没有管理员的入口链接。

再次使用wis.exe程序,该程序除了可以扫描出网站中存在的所有SQL注入点外,还可以找到隐藏的管理员登录页面。在命令行窗口中输入:

wis /xygk.asp?typeid=34&bigclassid=98/a

注意行末输入了一个参数“/a”。

如果出现扫描不成功,可以认为管理员登录页面只可能隐藏在整个网站的某个路径下。于是输入“wis /a”,对整个网站的登录页面进行扫描。注意扫描语句中网址的格式。

在扫描过程中,如找到的隐藏登录页面会在屏幕上以红色字体进行显示。

扫描结束后,结果以列表形式显示在命令窗口中。一般可以看到列表中有多个以“/rsc/”开头的管理员登录页面网址,例如“/rsc/gl/manage.asp”、“/rsc/gl/login.asp” 、“/rsc/gl/admin1.asp” 等。任意选择一个网址,比如在浏览器中输入网址“/ rsc/gl/admin1.asp”,就会出现本来隐藏着的管理员登录页面。输入用户名和密码,就可以进入到后台管理系统。

你搜索隐藏到的管理登录页面是:

/rjz/gl/admin1.asp

如果搜索不到,说明原因是:

当前在扫描注入点,肯定就不能成功了,管理员登录页面只可能隐藏在整个网站的某个路径下。所以可以输入“wis.exe / /a”,对整个网站进行扫描。注意扫描语句中网址的格式。程序开始对网站中的登录页面进行扫描,在扫描过程中,找到的隐藏登录页面会在屏幕上以红色进行显示。很快就查找完了,在最后以列表显示在命令窗口中。可以看到列表中有多个以“/rjz/”开头的登录页面网址,包括“/rjz/gl/manage.asp”、“/rjz/gl/login.asp”、“/rjz/gl/admin1.asp”等。

【实验思考】

防御SQL注入攻击的有效方法如下:

1、普通用户与系统管理员用户的权限要有严格的区分。

如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。

2、强迫使用参数化语句。

如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎

相关文档
最新文档