본문 바로가기

Learning

14_Level14 -> Level15[FTZ] 루틴 분기 키값의 이해 ■ Level14 -> Level15 ■ 목적 루틴 분기 키값의 이해 루틴 분기 구문이 사용되는 예 소프트웨어를 설치할 때 시리얼 키(Serial Key)/라이센스 키(License Key) 입력 받는 부분 특정 값을 입력하면 프로그램이 실행이 되는 원리 (시디키 입력 -> 설치 진행) (원하는 값 입력 -> 쉘 권한) ■ Level14 풀이 level14 사용자 로그인 -> ID/PASS : level14/what that nigga want? $ cat hint 레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다. 버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이 최고의 효과를 가져다줍니다. #include #include main() { int crap; int check; ch.. 더보기
Buffer overflow Attack Report BOF 공격 리포트 [buffer over flow attack report] 목 차 0. 개요 ...........................................................................................................1 0.1 보고일정 및 테스트 환경 .........................................................1 0.2 BOF 분석 추진 배경 ....................................................................2 2. BOF의 개념 .............................................................. 더보기
쉘코드 만들기 강좌 * 쉘코드 만들기 강좌 "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0 \x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80 \x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" 프로그램의 취약점으로 인해 리턴 어드레스를 변경할 수 있을 때, 보통은 위과 같은 "쉘코드"를 실행하여 높은 권한을 획득한다. 이러한 쉘코드는 어떤 과정으로 만들어지는 것일까? 이제부터 그 방법에 대해 배워보겠다. 먼저 "쉘코드를 직접 만든다"라고 하면 으레 겁부터 먹게 될 수 있다. 쉘코드가 언뜻 보기에는 도무지 알 수 .. 더보기
13_Level13 -> Level14[FTZ] 스택가드(스택 쉴드) 알아보기 ■ Level13 -> Level14 ■ 목적 스택 가드(Stack Guard)에 대해서 스택 가드(스택 쉘드) 버퍼 오버플로우는 정확하게 말하면 애플리케이션 개발자의 실수이다. 이런한 취약점을 보안하기 위해 나온 아이디어가 스택가드(Stack Guard)이다. 스택 가드에 저장돼 있는 값이 바뀌었다는 것은 버퍼 오버플로우 공격이 일어났다는 것을 의미하고, 스택가드의 변경이 확인되면 프로세스 실행을 차단해서 공격을 방어 할 수 있다. [메모리 구조] ----------------------------------------------- 256bytes 4bytes 4bytes 4bytes char str[256] stack guard SFP RET AAAA...AAAA AAAA AAAA (새로운주소) --.. 더보기
[War Game] Lord Of BoF Level 1 더보기
12_Level12 -> Level13[FTZ] gets함수의 취약점(Stack Buffer Overflow) ■ Level2 -> Level13 ■ 목적 버퍼 오버플로우에 대해서 BOF(Buffer Overflow) Stack Buffer Overflow(Stack BOF) Heap Buffer Overflow(Heap BOF) gets함수는 매우 위험한 함수이다. $ vi cmd.c #include #include #include int main(void) { char str[256]; char *ptr; int a; printf("Enter string : "); gets(str); printf("%s\n", str); } $ gcc -o cmd cmd.c /tmp/ccAhNMFS.o(.text+0x2e): In function `main': : the `gets' function is dangerous a.. 더보기
Egg Shell & Format String Bug & Buffer Overflow [FTZ LEVEL11] ■ Level11 -> Level12 ■ 목적 포맷스트링(Format String Bug)과 버퍼오버플로우(Buffer Over Flow) 포맷스트링(Format String)에 대해서 포맷 스트링 = 포맷 스트링 지시자(Format String Directive) 포맷스트링은 %d %x %.. printf에서 사용하는 지시자를 나타낸다. 포맷 스트링 버그/어택 우선 포맷 스트링 지시자 가 무엇인지부터 알고 넘어가야 버퍼오버플로우에 대해서 접근할 수 있다. 2진수로 저장된 값을 우리가 인식할 수 있는 형태로 바꿔 주는 것이 printf() 함수와 같은 곳에 전달하는 포맷 스트링 인자이다. 특정한 형식으로 출력해보자. $ vi format.c #include #define MAX 127 int main().. 더보기
[참고] Format String 공격시 format string 공격시 ① 리턴 주소를 확인 특정 주소(0x8049610)를 어떤 주소로 바꾸어 하는지 확인(0xbffff858) -> 우리의 예는 소멸자의 주소(08049610)를 (0xbffff858) 주소로 변경하는 예를 들어 보자. ② "특정 주소/특정 주소 +2"를 지정한다. $ (공격할 프로그램) | $(printf "AAAA㉠주소BBBB㉡주소+2")%8x%8x%8x%㉢숫자1c%n%㉣숫자2c%n 공격할 프로그램 = /home/level11/attackme ㉠ 주소 = 특정 주소(\x10\x96\x04\x08) 특정한 주소를 지정한다. 우리의 예제에서는 소멸자의 주소이다. ㉡ 주소+2 = 특정 주소 + 2(\x12\x96\x04\x08) 특정한 주소를 지정한다. 우리의 예제에서는 소멸자.. 더보기
[참고] 쉘코드(ShellCode) 만드는 방법2 (2) 칼리리눅스의 payload 사용하여 쉘코드 만들기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! 다음 문서에서 KaliLinux 2.X 버전은 상단의 정보를 사용하세요 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ■ 사용시스템 - KaliLinux 다음과 같은 임의의 명령어를 수행할 수 있는 쉘코드를 만들어 보자. /bin/ls /bin/cal (on KaliLinux) ① msfpayload 명령어 사용법 확인 ■ (칼리리눅스 2.0) 아래와 같이 실습한다. # cd /test # msfvenom -.. 더보기
[참고] 쉘코드(ShellCode) 만드는 방법 쉘코드(shellcode) 만드는 방법 (1) 경량 쉘코드 만들기 쉘코드는 작게 만들수록 좋다. bufer를 메모리에 집어 넣을 때 크기가 작아야 한다. 함수의 return address를 임의의 주소로 조작할 경우 프로그램의 스택영역에서 특정코드를 실행시킬 수 있다. 이때, cracker의 관심을 끌어당기는 부분은 프로그램(application)이 user의 ID가 아닌 특정 ID,즉, Set-UID나 daemon으로 실행되고 있다는 사실일 것이다. 이런 종류의 실수가 document reader같은 프로그램에서 일어난다면 상당히 위험하다고 할 수 있다. shell을 실행시키는 이런 작은 프로그램들을 일반적으로 shellcode라고 부른다. /bin/bash/를 바이너리 형태로 실행 하는 것, 메모리에.. 더보기
[참고] FTZ LEVEL11 쉘코드 제작시 참고 /bin/sh & /bin//sh 비교 어셈블리어에서 문자열을 처리하는 단위는 4바이트이다. 하지만 "/bin/sh"는 7바이트 문자열이다. 8바이트의 문자열어서 다루는 것이 편리하기 때문에 "/" 문자를 하나 더 입력하고 8바이트 길이의 문자열로 인위적으로 만든것이다. 동작은 /bin/sh 와 /bin//sh는 동일하게 동작한다. 다루기 쉬운 문자열로 변경만 한것이다. /bin/sh(7바이트) == /bin//sh(8바이트) NULL처리 하기 복잡 /기호를 하나 더 적어 변환처리 없이 사용 (linux200) # ps PID TTY TIME CMD 14186 pts/1 00:00:00 bash # /bin/sh # ps PID TTY TIME CMD 14186 pts/1 00:00:00 bash 142.. 더보기
[참고] Format String이란 Format String 대해서 다음은 인터넷상의 글을 공부하면서, 다시 정리한 문서입니다. 인터넷에 글을 올려 모든 분들께 감사합니다. 되도록 원문의 내용을 변경하지 않는 상태로 실습용 예제만 편집하였습니다. 1. 포맷 스트링(Format String) 이란? => ret 또는 dtors값을 쉘코드의 주소 값으로 덮어 공격용 쉘을 실행 시키는 공격이다. (예제) test.c main() { char put[30]; printf("What your name: "); scanf("%s", put); printf("%s hello!\n", put); } 이러한 소스에서 %s의 역활은 입력받고 출력되는 변수의 Format를 지정하면서 나타나게된다. 포멧스트링의 종류에는 ----------------------.. 더보기
11_Level11 -> Level12[FTZ] 포맷스트링(Format string directive) 취약점 ■ Level11 -> Level12 ■ 목적 포맷스트링(Format String Bug)과 버퍼오버플로우(Buffer Over Flow) 포맷스트링(Format String)에 대해서 포맷 스트링 = 포맷 스트링 지시자(Format String Directive) 포맷스트링은 %d %x %.. printf에서 사용하는 지시자를 나타낸다. 포맷 스트링 버그/어택 특이한 포맷스트링 지시자를 사용하는 것 프로그래머가 코딩을 잘 못 했을 때 우선 포맷 스트링 지시자 가 무엇인지부터 알고 넘어가야 버퍼오버플로우에 대해서 접근할 수 있다. 2진수로 저장된 값을 우리가 인식할 수 있는 형태로 바꿔 주는 것이 printf() 함수와 같은 곳에 전달하는 포맷 스트링 인자이다. 특정한 형식으로 출력해보자. $ vi fo.. 더보기
[참고]공유 메모리 관련 함수 공유 메모리 관련 함수 shmget() 함수 shmat() 함수 shmdt() 함수 ■ shmget() 함수 NAME shmget - allocates a shared memory segment 메모리 안에 들어있는 일부내용 조각들을 세그먼트라고 부른다. 그것을 할당한다. SYNOPSIS #include #include int shmget(key_t key, int size, int shmflg); DESCRIPTION shmget() returns the identifier of the shared memory segment associated to the value of the argument key. A new shared memory segment, with size equal to the rou.. 더보기
10_Level10 -> Level11[FTZ] 공유 메모리에 데이터를 읽고 쓰기 ■ Level10 -> Level11 ■ 목적 공유 메모리에 데이터 읽고 쓰기 프로세스와 프로세스가 통신(메세지를 주고 받는 방법) -소켓 사용하는 경우(EX: Clint/Server 프로그램) cs프로그래밍 이라고 한다. server - client 통신 [EX] 서울버스 어플리케이션 화면 구성이나 메뉴는 스마트폰(client)에 있고, 실제 버스의 데이터는 Server에 존재한다. 어플(client)이 서버로부터 데이터를 갖고 와서 화면에 출력하는 방식. -공유메모리를 사용하는 방법(EX: DB 프로그램(Oracle)) DB에 여러 데몬들이 같은 메세지를 가지고 작업해야할 때 -파일을 사용하는 경우 가장 성능이 떨어지는 방식 -DB 사용하는 경우 DB에 정보를 요청해서 빼가는 방식 -기타 이번 레벨에.. 더보기
09_Level9 -> Level10[FTZ] 버퍼 오버 플로우 소개 ■ Level9 -> Level9 ■ 목적 버퍼오버플로우(BOF, Buffer Overflow)소개 버퍼오버플로우 기법을 이해하기 위해 메모리의 값을 조작하는 방법 Stack Buffer Overflow (지역변수 활용) - 쉽고 복잡하게 구성 Heap Buffer Overflow (메모리 할당) - 어렵고 단순하게 구성 [참고] 변수의 메모리 배치 확인과 GDB 사용방법 http://hyess.tistory.com/366 ■ Level9 풀이 level9 사용자 로그인 -> ID/PASS : level9/apple $ cat hint 다음은 /usr/bin/bof의 소스이다. #include #include #include main(){ char buf2[10]; char buf[10]; printf(.. 더보기
[참고] 버퍼 오버 플로우 [본 문서는 http://geundi.tistory.com/118의 블로그에 기재된 내용으로 학습 용도로 사 용함에 있어서 훼손이나 문서를 수정하지 않았습니다.] (1)프로그램 실행시 메모리의 구조 하나의 프로그램이 실행되면 프로그램 수행에 필요한 메모리가 할당 됩니다. 하나의 프로그램에 할당되는 메모리의 전체적인 모습은 다음과 같죠. /--------------------/ ← 메모리의 높은 숫자의 주소 | | | Stack | | | /------------------/ | | | Heap | | | /--------------------/ | | | Data | | | /--------------------/ | | | Text | | | /--------------------/ ← 메모리의 낮은 .. 더보기
[System Hacking] 윈도우 취약점 체크리스트 & 안전진단 스크립트 제작 [본 문서는 http://blog.naver.com/sbd38 의 블로그에 기재되어 있으며 학습 용도로 문서를 훼손 또는 수정하지 않았습니다.] 윈도우 취약점 체크리스트 윈도우 취약점 점검시 확인해야할 사항 대부분의 보안종사자들은 자동화된 툴을 이용하여 다음 취약점들을 점검한다. 간단한 것들은 한번 제작해 보는 것도 공부에 도움이 될 것이다. Windows 취약점 점검 결과 항목 항목번호 세부항목 중요도 점수 장비명 진단결과 점수환산 상세내용 계정 및 패스워드 관리 SW101 Administrator 계정의 이름을 변경하였는가? 중 SW102 관리자 그룹에 일반 사용자 계정이 존재하지 않는가? 중 SW103 취약한 패스워드를 사용하고 있지 않은가? 상 SW104 최근 암호를 기억하도록 설정되어 있는가? .. 더보기
[참고]변수의 메모리 배치 확인 및 GDB 사용법 변수의 메모리 배치 확인 및 GDB 사용법에 대해서 사용시스템 - HackMe(level9/apple) 1. 변수의 메모리 배치 변수의 메모리 배치를 확인하기 위해서 프로그램을 만들어 보자. 변수와 변수의 사이에 dummy 라는 공간확인(정확한 배열을 위함) 여러개의 지역변수를 많이 할당한 것을 배열이라고 한다.(순차적) [level9@ftz level9]$ ls -l 합계 12 -rw-r--r-- 1 root root 391 11월 13 2002 hint drwxr-xr-x 2 root level9 4096 2월 24 2002 public_html drwxrwxr-x 2 root level9 4096 1월 16 2009 tmp [level9@ftz level9]$ cd tmp [level9@ftz le.. 더보기
08_Level8 -> Level9[FTZ] 로컬/원격 패스워드 크랙 ■ Level8 -> Level9 ■ 목적 패스워드 크랙(Crack) 대표적인 패스워드 크랙툴 로컬패스워드 크랙툴(Offline Password Crack) : John the Ripper(johnny) 원격패스워드 크랙툴(Online Password Crack) : Hydra(xhydra) ) --> 힌트는 충분하다. $ cd /etc ; ls -l shadow* -r-------- 1 root root 3195 Sep 17 02:40 shadow -rw------- 1 root root 3168 Jan 15 2009 shadow- -rw------- 1 root root 5 Jan 15 2009 shadow.lock /etc 밑에 있는 shadow는 root만 볼 수 있으며 용량 또한 위와 같지 않다.. 더보기