lsdogXG/nht-ctf
GitHub: lsdogXG/nht-ctf
基于 Hardhat 分叉 Arbitrum One 并内置 GMX V1 Keeper 的独立 CTF 挑战环境,供安全研究者与参赛者与真实协议状态交互解题。
Stars: 0 | Forks: 0
# nht — GMX V1 Arbitrum Fork CTF
一个独立的 CTF 挑战,在固定区块处分叉 Arbitrum One,并在后台运行 GMX V1 keeper。玩家连接到公共 RPC 并与实时的 GMX V1 状态进行交互以解决挑战。
## 运行内容
- **Arbitrum One 分叉**,区块为 `355878386`,通过 Hardhat 运行
- **私有 RPC**(端口 `8546`)— 包含完整的 Hardhat 方法,由 keeper 在内部使用
- **公共 RPC**(端口 `8545`)— 代理会**过滤掉** `hardhat_*`、`evm_*`、`anvil_*` 等管理方法,使玩家无法模拟账户或挖出区块
- **Keeper 守护进程**负责处理:
- `OrderBook.executeIncreaseOrder` / `executeDecreaseOrder`(通过 `PositionManager`)
- `PositionRouter.executeDecreasePositions`(减仓队列)
挑战入口合约位于 `contracts/exp.sol` 中。
## 快速开始
### 本地
```
pnpm install
cp .env.example .env # set ARB_RPC_URL to a real Arbitrum archive RPC
# 终端 1 — 启动 fork
npm run rpc
# 终端 2 — 启动 keeper daemon
npm run keeper
# 终端 3(可选) — 公开 RPC 代理
npm run proxy
```
或者,使用单行命令:
```
bash scripts/up.sh "https://your-arbitrum-rpc"
```
### Docker(推荐用于 CTF 部署)
仅暴露公共 RPC 端口;私有 RPC 和 keeper 均在容器内部运行。
```
docker build -t nht-ctf .
docker run --rm -p 8545:8545 -e ARB_RPC_URL="https://your-arbitrum-rpc/" nht-ctf
```
或通过 compose 运行:
```
export ARB_RPC_URL="https://your-arbitrum-rpc/"
docker compose up --build
```
## 目录结构
```
contracts/exp.sol Challenge / exploit entry-point contract
hardhat.config.ts Fork config, networks, solidity profile
flag.txt Placeholder flag (replace before deploying)
scripts/
up.sh One-shot launcher (rpc + proxy + keeper)
run-fork-rpc.sh Start the private fork RPC
public-rpc-proxy.ts JSON-RPC proxy that blocks admin methods
keeper-daemon.ts GMX V1 keeper loop
fund-player.ts Fund the player address with ETH/USDC
check-fork-health.ts Sanity-check the fork is alive
check-vault-wbtc-reserve.ts Win-condition probe
docker-entrypoint.sh Container boot script
lib/
gmx-v1-abis.ts ABIs used by the keeper
gmx-v1-arbitrum.ts Mainnet addresses
keepers/orderbook.ts OrderBook keeper
keepers/position-router.ts PositionRouter keeper
Dockerfile / docker-compose.yml
```
## 注意事项
- **不要**公开暴露私有 RPC(`8546`) — 玩家应该访问的是公共代理。
- Keeper 配置(地址、间隔时间)位于 `scripts/keeper-daemon.ts` 的顶部 — 不支持 CLI 参数。
- 在让玩家进入之前为其提供资金:编辑 `scripts/fund-player.ts`,然后运行 `npm run fund`。
- 在部署之前,请将 `flag.txt` 替换为你的真实 flag。
## 技术栈
- Hardhat 3 + viem toolbox
- Solidity 0.8.28
- TypeScript / Node 22 LTS
- pnpm
## 许可证
MIT
标签:Arbitrum Fork, CISA项目, DeFi, Docker, GMX V1, Hardhat, JSON-RPC, Keeper守护进程, MITM代理, RPC代理, Solidity, Web3安全, 以太坊测试网, 区块链安全, 安全防御评估, 智能合约安全, 本地节点, 网络安全竞赛, 自动化做市商, 自动化攻击, 请求拦截, 靶场环境