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

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

WebGoat

  • 因WebGoat默认使用8080端口,因此开启前先用netstat -tupln | grep 8080查看端口是否被占用,若是被占用,用kill 进程号终止占用8080端口的进程。由于kali始终没法安装JDK,故使用本机实验。
  • 普通安装,命令行输入java -jar webgoat-container-7.0.1-war-exec.jar
  • 浏览器转:localhost:8080/WebGoat 直接用默认用户名密码登陆便可,开始练习

SQL注入攻击(Injection Flaws)

1.命令注入(Command Injection)

概念:命令注入攻击对任何一个以参数驱动的站点来讲都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能形成大范围的损害,危及系统安全。尽管这类风险数目使人难以置信,互联网中的系统很容易受到这种形式的攻击。javascript

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

目标:能够在目标主机上执行任何系统命令java

操做方法web

  • 右键点击复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
    正则表达式

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

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

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

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

目标:该例子经过注入SQL字符串查看全部的天气数据。安全

操做方法服务器

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

  • 显示全部城市的天气状况,攻击成功!(5)

3.日志欺骗(Log Spoofing)

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

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

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

操做方法

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

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

4. 字符串型注入(String SQL Injection)

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

原理:基于如下查询语句构造本身的 SQL 注入字符串。

SELECT * FROM user_data WHERE last_name = '?'

目标基于查询语句构造本身的SQL 注入字符串将全部信用卡信息显示出来。

  • 点击Injection Flaws-String SQL Injection
  • 输入查询的用户名Smith' or 1=1--
    • 操做中咱们使用了'提早闭合"",插入永真式1=1,且--注释掉后面的内容,这样就能select表里面的全部数据
    • 结果以下:

5.SQL 注入(LAB: SQL Injection)

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

操做方法

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

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

  • 获得全部人员列表,攻击成功!

XSS攻击(Cross‐Site Scripting)

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

6.XSS 钓鱼(Phishing with XSS)

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

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

操做方法

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

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

  • 编写一个带用户名和密码输入框的表格

CSRF攻击

7.跨站请求伪造(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电子邮件的收件人将被转移他们的资金。

操做方法

  • 查看页面右侧Parameters中的src和menu值,分别为267和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攻击的目的。能够从左侧的任务栏看到任务已完成。

基础问答

  • 1.SQL注入攻击原理,如何防护?
    • 原理:SQL注入,就是经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
      sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其余方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要缘由。如:在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登陆、显示信息等目的。
    • 防护:
      • 关闭或删除没必要要的交互式提交表单页面;
      • 对漏洞注入点相关代码进行关键字的过滤(如:利用正则表达式),以规范代码安全性;
      • 不要在服务器端放置备份的文件以避免受到感染,或备份的文件含有漏洞,形成切入点;
      • 将数据库里的内容进行加密处理使其不具备特殊的意义。
  • 2.XSS攻击的原理,如何防护?
    • 原理:XSS:跨站脚本。攻击者利用网站漏洞(一般这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入能够显示在页面上的、对其余用户形成影响的HTML代码;因为受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本(如:html标签或者javascript代码)的页面后,这段恶意脚本能够顺利执行,实现获取用户cookie并能够利用用户身份进行非法操做的目的。
    • 防护:
      • 用户角度:提升防范意识,不要轻易输入我的信息,如用户名密码;
      • 网页制做者角度:
        • 对输入和URL参数进行过滤
        • 在输出数据以前对潜在的威胁的字符进行编码、转义
  • 3.CSRF攻击原理,如何防护?
    • 原理:
      • CSRF :跨站请求伪造。
        CSRF就是冒名登陆。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,由于目前主流状况Session都是存在Cookie中.攻击者并不关心被害者具体账号和密码,由于一旦用户进行了登陆,Session就是用户的惟一凭证,只要攻击者可以获得Session,就能够假装成被害者进入服务器.
      • 主要是当访问网站A时输入用户名和密码,在经过验证后,网站A产生Cookie信息并返回,此时登陆网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另外一个网站B,网站B可返回一些攻击性代码并请求访问网站A;所以在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,所以仍是会执行该恶意代码
    • 防护:
      • 验证请求中的Token
      • 验证 Referer
      • 添加加随机验证
      • 设定cookie域
相关文章
相关标签/搜索