
[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? (3) 정리
2021. 3. 13. 02:09
Hacking/Pwnable
DEBUGGING (IDA, GDB 사용) 우리는 이미 tomato.c 소스가 있지만, 보통 소스는 잘 주지 않기에 없다는 가정하에 디버깅을 해보겠다. IDA로 취약점 발견 헥스레이라는 강력한 기능을 제공하는 디스어셈블러이다. 헥스레이는 바이너리를 디컴파일해서 원본 코드와 흡사한 소스를 떨궈준다. F5 단축키를 누르면 다음과 같이 디컴파일한 소스(pseudocode)가 나온다. IDA에서 8번째 라인을 보면, buffer overflow 취약점이 나는 것을 쉽게 확인할 수 있다. strcpy를 할 때 복사 버퍼의 길이를 검증하지 않기에 버퍼 크기인 10보다 더 넣어줘서 bof를 일으켜 num의 값을 1로 바꾸면 될 것으로 보인다. (strcpy는 버퍼 오버플로우 취약점이 발생할 가능성이 농후하기 때문에 ..

[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? (2) 정리
2021. 3. 12. 19:03
Hacking/Pwnable
tomato.c 파일은 strcpy를 할 때 복사 버퍼의 길이를 검증하지 않기에 버퍼 크기인 10보다 더 넣어줘서 bof를 일으켜 num의 값을 1로 바꾸면 될 것으로 보인다. 그리고 실습 환경을 최대한 똑같이 해주기 위해 다음과 같이 몇 가지 보호 기법들을 해제해서 컴파일 해주었다. gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pie -o tomato tomato.c -fno-stack-protector 옵션을 포함하는 이유 gcc가 스택을 보호하기 위해 ‘canary’라는 것을 삽입한다. 함수 내에서 사용하는 스택 프레임과 return address 사이에 'canary'를 넣는 것이다. 그리고 Buffer Overflow가 발생해..

[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? 정리
2021. 3. 11. 21:55
Hacking/Pwnable
메모리 주소 보통 노트북은 4GB의 램을 쓰는데, 4GB를 Byte 단위로 변환하면 2^32Byte이다. 그리고 1Byte는 주소공간 한 개의 크기이다. 즉, 4GB는 2^32개의 주소를 가질 수 있다. 또 한편, 1 bit는 0 또는 1의 값만 가질 수 있기에 32bit는 2^32만큼의 숫자를 표현할 수 있다. 32 bit 라는 것은 2^32개의 주소를 가지고 있다라는 뜻이다. 따라서 32bit 운영체제는 수 표현을 최대 2^32까지 밖에 못 하기 때문에, 8GB나 16GB의 램을 가지고 있다고 하더라도 접근을 할 수가 없다. 0000…0000(32개) 부터 1111….1111(32개) 까지를 보기 편하게 16진수로 변환하면? 00000000 ~ FFFFFFFF이다! 유저 영역, 커널 영역 시스템 운영..

[Pwnable] pwndbg 주요 사용법
2021. 2. 27. 12:55
Hacking/Pwnable
GDB GDB(GNU debugger)는 GNU 소프트웨어 시스템을 위한 표준 debugger이다. 실행 방법 gdb [프로그램명] 종료 방법 q (quit_ Ctrl + d 소스 보기 ( gdb 실행 시 소스 폴더에서 구동해야 가능함. ) l : main 함수를 기점으로 소스 출력 l 10 : 10행을 기준으로 출력 l func : func 함수의 소스를 출력 브레이크 포인트 ( 프로그램을 브레이크 포인트에 멈춰서 그 때의 상황을 파악하면서 확인할 때 사용 ) b func : func 함수의 시작 부분에 브레이크 포인트 설정 b 10 : 10행에 브레이크 포인트 설정 프로그램 실행, 종료 ( run kill ) r : 프로그램 수행( 재시작 ) k : 프로그램 수행 종료 역추적 하기 bt : 오류가 발..