워게임/FTZ19 FTZ - level14 level 13은 이전과 풀이가 동일하기 때문에 생략했다. hint gdb로 까보면 fgets 주변에 [ebp-56]이 buf의 시작 주소이고, cmp 주변에 [ebp-16]이 check의 주소임을 알 수 있다. 따라서 40바이트는 아무 값이나 채우고, 마지막 4바이트(==check)에 0xdeadbeef를 넣으면 된다. 따라서 (python -c 'print "A"*40+"\xef\xbe\xad\xde"'; cat) | ../attackme my-pass 찍으면 답 나온다. 2021. 7. 23. FTZ - level12 hint 여기서는 gets 함수로 사용자 입력을 받는다. gets 또한 입력값 길이를 검사하지 않는다는 취약점이 있다. 그럼 level11과는 printf에 %s가 추가되었다는 점, gets함수를 사용한다는 점만 다르다. 11번과 동일하게 풀면 된다. 다만, 다른 점은 여기서는 gets로 실행파일을 실행시키면 사용자 입력을 기다리므로 (python -c ~~; cat) | ./attackme 와 같이 실행해야 한다. 왼쪽 python 명령어의 결과로 쉘을 얻었지만, 더 이상 입력이 없어서 쉘이 실행되자마자 종료된 것이다. 이걸 해결하려면 파이프( | ) 앞의 프로그램이 끝나지 않고 입력을 기다려야 한다. 2021. 7. 22. FTZ - level11 hint strcpy는 strncpy와 달리 글자수 점검을 하지 않는 취약점이 있다. 이걸 이용해서 buffer overflow로 풀면 된다. tmp 폴더로 attackme 복사해서 tmp에서 gdb 열기 disas해보면 str배열은 ebp-264 위치에 있다는 것을 알 수 있다. 그러면 264+4(ebp)는 쓰레기 값을 채우고 ret에 변화를 줘서 쉘을 따면 되겠다. 환경 변수를 이용하면 될 것 같다. export MYSHELL=$(python -c 'print"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89.. 2021. 7. 21. FTZ - level10 hint 두 명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다. 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라. https://hongd99.tistory.com/37?category=993821 를 바탕으로 코드를 짰다. ipcs -m vi solve.c shmget으로 커널에 공유 메모리 공간을 요청했다. key_t는 7530, 최소 크기는 1028, 접근 권한은 666으로 줬다.(ipcs -m의 결과를 바탕으로) 그리고 shmat으로 생성한 공유 메모리에 접근할 수 있는 int형의 식별자를 얻었다. 컴파일해서 실행하면 이제 저 공유메모리에 접근해야 한다. 구글링 엄청 했다. 구글링 결.. 2021. 7. 12. FTZ - level9 hint : 다음은 /usr/bin/bof의 소스이다. 이를 이용해 level10의 권한을 얻어라. #include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be overflow : "); fgets(buf,40,stdin); if ( strncmp(buf2, "go", 2) == 0 ) { printf("Good Skill!\n"); setreuid( 3010, 3010 ); system("/bin/bash"); } } 1. buf배열에 40바이트까지 입력받음 2. buf2와 "go" 비교 -> 같으면 0 반환 3. 즉, buf와 go가 같다면 /bin/bash가 실행되겠다. buf[10] (낮은 주소) --------.. 2021. 7. 6. FTZ - level8 hint : level9의 shadow 파일이 서버 어딘가에 숨어있다. 그 파일에 대해 알려진 것은 용량이 2700이라는 것 뿐이다. 찾아보니까 find 명령어 중에서 파일 크기로 찾을 수 있는 방법은 -size 옵션이란다. find / -size 2700 2> /dev/null ☞ 아무것도 안나온다. b : 블록단위 c : byte k : kbyte w : 2byte 워드 출처: https://nota.tistory.com/89 [nota's story] 이를 참고해서 find / -size 2700b 2> /dev/null 부터 쭉 해봤다. find / -size 2700c 2> /dev/null ☞ 4개 정도가 출력되는데, 의심스러운 파일이 하나 있다. 바로, /etc/rc.d/found.txt l.. 2021. 7. 6. 이전 1 2 3 4 다음