齐鲁师范学院 2025 级新生 CTF 网络安全练习平台 Week2 WriteUP
本文分享了CTF比赛中多个题目的解题思路:1. Web题目通过git历史提交和目录扫描获取flag;2. Pwn题目利用重定向技巧绕过输出限制;3. Misc题目包含二维码拼接、音频频谱分析和压缩包爆破;4. 网络题目从ICMP数据包中提取隐藏字符。解题方法涉及多种技术手段,包括代码审计、工具扫描和数据处理等。
·
这一周侥幸 AK 了(感觉下一周很难了
Web
[WEEK2] 时光回溯
出题人: Yime | 难度: 简单 有时候,过去留下的痕迹会在不经意间泄露秘密。 这个网站看起来一切正常,但你能让它“回到过去”,找出它曾经拥有的真正 Flag 吗? |
使用 githacker 下载文件

然后使用 git 命令查看历史提交即可

[WEEK2] 藏匿之处
题目信息 - [WEEK2]藏匿之处 出题人: Yime | 难度: 简单 这个网站看起来很普通,主页并没有什么特别的内容。 但你有没有想过,或许还有一些隐藏的地方等待被发现? 有些秘密藏在不易察觉的目录中, 不妨尝试用工具去探索那些被隐藏的路径吧。 |
使用 dirsearch 进行扫描

解压 www.zip 打开 flag.html

Pwn
[WEEK2] 输出
题目信息 - [WEEK2]输出 出题人: Reinon | 难度: 基础 想要输出不给输出 |
分析代码
int __fastcall main(int argc, const char **argv, const char **envp)
{
puts("########################################");
puts("# Welcome to the QLNU CTF #");
puts("########################################");
puts("# /\\_/\\ A tiny fox appears! #");
puts("# ( o.o ) Can you capture its art? #");
puts("# > ^ < #");
puts("########################################");
puts("# want output but it doesn't give output #");
puts("########################################");
close(1);
close(2);
system("/bin/sh");
return 0;
}
|
- 关键操作:
close(1):关闭标准输出(stdout)close(2):关闭标准错误(stderr)
使用重定向 fd 0(stdin)到 stdout
exec >&0 2>&0 |

查看 flag 即可

Misc
[WEEK2]Scan
出题: Camille | 难度: 简单 面多加水,水多加面。For our first meeting, I will perform for you the act of sixteen rotations. |
这道题其实不应该这么做的(AI 实在写不出来脚本

人肉眼看的 截出来这两款 再配合定位符


拼接二维码

扫描二维码

base64 解码

格式对了 再次解码即可

[WEEK2]listing
出题人: Duktig | 难度: 简单 这段音频似乎藏着什么奇怪的电报声。你可能要看看什么东西…… |
看频谱图

高的为 1,低的为 0,二进制,眼睛一点一点看的(
这道题是邪修出来的
01010001 01001100 01001110 01010101 01000011 01010100 01000110 01111011 01101100 01001001 01110011 01110100 01101001 01001110 01100111 01111101 |

ASCII 码转字符串 得到 Flag

[WEEK2]“真” 加密
出题人: COLLAPSING | 难度: 简单 这是一个真加密的压缩包,你能将密码爆破出来吗? |
文件有提示

按照提示暴力破解即可

得到 Flag

[WEEK2] 心跳协议
题目信息 - [WEEK2]心跳协议 出题人: Merlyn | 难度:简单 网络安全工程师发现内部服务器存在异常ICMP流量,怀疑攻击者通过Ping请求传输了敏感数据。你能从抓包文件中找出隐藏的flag吗? Tip: 关注Ping请求(Type=8)的数据字段 |
根据题目提示查看 type 为 8 的包

发现每个包都有隐藏字符

让 AI 写一个 python 脚本
import pyshark
import sys
def extract_icmp_flag(pcap_file):
"""从ICMP Type=8数据包中提取最后一个字节并合并为FLAG"""
try:
# 读取pcap文件
cap = pyshark.FileCapture(pcap_file, display_filter='icmp.type == 8')
flag_chars = []
for packet in cap:
try:
# 获取ICMP层
icmp = packet.icmp
# 获取原始数据(十六进制格式)
if hasattr(icmp, 'data'):
icmp_data_hex = icmp.data
# 将十六进制字符串转换为字节
icmp_bytes = bytes.fromhex(icmp_data_hex.replace(':', ''))
if icmp_bytes:
# 获取最后一个字节
last_byte = icmp_bytes[-1]
flag_chars.append(chr(last_byte))
print(f"数据包 {packet.number}: 最后一个字节 = 0x{last_byte:02x} = '{chr(last_byte)}'")
except Exception as e:
print(f"处理数据包 {packet.number} 时出错: {e}")
continue
cap.close()
# 合并所有字符
flag = ''.join(flag_chars)
print(f"\n提取的FLAG: {flag}")
return flag
except Exception as e:
print(f"错误: {e}")
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("用法: python extract_icmp_flag.py <pcap文件>")
sys.exit(1)
pcap_file = sys.argv[1]
extract_icmp_flag(pcap_file)
|
得到 Flag

更多推荐



所有评论(0)