목록Security/System Hacking (2)
수호의 메모장

execve('/bin/sh', 0, 0); 위 코드를 실행하면 '/bin/sh'이 실행되면서 shell을 획득할 수 있다. 이를 어셈블리어로 작성해보면 아래와 같다: mov rax,0x68732f6e69622f push rax mov rdi,rsp xor rsi,rsi xor rdx,rdx mov rax,59 syscall https://x64.syscall.sh/ x64.syscall.sh System calls for x64 x64.syscall.sh syscall table은 위 사이트에서 확인이 가능하다. 이를 nasm을 사용하여 object 파일을 만들 수 있다: objdump로 shellcode를 확인할 수 있다: shellcode를 실제 C 코드로 실행해보자: #include #includ..

보호 기법이 적용돼 있지 않는 바이너리다. Segmentation fault가 발생하는 것으로 보아 BOF가 발생하는 것을 알 수 있다. main 함수를 의사코드로 표현하면 아래와 같다: int main() { func(0xDEADBEEF); return 0; } func의 의사코드로 표현하면 아래와 같다: void func(int a1){ char buf[32]; printf("overflow me : "); gets(buf); if(a1 == 0x41424344){ system("/bin/sh"); } else{ printf("Nah..\n"); } } func의 스택을 그리면 아래와 같다 0x080491a6 : push ebp 0x080491a7 : mov ebp,esp 0x080491a9 : pu..