У меня есть скрипт, который я использую для автоматизации и понимания фаззинга приложений.
Я запускаю 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
Краткое описание проблемы
- Я сгенерировал длинную непоследовательную строку.
- Я перезаписал EIP, используя эту подстроку основной строки, и вижу ее в отладчике
- При поиске подстрока не может быть найдена в основной строке