Wargame

보호되어 있는 글입니다.
이번에 풀이할 문제는 vulnhub의 basic pentesting 문제다. 지금까지 풀이한 wargame들과 다르게 vulnhub는 가상머신을 제공해주는데, 해당 가상머신에서 취약점을 찾아 최종적으로 root 권한을 얻는 것이 목적이다. 모의해킹 wargame이라고 생각하면 된다. 문제 파일을 다운받고 vmware를 통해 환경을 구축한뒤 부팅해봤다.(network 설정은 NAT로 했다.) 로그인 화면이 나타나는데, id는 marlinspike로 고정된 것을 알 수 있다. 당연히 password는 주어지지 않는다. FTZ, LOB 같은 가상머신 wargame을 상상했던 나는, password 정보가 주어지지 않아 처음에 많이 해맸다. 모의 해킹의 절차를 참고하여 단계를 선정해서 풀이를 진행하겠다. 1. ..
· Wargame/FTZ
level14로 로그인한 후 hint 파일을 확인해보면 마찬가지로 attackme의 소스코드가 나온다. 딱 봐도 char형 배열인 buf의 크기가 20이지만 fgets 함수로 45byte만큼 입력을 받기 때문에 stack buffer overflow가 일어난다. fgets 아랫줄에서 check 변수의 값이 0xdeadbeef라면 쉘을 얻게 해 주는데, check 변수의 값은 0xdeadbeef가 아니므로 정상적인 입력으로는 쉘을 얻을 수 없다. 하지만 fgets 함수를 통해 buf에서 bof가 일어나므로 check의 값을 변조해 0xdeadbeef로 만들어 쉘을 얻을 수 있다. 일단 문제 파일은 디버깅이 불가능하므로 소스 코드를 복사해서 tmp 폴더에 파일을 빌드하고 gdb로 열었다. fgets 함수 호..
· Wargame/FTZ
level13으로 로그인 후 hint 파일을 확인해보면 마찬가지로 소스코드가 주어진다. 확인해보면 인자 값을 1024 크기의 char형 배열 buf로 strcpy 함수를 이용해 복사하는데, 문제는 strcpy 함수가 bof에 취약한 함수라는 것이다. 이를 통해 stack buffer overflow를 일으켜 ret를 쉘 코드의 스택 위치나 환경 변수의 주소로 변조한다면 쉘을 얻을 수 있을 것이다. 하지만 문제는 ssp 보호기법의 canary와 비슷한 로직이 존재하다는 것이다. i에 0x1234567을 넣고 마지막 함수를 끝내기전에 i의 값이 그대로인지 검사하는데, 만약 bof를 일으켜 더미 값을 채워 ret를 조작하려 시도한다면, buf와 ret 사이에 있는 i를 변조하게 돼 canary 검증 로직을 통..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
· Wargame/FTZ
level11과 비슷하게 로그인 후 ls 명령어를 통해 파일 들을 확인해보면 setuid가 걸린 파일 attackme와 hint가 존재하는 것을 알 수 있다. hint에는 attackme의 소스코드가 들어있다. 딱 봐도 알 수 있듯이 bof에 취약한 함수 gets를 쓴다. 입력을 받는 변수는 256byte 크기의 char형 배열 str이지만 gets 함수는 입력 값의 길이를 제한해주지 않기 때문에 256byte 넘는 입력 값을 준다면 stack bufferoverflow가 발생할 것이다. 마찬가지로 쉘을 얻게 해주는 함수가 없으므로 환경 변수에 쉘 코드를 넣고 ret를 해당 환경 변수로 overwrite하는 방법으로 exploit하면 될 것 같다. ret와 str 배열의 거리를 확인하기 위해 hint에 ..
dyp4r
'Wargame' 카테고리의 글 목록 (3 Page)