Walks

网络安全爱好者

XSS进阶学习

一:前言
     本篇文章,是对自己学习XSS的一次总结,说一些学习过程遇到的一些问题,也希望可以为大家解决一些问题。


二:目录
     (1):从标签的角度讲XSS
     (2):什么是基于DOM XSS
     (3):XSS绕过方法
     (4):为什么有些时候编码可以绕过XSS过滤
     (5):XSS实战


三:BEGIN
    (1):因为要说到HTML,所以先给大家普及下HTML标签的知识,只说一些跟XSS有关的                    地方
                 HTML标签:<a href=”javascript:alert(1)”>Click me</a>
                 这里我们把HTML标签分为三个部分,标签,属性和文本
                 下面用一张图来给大家说明一下

《XSS进阶学习》

标签:<a></a>      属性:href=javascript:alert(1)    文本:Click me
                 一般我们的输入点是在属性,例如:value=””。或者文本里面
                 当在属性中,我们可以用事件或者闭合来建立一个XSS
                 而在文本中就简单了,直接一个JS语句即可,例如:<script>alert(“1”);</script>


     (2):什么是基于DOM XSS
                 我的理解,就是用一些可以修改DOM节点的语句来建立XSS,例如document.write
                              innerHTML~~~~都是一些修改DOM节点的语句。


      (3):XSS绕过方法
                1:大小写绕过。产生原因:写Filter的时候,完全匹配,或者正则中没有加大小写
                      代码:”> <a Href=”javascript:alert(‘xss’)”>111</a> //
                2:利用事件绕过。当我们的输入点在属性中,且过滤<>,就可以用到事件的绕过了
                      代码: ‘ oninput=alert’xss’//
                3:把某些敏感代码过滤为空,可以中间加敏感代码
                      代码:”> <a HHrefref=”javascscriptript:alert(‘xss’)”>111</a> //
                4:换行 空格 tab。产生原因:只有当出现;或者出现结尾标签才算一句代码结束
                5:伪协议绕过。Href=”javascript:alert(‘xss’)”
                6:编码绕过。产生原因:解析的顺序问题。下面谈


     (4):为什么有些时候编码可以绕过XSS Filter
                 先给大家说下三种编码方式(来自Freebuf 一篇文章)
                 1:URL编码
                 2:HTML编码。
                      命名实体:以&开头,分号结尾的,例如“<”的编码是“<”
                      字符编码:十进制、十六进制ASCII码或unicode字符编码,样式为“&#数值;”,                       例如“<”可以编码为“<”和“<”
                3:JS编码,js提供了四种字符编码的策略
                     三个八进制数字,如果不够个数,前面补0,例如“e”编码为“\145”
                     两个十六进制数字,如果不够个数,前面补0,例如“e”编码为“\x65”
                     四个十六进制数字,如果不够个数,前面补0,例如“e”编码为“\u0065”
                     对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)
               
                说了一些编码,还要谈谈一些解析顺序,才好理解绕过的原理

                            下面说说浏览器对符合编码的解析顺序

                       以下一段代码

                       <a);>Click ME</a>

                        name的内容首先出现在一个URL中,这个URL在一段javascript中,而javascript代码又是html的一部分。

                        所以解码的顺序就是HTML解码–>js解码–>url解码,

                        那么正确的编码顺序就应该是url编码–>js编码–>html编码。

                浏览器解析服务器传来的数据的顺序:先HTML,遇到JS,就JS解析
                当我们可控参数所在的节点的结构不同时,解析的顺序也就不同
<?php

function htmlencode($str){
   if(empty($str)) return;
   if($str == “”) return;

   $str = str_ireplace(“<“,””,$str);
   $str = str_ireplace(“>”,””,$str);
   $str = str_ireplace(“script”,””,$str);
   $str = str_ireplace(“img”,””,$str);
   $str = str_ireplace(“:”,””,$str);
   $str = str_ireplace(“javascript”,””,$str);

   return $str;
}

if(!array_key_exists (“name”,$_GET) || $_GET[‘name’] == NULL || $_GET[‘name’] == ”){

$isempty = true;

} else {
            
$html .= ‘<pre>’;
$html .= ‘<a>click this url</a>’;
$html .= ‘</pre>’;

}
?>

<html>
<script>

</script>
</html>
                  以上代码可以看到,过滤了尖角号,script等标签,当输入javascript:alert(/xss/)  时,系统返回的为:
                 <pre><a></a>Click this url</pre>
                 我们现在分析一下$name的环境,$name先在HTML环境中,然后在JS环境中
                 浏览器解析的顺序是HTML解码–>JS解码,
                 当我们对javascript:alert(/xss/)进行HTML编码之后
                 正好绕过了上面的过滤函数
                 当解码的时候,先HTML,又变成了javascript:alert(/xss/)
                 在JS解码,弹窗出来
                 详情请看:http://www.freebuf.com/articles/web/43285.html(Freebuf文章)


       (5):XSS实战
                 给大家提供两个闯关PT。
                 https://alf.nu/alert1
                 http://xss.tesla-space.com/
                 好好做一遍,绝对受益良多。
                 表示做的时候看到了这个

《XSS进阶学习》

熟悉么?就是前段时间Tools那个XSS漏洞~QAQ

点赞
  1. It's a pity you don't have a donate button! I'd definitely donate to this superb blog!
    I guess for now i'll settle for book-marking and adding your
    RSS feed to my Google account. I look forward to new updates
    and will talk about this site with my Facebook group. Talk soon!

  2. jarabic.co.uk说道:

    I just like the helpful info you supply on your articles.
    I'll bookmark your blog and test once more right here frequently.
    I am rather certain I'll learn many new stuff right
    here! Best of luck for the following!

  3. floor protection说道:

    continuously i used to read smaller posts which as well clear their motive, and that is also happening with this paragraph
    which I am reading at this place.

  4. Wow! This blog looks exactly like my old one!
    It's on a completely different subject but it has pretty much the same page layout and design.
    Outstanding choice of colors!

  5. This site truly has all of the information I wanted about this subject and didn't know who to ask.

发表评论

电子邮件地址不会被公开。 必填项已用*标注