出题小记
开篇📜📜📜
迄今已经是我第二次参与出题,这次跟上次最大的不同就是对环境熟悉多了,对知识也清晰了些,解决问题的能力在ai的辅助下有了质的飞跃,还记得当时查博客,查的网页数都数不过来,还不一定有解决方案。不过依旧因为自己的粗心和大意容易浪费时间
首先就是前一两天测好的东西,然后再看就打不通了,有时候人真的会无语,哈哈。然后就捯饬捯饬,重新又搞了一遍。发现心态也越来越好了,哈哈,以前搞不好还会有点热,当然现在也会有点热。
然后就是写了个重复的代码,然后一直测试测试,因为忘记打开报错了,就啥也没显示,我以为打开了,反反复复就是不是想要的效果,所以吃一堑长一智。
一✒️
准备第一次出java语言的漏洞题目,其实也就是个log4j的CVE
然后也是一个星期左右吧,在AI的帮助下其实实现起来轻松很多。这里其实最令我无语的是还是环境的问题,这个题目的出题经历让我认识到了,在需要多服务和网络跨来跨去的时候,一定要先确定网络是否能通,端口是否正常。我这里涉及到一个端口问题,这个问题让我百思不得其解然后折磨了一整个下午。我基本上把所有问题排除了,但是这个题目还是没有达到我想要的回显效果,我监听了4444端口,起的http服务下的资源也转发下载成功了,然后docker中的配置和java版本等等,pom.xml等等确定了无数次,反反复复得docker-compose up -d到docker-compose down,然后docker rmi ID 得十几次,就是不停换不停测,就是不行。然后我想是不是端口问题,然后echo了一个语句到4444没有反应,然后又起了一个4445监听,同样echo一个语句有反应,这时我立马就傻了。。。无语死了,随后换成了4445端口,就回显了有了反应,不知道为什么,并不是什么安全组问题,端口都是开放的。算是吃一堑长一智吧。
好在成功出出来了,没有白费功夫。
既然都说到这儿了,下面就对一些网络命令进行整理
网络命令进行整理
在 Linux 中,测试 网络是否通、目标主机是否可达、端口是否开放 是日常运维和渗透测试中的常见操作。以下是几个最常用、实用的命令:
🔹 1. ping —— 测试主机是否可达(ICMP 层)
ping 192.168.1.100
✅ 优点:快速判断目标主机是否在线 ❌ 缺点:很多服务器禁 ping(防火墙过滤 ICMP),所以 ping 不通 ≠ 主机宕机
🔹 2. telnet —— 测试 TCP 端口是否开放(最经典)
telnet 192.168.1.100 4444
- 如果连接成功(出现空白或提示符)→ ✅ 端口开放
- 如果提示
Connection refused→ ❌ 端口关闭(服务没开) - 如果卡住/超时 → ⚠️ 端口被防火墙过滤(可能开放但屏蔽了)
💡 安装 telnet(如未安装):
sudo apt install telnet -y
🔹 3. nc(netcat)—— 更灵活的端口探测工具
测试 TCP 端口:
nc -zv 192.168.1.100 4444
-z:只扫描,不发送数据-v:显示详细信息
输出示例:
Connection to 192.168.1.100 4444 port [tcp/*] succeeded!
扫描多个端口:
nc -zv 192.168.1.100 4444 4445 8080
# 或范围
nc -zv 192.168.1.100 4440-4450
💡 安装 netcat:
sudo apt install netcat -y # Ubuntu/Debian # 或 sudo yum install nc -y # CentOS/RHEL
🔹 4. nmap —— 专业端口扫描工具(功能最强)
扫描单个端口:
nmap -p 4444 192.168.1.100
扫描多个端口:
nmap -p 4444,4445,8080 192.168.1.100
扫描全端口(慎用):
nmap -p- 192.168.1.100
输出解读:
open→ 端口开放closed→ 端口关闭(服务没监听)filtered→ 被防火墙过滤(不确定是否开放)
💡 安装 nmap:
sudo apt install nmap -y
🔹 5. curl / wget —— 测试 HTTP(S) 服务
适用于 Web 服务(80/443/8080 等):
curl -v http://192.168.1.100:8080
# 或
wget --spider http://192.168.1.100:8080
- 能返回 HTML 或状态码 → ✅ 服务正常
- 连接超时 → 端口不通或服务未响应
🔹 6. ss / netstat —— 查看本机监听端口(本地诊断)
查看本机是否在监听 4444:
ss -tuln | grep 4444
# 或
netstat -tuln | grep 4444
输出示例:
tcp 0 0 0.0.0.0:4444 0.0.0.0:* LISTEN
✅ 表示本机确实在监听 4444 端口。
💡
ss比netstat更快,推荐使用。
🧪 实战组合建议
| 场景 | 推荐命令 |
|---|---|
| 快速测端口通不通 | nc -zv ip port |
| 判断是“关了”还是“被拦了” | telnet ip port + nmap -p port ip |
| 本机服务是否监听 | `ss -tuln |
| Web 服务测试 | curl -v http://ip:port |
❗ 注意事项
- UDP 端口 很难准确探测(无连接机制),需用
nc -uvz或专用工具。 - 有些服务(如反弹 shell 监听)只接受连接但不回显,此时
nc连上后无输出是正常的。 - 防火墙/NAT 可能导致“本地能连,外部不能连”,务必从攻击者视角测试。
✅ 总结一句话:
测端口通不通,首选
nc -zv或telnet;查本机监听用ss;批量扫描用nmap。
假设你在本机或远程有一台机器正在 监听 TCP 4445 端口(比如用 nc -lvp 4445),你可以用以下任一方式发送数据:
输出到监听端口
方法 1:使用 echo + nc(推荐)
echo "Hello from client!" | nc 127.0.0.1 4445
✅ 适用于测试反弹 shell、Log4j 回显、自定义协议等场景
方法 2:使用 telnet(交互式)
telnet 127.0.0.1 4445
# 然后手动输入:
Hello from telnet!
# 按 Ctrl+] 再按 q 退出
方法 3:使用 bash 原生 TCP(无需安装工具)
echo "Hello via bash!" > /dev/tcp/127.0.0.1/4445
⚠️ 要求 bash 支持
/dev/tcp(大多数 Linux 默认支持)
方法 4:Python 发送(灵活)
python3 -c "
import socket
s = socket.socket()
s.connect(('127.0.0.1', 4445))
s.send(b'Hello from Python!')
s.close()
"
监听
🔹 A. 临时监听(非持久化)—— 关闭终端即停止
- 使用
nc(netcat)监听(最常用)
# 监听 4445,每收到一次连接就退出
nc -lvnp 4445
# 持续监听(每次连接后继续等待下一次)
while true; do nc -lvnp 4445; done
参数说明:
-l:listen(监听)-v:verbose(显示连接信息)-n:不解析 DNS(加快速度)-p:指定端口
💡 收到数据后,内容会直接打印在终端上!
- 使用
socat(功能更强)
socat TCP-LISTEN:4445,fork STDOUT
fork:允许多次连接- 数据会回显到终端
- Python 快速监听
python3 -c "
import socket
s = socket.socket()
s.bind(('0.0.0.0', 4445))
s.listen(1)
print('Listening on 0.0.0.0:4445')
conn, addr = s.accept()
print('Connected by', addr)
print(conn.recv(1024).decode())
conn.close()
"
🔹 B. 持久化监听(开机自启 / 后台常驻)
适用于需要长期监听的场景(如 CTF 靶机、反弹 shell 接收器)
方案 1:用 systemd 创建服务(推荐,现代 Linux)
- 创建服务文件:
sudo nano /etc/systemd/system/listen4445.service
- 内容如下:
[Unit]
Description=Listen on port 4445 for CTF
After=network.target
[Service]
ExecStart=/usr/bin/nc -k -l -p 4445
Restart=always
User=root
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
⚠️ 注意:部分
nc版本不支持-k(保持监听),可改用socat或 while 循环脚本
- 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now listen4445.service
- 查看日志:
journalctl -u listen4445 -f
方案 2:用 screen 或 tmux 后台运行(简单粗暴)
# 安装 screen
sudo apt install screen -y
# 启动后台会话
screen -dmS listener nc -k -l -p 4445
# 查看输出
screen -r listener
优点:简单;缺点:重启后不会自动恢复
方案 3:写一个守护脚本 + cron(兼容老系统)
- 创建脚本
/root/listen.sh:
#!/bin/bash
while true; do
nc -lvnp 4445 >> /var/log/listen4445.log 2>&1
done
- 赋予执行权限:
chmod +x /root/listen.sh
- 添加开机启动(通过 crontab):
(crontab -l 2>/dev/null; echo "@reboot /root/listen.sh &") | crontab -
🧪 测试全流程示例
终端 1:监听
nc -lvnp 4445
终端 2:发送
echo "Test message" | nc 127.0.0.1 4445
✅ 终端 1 会立即显示:
Test message
✅ 总结对比
| 类型 | 命令 | 是否持久 | 适用场景 |
|---|---|---|---|
| 临时监听 | nc -lvnp 4445 |
❌ 否 | 快速测试、CTF 临时接收 |
| 持久监听 | systemd 服务 |
✅ 是 | 长期运行、生产环境 |
| 半持久 | screen / tmux |
⚠️ 重启失效 | 调试、临时后台 |
| 发送数据 | `echo “xxx” | nc ip port` | — |
然后于开赛的当周,突然就又有了灵感,想把这道题完善一下,不能说明明显显就留了个接口告诉选手,漏洞在这儿直接打吧,于是我加了很多接口和功能,然后增加了三种身份,游客登入、普通用户登入,管理员登入,管理员的账号密码泄露在文档的json数据示例中。因为是临时加工,前后端不分离,使用的是thymeleaf,不熟,所以在ai的帮助下依旧难受,哈哈,看不太懂,尤其是模板layout,会出现版本啊格式啊,兼容渲染覆盖等等问题...
但是如果前后端分离,我怕来不及,所以就凑合着用吧。
二✒️
接下来想搞一个CMS,找一找有没有有趣有东西一点的
一开始想找个开源的CMS但是,同为出题的其他师傅觉得开源的CMS漏洞公开比较多,觉得可能比较简单,然后比较容易吧,于是乎建议我看看有没有自己写的那种项目进行漏洞设计,这个就是全新未开源的代码审计加上漏洞利用了,感觉上很有搞头。但是由于是新生赛,我这也就还剩一道题,得搞道送分签到题,有意思一点,这个思路等以后有机会再去实现吧。
这道题是我朋友搞的,我发现我们其实挺有默契的,想法差不多,他也是CMS,而且也是受到了我们之前去打红队的时候遇到的思路的启发诞生出来了这道题,利用前后端校验逻辑问题,修改密码+python沙箱栈帧逃逸
三✒️
送分大福利题,主打一个来就有,目的还是希望出的有趣
收到最近打的一个铸剑杯的启发,感觉可以出一个游戏的送分题,因为我去年实际上也出了个游戏的送分题,不过那个属于游戏的类型,实际上flag就在源码里边,然后只要对base64有点熟悉的人就会很容易在一个js的文件中发现flag,那道题在赛后反馈中有些师傅说玩的挺开心的,于是今年我又来整一个游戏题吧,也是送分,算是延续自己的初心,哈哈哈。于是我就想着出个什么游戏,去逛逛老牌4399游戏,发现黄金矿工确实很经典,本身自己从小到大就很喜欢玩游戏,哈哈
四✒️
php反序列化的pop链板子题,这个是最早出出来的,对于新手想秒还是不太容易
五✒️
出了个简单题,毕竟是新生赛性质,一个简单抓包越权+jwt伪造
背景虽然给的也是游戏,但是这个跟游戏没什么关系,就是打着游戏的背景进行一个web基础题的出题。
✌✌✌
结语🚩
说实话换到去年我可能没怎么能有想法和干劲,哈哈,一是实力不够,二是这是我最后一次为咱们出题了,明年真的不好说了,还是想多留下点东西,虽然没什么好成绩留下给战队,其中自己的原因更大吧,迷茫使然,现在我清晰了,但是却失去了最好的时间。把战队的比赛官网在AI的帮助下重做了一下,尽一点绵薄之力。然后把尽心的把新生和小登们引导进来,web手可是不能缺少的部分,未来是他们的,我的下一站需要一年的磨砺了,以后继续当赛棍,哈哈哈哈。接触安全包括中途摆烂很久的那段时间也就一年多,差不多两年不到。受益匪浅,成长可谓巨大。
我该去走我自己的下一段路了,这里立一个flag,待我凯旋,重新好好专研一下,继续ctf,然后学习渗透。
而且这个hugo搭建的博客还有一些问题需要花时间去补充,比如友链,标签不支持中文,about页面(关于自己)等等... 等我忙完这个人生最重要的事情之一,利用ai去把这个学习,整一整