网络攻击与防护论文13.docx
- 文档编号:10271101
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:16
- 大小:1.86MB
网络攻击与防护论文13.docx
《网络攻击与防护论文13.docx》由会员分享,可在线阅读,更多相关《网络攻击与防护论文13.docx(16页珍藏版)》请在冰点文库上搜索。
网络攻击与防护论文13
江西理工大学应用科学学院
《网络攻击与防御》课程作业论文
题目:
______SQL注入分析____
系别:
_______信息系_________
班级:
______网络091________
姓名:
________袁玉强________
成绩:
_____________________
二〇一二年四月
SQL注入分析课程设计
一、课程设计的目的和意义
网络技术随着信息化技术的发展,网络技术得到了广泛的应用,其中Web成为主流的网络和应用技术,但随之而来的就是网络安全问题的出现。
网络安全问题目前已成为世界范围内不容忽视的问题。
在研究与实践的基础上,详细总结网络攻击方法的原理及其有针对性的防护技术,对加强网络安全,实现web服务器安全有重要意义。
二、sql注入分析
2.1sql注入的原理
SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到程序执行的SQL语句中构成攻击者想执行的任意SQL语句,分析服务器返回的信息获得有关网站或服务器的敏感信息,进一步获得非法的信息和权限。
利用WEB应用对用户输入验证设计上的疏忽,或验证的不严格,从而使用户输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让WEB应用用户有机会直接对后台数据库系统下达指令,实施入侵行为。
SQL注入的产生主要是由动态字符串构建和不安全的数据库配置产生,其中动态字符串构建主要是由不正确的处理转义字符、不正确的处理类型、不正确的处理联合查询、不正确的处理错误和不正确的处理多次提交构成。
不安全的数据库配置产生主要是由默认预先安装的用户、以root,SYSTEM或者Administrator权限系统用户来运行和默认允许很多系统函数(如xp_cmdshell,OPENROWSET等)构成。
2.2sql注入攻击的方式
2.2.1构造参数攻击
如果一个恶意用户提供的字段并非一个强制类型,或者没有实施类型强制,就会发生这种形式的攻击。
当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。
例如:
Statement:
="SELECT*FROMdataWHEREid="+a_variable+";"
从这个语句可以看出,作者希望a_variable是一个与"id"字段有关的数字。
不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。
2.2.2转义字符类型的攻击
Web应用程序开发时没有对用户的输入进行转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这样就会导致恶意用户对数据库上的语句实施操纵。
例如,下面的这行代码就会演示这种漏洞:
Statement:
="SELECT*FROMusersWHEREname='"+userName+"';"
此段代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是应用程序开发者所期望的那样例如,将用户名变量(即username)设置为:
a′or′1′=1′,此时原始语句发生了变化:
SELECT*FROMusersWHEREname=′a′OR′1′=′1′;
如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值
′1′=′1永远是真。
在一些特定的SQL服务器上,如在SQLServer中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。
2.2.3Union查询攻击
Union查询动机是绕过验证或者提取数据。
攻击者在查询语句中注入UnionSELECT语句,并且因为用户控制"SELECT语句"的内容,攻击者可以得到想要的信息。
Union查询SQL注入测试。
假设我们有如下的查询:
SELECName,Psw,TelFROMUsersWHEREId=$id然后我们设置id的值为:
$id=1UNIONALLSELECTbankCardNumber,1,1FROMBankCardTable
那么整体的查询就变为:
SELECTName,Psw,TelFROMUsersWHEREId=1UNIONALLSELECTbankCardNumber,1,FROMBankCarTable
显然这样就能得到所有银行卡用户的信息。
2.2.4注释符攻击
使用注释通常可以使攻击者绕过验证。
SQL在查询中支持注释,如,--、#等。
通过注入注释符,恶意用户或者攻击者可以毫不费力的截断SQL查询语句。
例如,对于查询语句SELECT*FROMusersWHEREusermame=unameandPassword=psw,如果恶意用户输入参数uname的值为admin--,Password的值为空,那么查询语句变为SELECT*FROMusersWHEREusermame=adminandPassword=,也就SELECT*FROMusersWHEREusermame=admin。
这就使得恶意用户不用提供密码就可以通过验证。
三、sql注入实例分析
3.1系统核心代码
显示文章内容的主要代码:
<%'############查询数据模块开始#################%>
<%functionquery()
id=request.QueryString("id")'为了测试此处没有对参数进行任何过滤和合法性分析
setrs=conn.execute("select*fromnewswhereid="&id)
whilenotrs.eof
response.Write(" red;font-weight: bold;"">发布者: "&rs("adder")&" "&rs("time")&" "&rs("title")&" red;"">内容: ] rs.movenext wend callfirst() endfunction%> <%'############查询数据模块结束#################%> 3.2注入测试和分析 3.2.1注入测试 现在进行注入测试: 首先看正常显示文章截图: 图 (1) 1、在地址后面加一个单引号'看返回结果是否正常 图 (2) 返回系统查询报错,说明可能存在注入漏洞。 2、继续测试以确认是否真正存在注入漏洞,在地址后面加上and1=1查看返回结果是正常。 图(3) 显示正常没有异常。 再接着把and1=1改为and1=2看返回结果是否异常。 图(4) 返回空白出现异常。 3、通过上面的注入测试,可以确定该网站一定存在SQL注入漏洞。 3.2.2注入攻击过程及分析 下面使用构造参数攻击: 构造语句: ? action=query&id=54andexists(select*from_admin) 发现返回正常,那么可以确定数据库一定存在表_admin 下面构造: (猜测字段) ? action=query&id=54andexists(selectun,pwfrom_admin) 返回结果造成说明sql执行正确,那么数据表_admin里一定存在unpw两个字段 下面继续构造语句: (猜测字用户名) ? action=query&id=54andexists(select*from_adminwhereun='admin') 返回结果正常,至此已经获得了一个管理员用户名admin 下面构造: (猜测密码) ? action=query&id=54andexists(select*from_adminwherepw='admin') 返回结果正常,至此经获得了一个管理员用户名admin密码是admin 下面点击首页的登录: 图(5) 用得到的用户名admin和密码admin登录 图(6) 图(7) 成功进入网站后台管理: 图(8) 到这里一个成功的注入过程就完成了,成功的到了网站管理员的用户名和密码。 四、sql注入的防范措施 4.1防范措施1(对参数进行强制类型转换) 核心代码: <%'############查询数据模块开始#################%> <%functionquery() id=cint(request.QueryString("id"))'使用cint函数把接收的值强制转为整型 setrs=conn.execute("select*fromnewswhereid="&id) whilenotrs.eof 下面通过再次注入检测看效果: 1.在链接后加单引号' 图(9) 提示类型转换失败。 2.在链接后面加and1=1 图(10) 仍然提示类型转换失败。 3.在链接后面加and1=2 图(11) 还是提示类型转换失败。 从此看来是不能注入的。 说明实施强制类型转换成功的防治了SQL注入。 4.2防范措施2(类型判断) 核心代码: <%'############查询数据模块开始#################%> <%functionquery() ifisnumeric(request.QueryString("id"))then'这里判断参数是否是一个数字如果不是提示非法 id=request.QueryString("id") else response.write("参数非法") response.end() endif setrs=conn.execute("select*fromnewswhereid="&id) whilenotrs.eof 下面通过再次注入检测看效果: 1.在链接后加单引号' 图(12) 提示参数非法。 4.在链接后面加and1=1 图(13) 仍然提示参数非法。 5.在链接后面加and1=2 图(14) 还是提示参数非法。 从此看来是不能注入的。 说明实施强类型判断成功的防治了SQL注入。 五、密码用MD5加密存储和验证 5.1加密的必要性分析 从上面可以看到通过SQL注入攻击者很容易就得到用户的密码,如果密码没有经过加密那么攻击者就可以使用该密码登录,如果密码是加密保存在数据库的,而且登录验证是也是加密验证,那么攻击者得到的就是加密的字符串,如果攻击者不能破解该字符串那么攻击者是无法登陆的。 这样给网站安全又加上了一道防护。 5.2加密核心代码,登录验证核心代码 5.2.1加密核心代码 <%'####################添加用户模块开始####################%> <%functionadduser() ifrequest.QueryString("level")=""thenexitfunction username=request.Form("username") password=md5(trim(request.Form("password")))'添加用户时将用户的密码md5加密后保存到数据库 level=cint(request.QueryString("level")) iflevel=0then setrs=conn.execute("selectusernamefrom_userwhereusername='"&username&"'") setrs2=conn.execute("selectunfrom_adminwhereun='"&username&"'") if(rs.eofandrs.bof)and(rs2.eofandrs2.bof)then conn.execute("insertinto_user(username,password)values('"&username&"','"&password&"')") response.Write(" ');window.close();") rs.close else 5.2.2登录验证核心代码 <%'############验证登录据模块开始#################%> <%functionchecklogon() username=request.Form("username") password=md5(trim(request.Form("password"))) '登录时先将用户的密码md5加密后与数据库里面的对比 setrs=conn.execute("select*from_userwhereusername='"&username&"'andpassword='"&password&"'") setrs2=conn.execute("select*from_adminwhereun='"&username&"'andpw='"&password&"'") if(rs.eofandrs.bof)and(rs2.eofandrs2.bof)then response.Write(" action=showlogon';") rs.close rs2.close else 六、服务器目录权限配置 6.1、权限分配原则分析 对一个网站来说除了上传文件的目录能写入文件以外其它的所有目录均不能写入文件,而且上传文件的目录不能有网页程序的执行权限,这样可以保证即使黑客成功上传程序到上传目录那么也是不执行的。 6.2、具体权限分配过程 利用NTFS文件系统的权限分配功能: 1、首先在文件夹安全选项里面把iis帐号加到网站根目录中。 然后指定其只能读取,不能写入文件,那么整个网站里面的所有目录都不能写入文件了。 2、下面接着给上传文件目录加上写人的权限。 至此已经完成了除了上传文件目录可以写入文件其它目录均不能写入文件。 3、接着配置上传目录的运行权限使其不能运行网页程序。 至此完成了权限分析中的所有需求。 七、总结 本次课程设计对网站SQL注入攻击及网站安全技术进行了比较详细地分析,通过本次课程设计使我掌握了对SQL注入攻击漏洞的检测技术和预防SQL注入的手段,而且学会了在IIS和NTFS文件系统环境下安全配置网站的目录权限的技能,了解到信息系统网站中存在的普遍安全漏洞。 网站的安全稳定运行,应侧重于预防,不断增强安全意识,采取各种预防措施,才能及时有效地排除安全隐患。
发布时间:
标题:
[
"&rs("content"))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 攻击 防护 论文 13