2017-2018-2 20155231《网络对抗技术》实验九: Web安全基础实践
实验要求:
本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。
实验内容:
(1)WebGoat
- Webgoat是OWASP组织研究出的一个专门进行web漏洞实验的应用品台,这个平台里包含了web中常见的各种漏洞,例如:跨站脚本攻击、sql注入、访问控制、隐藏字段、Cookie等;
OWASP(Open Web Application Security Project)是一个非营利的组织,它的目的是帮助个人和企业来发现和使用可信赖的软件。 - WebGoat分为简单版和开发板,简单版是个Java的Jar包,只需要有Java环境即可,我们在命令行里执行:
java -jar webgoat-container-7.0.1-war-exec.jar
运行WebGoat: - 在浏览器输入
localhost:8080/WebGoat
,进入WebGoat开始实验
(2) Phishing with XSS
- 这是跨站脚本钓鱼攻击,要求在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点
创建一个form,让受害人在创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/WebGoat/catcher?PROPERTY=yes...,
输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:
(3)Stored XSS Attacks
- 创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容,输入标题,然后在message中输入一串代码,
<script>alert("20155231 has no authority read it");</script>
(4)Reflected XSS Attacks
-
当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看
-
这时如果我们将带有攻击性的URL作为输入源,例如输入
<script>alert(" you have been attacked by 20155231
!!!");,就会弹出对话框:
(5)Cross Site Request Forgery(CSRF)
-
这里练习的目标是发送电子邮件到新闻组。电子邮件包含一个图像,其URL指向恶意请求。在本课中,URL应该指向“攻击”Servlet,该课程的“屏幕”和“菜单”参数和一个额外的参数“TrimeFund”具有任意数值,如5000。您可以通过在右边插入的参数中找到“屏幕”和“菜单”值来构建链接。当时被认证的CSRF邮件的收件人将转移他们的资金。当这一课的攻击成功时,左边的菜单旁边出现一个绿色的复选标记。
-
以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
我们在message框中输入这样一串代码
<img src='attack?Screen=277&menu=900&transferFunds=5000' width='1' height='1'>
-
提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
(6)CSRF Prompt By-Pass
-
内容和前者相似,只不过这次需要确认转账,首先编辑内容
<img src="http://localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=20155231" width="1" height="1">
-
在浏览器中输入URL:
localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=20155231
-
点击CONFIRM按钮,再在浏览器中输入URL:
http://localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=CONFIRM,成功转走了20155231元
(7)Command Injection
- 在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上
"& netstat -an & ipconfig"
-
之后在下拉菜单中能看到我们修改后的值:
-
选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:
(8)Numeric SQL Injection
-
通过注入SQL字符串的方式查看所有的天气数据,加上一个1=1这种永真式即可达到我们的目的,利用firebug,在任意一个值比如101旁边加上or 1=1:
-
然后选中Columbia,点Go,可以看到所有天气数据
(9)Log Spoofing
- 我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为admin的用户在日志中显示“成功登录”,在User Name文本框中输入
20155231%0d%0aLogin Succeeded for username: admin
,其中%0d是回车,%0a是换行符
(10)String SQL Injection
- 构造SQL注入字符串,在文本框中输入' or 1=1 --,点击GO,可以查看到所以信息:
(11)Database Backdoors
-
先输一个101,得到了该用户的信息:
-
可以发现输入的语句没有验证,很容易进行SQL注入,输入注入语句:
101; update employee set salary=100000
,成功把该用户的工资涨到了10000
-
接下来创建一个后门,把表中所有的邮箱和用户ID都设为个人
-
输入
101;CREATE TRIGGER pyhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155210@stooges.com' WHERE userid = NEW.userid
试验后回答问题
- SQL注入攻击原理,如何防御
- SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
- SQL注入一般分为普通注入和盲注。
普通注入:后台数据库会回显有价值的提示信息,通过这些可能的报错信息可以更容易地进行注入,适合新手入门训练。
盲注:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入。
- 防御:对输入的数据进行过滤,过滤掉敏感字符。不使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。用加密方式或Hash函数来存储机密信息。
- XSS攻击原理,如何防御
- 攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
- 浏览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段。
- CSRF攻击原理,如何防御
- CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情
- 通过 referer、token 或者 验证码 来检测用户提交。尽量不要在页面的链接中暴露用户隐私信息。对于用户修改删除等操作最好都使用post 操作。
实践总结与体会
实践了更多的web攻击方式,体会理解了sql注入等攻击的原理,但是在webgoat上做有个问题,在网页代码里注入SQL字符串的攻击都只能成功第一次,开始没发现有有"重新实验"这个选项,由于用别人电脑做的,他成功了以后我就没成功,额,英语不好是硬伤==····