| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- packet capture
- Windows Kernel
- Network Byte Order
- 개발하기
- vcruntime.dll
- windows kernel debugging
- pcap packet
- Windows
- 포너블
- 네트워크 바이트 오더
- apphelp.dll
- 개발 환경 준비
- 윈도우 커널 디버깅
- 윈도우 커널
- Msvcrt.dll
- pwnable
- 시스템해킹
- pcap packet capture
- ucrtbase.dll
- IAT Hooking
- vcruntime140.dll
- HackCTF
- 바이트 오더
- 윈도우 커널 드라이버
- 해킹
- C언어 패킷캡쳐
- Windows Kernel Driver
- Windows Kernel Debug
- hacking
- arudino
- Today
- Total
목록전체 글 (119)
미친해커
이번에는 FSB (Format String Bug) 문제이다. IDA를 이용해 디스어셈블해보자 vuln 함수가 정의되어 있는것으로 보인다. vuln 함수를 확인해보자 vuln 함수에서 fgets로 입력을 받고 입력받은 문자열을 snprintf를 이용하여 format으로 복사한다. 이때 Format String에 맞춰 format에 쓰여진다. 하지만 s에 받은 문자열에 서식문자가 있다면 Format String Bug가 발생한다. 만약 취약점이 발생하지 않도록 한다면 '%s' 서식문자를 사용해 format에 쓰면 된다. printf에서는 단순히 format에 쓰여진 문자를 출력한다. 이 외에도 flag 함수도 찾을 수 있다. 이번에도 flag 함수를 실행시키면 flag를 따낼 수 있을 것으로 보인다. 서식..
Format String이란 printf 계열의 함수를 이용할때 사용하는 특수한 형식의 문자열이다. 예를 들어 다음과 같은 C언어 코드가 있다고 하자 #include int main(int argc, char *argv[]) { char text[] = "Hello World!"; int i = 30; long h = 0xDEADBEEF; printf("%s %d %x\n", text, i, h); } printf 가변인자를 받고 서식문자에 맞춰서 인자로 들어온 데이터를 출력해준다. 출력 결과를 보다시피 '문자열 정수 16진수' 형태로 출력이 되었다. 각각 %s는 문자열(String), %d는 정수(Decimal), %x는 (heXadecimal) 를 나타낸다. 그렇다면 이것이 왜 문제일까? printf..
버퍼란 프로그램상에서 할당된 메모리 공간을 뜻한다. 버퍼오버플로우란 메모리 관리로 인해 발생하는 취약점이다. 예를 들어 다음과 같은 C언어 코드가 있다. #include int main(int argc, char *argv[]) { char s[32]; int v1 = 10; printf("입력해주세요 : "); gets(&s); // Buffer OverFlow 발생 printf("s : %s\n", s); printf("v1 : %p\n", v1); } 위 코드를 보았을 때 별다른 문제가 없어 보이지만 사실 큰 취약점이 존재한다. gets 함수에서 Buffer OverFlow가 발생하는데 그 이유는 다음과 같다. gets 함수는 NULL 문자가 나올때까지 문자열을 받아 버퍼에 저장한다. 만약에 위..
문제 이름을 보아 Buffer OverFlow 문제로 예상된다. 우선 바이너리를 다운받아 IDA Pro 로 디스어셈블을 해보자 코드를 보면 변수 s와 함수 포인터 v5가 선언되어 있다. s는 배열인것으로 보인다. 그리고 v5에 sup라는 함수의 주소를 넣고 fgets를 이용해 s에 133(0x85)바이트 만큼 입력을 받은 후 v5에 들어있는 함수를 실행한다. s의 공간은 0x8C - 0xC = 0x80 총 128 바이트이다. s부터 +129 바이트부터는 v5의 데이터가 들어가 있다. fgets에서 133 바이트를 s에 입력받으니 Buffer OverFlow가 발생돼 v5의 데이터를 덮어쓸 수 있다. 그렇다면 v5의 데이터를 덮어씌어 실행되는 함수를 다른함수로 조작하여 flag를 얻어낼 수 있을 것..
지금까지 블로그 작성을 미루다가 19살이 되어 본격적으로 HackCTF를 풀면서 Write-Up 을 작성하게 되었다.. 너무 늦은 감이 있지만 지금부터라도 열심히 해야지 쓸때없는말은 여기까지! HackCTF의 첫번째 포너블 문제다. 이름이 Basic_BOF 인 것으로 보아 간단한 Buffer OverFlow 문제로 예상된다. 바이너리를 다운받을 수 있으니 IDA Pro를 이용해 디컴파일을 해보자 main 함수를 보니 변수 s와 v5가 선언되어 있다. s에 데이터를 입력받고 s와 v5의 데이터를 출력한다. s부터 v5까지의 거리는 0x34 - 0xC = 0x28 총 40바이트이다. 즉 s의 공간은 40바이트이다. 아래쪽 if 문에서 v5가 0xDEADBEEF 라면 Shell을 띄워준다. fget..