전체 글

IT and Information Security
SECURITY/System | Wargame

[Hackerschool] FTZ level 15

​ ​ 이번에도 역시 hint와 attackme가 있고, 코드는 level14와 유사하지만 check가 포인터라는 차이점이 있다. 하지만 앞선 문제와 동일하기 buf 크기는 20byte 이므로 버퍼 오버플로우가 발생할 수 있다. ​ ​ ​ attackme는 분석할 수 있는 권한이 없기 때문에 우선 tmp로 복사했고 tmp로 이동해 복사가 된 것을 확인하였다. ​ ​ ​ gdb 명령어로 attamkme를 분석해보았다. level14의 어셈블리와 비교해봤는데 차이점은 check가 포인터 변수로 사용하므로 의 cmpl 앞에 값을 가져오는 mov가 하나 더 추가되었다는 점이다. 프로그램 안에서 0xdeadbeef의 값을 찾아서 check의 위치에 씌워주면 된다. ​ ​ 프로그램 안에서 0xdeadbeef가 존재..

SECURITY/System | Wargame

[Hackerschool] FTZ level 14

​ ​ level14 이후로는mainsource의 문제를 그대로 가져왔다고 한다. 버퍼 오버플로우와 포맷스트링에 대하여 더 학습할 예정이다. 이번에도 hint와 attackme 파일이 있고, cat 명령어로 hint를 읽었다. ​ int 형 crap, check / 크기 20의 char형 배열 buf를 선언했다. fgets 함수로 입력값을 45byte 만큼 받아 buf에 저장하며 표준입력을 사용한다. if문이 실행되려면 check가 0xdeadbeef(3735928559)여야 한다. if문 안에서는 seteuid 함수로 권한을 변경하고 쉘 스크립트를 실행한다. buf의 크기는 20byte인데 fgets는 45byte 만큼 받아오므로 버퍼오버플로우가 발생할 수 있다. ​ ​ * 버퍼 오버플로우 (Buffe..

SECURITY/System | Wargame

[Hackerschool] FTZ level 13

​ main 함수의 인풋은 배열의 크기인 argc와 argv 배열이다. 4byte 정수형 long i에 0x1234567(19088743)을 할당했다. char 유형인 buf는 1024byte로 할당했다. setuid 함수를 사용하여 level14의 uid 권한을 부여하였다. if문을 수행하기 위해서는 agrc가 1초과여야 하며 if문 안에서는 strcpy 함수를 사용하여 사용자가 입력한 argv의 내용을 buf에 copy한다. i 변수의 값이 0x1234567이 아닐 경우에 if문이 실행된다. if 문 안에서는 printf 함수로 "Warnning: Buffer Overflow !!! "을 출력해 위험을 알리고 프로그램을 종료시킨다. ​ [ 문제 풀이 과정 ] 1. 환경변수에 쉘코드를 저장하고 주소값을..

SECURITY/System | Wargame

[Hackerschool] FTZ level 12

​ hint를 확인했다. 지난번과 비슷하지만 조금 다르다. attackme 파일의 내용이 아닐까 생각한다. 먼저 코드의 내용을 분석해보자 ​ char 유형으로 356byte의 배열을 선언했다. setreuid 함수를 사용하여 level13의 권한을 부여했다. printf 함수를 사용하여 "문장을 입력하세요."를 출력한다. gets 함수를 사용하여 문자를 입력받는다. printf 함수를 사용하여 입력받은 문자열을 출력한다. ​ 여기서 문제가 발생할 수 있는 지점은 gets 함수이다. 입력값의 길이 제한을 두지 않기 때문에 오버플로우가 발생할 수 있다. ​ ​ gdb 함수를 사용하여 attackme 파일을 분석해보자. esp 레지스터에 264byte(0x108)가 할당되어있다. 256을 제외한 8byte는 ..

SECURITY/System | Wargame

[Hackerschool] FTZ level 11

_ ​ ls로 hint와 처음 보는 attackme 파일을 찾았다. hint 파일은 소스코드로 구성 되었고 이외의 말은 없었다. ​ ​ ​ attackme 파일을 실행해보았지만 Segmentation fault 오류가 나고 cat으로 읽어보니 깨진 내용이 출력되어 새로운 뭔가를 얻을 수 없었다. ​ ​ * Segmentation Fault - 프로그램이 동작 중 잘못된 주소를 참조할 때 발생하는 오류 (메모리 관련 오류) - 읽기 전용 메모리 영역에 데이터를 쓰려고 할 때 (read-only) - 운영체제 메모리 영역 또는 보호된 메모리 데이터를 쓰려고 할 때 - 잘못된 메모리 영역에 접근하려고 할 때 (NULL, -1 등등) ​ ​ ​ hint의 내용이 attackme의 소스코드인 것 같으니 분석해보자..

yuujoeng
알감자는 공부중