Python не может найти подстроку, которую я вижу в переполнении EIP - PullRequest
1 голос
/ 12 апреля 2019

У меня есть скрипт, который я использую для автоматизации и понимания фаззинга приложений. Я запускаю vulnserver и фаззинг, чтобы найти точку переполнения стека, а затем сгенерировать уникальную строку, которая затем будет отправлена ​​снова, чтобы определить, в какой момент EIP перезаписывается.

Проблема, с которой я столкнулся, заключается в том, что я определил, что переполнение происходит при отправке начального набора 2100 из A s. Оттуда я генерирую строку последовательных символов с помощью сценария ниже, выдержка ...

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2

Проблема в том, что когда EIP перезаписывается с помощью приведенного ниже, я не могу найти строку EIP в сгенерированном шаблоне

Ищу строку ...

pattern.find(eip_string) 

Значение EIP asciie: 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 голосов
/ 17 апреля 2019

Итак, я понял, в чем проблема.Очевидно, что значение EIP было немного порядковым.Из-за этого все, что мне нужно было сделать, - это отменить произведенную строку, и это решило мою проблему.

Basic PICNIC error!

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