Python 中的漏洞 - 操作十六进制字符串

发布于 2024-11-05 18:11:11 字数 267 浏览 7 评论 0原文

我对 python 很陌生,并试图移植我为堆栈溢出编写的一个简单漏洞(只是一个 nop 雪橇、shell 代码和返回地址)。这并不是出于邪恶目的,而是为了在大学进行安全讲座。

给定一个十六进制字符串 (deadbeef),最好的方法是什么:

  • 将其表示为一系列字节
  • 添加或减去一个值
  • 反转顺序(对于 x86 内存布局,即 efbeadde)

有关利用编写的常见任务的任何提示和技巧python 也受到极大的赞赏。

I'm quite new to python and trying to port a simple exploit I've written for a stack overflow (just a nop sled, shell code and return address). This isn't for nefarious purposes but rather for a security lecture at a university.

Given a hex string (deadbeef), what are the best ways to:

  • represent it as a series of bytes
  • add or subtract a value
  • reverse the order (for x86 memory layout, i.e. efbeadde)

Any tips and tricks regarding common tasks in exploit writing in python are also greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一桥轻雨一伞开 2024-11-12 18:11:11

在Python 2.6及更高版本中,您可以使用内置的 bytearray 类。

要创建 bytearray 对象:

b = bytearray.fromhex('deadbeef')

要更改字节,您可以使用数组表示法引用它:

b[2] += 7

要就地反转 bytearray,请使用 b.reverse()< /代码>。要创建一个以相反顺序迭代的迭代器,您可以使用 reversed 函数:reversed(b)

您可能还对 Python 3 中新的 bytes 类感兴趣,它类似于 bytearray 但不可变。

In Python 2.6 and above, you can use the built-in bytearray class.

To create your bytearray object:

b = bytearray.fromhex('deadbeef')

To alter a byte, you can reference it using array notation:

b[2] += 7

To reverse the bytearray in place, use b.reverse(). To create an iterator that iterates over it in reverse order, you can use the reversed function: reversed(b).

You may also be interested in the new bytes class in Python 3, which is like bytearray but immutable.

尐籹人 2024-11-12 18:11:11

不确定这是否是最好的方法......

hex_str = "deadbeef"
bytes = "".join(chr(int(hex_str[i:i+2],16)) for i in xrange(0,len(hex_str),2))
rev_bytes = bytes[::-1]

或者可能更简单:

bytes = "\xde\xad\xbe\xef"
rev_bytes = bytes[::-1]

Not sure if this is the best way...

hex_str = "deadbeef"
bytes = "".join(chr(int(hex_str[i:i+2],16)) for i in xrange(0,len(hex_str),2))
rev_bytes = bytes[::-1]

Or might be simpler:

bytes = "\xde\xad\xbe\xef"
rev_bytes = bytes[::-1]
何其悲哀 2024-11-12 18:11:11

在 Python 2.x 中,常规 str 值是二进制安全的。您可以使用 binascii 模块的 b2a_hexa2b_hex 函数与十六进制相互转换。

您可以使用普通的字符串方法来反转或以其他方式重新排列字节。但是,进行任何类型的算术都需要您使用 ord 函数获取各个字节的数值,然后使用 chr 将结果转换回来,然后进行串联以重新组合修改后的字符串。

对于更容易算术的可变序列,请使用带有类型代码 'B 的 array 模块'。如果您从十六进制开始,则可以根据 a2b_hex 的结果初始化这些值。

In Python 2.x, regular str values are binary-safe. You can use the binascii module's b2a_hex and a2b_hex functions to convert to and from hexadecimal.

You can use ordinary string methods to reverse or otherwise rearrange your bytes. However, doing any kind of arithmetic would require you to use the ord function to get numeric values for individual bytes, then chr to convert the result back, followed by concatenation to reassemble the modified string.

For mutable sequences with easier arithmetic, use the array module with type code 'B'. These can be initialized from the results of a2b_hex if you're starting from hexadecimal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文