Python中操纵十六进制字符串的漏洞利用

2024-04-26 05:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还很陌生,正在尝试移植我为堆栈溢出编写的一个简单的漏洞攻击(只是一个nop sled、shell代码和返回地址)。这不是为了邪恶的目的,而是为了在大学里做一次安全讲座。在

对于一个十六进制字符串(deadbeef),最好的方法是:

  • 将其表示为一系列字节
  • 加减值
  • 颠倒顺序(对于x86内存布局,即efbeadde)

对于使用python编写漏洞攻击的常见任务,我们也非常感谢。在


Tags: 方法字符串代码目的字节堆栈地址shell
3条回答

在python2.x中,常规的str值是二进制安全的。您可以使用binascii模块的b2a_hex和{}函数来转换和转换十六进制。在

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

对于算术更简单的可变序列,请使用类型代码为'B'array模块。如果从十六进制开始,可以从a2b_hex的结果初始化这些值。在

在Python2.6及更高版本中,可以使用内置的^{}类。在

要创建bytearray对象:

b = bytearray.fromhex('deadbeef')

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

^{pr2}$

要反转bytearray,请使用b.reverse()。要创建一个按相反顺序对其进行迭代的迭代器,可以使用reversed函数:reversed(b)。在

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

不知道这是不是最好的方法。。。在

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]

或者更简单:

^{pr2}$

相关问题 更多 >