본문 바로가기

전체 글

(153)
[SWING] Pwnable 04 - ptmalloc2
[SWING] Pwnable 04 - Format String Bug Format String 포맷 스트링을 인자로 사용하는 C언어 함수: printf, scanf, fprintf, fscanf, sprintf, sscanf 등 함수 이름이 f (formatted)로 끝나고 문자열을 다루는 함수 %[parameter][flags][width][.precision][length]type 형식 지정자(specifier) : 인자를 어떻게 사용할지 지정 형식 지정자 설명 d 부호있는 10진수 정수 s 문자열 x 부호없는 16진수 정수 n 인자에 현재까지 사용된 문자열의 길이를 저장 p void형 포인터 Format String Bug 포맷 스트링 함수를 잘못 사용하여 발생하는 버그, FSB 포맷 스트링을 사용자가 입력할 수 있을 때, 공격자는 레지스터/스택을 읽고, 임의 주소 ..
Dreamhack CTF
[SWING] Pwnable 03 - PLT&GOT 라이브러리 링크 #include int main() { puts("Hello, world!"); return 0; } PLT&GOT Procedure Linkage Table & Global Offset Table 라이브러리에서 동적 링크된 심볼의 주소를 찾을 때 사용하는 테이블 runtime resolve 바이너리 실행 -> ASLR이 라이브러리 임의 주소에 매핑 -> 라이브러리 함수 호출 시 함수 이름으로 라이브러리에서 심볼 탐색 -> 함수 정의 발견된 주소로 실행 흐름 옮김 반복적으로 호출되는 함수의 정의 매번 탐색하는 것은 비효율적 -> ELF는 GOT 테이블에 resolve된 함수의 주소를 저장 -> 나중에 함수 호출되면 저장된 주소 꺼내서 사용 #include int main() { puts(..
[SWING] Pwnable 03 - NX&ASLR 하나의 강력한 보안 장비에 의존 ASLR, NX ASLR Address Space Layout Randomization 바이너리가 실행될 때마다 스택,힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법 커널에서 지원 리눅스에서는 위의 명령어 결과가 0, 1, 2 중에 하나로 확인된다. ASLR이 적용되는 메모리 영역 0 No ASLR ASLR 적용하지 않음 1 Conservative Randomization 스택, 힙, 라이브러리, vdso 등 2 Conservative Randomization + brk 1의 영역 + brk로 할당한 영역 #include #include #include int main() { char buf_stack[0x10]; // 스택 버퍼 char *buf_heap =..
[SWING] Pwnable 03 - 스택 카나리 Stack Canary: 스택 오버플로우로부터 반환 주소를 보호 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 에필로그에서 해당 값의 변조를 확인하는 보호 기법 변조가 확인될시 프로세스 강제 종료 스택 버퍼 오버플로우로 반환 주소를 덮으려면 필연적으로 카나리를 덮어야 하기에, 카나리 값을 모르는 공격자는 카나리 값을 변조하게 된다. 이 때 에필로그에서 변조가 확인되어 공격자는 실행 흐름을 획득하지 못한다. 산업혁명 시기에 광부들이 탄광에 들어갈 때 같이 들어갔던, 일산화탄소 유출에 민감하게 반응하는 카나리아에서 유래한 작명다운 보호 기법이다. 카나리 작동 원리 카나리 정적 분석 #include int main() { char buf[8]; read(0, buf, 32); ret..
[SWING] Pwnable 02 - Stack Buffer Overflow 오버플로우는 세계에서 4번째로 많이 발견된 취약점이다. 스택 오버플로우: 스택이 너무 많이 확장되어서 발생하는 버그 스택 버퍼 오버플로우: 버퍼 크기보다 많은 데이터가 입력되어 발생하는 버그 버퍼 오버플로우 Buffer: 완충 장치라는 뜻으로, 컴퓨터에서는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소 데이터 처리 속도가 다른 장치 사이를 오가는 데이터를 임시로 저장 (ex. 키보드 입력 속도보다 느리게 데이터가 처리되는 프로그램에서 데이터 유실을 방지) 버퍼링이 여기서 유래 버퍼 오버플로우는 스택의 버퍼에서 발생하는 오버플로우이다. 버퍼는 메모리상에 연속적으로 할당되는 것이 일반적이므로, 어떤 버퍼가 넘치면 뒤에 있는 버퍼들의 값이 조작될 위험이 있다. 중요 데이터 변조 #include #inc..
[SWING] Pwnable 01 - gdb, pwntools 설치 gdb 설치 https://github.com/pwndbg/pwndbg 버전 업데이트를 해야하나? 아래 링크를 참고해서 22.04로 업데이트를 해주었다. https://jjeongil.tistory.com/2105 https://askubuntu.com/questions/1483400/ubuntu-update-to-20-04-failed 용량이 부족해서 용량도 늘려줬다. 힘들었다... [리눅스 개념] 디스크 용량 확장방법 :: SEOULSENSE (tistory.com) VM 리눅스 디스크 용량 확장하기 - 달소씨의 하루 (dalso.org) yum 안 쓰고 apt 쓰긴 했는데... gparted 깔았고... sudo: yum: command not found 해결 - ubuntu nginx에 yum 설..