728x90

System Hacking 21

CVE-2025-6218 분석

화이트햇 스쿨 3기 프로젝트 하면서 winrar 취약점을 발견하게 되어서 어떻게 찾게 되었고, 분석은 어떻게 했는지에 대한 글입니다.제 글이 이 글을 읽는 여러분에게도 도움이 되었으면 좋겠습니다. 취약점을 발견한 방법A 프로그램에서 path traversal 우회 했던 방법을 가지고, 압축 프로그램 테스트를 하다가 운이 좋게 발견을 했습니다.(그때 새벽이 였는데, 10시간 투자해서 명예와 돈을 가지게 되었네요. 심지어 다른 압축 프로그램에서 되는 것도 있고)그래서, A 프로그램에서 취약점을 발견한 방법이 곧 취약점을 발견한 방법이 되겠습니다A 프로그램에서는 .. 만 필터링 하고, ..(공백)을 넣으면 우회를 할 수 있지 않을까? 하는 단순한 생각으로 접근을 했습니다.하지만 A 프로그램은 압축 프로그램..

System Hacking/cve 2025.08.07

Linux NX & ASLR & Canaries & PIE

NX프로레스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되고, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다ex) 공격자가 Heap, Stack 영역에 shellcode를 저장해서 실행하기 위해서는 해당 영역에 실행권한이 있어야한다.NX 비활성화 옵션 : gcc -z execstack ASLRASLR(Address Space Layout Randomization)스택, 힙, 라이브러리, 등의 주소를 랜덤한 영역에 배치하여, 공격에 필요한 target address를 예측하기 어렵게 만든다.프로그램이 실행 될 때마다 각 주소들이 변경이 된다.echo 0 > /proc/sys..

push & pop & pushad

push스택에 값을 저장한다. push 후에는 스택이 4바이트 커지기 때문에 esp 레지스터는 4바이트 감소한다.(스택은 높은 주소에서 낮은 주소로 할당되기 때문에)PUSH EBP // EBP의 값을 스택에 PUSHpush 5 // 5를 스택에 PUSH POPPUSH와는 반대로 스택의 끝에 저장된 값을 가져온다. POP 후에는 스택이 4바이트 줄어들기 때문에 ESP 레지스터가 4바이트 증가한다. POP EBP // 스택 끝의 값을 꺼내서 EBP에 저장POP ECX // 스택 끝에 값을 꺼내서 ECX에 저장 pushad범용 레지스터의 값들을 스택에 저장하는 명령어 OPERAND가 없다. 스택에는 레지스터의 값이 차례대로 저장된다.저장되는 순서는 eax -> ecx -> edx -> ebx -> esp ->..

SFP

Saved Frame Pointer의 약자로 실행될 때 이전의 EBP 값을 가지고 있다.EBP는 현재 스택의 가장 바닥을 가리키는 포인터로 새로운 함수가 호출되면 EBP 레지스터 값이 지금까지 사용하던 스택 꼭대기의 위에 위치하게 되고, 새로운 스택이 시작된다. EBP는 새로운 함수가 호출되거나 현재 실행중인 함수가 종료되어 리턴될 때 마다 값이 달라진다. 현재 함수가 끝나면 이전 함수의 ebp가 필요하게 되는데, 이 이전 함수의 ebp를 저장하는 공간이 SFP이다.

System Hacking 2025.07.01

[Windows] Function Pointer Overwrite

static char log_buf[500] = {0,};static int (* log_func)(void) = NULL;strcpy(log_buf, buf);log_func();static 변수를 사용하면 메모리의 data 섹션에 변수가 할당된다. data 섹션은 힙 메모리와 마찬가지로 순차적으로 사용되고 data 섹션 공격 기법도 힙과 거의 동일하다. 버퍼에 500바이트 이상의 문자열이 입력되면 strcpy가 할당된 버퍼를 모두 채운 후 추가적으로 메모리들을 덮어쓰게 할 것이다. 스택과 같이 EBP, RET가 존재하지 않으므로 덮어쓴다 해서 무조건 공격에 성공하는 것은 아니지만 이와 같이 함수 포인터를 덮어쓸 수 있을 경우, 기존의 포인터가 가리키고 있던 주소 값을 원하는 주소로 변경할 수 있다.쉘..

[Windows] Heap Overflow

힙 메모리는 스택과 다르게 RET, SEH가 존재하지 않으므로 공격을 성공시키기 위해 여러가지 다양한 기법들이 동원됩니다.주로 힙 메모리에 존재하는 다른 오브젝트, 포인터 및 헤더 등을 덮어쓰는 방법으로 공격합니다. 예제 코드#include #include #include int main() { char* buf1 = (char*)malloc(0x20); char* buf2 = (char*)malloc(0x20); printf("buf1: %p\n", buf1); printf("buf2: %p\n", buf2); memset(buf1, 'A', 0x30); free(buf1); free(buf2); return 0;}32바이트로 동적할당을 합니다.그리고 memset의 buf1의 48바이트를 채워서 buf..

[Windows] Stack Buffer Overflow

1) Stack Buffer Overflow메모리 경계를 검사하지 않는 함수 사용으로 인해 스택을 덮어쓰게 되어 주로 발생한다. 아주 고전적인 취약점이지만 아직도 많이 발생하고 있으며 실제로 퍼징을 하다 보면 여전히 많이 발견된느 취약점이다.함수는 각각의 스택 프레임을 가지고, 함수 호출 시 저장된 SFP(Saved Frame Pointer), RET(Return address)를 이용하여 호출 이전의 코드로 돌아간다. 실습 소스코드#include #include #include int main(int argc, char* argv[]){ char readbuf[2000] = { 0, }; char printbuf[500] = { 0, }; printf(" # text reader #\n"); if (a..

Windbg

Microsoft 사에서 제공하는 디버거이다. 윈도우 프로그램 디버깅 시 유용하고 커널 디버깅을 지원한다 .명령어 줄 기반의 디버거라 다른 디버거에 비해 불편하다는 단점이 있지만, 익숙해지면 오히려 더 빠르고 편리하다GO : break point 위치까지 프로그램을 실행Step Out : 현재 함수를 끝까지 실행 후 리턴Step Into : instruction 한개 실행, 만약 함수를 호출하면 함수 내부로 진입Step Over : instruction 한개 실행, 만약 함수를 호출하면 해당 함수를 끝까지 실행후 리턴 r : 레지스터 정보 표시u : 언어셈블dc : 메모리를 double word 배열로 보여주고 ASCII로 해석한다.ba : windbg의 breakpoint는 특정 메모리에 접근할 때 걸..

System Hacking 2025.05.17
728x90