[TOC]

Basectf比赛week1-wp

MISC

[Week1] 签到!DK 盾!

关注公众号得到flag。

[Week1] Base

考点:base编码

下载附件得到一串base编码,解密得到flag。

image-20240815183028571

image-20240815183051398

[Week1] 正着看还是反着看呢?

考点:文件逆序,文件分离

附件压缩包解压发现一个名为flag的未知文件,用010editor打开发现文件逆序了

image-20240815183306729

使用脚本将文件顺序调换回来,得到一张jpg图片。

image-20240815184020850

image-20240815184010960

用010editor打开,发现藏了一个隐藏文件flag。

image-20240815184131348

提取出来得到flag.

image-20240815184306841

image-20240815184334599

[Week1] 海上遇到了鲨鱼

考点:流量分析

打开是个pcapng文件,用wireshark打开。

image-20240815184514652

检索关键词flag,用tcp流打开,查看流,最后找到flag。

image-20240815184725885

image-20240815184801405

image-20240815184832777

image-20240815184904549

[Week1] 人生苦短,我用Python

考点:代码审计,搜索引擎

打开程序,一段超长python代码

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import base64
import hashlib

def abort(id):
print('You failed test %d. Try again!' % id)
exit(1)
print('Hello, Python!')
flag = input('Enter your flag: ')

if len(flag) != 38:
abort(1)

if not flag.startswith('BaseCTF{'):
abort(2)

if flag.find('Mp') != 10:
abort(3)

if flag[-3:] * 8 != '3x}3x}3x}3x}3x}3x}3x}3x}':
abort(4)

if ord(flag[-1]) != 125:
abort(5)

if flag.count('_') // 2 != 2:
abort(6)

if list(map(len, flag.split('_'))) != [14, 2, 6, 4, 8]:
abort(7)

if flag[12:32:4] != 'lsT_n':
abort(8)

if '😺'.join([c.upper() for c in flag[:9]]) != 'B😺A😺S😺E😺C😺T😺F😺{😺S':
abort(9)

if not flag[-11].isnumeric() or int(flag[-11]) ** 5 != 1024:
abort(10)

if base64.b64encode(flag[-7:-3].encode()) != b'MG1QbA==':
abort(11)

if flag[::-7].encode().hex() != '7d4372733173':
abort(12)

if set(flag[12::11]) != {'l', 'r'}:
abort(13)

if flag[21:27].encode() != bytes([116, 51, 114, 95, 84, 104]):
abort(14)

if sum(ord(c) * 2024_08_15 ** idx for idx, c in enumerate(flag[17:20])) != 41378751114180610:
abort(15)

if not all([flag[0].isalpha(), flag[8].islower(), flag[13].isdigit()]):
abort(16)

if '{whats} {up}'.format(whats=flag[13], up=flag[15]).replace('3', 'bro') != 'bro 1':
abort(17)

if hashlib.sha1(flag.encode()).hexdigest() != 'e40075055f34f88993f47efb3429bd0e44a7f479':
abort(18)

print('🎉 You are right!')
import this

进行代码分析一步一步来肯定能做出来,但是非常费时间,过程就不写了,反正太费时间了。

image-20240815185450874

[Week1] 倒计时?海报!

考点:图片隐写

群里的海报,有十张,每张都潜藏flag的一部分,需要使用ps或者其他调色软件进行调色后寻找(眼睛都要找废了)大概就是像下面的图一样

image-20240816200115184

image-20240816200811716

image-20240816201411434

找齐后按10-1的顺序拼接在一起就是flag。

image-20240816201823427

[Week1] 你也喜欢圣物吗

考点:图片隐写,压缩包伪加密

打开文件,进行解压缩,发现一个png图片和一个压缩包。

image-20240816222450635

解压需要密码。

image-20240816222541447

我刚开始觉得是伪加密,放进010editor查看了一下

image-20240816223911247

表面上看确实是,但根据后来题目提示发现,里面的另一个压缩包才是伪加密,这个是真有密码。(不知道为什么)

那就需要从图片入手。刚开始以为是高度,放进010editor里修改,发现没有用。

然后就用stegsolve打开,发现了信息。

image-20240816222825621

解码这段编码,得到提示

image-20240816222917433

就是简单的LSB。找到key。

image-20240816223022332

解压过后得到里面的另一个压缩包

image-20240816223251279

这个压缩包也需要密码,但是却是伪加密,放进010editor修改过后就能解压,拿到里面的flag。

image-20240816223452392

image-20240816223545019

这里的flag有两个,上面那个是假的,最后那个才是真的。

image-20240816223627484

image-20240816223709957

[Week1] 根本进不去啊!

考点:域名解析

image-20240821155833385

根据题目提示,进行域名解析,发现flag。

image-20240821155809814

[Week1] 捂住X只耳

考点:Audacity的使用

此解法非官方预期,需要官方解法请看官方wp。

image-20240821160008205

直接人声分离,得到下图

image-20240821165703923

image-20240821170824565

用摩斯密码解码

image-20240821171021708

flag就是BaseCTF{FOLLOWYOURHEART}

web

[Week1] HTTP 是什么呀

考点:http基础知识

打开容器,就是普通的http知识

image-20240815185636716

按照提示抓包传入就行。

image-20240815185817085

image-20240815185937091

爆出flag。

image-20240815185954681

解码得到。

image-20240815190030770

[Week1] 喵喵喵´•ﻌ•`

考点:eval()漏洞利用,指令利用

打开容器,是一个简单的传参利用eval()漏洞问题

image-20240815190259501

[Week1] md5绕过欸

考点:MD5绕过

打开容器,要求get传参name和name2,post传参password和password2。

分析代码,发现name和password的md5进行弱相等,直接用现成的例子。

name2和password2的md5值强相等,可以使用数组绕过。(具体看笔记)

image-20240815190644451

[Week1] A Dark Room

考点:查看源代码

打开容器是个小游戏,但是其实考点是查看源代码。不过这游戏还挺有意思的。

image-20240815191053648

image-20240815191109940

[Week1] upload

考点:文件上传漏洞,一句话木马,webshell连接工具(蚁剑)

打开容器发现是文件上传。

image-20240815191232696

先进行准备,用记事本写上一句话木马,因为要上传图片文件,所以后缀改成.jpg

image-20240815191551084

进行文件上传,用bp抓包,修改.jpg为.php

image-20240815191710890

上传完了后找到该php文件

image-20240815191810966

image-20240815191827494

image-20240815191842431

是空白是正常的,因为修改了后缀,不是jpg,是个损坏图片文件。只需要上面的路径,然后用蚁剑连接就行。

image-20240815192026311

连接密码就是传参变量名。这里就是cmd

进入文件管理找到flag就行

image-20240815192129003

image-20240815192141082

ps:这是在前端限制的情况下,简单,但是可能会有很多其他绕过,现在暂时没遇到,以后肯定会遇到。

[Week1] Aura 酱的礼物

考点:代码审计,伪协议,SSRF

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
<?php
highlight_file(__FILE__);
// Aura 酱,欢迎回家~
// 这里有一份礼物,请你签收一下哟~
$pen = $_POST['pen'];
if (file_get_contents($pen) !== 'Aura')
{
die('这是 Aura 的礼物,你不是 Aura!');
}

// 礼物收到啦,接下来要去博客里面写下感想哦~
$challenge = $_POST['challenge'];
if (strpos($challenge, 'http://jasmineaura.github.io') !== 0)
{
die('这不是 Aura 的博客!');
}

$blog_content = file_get_contents($challenge);
if (strpos($blog_content, '已经收到Kengwang的礼物啦') === false)
{
die('请去博客里面写下感想哦~');
}

// 嘿嘿,接下来要拆开礼物啦,悄悄告诉你,礼物在 flag.php 里面哦~
$gift = $_POST['gift'];
include($gift);

分析代码,有三个变量,全是post方法传参。

第一个需要使用data协议绕过file_get_concents()函数。构造payload

1
pen=data://text/plain;base64,QXVyYQ==

第二个就涉及到SSTR漏洞(见笔记)。构造payload

1
challenge=http://jasmineaura.github.io@challenge.basectf.fun:34667

第三个就是文件包含漏洞,需要filter协议绕过。构造payload

1
gift=php://filter/convert.base64-encode/resource=flag.php

image-20240817225236931

解码得到flag。

image-20240817225312658