윈도우 버퍼 오버플로우 익스플로잇 개발 - 4 셸 코드 인코더 일 반적인 셸 코드에는 해당 언어 팩의 유니코드로 유효하지 않은 코드들이 들어갈 수 있다. 는 이러한 유니코드들을 ASCII 형태로 변환하는 프로그램이다. 열두 번째 줄에서는 웹이나 윈도우 파일 시스템에서 사용하지 못하는 문자들을 걸러내고, 50~52번째 줄에서는 1의 경우 2로 나누면 0이 되므로 유니코드 문자를 사용해 특별하게 처리한다. 셸 코드 인코더 1 /* 2 mat@monkey.org 3 mat@panicsecurity.org 4 5 Shellcode encoder for webdav exploit. 6 */ 7 #include 8 9 10 int is_special(unsigned char num1) 11 { 12 return (..
윈도우 버퍼 오버플로우 익스플로잇 개발 - 3 윈도우 버퍼 오버플로우의 특징 유 닉스와 같은 시스템에서 버퍼 오버플로우는 리턴 주소를 대부분 추측에 의해 계산하는 경우가 많고, 여러 번 시도할 수 있을 경우 무차별 공격(brute forcing)을 하기도 한다. 반면 윈도우 시스템은 유닉스와는 조금 다른 양상을 보인다. 리턴 주소 문제 윈 도우 시스템의 경우 스택을 오버플로우시켰을 경우 해당 함수에서 리턴하는 시점에 ebx, esp 등과 같은 레지스터에 셸 코드가 들어 있는 버퍼의 주소가 들어 있는 경우가 많다. 따라서 대부분의 경우 리턴 코드는 ‘jmp esp’나 ‘jmp ebx’와 같은 바이트 문자열이 존재하는 위치로 정해진다. 이러한 코드가 존재하는 곳으로 일단 제어권을 넘길 수만 있다면 esp나 ..
윈도우 버퍼 오버플로우 익스플로잇 개발 - 2 스택 기반 버퍼 오버플로우가 발생하는 경우 스 택 기반 버퍼 오버플로우는 스택상의 어떠한 데이터 구조체의 데이터의 바운더리(boundary)를 넘어서 데이터를 저장하면서 스택을 조작할 수 있게 되는 현상을 말한다. 스택 기반 버퍼 오버플로우는 결국 프로그래머의 실수로 인한 프로그램 문제라고 할 수 있다. 이러한 버퍼 오버플로우는 주로 배열에 대해 strcpy와 같은 함수를 사용할 때 많이 발생한다. 예를 들어 다음과 같이 간단한 프로그램을 짠다. #include void function(char *str) { char buffer[10]; printf(“buffer original len:%d ”,sizeof(buffer)); strcpy(buffer,str..
윈도우 버퍼 오버플로우 익스플로잇 개발 - 1 지난 3월 발견된 ntdll.dll의 버퍼 오버플로우는 스택 기반 버퍼 오버플로우의 한 사례를 보여주는 보안 버그였다. 이번 컬럼에서는 ntdll.dll 사례를 바탕으로 윈도우 환경에서 어떤 방식으로 버퍼 오버플로우가 일어나는지 그 원리와 작동 방식을 살펴보면서 고질적인 버퍼 오버플로우를 막을 수 있는 방법에 대해 잠시 생각할 수 있는 시간을 마련해 보았다. 최 근 보안에 대한 관심이 높아짐에 따라 TV와 신문에는 보안 전문가를 자처하는 많은 사람이 나와 작금의 허술한 보안에 대해 실상을 폭로한다. 그러나 그 속내를 들여다보면 회사 광고나 자사 제품 광고를 위한 것인 경우가 많다. 이른바 ‘보안’은 하나의 ‘상품’에 불과해진 것이다. 많은 이들에게 보안은 아..
- Total
- Today
- Yesterday
- Linux
- diary
- console
- Mabinogi
- Military
- Assembly
- medical
- BadCode
- wallpaper
- 나비효과
- 3D Engine
- Embedded System
- Life News
- 막장로그
- Reverse Engineering
- win32
- cartoon
- Network Inspector
- 프리랜서로 살아남는 법
- 짤방 및 아이콘
- network
- Battle
- Tech News
- C#
- USB Lecture
- WDB
- humor
- 야마꼬툰
- Web Programming
- Information Processor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |