问题标签 [pwntools]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 pwntools 的 EOFError
尝试此 CTF 挑战时,我不断收到 EOFError。目标是接收一行,在末尾添加一个感叹号,然后将该行发回。这将成功完成循环 3-7 次,但随后给我一个 EOFError。有小费吗?
sockets - 导入 pwn 包时,pyinstaller 未转换(或生成损坏的 exe)
我正在使用pwn
as Client
/Server
而不是使用 socket 来处理反向 shell 项目,因为它在接收 ( recvuntil
) 消息时更舒服,但是当我尝试将其转换为EXE
使用pyinstaller
时onefile
它最终失败,生成损坏的 exe 或生成保留的 exe给出错误,我什至首先在控制台上测试了这个程序。
那么有没有办法让它工作甚至自己做pyinstaller
(如果我必须的话)?
我想不出比这更好的标题了,所以如果你有更好的评论它
我的 venv conda python 版本是 3.9.7
这是一个小Server
代码(这只是为了测试):
这是上述程序的测试运行:
这是pyinstaller
输出:
这是tryPwn
(目标程序)输出:
了解更多关于这里发生的事情的信息
python - 如何像使用 pwntools 获取 ELF 一样在 Python 中获取 PE 的核心文件?
如果你们中的任何人熟悉漏洞利用开发的基础知识,就会知道当您利用潜在的缓冲区溢出时,通常是为了找到“破坏”您要修改的特定寄存器的缓冲区偏移量,您发送这样的输入:
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag
然后通过使用调试器并将发现溢出到所需缓冲区位置的值传递给工具,您将获得偏移量以知道从哪里开始插入有效负载。
使用仅支持 ELF 文件的 pwntools,这可以自动化,使用cyclic(200, n=8)
和巧妙地跳过调试器步骤cyclic_find(core.read(core.rsp, 8), n=8)
。这是一个完整的例子:
但是,我至少不能使用 pwntools 获取 PE 文件的核心文件。有没有其他方法可以在 Python 中做到这一点?请注意,我并没有要求像使用 pwntools 那样抽象的方法,即使只是在 Python 中获取核心文件也是我需要的。我可以自己编写循环函数没问题。
python - 由于 UnsatisfiableError,conda-forge 无法安装 pwntools
我创建了一个新的 Conda Env:
然后,激活我的环境
然后,如anaconda docs(here)中所述,尝试安装pwntools:
我收到此错误消息:
我目前的规格:
conda-forge 已经在频道中。
这是我的环境(conda 列表)的详细信息
我并没有真正理解这个错误的含义,而且由于我不希望任何环境错误在接下来的六个月内因为一个糟糕的解决方法而在后面咬我,我更愿意寻求一些建议。
显然这个错误并不常见(我已经向 pwntools discord channel 寻求帮助)。
有人可以帮助我理解错误的含义以及可行的解决方法吗?
谢谢!
c - 如何在 pwndbg 中为使用 -g 选项编译的可执行文件打印更多代码行?
我想用于使用选项pwndbg
编译的可执行文件-g
,我想查看pwndbg
. 使用命令context code
仅显示 8 行代码:
不幸的是,我需要更多的行,并且该命令context code <number_of_lines>
不起作用。还有其他方法可以打印更多行代码吗?
security - 解码 getdents 系统调用的输出
这几天我正在尝试学习二进制利用。所以我遇到了一个挑战,我无法执行 shell(因为 seccomp),我也不知道标志的名称。所以我不得不使用getdents
列出所有目录。我写了这个小脚本:
然而,当我发送这个漏洞时,我得到一个奇怪的输出:
所以我的问题是如何解码这个输出?
python - pwntools:使用 gdb api 中断进程
运行时,我可以通过 Ctrl-Cgdb cmd
手动停止。cmd
这会调用调试器并让我检查内存。
在 pwntools 中,我可以附加 gdb,并且可以通过在 gdb 窗口中按 Ctrl-C 来手动停止该进程。我希望能够从 pwntools 脚本以编程方式执行此操作:类似于:
这不一定需要 pwntools 答案。GDB 有一个强大的 Python API,但我在其中找不到相当于“中断进程,好像有人按了 Ctrl-C”。有没有办法通过 GDB Python API 或 pwntools 方法来做到这一点?
gdb - gdbserver:缓存符号下载
我正在使用 gdbserver(由 pwntools 调用 pwndbg via 调用gdb.debug(exe.path)
),它开始每个会话“下载”符号。当然,这些符号是从 localhost “下载”的,因为一切都在本地运行。
这很好用,除了:
- 每次调用“下载”需要几秒钟(无缓存)
- “下载”用几十行填满屏幕
我该如何解决这些问题?要么缓存下载,所以它们不需要重复,或者至少抑制它们导致的几十行输出。
objdump - 有没有办法使用 pwn 工具在可执行文件中查找函数的地址?
假设我有一个简单的可执行文件,我想找到 main 的地址。通常,我从objdump
输出中获取地址,然后在我的pwn
脚本中使用它。我想让我的脚本更通用,而不使用objdump
. 有没有办法用 pwn 做到这一点?