我有一个脚本用于自动化和理解应用程序的模糊测试。 我正在运行vulnserver并模糊查找堆栈溢出的位置,然后生成一个唯一的字符串,然后将其再次发送以查找EIP被覆盖的位置。
我遇到的问题是,我确定在发送A
的初始集合2100时发生了溢出。从那里,我用下面的脚本生成一串连续的字符,摘录...
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2
问题是当EIP被以下内容覆盖时,我无法在生成的模式中找到EIP字符串
正在寻找字符串...
pattern.find(eip_string)
EIP值:8qC7
在IDLE中运行时,我可以看到它找到了现有的字符串,但是对于找不到/不存在的字符串返回了-1
。
str.find('Aa0')
0
str.find('8qC7')
-1
str.find('foo bar')
-1
我如何生成字符串或Python机制的其他问题? 如何解决此问题,以便可以在主字符串中找到EIP模式?
方法生成模式... 链接到Github
上的项目/方法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
问题摘要
答案 0 :(得分:0)
所以我弄清楚了问题所在。显然,EIP值不大。因此,我要做的就是反转生成的字符串,从而解决了我的问题。
基本PICNIC错误!
>> s = bytearray.fromhex(eip_query).decode()
>> s
'8oC7'
>> s[::-1]
'7Co8'
>> pattern.find_offset(s[::-1])
1943