基本问题:如何在 GDB / NC 中输入不可打印的十六进制值?

逆向工程 数据库 十六进制
2021-06-26 19:09:35

我正在处理 CTF 挑战,这是对粉碎堆栈的介绍。我有在 GDB 中工作的二进制文件,并且可以用可打印的字符覆盖堆栈的正确部分。

然而,挑战在于二进制文件期望 0xdeadbeef 位于正确的堆栈位置 - 我对如何输入该值有点困惑。我在网上看到过一些示例,其中使用 python 提供十六进制值作为二进制文件的参数 - 但是这个特定的二进制文件运行,打印一条查询消息,然后需要输入,而不是仅仅读取一个参数。

处理这个问题的最佳方法是什么,最初在 GDB 中确认我的方法,然后使用 NC 接收实际标志?我在 Ubuntu 上工作。

很抱歉问一个基本问题,但这一直让我绊倒。

谢谢!

1个回答

好吧,您有多种选择可以这样做。这是最简单的两个:

通过管道提供输入:

$ python -c "print '\xde\xad\xbe\xef'" | ./binary
$ python -c "print 0xdeadbeef" | ./binary

从 GDB 内部提供输入:

(gdb) r <<< $(python -c "print '\xde\xad\xbe\xef'")
(gdb) r <<< $(python -c "print 0xdeadbeef")