본문 바로가기

전체 글

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/를 바이너리 형태로 실행 하는 것, 메모리에.. 더보기