[Web系统安全性攻击与防护总结报告]信息安全课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“信息安全课程设计报告”。
郑州轻工业学院本科
Web系统安全性攻击与防护总结报告
设计题目:学生姓名:系
别:国际教育学院专
业:互联网班
级:学
号:指导教师:
Web系统安全性攻击与防护(SQL注入与防护)XX
XX XX XX
2011 年
07 月 日
目录
一、课程设计的目的和意义........................................................................................3
二、sql注入分析........................................................................................................3 2.1 sql注入的原理.................................................................................................3 2.2 sql注入攻击的方式.........................................................................................3 2.2.1构造参数攻击.........................................................................................3 2.2.2转义字符类型的攻击.............................................................................4 2.2.3Union查询攻击.......................................................................................4 2.2.4注释符攻击.............................................................................................5
三、sql注入实例分析................................................................................................5 3.1系统核心代码...................................................................................................5 3.2注入测试和分析...............................................................................................6 3.2.1注入测试.................................................................................................6 3.2.2注入攻击过程及分析.............................................................................8
四、sql注入的防范措施............................................................................................10 4.1 防范措施1(对参数进行强制类型转换)......................................................10 4.2 防范措施2(类型判断).............................................................................12
五、密码用MD5加密存储和验证...........................................................................14 5.1加密的必要性分析.........................................................................................14 5.2加密核心代码,登录验证核心代码.............................................................14 5.2.1加密核心代码.......................................................................................14 5.2.2登录验证核心代码...............................................................................15
六、服务器目录权限配置..........................................................................................16 6.1、权限分配原则分析......................................................................................16 6.2、具体权限分配过程......................................................................................16
七、总结......................................................................................................................18
一、课程设计的目的和意义
网络技术随着信息化技术的发展,网络技术得到了广泛的应用,其中Web成为主流的网络和应用技术,但随之而来的就是网络安全问题的出现。网络安全问题目前已成为世界范围内不容忽视的问题。在研究与实践的基础上,详细总结网络攻击方法的原理及其有针对性的防护技术,对加强网络安全,实现web服务器安全有重要意义。
二、sql注入分析
2.1 sql注入的原理
SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到程序执行的SQL 语句中构成攻击者想执行的任意SQL语句,分析服务器返回的信息获得有关网站或服务器的敏感信息,进一步获得非法的信息和权限。
利用WEB应用对用户输入验证设计上的疏忽,或验证的不严格,从而使用户输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让WEB应用用户有机会直接对后台数据库系统下达指令,实施入侵行为。SQL注入的产生主要是由动态字符串构建和不安全的数据库配置产生,其中动态字符串构建主要是由不正确的处理转义字符、不正确的处理类型、不正确的处理联合查询、不正确的处理错误和不正确的处理多次提交构成。不安全的数据库配置产生主要是由默认预先安装的用户、以root,SYSTEM或者Administrator权限系统用户来运行和默认允许很多系统函数(如xp_cmdshell,OPENROWSET等)构成。
2.2 sql注入攻击的方式
2.2.1构造参数攻击
如果一个恶意用户提供的字段并非一个强制类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如: Statement:=“SELECT*FROM data WHERE id=”+a_variable+“;”
从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。
2.2.2转义字符类型的攻击
Web应用程序开发时没有对用户的输入进行转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这样就会导致恶意用户对数据库上的语句实施操纵。例如,下面的这行代码就会演示这种漏洞:
Statement:=“SELECT*FROM users WHERE name='”+userName+“';”
此段代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是应用程序开发者所期望的那样例如,将用户名变量(即username)设置为:
a′or′1′=1′,此时原始语句发生了变化:
SELECT*FROM users WHERE name=′a′OR′1′=′1′;
如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值
′1′=′1永远是真。
在一些特定的SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。
2.2.3Union查询攻击
Union查询动机是绕过验证或者提取数据。攻击者在查询语句中注入Union SELECT语句,并且因为用户控制“SELECT语句”的内容,攻击者可以得到想要的信息。Union查询SQL注入测试。
假设我们有如下的查询:
SELEC Name,Psw,Tel FROM Users WHERE Id=$id然后我们设置id的值为:
$id=1UNION ALL SELECT bank CardNumber,1,1 FROM BankCardTable
那么整体的查询就变为:
SELECT Name,Psw,Tel FROM Users WHERE Id=1 UNION ALL SELECT bankCardNumber,1,FROM BankCarTable
显然这样就能得到所有银行卡用户的信息。
2.2.4注释符攻击
使用注释通常可以使攻击者绕过验证。SQL在查询中支持注释,如,--、#等。通过注入注释符,恶意用户或者攻击者可以毫不费力的截断SQL查询语句。例如,对于查询语句SELECT*FROM users WHERE usermame=uname and Paword=psw,如果恶意用户输入参数uname的值为admin--,Paword的值为空,那么查询语句变为SELECT*FROM users WHERE usermame=admin and Paword=,也就SELECT*FROM users WHERE usermame=admin。这就使得恶意用户不用提供密码就可以通过验证。
三、sql注入实例分析
3.1系统核心代码
显示文章内容的主要代码:
<%'
#####查询数据模块开始
###%> <%function query()id=request.QueryString(“id”)'为了测试此处没有对参数进行任何过滤和合法性分析 set rs=conn.execute(“select * from news where id=”&id)while not rs.eof response.Write(“发布者:”&rs(“adder”)&“发布时间:”&rs(“time”)&“标题:”&rs(“title”)&“[内容:]”&rs(“content”))rs.movenext wend call first()end function%> <%'
#####查询数据模块结束
###%>
3.2注入测试和分析
3.2.1注入测试
现在进行注入测试: 首先看正常显示文章截图:
图(1)
1、在地址后面加一个单引号 ' 看返回结果是否正常
图(2)
返回系统查询报错,说明可能存在注入漏洞。
2、继续测试以确认是否真正存在注入漏洞,在地址后面加上and 1=1 查看返回结果是正常。
图(3)
显示正常没有异常。再接着把and 1=1 改为 and 1=2 看返回结果是否异常。
图(4)
返回空白出现异常。
3、通过上面的注入测试,可以确定该网站一定存在SQL注入漏洞。
3.2.2注入攻击过程及分析
下面使用构造参数攻击:
构造语句:
?action=query&id=54 and exists(select * from _admin)发现返回正常,那么可以确定数据库一定存在表 _admin
下面构造:(猜测字段)
?action=query&id=54 and exists(select un,pw from _admin)返回结果造成说明sql执行正确,那么数据表_admin里一定存在 un pw 两个字段
下面继续构造语句:(猜测字用户名)?action=query&id=54 and exists(select * from _admin where un ='admin')返回结果正常,至此已经获得了一个管理员用户名admin
下面构造:(猜测密码)?action=query&id=54 and exists(select * from _admin where pw='admin')返回结果正常,至此经获得了一个管理员用户名admin 密码是 admin 下面点击首页的登录:
图(5)
用得到的用户名 admin 和密码 admin登录
图(6)
图(7)
成功进入网站后台管理:
图(8)
到这里一个成功的注入过程就完成了,成功的到了网站管理员的用户名和密码。
四、sql注入的防范措施
4.1 防范措施1(对参数进行强制类型转换)核心代码:
<%'
#####查询数据模块开始
###%> <%function query()id=cint(request.QueryString(“id”))'使用cint函数把接收的值强制转为整型 set rs=conn.execute(“select * from news where id=”&id)while not rs.eof 下面通过再次注入检测看效果: 1.在链接后加单引号 '
图(9)
提示类型转换失败。
2.在链接后面加 and 1=1
图(10)
仍然提示类型转换失败。3.在链接后面加 and 1=2
图(11)
还是提示类型转换失败。
从此看来是不能注入的。说明实施强制类型转换成功的防治了SQL注入。
4.2 防范措施2(类型判断)
核心代码:
<%'
#####查询数据模块开始
###%> <%function query()if isnumeric(request.QueryString(“id”))then '这里判断参数是否是一个数字如果不是提示非法 id=request.QueryString(“id”)else response.write(“参数非法”)response.end()end if set rs=conn.execute(“select * from news where id=”&id)while not rs.eof 下面通过再次注入检测看效果: 1.在链接后加单引号 '
图(12)
提示参数非法。
4.在链接后面加 and 1=1
图(13)
仍然提示参数非法。5.在链接后面加 and 1=2
图(14)
还是提示参数非法。
从此看来是不能注入的。说明实施强类型判断成功的防治了SQL注入。
五、密码用MD5加密存储和验证
5.1加密的必要性分析
从上面可以看到通过SQL注入攻击者很容易就得到用户的密码,如果密码没有经过加密那么攻击者就可以使用该密码登录,如果密码是加密保存在数据库的,而且登录验证是也是加密验证,那么攻击者得到的就是加密的字符串,如果攻击者不能破解该字符串那么攻击者是无法登陆的。这样给网站安全又加上了一道防护。
5.2加密核心代码,登录验证核心代码
5.2.1加密核心代码
<%'
######添加用户模块开始
######%> <%function adduser()if request.QueryString(“level”)=“” then exit function username=request.Form(“username”)paword=md5(trim(request.Form(“paword”)))'添加用户时将用户的密码md5加密后保存到数据库
level=cint(request.QueryString(“level”))if level=0 then set rs=conn.execute(“select username from _user where username='”&username&“'”)set rs2=conn.execute(“select un from _admin where un='”&username&“'”)if(rs.eof and rs.bof)and(rs2.eof and rs2.bof)then conn.execute(“insert into _user(username,paword)values('”&username&“' ,'”&paword&“')”)response.Write(“alert('添加成功!');window.close();”)rs.close else
5.2.2登录验证核心代码
<%'
#####验证登录据模块开始
###%> <%function checklogon()username=request.Form(“username”)paword=md5(trim(request.Form(“paword”)))'登录时先将用户的密码md5加密后与数据库里面的对比 set rs=conn.execute(“select * from _user where username='”&username&“' and paword='”&paword&“'”)set rs2=conn.execute(“select * from _admin where un='”&username&“' and pw='”&paword&“'”)if(rs.eof and rs.bof)and(rs2.eof and rs2.bof)then
response.Write(“alert('用户名或密码错误');window.location='?action=showlogon';”)rs.close rs2.close else
六、服务器目录权限配置
6.1、权限分配原则分析
对一个网站来说除了上传文件的目录能写入文件以外其它的所有目录均不能写入文件,而且上传文件的目录不能有网页程序的执行权限,这样可以保证即使黑客成功上传程序到上传目录那么也是不执行的。
6.2、具体权限分配过程
利用NTFS文件系统的权限分配功能:
1、首先在文件夹安全选项里面把iis帐号加到网站根目录中。然后指定其只能读取,不能写入文件,那么整个网站里面的所有目录都不能写入文件了。
2、下面接着给上传文件目录加上写人的权限。
至此已经完成了除了上传文件目录可以写入文件其它目录均不能写入文件。
3、接着配置上传目录的运行权限使其不能运行网页程序。
至此完成了权限分析中的所有需求。
七、总结
本次课程设计对网站SQL注入攻击及网站安全技术进行了比较详细地分析,通过本次课程设计使我掌握了对SQL注入攻击漏洞的检测技术和预防SQL注入的手段,而且学会了在IIS和NTFS文件系统环境下安全配置网站的目录权限的技能,了解到信息系统网站中存在的普遍安全漏洞。网站的安全稳定运行,应侧重于预防,不断增强安全意识,采取各种预防措施,才能及时有效地排除安全隐患。