Python无法找到我可以在EIP溢出中看到的子字符串

时间:2019-04-12 18:13:05

标签: python-3.x security buffer-overflow

我有一个脚本用于自动化和理解应用程序的模糊测试。 我正在运行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

问题摘要

  1. 我生成了一个很长的非顺序字符串。
  2. 我已使用该主字符串的子字符串覆盖了EIP,并且可以在调试器中看到它
  3. 搜索时,在主字符串中找不到子字符串

1 个答案:

答案 0 :(得分:0)

所以我弄清楚了问题所在。显然,EIP值不大。因此,我要做的就是反转生成的字符串,从而解决了我的问题。

基本PICNIC错误!

>> s = bytearray.fromhex(eip_query).decode()
>> s
'8oC7'
>> s[::-1]
'7Co8'
>> pattern.find_offset(s[::-1])
1943