워게임/FTZ19 FTZ - level20 hint 일단 포맷스트링 버그구나... 드림핵 강의 정독하고 푸는 게 좋다. https://dreamhack.io/learn/3#23 로그인 | Dreamhack dreamhack.io 환경변수에 쉘 코드를 등록해놓고,(export MYSHELL=$(python -c 'print "\x90"*0x1000 + "쉘코드"') 그 주소를 구해서 ☞ 나의 경우 0xC0000000 - 0x1000 = 0xBFFFF000 포맷스트링 버그를 이용해 attackme의 ret에 덮어씌우면 되겠다, 라고 생각했다. 하지만 gdb attackme - disas main 이 작동하지 않았다. 그래서 일단, 덮어씌울 주소를 (addr)으로 가정했다. 그렇다면 드림핵 강의에서처럼 쉘코드가 있는 환경변수의 주소가 bfff(=491.. 2021. 7. 28. FTZ - level19 hint 이전에 환경변수로 푼 것과 동일하게 풀면 된다. 다만, 쉘코드를 삽입할 때 "setreuid(geteuid(), geteuid()) 까지 포함시킨 쉘 코드" 를 찾아서 넣어야 한다. 문제 풀이는 이전 것과 같으므로 생략하고.. 리눅스 Permission $ id 사용자 정보, uid, gid, 소속 그룹 확인 $ whoami 사용자 아이디 출력. current effective user id ruid - Real User ID - uid에 따른 읽기, 쓰기, 실행 권한을 설정함으로써 프로세스에 대해 소유자별로 권한을 줄 수 있으며 - 이 값은 변하지 않는다. euid - Effective User ID - setuid 권한이 설정된 실행 파일에 의해 변경된다. - 일시적으로 다른 계정의 uid를.. 2021. 7. 28. FTZ - level18 hint 구글링 - 멀티 플렉싱 - 멀티 셀렉트 서버 하면 file descriptor와 관련된 select 함수에 대한 설명이 나온다. hint 분석 FD_ZERO(&fds) ☞ fd_set fds를 0으로 초기화한다. FD_SET(STDIN_FILENO, &fds) ☞ STDIN_FILENO : 표준입력(fd = 0)/ fds의 0번째를 1로 셋팅 if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) >= 1 ) ☞ select 함수는 데이터가 변경된 파일의 개수, 즉 fd_set에서 비트 값이 1인 필드의 개수를 반환/ 비트값이 1인 필드의 개수가 1개 이상이라면 if( fd_isset(fileno(stdin), &fds ) ☞ fileno 함수 : 파일 포인터를 넘겨.. 2021. 7. 26. FTZ - level17 hint 이번에도 void (*call)() = printit; 에서 printit의 주소대신 쉘코드의 주소를 넣어주면 될 것 같다. 지금 생각나는 풀이는 환경변수에 쉘 코드 넣고 그 환경변수의 주소로 덮어쓰기 export MYSHELL=$(python -c 'print "\x90"*0x1000 + "쉘코드"') 엄청 큰 nop를 가지고 끝에 쉘코드가 붙어있는 환경변수를 만든다. 스택 구조상 환경변수는 가장 위쪽 주소인(0xc0000000)에 가깝게 위치할 것이며, 환경변수와 기타 등등 main함수가 시작되기 전까지 쌓인 스택이 그리 많지 않을 것이다. 그러므로 0xc0000000 - 0x1000 위치로 익스플로잇을 해주면 nop를 건너뛰고 쉘 코드가 실행될 것이다. (나는 0xc0000000 - 0x1.. 2021. 7. 26. FTZ - level16 hint 이번엔 attackme만 있는게 아니라 attackme.c도 있다. 그런데 attackme.c는 열리지도 않고 tmp폴더로 복사도 안된다. attackme만 tmp로 옮겨서 gdb로 까봤다. hint에 나와있는 그대로인 것 같다. 항상 BOF하던대로 하는데, void (*call)() = printit 에서 printit 대신 shell함수의 주소를 넣어주면 된다. disas shell로 shell함수의 주소를 알 수 있으니까 2021. 7. 26. FTZ - level15 hint 14번과 비슷한데 다른 점은 check가 포인터 변수라는 것. if (*check == 0xdeadbeef) ☞ check에 담긴 주소가 가리키는 곳에 0xdeadbeef가 담겨있어야 한다. gdb에서 x/50x main 으로 0xdeadbeef의 주소를 알 수 있다. 그렇다면 check에 방금 구한 0xdeadbeef의 주소를 넣어서 익스플로잇하면 된다. 코드 영역은 주소가 항상 고정인가? ☞ PIE 보호기법이 적용되어있다면 코드 영역의 주소도 바뀐다. 하지만 ftz 문제는 그럴 리 없다.. 다른 풀이 jump to filename with symbolic link 심볼릭 링크란? 바로가기같은 느낌. ln -s [원본파일] [새로만들파일이름] 심볼링 링크를 어떻게 활용할 것인가? cat /pr.. 2021. 7. 24. 이전 1 2 3 4 다음