Я пытаюсь разработать свой первый эксплойт на основе стека MIPS, используя технику цепочки ROP без особого успеха ... У меня не получается первый гаджет ROP, и я не могу понять, почему. Я слежу за фреймворком Python Bowcaster и некоторыми сообщениями в блогах, которые я искал. Поскольку переполнение, которое я обнаружил, позволяет мне перезаписывать слишком мало регистров S (только S0 и S8), мне нужно перейти к эпилогу функции, который установит S0-S8 из стека. Я использовал IDA PRO с плагином mipsrop для поиска гаджетов. Я пробовал гаджеты как из уязвимого бинарного файла, так и из libc, но с тем же результатом. Я вижу в GDB, что регистр $ RA правильно настроен на адрес, который я выбрал с помощью mipsrop, но по какой-то причине регистры S0-S8 не перезаписываются. ASLR здесь не проблема, поскольку я могу подтвердить это, запустив ldd несколько раз. Я выбрал гаджет с адресом 000112EC, используя IDA PRO, который выглядит так: (Я не могу размещать больше изображений - репутация)
LOAD:000112EC lw $ra, 0x48+var_4($sp)
LOAD:000112F0 lw $fp, 0x48+var_8($sp)
LOAD:000112F4 lw $s7, 0x48+var_C($sp)
LOAD:000112F8 lw $s6, 0x48+var_10($sp)
LOAD:000112FC lw $s5, 0x48+var_14($sp)
LOAD:00011300 lw $s4, 0x48+var_18($sp)
LOAD:00011304 lw $s3, 0x48+var_1C($sp)
LOAD:00011308 lw $s2, 0x48+var_20($sp)
LOAD:0001130C lw $s1, 0x48+var_24($sp)
LOAD:00011310 lw $s0, 0x48+var_28($sp)
LOAD:00011314 jr $ra
LOAD:00011318 addiu $sp, 0x48
LOAD:00011318 # End of function scandir
Я добавил к нему базовый адрес libc (echo 'obase = 16; ibase = 16; 2AABE000 + 112EC' | bc) и получил 0x2AACF2EC. Поскольку это процессор Big Endian, я отправил такую строку:
Ниже вы можете увидеть полный вывод GDB:
Как видите, были перезаписаны только S0 и S8, и ни один из регистров S не был восстановлен из стека.
Что я здесь делаю не так? Пожалуйста помоги :)
некоторый вывод checksec.sh:
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
No RELRO No canary found NX enabled No PIE No RPATH No RUNPATH /bin/vulnbin
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
Full RELRO No canary found NX enabled DSO No RPATH No RUNPATH /lib/libc.so.0