npm 包 simplepwntools 使用教程

阅读时长 4 分钟读完

简介

simplepwntools 是一款基于 Node.js 平台的 npm 包,它提供了一系列方便的工具函数,用于编写和调试二进制文件的利器。同时它也支持 x64 和 x86 的架构,用户可以根据自己的需求进行选择。

安装

安装 simplepwntools 只需要使用 npm 或者 yarn 即可:

使用

入门示例

下面是一个简单的利用 simplepwntools 编写的 exp:

-- -------------------- ---- -------
----- - ---- ----- ------ - - -------------------------

----- ----------- - ---------
----- ---- - -------
----- ------- - -----------

--- - - -----
    ------------ ------------
    ----- -----
    -------- -------
--

-- -- ---- -----
--- -------- - ------------------------------- ----------------
----------------- ----- - - ---------

-- -- -----------
--- -- - -----------
--- -------- - --------------------
---------------------

-- -- -------
--- ------- - ----------------
------- -- -------------- - ---------------

-- - ------ -- -------
--------------------

-- -- ------ -----
-------- - --------------------
---------------------

-- ----
----------

以上示例代码演示了如何使用 simplepwntools 跑出一份简单的 exploit,可以看出来,simplepwntools 中几乎所有的工具函数都带有一个固定的参数 p,它用来指定当前利用的平台和相应的进程信息。

pwn 函数

pwn 函数中,最核心的便是交互式 shell 的开启:

pwn 函数支持以下几个参数:

其中,processName 和 port 只需要指定选一个即可,具体哪一个要依赖于二进制文件的类型,比如说:

  • 如果是一个纯本地(local)的程序,则需要指定 processName;
  • 如果是一个需要网络通讯的程序(比如要求客户端使用 nc 连接到程序),则需要指定 port。

elfPath 是每个 exp 参数最基本也是必选的参数,其作用是告诉 simplepwntools 需要利用的程序的路径。

timeout 等参数都是辅助性质的,用于配置 exp 的更多特性。

接下来的函数

connect 函数

connect 函数用于建立和程序的交互,返回的结果是一个 io 流对象,用于之后的接收和发送信息。

send 和 recv 函数

发包(send)和收包(recv)两个函数为 exp 编写提供了一个流畅的交互接口。

以上是简单的示例,在实际使用过程中,还可以直接在函数后面接 sendline 或者 recvline 表示一次完整的读写,像下面这样:

gdb 调试

gdb 调试是 binary pwn 的基本技能之一,simplepwntools 也提供了 gdb 调试的接口,用于编写更加高级的 exp。

gdb.run 函数需要传入一个 gdbscript,用于描述 gdb 的调试命令。比如:

执行 run 命令,会让程序跑起来,同时下一条指令地址会出现在 gdb 上方的第一行。

info proc mappings 可以查看当前程序的内存地址映射情况,ps aux 可以查看程序的进程号,以及当前进程的 pid,都十分有用。

总结

通过本文的讲解,读者可以初步了解 simplepwntools 的基本使用和部分高级用法,建议多使用和学习,好和其他工具搭配使用,做出不同层面的 exploit,不断挑战自己。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5b51ab1864dac66fd9

纠错
反馈