해커스쿨 FTZ level20 (format stirng) level20 --- we are just regular guys 우선 level20의 디렉토리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackeme는 clear의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. 앞서 보았듯이 format string 취약점을 가지고 있는 소스이다.또한 fgets 함수에서 79 글자만 쓸 수 있도록 제한하고 있다. 따라서 buffer overflow 공격하기 어렵다. 실제로 format string 취약점을 가지고 있는지 확인해보자. 서식 지정자를 통해 스택영역의 내용을 알 수 있고 "%n" 서식 지정자를 이용해 원하는 주소에 write할 수 있을 것이다. .. Wargame/FTZ 7년 전
해커스쿨 FTZ level19 (Return To Libc) level19 --- swimming in pink 우선 level19의 디렉토리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level20의 권한으 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. 버퍼 오버플로우를 잘 공부했다면 매우 쉬운 소스이다.간단히 gdb로 분석한 뒤 버퍼 오버플로우를 통해 공격해보자. hint 소스에는 간단히 char buf[20]을 통해서 0x14(20 byte)를 할당했는데, 실제로 0x28(40 byte)가 할당되어 있다.어딘가에 20byte의 dummy 값이 존재하는 것이다. gdb를 통해 메모리 구조를 확인했고 메모리 구조를 그려보면 아래와 같다. 환경변.. Wargame/FTZ 7년 전
해커스쿨 FTZ level18 level18 --- why did you do it 우선 level18의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level19의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; in.. Wargame/FTZ 7년 전
해커스쿨 FTZ level17 level17 --- king poetic 우선 level17의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level18의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. 일반적인 실행이라면 사용자로부터 입력을 받고 level18의 권한으로 call() 함수를 실행할 것이다.call() 함수는 단순히 "Hello there!"을 출력하는 함수이다.level16과 달리 이번 소스는 shell을 띄우는 함수가 존재하지 않는다. 따라서 우리가 쉘 코드를 작성하여 printit() 함수의 주소에 쉘 코드의 주소를 써야한다. 우선 gdb를 통해 dummy가 있는지 없는지 분석해야한.. Wargame/FTZ 7년 전
해커스쿨 FTZ level16 level16 --- about to cause mass 우선 level16의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level17의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. 일반적인 실행흐름이라면 printit()함수를 실행하여 "Hello there!"를 실행하고 종료할것이다.하지만 shell() 함수가 있고 level17의 배시셸을 띄우는 것을 확인할 수 있다. 즉, 우리가 buf를 통해 printit()의 주소를 shell()의 주소로 수정하면 shell 함수가 실행되면서 level17의 쉘이 뜰 것이다. gdb를 통해 attackme를 분석하자. hin.. Wargame/FTZ 7년 전
해커스쿨 FTZ level15 level15 --- guess what 우선 level15의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level16의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. hint를 보면 check가 가리키는 포인터 변수에 0xdeadbeef가 저장되어 있으면 level16(3096)의 쉘을 띄워준다.level14는 변수에 0xdeadbeef를 저장시키는 것이고 level15은 변수에 저장된 포인터 변수에 0xdeadbeef을 저장시키는 문제이다. 위와 같이 변수를 선언하면 int crap(4 byte), int *check(4 byte), char buf[20](20byt.. Wargame/FTZ 7년 전
해커스쿨 FTZ level14 level14 --- what that nigga want? 우선 level14의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level15의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. hint를 보니 우리가 쉘 코드를 삽입하여 쉘을 띄우는 것이 아니다.check == 0xdeadbeef가 되면 프로그램이 자체적으로 쉘을 띄워준다. int check; 변수는 초기화 되지 않았지만 우리가 버퍼 오버플로우를 통해서 0xdeadbeef로 write하면 된다. 지금까지 공부한 것을 바탕으로 gdb를 통해 attackme를 분석해보자. 우리는 int crap, int check.. Wargame/FTZ 7년 전
해커스쿨 FTZ level13 (스택 가드) level13 --- have no clue 우선 level13의 디렉터리를 확인한다. attackeme라는 의심스러운 파일이 존재한다. attackme는 level14의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공결할 대상이 attackme일 가능성이 크다고 생각하고 hint를 보자. level12의 버퍼 오버플로우의 소스와 매우 비슷하다.하지만 배열을 선언하기 전에 long i=0x1234567 이라는 지역변수가 추가로 선언 되어있다. long i=0x1234567은 무엇을 뜻하길래 추가로 선언되어 있을까?버퍼 오버플로우 취약점이 발생한 이후 많을 프로그래머들이 이를 해결하기 위해 많은 방법을 고안하였다.여기서 착안한 방법이 스택 가드 기법이다. 스택 가드 기법은 덮어씌여질 임의.. Wargame/FTZ 7년 전
해커스쿨 FTZ level12 (버퍼 오버 플로우) level12 --- it is like this 우선 level12의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다. attackme는 level13의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 우리가 공격할 대상이 attackme라는 생각을 가지고 hint를 보자. 배열이 선언되어있고, gets() 함수를 통해서 사용자로부터 입력된 문자열을 str 배열에 저장한다.gets() 함수는 사용자로부터 받은 문자열의 길이를 측정하지 않는 함수이다.만일 사용자가 300 byte 길이의 문자열을 입력하면 어떻게 될까? gets() 함수는 문자열의 길이를 측정하지 않기 때문에 배열의 범위를 넘어 다른 메모리를 침범한다.이러한 상황에서 발생할 수 있는 취약점은 버퍼 오버플로우 취약.. Wargame/FTZ 7년 전
해커스쿨 FTZ level11 (포맷 스트링 버그) level11 --- what!@#$? 우선 level11의 디렉터리를 확인한다. attackme라는 의심스러운 파일이 존재한다 attackme는 level12의 권한을 가지고 있고, setuid가 걸려있는 파일이다. 공격할 대상을 attackme로 가정하고 hint를 보자. hint를 보면 포맷스트링 취약점과 버퍼 오버플로우 취약점이 보인다. 앞서 말했듯이 컴퓨터는 2진수만 이해할 수 있다. 하지만 우리가 2진수로 데이터를 읽기에 부적절하다.따라서 메모리에 2진수로 저장되어 있는 값을 사용자가 알기 쉬운 형태로 출력하는 형태가 포맷 스트링이다. 버퍼오버플로우 취약점이 존재한다는 것은 앞서 확인했던것 처럼 알 수 있다.하지만 포맷 스트링 취약점 관련 문제는 처음 접하기 때문에 포맷 스트링 취약점이 정확히.. Wargame/FTZ 7년 전