Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python找不到我在EIP溢出中看到的子字符串_Python 3.x_Security_Buffer Overflow - Fatal编程技术网

Python 3.x Python找不到我在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

我有一个脚本,我正在使用它来自动化和理解应用程序模糊化。 我正在运行vulnserver和fuzzing来查找堆栈溢出的点,然后生成一个唯一的字符串,然后再次发送该字符串以定位EIP被覆盖的点

我遇到的问题是,我已确定在发送
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值是小端值。因此,我所要做的就是反转生成的字符串,这就解决了我的问题

    基本错误


    所以我明白了问题所在。显然,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