Hacking 31

ARP Spoofing

* 여기에 기술된 내용을 보고 악의적인 이유로 이용할 시 법적 책임은 자신에게 있습니다. ARP spoofing은 ARP table을 변조해서 전송하는 데이터를 가로채는 내부 네트워크 해킹 방법입니다. 라우터와 통신하면서 arp table이 만들어지는데요 cmd 창에서 arp -a 쳐보면 확인할 수 있습니다. 아이피와 매칭 되는 맥 주소가 등록되어 있습니다. A의 컴퓨터가 통신하려고 라우터에게 신호를 보내면 라우터가 외부 통신을 하고 응답을 A로 돌려주는데요 ARP table을 보고 전달하기 때문에 A의 arp 테이블과 라우터의 arp 테이블을 B의 정보로 바꿔놓으면 A가 요청을 하는 내용이 B를 거쳐서 라우터로 가고 라우터의 응답을 B를 거쳐 A로 가게 됩니다. 명령어 arpspoof -i 인터페이스 ..

Scanning (port scan)

* 여기에 기술된 내용을 보고 악의적인 이유로 이용할 시 법적 책임은 자신에게 있습니다. https://nmap.org/download.html Download the Free Nmap Security Scanner for Linux/Mac/Windows Nmap and Zenmap (the graphical front end) are available in several versions and formats. Recent source releases and binary packages are described below. Older version (and sometimes newer test releases) are available from the dist directory (and really ol..

Scanning(ip scan)

* 여기에 기술된 내용을 보고 악의적인 이유로 이용할 시 법적 책임은 자신에게 있습니다. http://angryip.org/ Angry IP Scanner - the original IP scanner for Windows, Mac and Linux Features Scans local networks as well as Internet IP Range, Random or file in any format Exports results into many formats Extensible with many data fetchers Provides command-line interface Over 29 million downloads Free and open-source Works on Windows, M a..

Format String Bug(FSB)

Format String 이란 - 문자열 함수에서 사용하는 형식 문자열입니다. Printf("hacker %s\n",i); Format String Format String에는 특수 이스케이프 시퀀스가 존재합니다. %d 10진수 %u 부호 없는 10진수 %x 16진수 %s 문자열 %n 지금까지 출력한 바이트 수 %c 문자 /* format string 정상적인 사용 good.c*/ #include #include int main(int argc, char* argv[]) { char buf[20]; strcpy(buf, argv[1]); printf("%s\n",buf); return 0; } format string을 한 문자씩 읽어옴 format 인자가 아니라면 출력 format 인자(%s,%x 등)..

Heap Buffer Overflow(BOF)

Heap 이란? 동적 메모리 할당 (malloc 영역) 데이터 사이즈 알 수 없을 때 사용 Heap 영역은 실행시 할당 (stack 영역은 컴파일시 할당) 프로그래머에 의해 해지됨(free) Heap 영역은 낮은 주소에서 높은 주소로 자람 (stack은 반대) Heap buffer overflow - stack과 같이 인접한 변수를 덮어쓸 수 있음 - stack과 다른 구조, 직접적으로 RET 변조는 불가능 - stack overflow에 비해 취약점 발견 저조(정적 분석 / 인접 변수가 어떠한 역할인지 분석이 어려움) - UNLINK 취약점은 2004년에 패치 Heap overflow 손상받는 데이터는 인접 변수, 함수 포인터(거의 볼 수 없다) 1. heap1.c **dumpcode.h 파일 소스는 ..

Stack Buffer Overflow(BOF) - DEP+ASLR+ASCII Armor 우회(끝판대장) (RTL 공격)

*fedora 20 환경 ATTACK ASCII Armor는 공유 라이브러리 영역의 상위 주소에 0x00을 포함시키는 방법 우회 기법 - RTL - Chainning RTL - PLT & GOT Overwrite 공격 방법 PLT&GOT Overwrite (strcpy@plt 사용) plt에는 got으로 점프하는 주소가 있고 got에는 함수의 주소가 있다. got에 execve 함수의 주소를 넣는다. bss 영역에 execve의 인자로 사용할 /tmp/sh 문자열 복사 plt 호출 execve 인자 값 전달로 공격 RET로 끝나는 명령의 순서를 Gadget 이라고 합니다. 그 명령어에서 [pr] -인자 1개 pop ret [ppr] -인자 2개 pop pop ret [pppr] - 인자 3개 pop po..

Stack Buffer Overflow(BOF) - DEP+ASLR 우회 (RTL 공격)

ASLR(Address Space Layout Randomization) 메모리 영역의 주소 공간 배치를 랜덤화하여 공격을 방해 RTL 공격 시 환경 변수에 함수를 담고 그 주소를 사용했는데요 환경 변수가 ASLR 보호 기법으로 랜덤이 되어 주소가 바뀐다면 이용하기 어려워집니다. 그래서 DATA 영역에 있는 기계어 값에 실행에 필요한 내용을 넣고 그 주소를 이용하는 방법을 이용해서 DEP+ASLR 보호 기법을 우회해보겠습니다. 이 data 영역에는 실행 권한이 있습니다. 그리고 이 영역 안의 항상 있을법한 기계어 (ex \x01)를 파일명으로 사용하여 이전에 만들었던 /tmp/sh 파일에 대한 실행 명령어(/tmp/sh)를 넣어 우회합니다. /* sh.c */ #include int main() { se..

Stack Buffer Overflow(BOF) - DEP 우회 (RTL)

DEP 보호가 되어있을 때 우회하는 공격 기법입니다. RTL (Return To Libc) 공유 라이브러리를 이용하는 방법입니다. 프로그램 실행시 적재되고 여러 프로세스에서 공동으로 이용할 수 있는 라이브러리이며 메모리에서 실행 권한이 필수로 설정되어 있습니다. 공유 라이브러리 함수를 넣어서 공격하게 됩니다. 함수의 첫 번째 인자는 [EBP+8] ?? RTL의 공유 라이브러리 함수의 인자로 담을 내용에 관한 이야기입니다. 기본적으로 함수의 첫 번째 인자는 [EBP+8]인데요 그 이유에 대해서 알아보겠습니다.(위쪽이 낮은 주소) 먼저 메인 함수가 콜 됩니다. 인자는 뒤의 값이 먼저 스택에 올라가기 때문에 함수 내에서 사용되는 ebp+8의 값이 처음 인자의 값이 됩니다. 공격 시나리오 취약점이 있는 프로그램..

Stack Buffer Overflow(BOF) / BOF 보호 기법

메모리 구조 1. 커널 영역 커널 공간은 프로세스에서 직접 접근할 수 없는 공간 2. Off Limit 영역 커널 영역에 접근하지 못하도록 할당 해둔 공간 3. 유저 영역 유저가 실제 사용하는 영역(스택/ 힙/ 코드 영역) Null Pointer 영역 모두 0으로 되어있으며 변경이 불가능, 시스템 보호(에러 보고)를 위한 영역 [유저 영역] 프로그램을 동작하면 메모리에 프로그램이 동작하기 위한 메모리 공간이 생성되며, 상위 메모리는 stack 하위 메모리는 heap라는 메모리 공간이 형성 스택 영역(정적 할당) 매개변수, 반환 주소(RET), 지역변수 등의 데이터를 갖는 공간 함수가 종료되면 메모리 할당이 자동으로 해제됨 높은 주소에서 낮은 주소로 자람 공유 라이브러리 영역 프로그램 내부에서 사용하는 라..

쉘 코드 제작 2 (Shellcode)

쉘 코드 제작 순서 1. C언어로 기능 구현 2. gdb로 역 어셈블링해서 필요한 부분을 찾음 3. 시스템 콜에 필요한 부분을 어셈블리어로 구현 4. objdump로 기계어 추출 5. null 값이 있을 경우 제거 작업 (3 번에서 미리 해도 됨) 6. 기계어 코드를 하나의 문장으로 추출 7. 프로그램 내용부에 삽입 /bin/sh를 실행시키는 쉘코드를 만들어 보겠습니다. 1. C 코드로 제작 #include int main() { char *bash[2]; bash[0] = "\bin\sh"; bash[1] = 0; execve(bash[0], bash, &bash[1]); } execve는 프로그램을 실행하는 system call 함수입니다. 사용법은 아래와 같습니다. execve(const char ..