Python 3.x Python找不到我在EIP溢出中看到的子字符串
我有一个脚本,我正在使用它来自动化和理解应用程序模糊化。 我正在运行vulnserver和fuzzing来查找堆栈溢出的点,然后生成一个唯一的字符串,然后再次发送该字符串以定位EIP被覆盖的点 我遇到的问题是,我已确定在发送Python 3.x Python找不到我在EIP溢出中看到的子字符串,python-3.x,security,buffer-overflow,Python 3.x,Security,Buffer Overflow,我有一个脚本,我正在使用它来自动化和理解应用程序模糊化。 我正在运行vulnserver和fuzzing来查找堆栈溢出的点,然后生成一个唯一的字符串,然后再次发送该字符串以定位EIP被覆盖的点 我遇到的问题是,我已确定在发送As的初始集2100时发生溢出。从那里我用下面的脚本生成一个连续字符字符串,一个摘录 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2 问题是,当EIP被以下内容覆盖时,我无法在生成的模式中找到EIP字符串 正在寻找字符串 pattern.fi
A
s的初始集2100时发生溢出。从那里我用下面的脚本生成一个连续字符字符串,一个摘录
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2
问题是,当EIP被以下内容覆盖时,我无法在生成的模式中找到EIP字符串
正在寻找字符串
pattern.find(eip_string)
EIP ASCIE值:8qC7
当在空闲状态下运行时,我可以看到它找到现有字符串,但对于无法找到/不存在的字符串,它返回-1
str.find('Aa0')
0
str.find('8qC7')
-1
str.find('foo bar')
-1
我是如何生成字符串的问题,还是Python机制的问题?
如何修复此问题,以便在主字符串中找到EIP模式
方法生成模式。。。
链接到上的项目/方法
def创建_模式(自身,长度):
索引向上,索引向下,整数索引=0,0,0
int_list=list(范围(0,10))
整数限值=len(整数列表)-1#9
char\u list=string.ascii\u小写
字符限制=len(字符列表)-1#25
模式=“”
而len(模式)<长度:
如果整数索引字符限制:
索引_up=0
self.pattern=模式
返回模式
问题摘要
所以我明白了问题所在。显然,EIP值是小端值。因此,我所要做的就是反转生成的字符串,这就解决了我的问题 基本错误
所以我明白了问题所在。显然,EIP值是小端值。因此,我所要做的就是反转生成的字符串,这就解决了我的问题 基本错误
那么问题到底是什么,目前还不清楚。@l'l'l我看到写入EIp的子字符串似乎不存在于最初生成的字符串中。您如何将子字符串放入
EIp
?如果你复制了它,我想它一定是原始字符串。@l'l'l好吧,我就是这么想的!我不明白为什么在你的例子中永远找不到8qC7
,我不认为应该是8qC9
,因为你的数字总是顺序的。可能会显示另一个示例,说明您正在获取并放入EIP
中,然后进行搜索……因此,问题到底是什么,目前尚不清楚。@l'l'l我可以看到写入EIP的子字符串在最初生成的字符串中似乎不存在。您如何将子字符串放入EIP
?如果你复制了它,我想它一定是原始字符串。@l'l'l好吧,我就是这么想的!我不明白为什么在你的例子中永远找不到8qC7
,我不认为应该是8qC9
,因为你的数字总是顺序的。可能会显示另一个示例,说明您正在将哪些内容放入EIP
,然后搜索。。。
def create_pattern(self, length):
index_up, index_down, int_index = 0, 0, 0
int_list = list(range(0, 10))
int_limit = len(int_list)-1 # 9
char_list = string.ascii_lowercase
char_limit = len(char_list)-1 # 25
pattern = ''
while len(pattern) < length:
if int_index <= int_limit:
new_sequence = char_list[index_up].capitalize() + char_list[index_down] + str(int_list[int_index])
pattern = pattern + new_sequence
int_index += 1
else:
int_index = 0
if index_down <= char_limit:
index_down += 1
if index_down >= char_limit:
index_down = 0
index_up += 1
if index_up > char_limit:
index_up = 0
self.pattern = pattern
return pattern
>> s = bytearray.fromhex(eip_query).decode()
>> s
'8oC7'
>> s[::-1]
'7Co8'
>> pattern.find_offset(s[::-1])
1943