简介
simplepwntools 是一款基于 Node.js 平台的 npm 包,它提供了一系列方便的工具函数,用于编写和调试二进制文件的利器。同时它也支持 x64 和 x86 的架构,用户可以根据自己的需求进行选择。
安装
安装 simplepwntools 只需要使用 npm 或者 yarn 即可:
npm install simplepwntools or yarn add simplepwntools
使用
入门示例
下面是一个简单的利用 simplepwntools 编写的 exp:
-- -------------------- ---- ------- ----- - ---- ----- ------ - - ------------------------- ----- ----------- - --------- ----- ---- - ------- ----- ------- - ----------- --- - - ----- ------------ ------------ ----- ----- -------- ------- -- -- -- ---- ----- --- -------- - ------------------------------- ---------------- ----------------- ----- - - --------- -- -- ----------- --- -- - ----------- --- -------- - -------------------- --------------------- -- -- ------- --- ------- - ---------------- ------- -- -------------- - --------------- -- - ------ -- ------- -------------------- -- -- ------ ----- -------- - -------------------- --------------------- -- ---- ----------
以上示例代码演示了如何使用 simplepwntools 跑出一份简单的 exploit,可以看出来,simplepwntools 中几乎所有的工具函数都带有一个固定的参数 p,它用来指定当前利用的平台和相应的进程信息。
pwn 函数
pwn 函数中,最核心的便是交互式 shell 的开启:
let p = pwn({ processName: processName, port: port, elfPath: elfPath })
pwn 函数支持以下几个参数:
processName: 进程名 port: 连接 port elfPath: elf 文件的路径 timeout: 超时时间,单位秒,默认值为 10
其中,processName 和 port 只需要指定选一个即可,具体哪一个要依赖于二进制文件的类型,比如说:
- 如果是一个纯本地(local)的程序,则需要指定 processName;
- 如果是一个需要网络通讯的程序(比如要求客户端使用 nc 连接到程序),则需要指定 port。
elfPath 是每个 exp 参数最基本也是必选的参数,其作用是告诉 simplepwntools 需要利用的程序的路径。
timeout 等参数都是辅助性质的,用于配置 exp 的更多特性。
接下来的函数
connect 函数
connect 函数用于建立和程序的交互,返回的结果是一个 io 流对象,用于之后的接收和发送信息。
let io = p.connect()
send 和 recv 函数
发包(send)和收包(recv)两个函数为 exp 编写提供了一个流畅的交互接口。
io.send(payload) io.recv()
以上是简单的示例,在实际使用过程中,还可以直接在函数后面接 sendline 或者 recvline 表示一次完整的读写,像下面这样:
io.sendline("input") let received = io.recvline().toString() console.log(received)
gdb 调试
gdb 调试是 binary pwn 的基本技能之一,simplepwntools 也提供了 gdb 调试的接口,用于编写更加高级的 exp。
p.gdb.run(gdbscript)
gdb.run 函数需要传入一个 gdbscript,用于描述 gdb 的调试命令。比如:
pwn.gdb.run(` b *main+13 run x /10i $pc `)
执行 run 命令,会让程序跑起来,同时下一条指令地址会出现在 gdb 上方的第一行。
info proc mappings 可以查看当前程序的内存地址映射情况,ps aux 可以查看程序的进程号,以及当前进程的 pid,都十分有用。
总结
通过本文的讲解,读者可以初步了解 simplepwntools 的基本使用和部分高级用法,建议多使用和学习,好和其他工具搭配使用,做出不同层面的 exploit,不断挑战自己。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5b51ab1864dac66fd9