Python 中的漏洞 - 操作十六进制字符串
我对 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在Python 2.6及更高版本中,您可以使用内置的
bytearray
类。要创建
bytearray
对象:要更改字节,您可以使用数组表示法引用它:
要就地反转
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:To alter a byte, you can reference it using array notation:
To reverse the
bytearray
in place, useb.reverse()
. To create an iterator that iterates over it in reverse order, you can use thereversed
function:reversed(b)
.You may also be interested in the new
bytes
class in Python 3, which is likebytearray
but immutable.不确定这是否是最好的方法......
或者可能更简单:
Not sure if this is the best way...
Or might be simpler:
在 Python 2.x 中,常规
str
值是二进制安全的。您可以使用 binascii 模块的b2a_hex
和a2b_hex
函数与十六进制相互转换。您可以使用普通的字符串方法来反转或以其他方式重新排列字节。但是,进行任何类型的算术都需要您使用
ord
函数获取各个字节的数值,然后使用chr
将结果转换回来,然后进行串联以重新组合修改后的字符串。对于更容易算术的可变序列,请使用带有类型代码
'B 的 array 模块'
。如果您从十六进制开始,则可以根据a2b_hex
的结果初始化这些值。In Python 2.x, regular
str
values are binary-safe. You can use the binascii module'sb2a_hex
anda2b_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, thenchr
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 ofa2b_hex
if you're starting from hexadecimal.