Contents

CTF练习Week1

0x00 WEB-[NCTF2019]True XML cookbook

访问网页源码

发现是以xml格式传入用户名密码的,且输入的用户名信息会返回到前端,尝试XXE注入,成功读取到文件。

查看/etc/hosts,探测内网存活的主机。hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。但是没有发现有效的信息。

然后查看arp缓存列表/proc/net/arp文件,发现一个ip地址,但爆破后没有得到有效结果。查看路由缓存表proc/net/fib_trie文件,获取服务器IP和网络架构。

爆破10.244.80C段的ip得到flag

0x01 MISC-[HackingClubCTF 2022]你能看懂音符吗?

修改文件头

解压得到

把音符在https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue解密即可得到flag。

0x02 Crypto-[HackingClubCTF 2022]影子系统

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。

这个写脚本爆破就出来了。

import hashlib
import string

def md5(str):
    m = hashlib.md5()
    m.update(str.encode("utf8"))
    return m.hexdigest()

for i in string.ascii_uppercase:
    for j in string.ascii_uppercase:
        for k in string.ascii_uppercase:
            c = 'TASC' + i + 'O3RJMV' + j + 'WDJKX' + k + 'ZM'
            x = md5(c).upper()
            if 'E903' in x and '4DAB' in x and '08' in x and '51' in x and '80' in x and '8A' in x:
                print(x)
                break

0x03 取证-[HackingClubCTF 2022]后门!!OMG!

上D盾开扫,发现可疑文件

查看webshell密码0578b19a3360292c22bede3cf6a79272,md5后76a8753e02d1503213172ef838372365

0x04 Crypto-[HackingClubCTF 2022]异性相吸

buu原题,key和密文同为奇数或偶数相减,一奇一偶相加,脚本如下:

key = open("key.txt", 'rb').read()
cipher = open("密文.txt", "rb").read()

flag = []
result = ""
for i in range(len(key)):
    flag.append(key[i] ^ cipher[i])
    result += chr(flag[i])
print(flag)
print(result)

0x05 Misc-[HackingClubCTF 2022]美丽的烟火

zip伪加密,得到am5QWDVwNVp0ZkRKdW14U3NFSw==,解码得到t_hp1ass_s1wsd

栅栏编码得到th1s_1s_passwd,在firework.png发现可疑字样stegpy:shumu

使用stegpy提取下隐藏信息,得到aZgs8ImPpQOzO3CVA/wIUVq/M7X8C33ptNZSW2Blenc=

尝试base64解码,未果,想到上面的密码还没用,使用AES解密得到flag。

0x06 Web-[HackingClubCTF 2022]Find my Friend

目录扫描发现data.txt文件,访问得到flag

0x07 Crypto-[HackingClubCTF 2022]乌拉

0x08 MISC-[HackingClubCTF 2022]看看这是什么星号东西

给了一张原图和2340张分割后的小图,根据图片序列猜测是宽高都按0-49分的,也就是说,图片是50x50。

执行magick montage *.png -tile 50x50 -geometry +0+0 flag.png,得到一张图片

其实隐隐约约能看到部分flag了,使用gaps没有达到理想的效果,没办法,简单手撕一下。

得到部分细节,最终的flag为flag{Hello_word_给HackingClub},有中文属实是没想到,卡了很久。

0x09 Crypto-[HackingClubCTF 2022]RC小车车嘟嘟嘟

0x0A Web-[HackingClubCTF 2022]Easy-yinkelude

 <?php
include('./flag.php');
show_source('./index.php');
$file=@$_POST['file'];
class hello{
    public $falg='tql123';
}
$a=new hello();
$shit=serialize($a);
if(@file_get_contents($file) == $shit){
    echo $flag;
}else{
    echo "what are u doing? just a qian dao";
}

?> 

分析代码可知,需要上传一个$file变量,使得它的值等于a的序列化,猜测是用data协议传序列化后的值,payload为:data://text/plain,O:5:"hello":1:{s:4:"falg";s:6:"tql123";}

0x0B 取证-[HackingClubCTF 2022]WebShell大马

上D盾

0x0C MISC-[HackingClubCTF 2022]史上第一难倒直男的题目

小明正在上班,想要小红的微信,但是小红给了一个32位的微信号码,请你帮帮她。

(有人说这是Crypto!但是我觉得Misc的含量更多!)

题目信息:63c44dde47a3f48927ddddc88fb489ad

解md5,得到一串字符,以为是flag但不是,想到题目说更像MISC和微信的提示,就加wx了。

0x0D MISC-[HackingClubCTF 2022]给你康个好康的~

ppt里面有几张很刺激的图片,修改文件后缀为zip,解压后在\ppt\media下看jpg,在image6里发现藏有压缩包。

解压后得到一个Flag.docx,但文件有加密,打不开,队友爆出密码PLJJ,解压得到flag。

0x0E Crypto-[红明谷杯]easy_ya

 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
from Crypto.Util.number import *
import os

from flag import flag
def gen():
    e = 3
    while True:
        try:
            p = getPrime(512)
            q = getPrime(512)
            n = p*q
            phi = (p-1)*(q-1)
            d = inverse(e,phi)
            return p,q,d,n,e
        except:
            continue
    return
p,q,d,n,e = gen()
r = getPrime(512)
m = bytes_to_long(flag+os.urandom(32))
M = m%r
c = pow(m,e,n)
print("r = %d"%r)
print("M = %d"%M)
print("n = %d"%n)
print("e = %d"%e)
print("c = %d"%c)
'''
r = 7996728164495259362822258548434922741290100998149465194487628664864256950051236186227986990712837371289585870678059397413537714250530572338774305952904473
M = 4159518144549137412048572485195536187606187833861349516326031843059872501654790226936115271091120509781872925030241137272462161485445491493686121954785558
n = 131552964273731742744001439326470035414270864348139594004117959631286500198956302913377947920677525319260242121507196043323292374736595943942956194902814842206268870941485429339132421676367167621812260482624743821671183297023718573293452354284932348802548838847981916748951828826237112194142035380559020560287
e = 3
c = 46794664006708417132147941918719938365671485176293172014575392203162005813544444720181151046818648417346292288656741056411780813044749520725718927535262618317679844671500204720286218754536643881483749892207516758305694529993542296670281548111692443639662220578293714396224325591697834572209746048616144307282
'''

e=3首先想到的是低指数的爆破,但是稍稍分析就知道这个位数不太能爆破出来,Coppersmith发现的短填充攻击,即在消息尾部或头部直接填充随机串,如果填充的随机串r的长度低于消息长度的1/9,那么攻击者便能够有效地恢复出明文M。

**Coppersmith定理:令N为大整数,f是度为e的多项式。给定N和f,可以有效地计算出方程f(x)=0 mod N所有小于N^(1/e)的解。**构造如下的多项式:f = (M+r*x)^e -c 在 Zmod(n)的多项式环上有小根x = k,由于k < 2^79 < n^(1/e)

PR.<x> = PolynomialRing(Zmod(N))
g = (M + r * x) ** e - c
g = g.monic() #monic()表示首系数为1的单项式
k = g.small_roots()[0]
m = k * r + M

0x0F Crypto-[HackingClubCTF 2022]老套路

mvlxhirlszq{eof_eof_bvjf_jd_jd},仿射密码

0x10 MISC-[HackingClubCTF 2022]逃离东南亚

得到三个日记的压缩包,先解压第一个,发现图片,修改高度得到密码wdnmd

第一段日记的markdown

第二段日记的markdown

文中提到了信息隐藏,看看test文件很像brainfuck,但是少了++++++++的开头,补上后成功解码,得到的字符串,形似base64加密,cyberchef转换后发现ELF的字样,保存得到可执行文件。

运行暂无有效信息

SilentEye分析打架.wav得到This1sThe3rdZIPpwd

解压日记3,得到最后的markdown

这里卡了很久,题目说是原题改的,就去查了下wp,发现需要用脚本搜索tab和空格,同时要过滤到常见的双空格和双/t,因此考虑用 \t \t作为搜索字符。参考:https://www.bilibili.com/read/cv14000314

import os

def get_file_list(dir_path):
    _file_list = os.listdir(dir_path)
    file_list = []
    for file_str in _file_list:
        new_dir_path = dir_path+'\\'+file_str
        if os.path.isdir(new_dir_path):
            file_list.extend(get_file_list(new_dir_path))
        else:
            file_list.append(new_dir_path)
    return file_list

file_list = get_file_list(r'.\source_code')
for file_str in file_list:
    f = open(file_str, 'r', encoding='utf-8')
    try:
        data = f.read()
        if ' \t \t' in data:
            print(file_str)
    except:
        pass

得到三个可疑的文件,在}后面有隐藏信息。

.\source_code\elf\rtld.c
.\source_code\malloc\arena.c
.\source_code\malloc\malloc.c

使用脚本读出\t和空格,然后二进制转字符得到flag。

f_list = r'''.\source_code\elf\rtld.c
.\source_code\malloc\arena.c
.\source_code\malloc\malloc.c'''
f_list = f_list.split('\n')

result = ''

for f in f_list:
    for data in open(f, 'r').readlines():
        data = data[:-1]
        if '}' in data:
            data = data.split('}')[-1]
            if '\t' in data:
                data1 = data[::].replace('\t', '')
                data1 = data1.replace(' ', '')
                if not data1:
                    result += data

result = result.replace('\t', '1')
result = result.replace(' ', '0')
print(result)

0x11 Misc-[WUSTCTF2020]spaceclub

只有长空格和短空格,转成0和1 ,转二进制即可得到flag。

0x12 Misc-[WUSTCTF2020]girlfriend

wav播放后是很明显的拨号声,使用dtmf2num识别得到999*666*88*2*777*33*6*999*4*444*777*555*333*777*444*33*66*3*7777

分析numbers结合拨号的键,猜想是手机的九键输入法,依次对着输就能得到flag。

0x13 Misc-[WUSTCTF2020]爬

发现文件头是PDF,修改后缀名。

打开文件,显示flag被图片挡住了。

用word打开,另存为docx,再把爬字拖动,得到一串16进制,转换得到flag。

0x14 Misc-[WUSTCTF2020]find_me

在属性里发现疑似盲文的符号,直接转换得到flag

0x15 Misc-[WUSTCTF2020]alison_likes_jojo

给了两张图,先在boki里面发现有压缩包,分离一下。

分离后,确认不是未加密,先进行爆破,得到密码888866,解压得到beisi.txt的文件内容WVRKc2MySkhWbmxqV0Zac1dsYzBQUT09,应该是base64没跑了,直接丢到cyberchef里面,自动解了3层,得到killerqueen

分析jljy,多次尝试后发现为outguess加密,执行outguess -k killerqueen -r jljy.jpg 1.txt得到flag。

0x16 Misc-[UTCTF2020]basic-forensics

文件是ebook,直接strings搜索得到flag。

0x17 Misc-[UTCTF2020]File Carving

binwalk分离png,得到hidden_binary

file查看文件类型,运行可执行文件得到flag。

0x18 Misc-[MRCTF2020]pyFlag

给了三张图,010点开分析发现文件尾都有一个SecretFilePart

拼接得到压缩包,发现加密,爆破出密码。

hint.txt内容为

我用各种baseXX编码把flag套娃加密了,你应该也有看出来。
但我只用了一些常用的base编码哦,毕竟我的智力水平你也知道...像什么base36base58听都没听过
提示:0x10,0x20,0x30,0x55

flag.txt的内容为

1
G&eOhGcq(ZG(t2*H8M3dG&wXiGcq(ZG&wXyG(j~tG&eOdGcq+aG(t5oG(j~qG&eIeGcq+aG)6Q<G(j~rG&eOdH9<5qG&eLvG(j~sG&nRdH9<8rG%++qG%__eG&eIeGc+|cG(t5oG(j~sG&eOlH9<8rH8C_qH9<8oG&eOhGc+_bG&eLvH9<8sG&eLgGcz?cG&3|sH8M3cG&eOtG%_?aG(t5oG(j~tG&wXxGcq+aH8V6sH9<8rG&eOhH9<5qG(<E-H8M3eG&wXiGcq(ZG)6Q<G(j~tG&eOtG%+<aG&wagG%__cG&eIeGcq+aG&M9uH8V6cG&eOlH9<8rG(<HrG(j~qG&eLcH9<8sG&wUwGek2)

根据提示猜测用到了base16、base32、base64(感觉上面应该是0x40才对,这里是个小bug,但没有base48)、base85,只需要试出第一层,剩下的交给cyberchef即可解出flag。

0x19 Misc-[MRCTF2020]千层套路

压缩包第一层是0573.zip,爆破发现密码就是0573,下一层是0114.zip,密码也和文件名相同,需要编写脚本来解决套娃。

from os import system
import zipfile

zipname = "0573.zip"
f = zipfile.ZipFile(zipname, 'r')


while 1:
	try:
		name = f.namelist()[0]
		f.extractall(pwd=bytes(zipname[0:4],'utf-8'))
		system('rm -rf '+ str(zipname))
		f = zipfile.ZipFile(name, 'r')
		zipname = name
	except:
		break

跑了几分钟最后得到qr.txt,可以看到是rgb的数据

把前后括号都删去,然后用下面的脚本,得到一张二维码,扫描得到flag。

from PIL import Image

x = y = 200
img = Image.new("RGB",(x,y))
file = open('./qr.txt','r')

for width in range(0,x):
    for height in range(0,y):
        line = file.readline()
        rgb = line.split(',')
        img.putpixel((width,height),(int(rgb[0]),int(rgb[1]),int(rgb[2])))
img.save('flag.jpg')

0x1A MISC-[HackingClubCTF 2022]我说这是莫斯

扫描二维码得到swpuctf{flag_is_not_here},假的,yongbinwalk发现图片藏有4个rar,分离一下。

先在encode.txt得到一段base64编码YXNkZmdoamtsMTIzNDU2Nzg5MA==asdfghjkl1234567890

flag.doc中发现一段多重base64加密的字符串,解密后得到comEON_YOuAreSOSoS0great

解压压缩包得到一段音频文件,只有长短两种,怀疑是莫斯电码。

记录得到--/---/.-./…/./../…/…-/./.-./-.--/…-/./.-./-.--/./.-/…/-.--,转换得到MORSEISVERYVERYEASY

0x1B MISC-[HackingClubCTF 2022]我的路由器

下载得到conf.bin文件,使用RouterPassView打开,得到flag。

0x1C Crypto-[HackingClubCTF 2022]无AC保护

仔细观察发现字符串里都包含5x55303030303030

1
5x5530303030303036365x5530303030303036435x5530303030303036315x5530303030303036375x5530303030303037425x5530303030303037375x5530303030303036355x5530303030303036435x5530303030303036335x5530303030303036465x5530303030303036445x5530303030303036355x5530303030303035465x5530303030303037345x5530303030303036465x5530303030303035465x5530303030303036385x5530303030303036315x5530303030303036335x5530303030303036425x5530303030303036395x5530303030303036455x5530303030303036375x5530303030303036335x5530303030303036435x5530303030303037355x5530303030303036325x5530303030303035465x5530303030303034335x5530303030303035345x5530303030303034365x5530303030303035465x5530303030303036355x5530303030303036315x5530303030303037335x5530303030303037395x5530303030303035465x5530303030303034335x5530303030303037325x5530303030303037395x5530303030303037305x5530303030303037345x5530303030303036465x553030303030303744

全部删除得到

1
36363643363136373742373736353643363336463644363535463734364635463638363136333642363936453637363336433735363235463433353434363546363536313733373935463433373237393730373436463744

转换得到flag

0x1E Crypto-[HackingClubCTF 2022]Beautiful