시스템 해킹(8)
-
[시스템 해킹] 드림핵_Return Address Overwrite
우선 rao파일 실행. 짧은 문자열은 잘 종료되나 문자열이 길면 segmentation fault 발생. 소스코드상 취약점 찾기 문제 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s..
2024.03.20 -
[시스템 해킹] 드림핵_Shellcode
Exploit ; 상대 시스템을 공격하는 것. 익스플로잇 공격기법; 셸코드 Shellcode; 익스플로잇을 위해 제작된 어셈블리 코드 조각 orw 셸코드 작성 ; 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드. ##c언어 char buf[0x30]; int fd = open("/tmp/flag", RD_ONLY, NULL); ##어셈블리 #push 0x67 #mov rax, 0x616c662f706d742f #push rax #mov rdi, rsp ; rdi = "/tmp/flag" #xor rsi, rsi ; rsi = 0 ; RD_ONLY #xor rdx, rdx ; rdx = 0 #mov rax, 2 ; rax = 2 ; syscall_open #syscall ; open("/tmp/flag",..
2024.03.01 -
[프로젝트] AI를 활용한 악성코드 분류기_트로이 목마란
프로젝트를 시작하기에 앞서 악성코드 4가지 종류를 하나씩 맡아 조사해오기로 했다. 바이러스/웜/트로이목마/스파이웨어 중 나는 트로이목마를 맡았다. 트로이 목마란? 트로이 전쟁 당시 그리스인들이 트로이성에 입성해 전쟁에서 승리할 때 사용. 표적이 안전하게 보호된 요새나 장소로 적을 초대하게 만드는 모든 속임수나 책략을 의미. 악성 컴퓨터 프로그램으로의 트로이 목마는 즉, 정상적인 프로그램 같지만 실행하면 악성코드를 실행시키는 프로그램이다. 사용자 스스로 방어망 안쪽으로 들어오도록 유도. - 기술적인 측면이 아닌 사회공학 기법(신뢰를 기반으로 사람을 속임.)의 형태. - 백도어로서 많이 사용됨. - 쉽게 발견되기 힘들지만, 무거워진 CPU와 네트워크 사용으로 느려지는 현상이 나타나긴 함. - 바이러스나 웜과..
2024.02.24 -
[C언어] 스택(POP, PUSH, PEEK 구현), 레지스터, 스택프레임
C언어는 써본 적이 없어서 환경설정부터 해주었다. https://blog.naver.com/nms200299/222129689157 VSCode(비주얼스튜디오 코드) C언어 개발환경 구축 1. MinGW 설치 MinGW는 윈도우용 GCC 컴파일러로, VSCode(비주얼스튜디오 코드)에서 C언어 개... blog.naver.com 1. 스택(POP, PUSH, PEEK 구현) 우선 C언어에는 리스트라는게 없고 배열?이라는 것만 있다고 한다.. 그래서 구조체로 스택처럼 보이는 배열을 만들어 준 후 스택처럼 사용해주면 된다. #include #include #define MAX_SIZE 100 // 스택 구조체 정의 typedef struct { int items[MAX_SIZE]; int top; } Sta..
2024.02.12 -
[시스템 해킹] 02-2. Computer Science-x86 Assembly
x64 어셈블리 언어 기본구조 -동사에 해당하는 명령어 Opcode, 목적어에 해당하는 피연산자 Operand Opcode [피연산자 Operand] - 상수, 레지스터, 메모리 메모리 피연산자 - [] 으로 둘러싸인 것, 앞에 크기 지정자 TYPE PTR이 추가될 수 있음. TYPE; BYTE(1byte), WORD(2), DWORD(4), QWORD(8) [Opcode] Opcode : 데이터 이동 ; 어떤 값을 레지스터나 메모리에 옮기도록 지시 Opcode : 산술 연산 ; 덧셈, 뺄셈, 곱셈, 나눗셈 연산을 지시 Opcode : 논리 연산 ; and, or, xor, neg 등의 비트 연산. 비트 단위로 연산. Opcode : 비교 ; 두 연산자의 값을 비교하고, 플래그 설정 ## 연산의 결과를 ..
2024.01.28 -
[시스템 해킹] 02-1. Computer Science-Linux Memory Layout
세그먼트 ; 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 용도별로 메모리를 나누면 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점. 권한: 읽기, 쓰기, 실행 코드 세그먼트 (==텍스트 세그먼트) ; 실행 가능한 기계 코드가 위치하는 영역. 읽기/실행 권한. 쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기 쉬워짐. * 정수 31337을 반환하는 main함수가 컴파일 되면 554889e5b8697a00005dc3라는 기계 코드로 변환되는데, 이 기계 코드가 코드 세그먼트에 위치하게 됩니다. int main() { return 31337; } 데이터 세그먼트 ; 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치. 읽기 권한+ -쓰기 가능한 세그먼트: 전역변수 처럼 실행되면서 가변..
2024.01.28