농소
6단계 시작해보도록 하겠습니다. 전과 같이 홈디렉터리에 실행할 수 있는 setuid 파일이 있습니다. 실행해봤더니 4 digit code 라는 힌트를 친절하게도 내뱉네요ltrace로 해보았더니 input함수가 없으므로 두번째 argv를 이용해야하는것 같습니다.2번째 argv로 1234를 넣었더니 wrong 이라고 내뱉네요brute force 공격을 하면 0000 ~ 9999 까지 금방하겠지만저는 gdb를 이용해서 패스워드를 찾아보겠습니다. 머 일일히 다 볼 필요는 없고 패스워드를 비교하는 문제니까 cmp명령어를 주로 보면 될 것 같네요 첫번째 cmp는 인자가 2개인지 체크를 하네요 별볼일 없으니 다음으로 넘어갑니다. 자 여기서 입력값과 esp+0x1c의 메모리값과 비교를 하네요 이 esp+0x1c이 무엇..
이어서 5단계 문제를 풀어보겠습니다 홈디렉터리에 실행파일이 있네요 실행해 봤더니 /tmp/file.log를 찾을 수 없다고 나옵니다.ltrace로 실행시켜봤더니fopen함수를 실행시키고 있습니다.해당파일이 존재하지 않는것 같네요 생성해봅시다. 해당파일을 생성하고 다시 ltrace로 실행해 봅니다. 파일을 열고 fgetc 함수를 실행시키네요 무엇인가 문자를 출력해주는것 같습니다. 실행이 끝나고나면 파일이 삭제되니 다시 만들어주시고 그안에 문자를 넣어보겠습니다. 네 파일내용을 문자 하나하나씩 출력해주고있는 모습이네요 패스워드파일에 링크를걸고 실행했더니 안에들어있던 패스워드를 출력해 줍니다.
4단계 문제를 풀도록 해보겠습니다. 숨김파일에 쓰레기통 폴더가 있네요 들어가 봅시다. 들어갔더니 bin이라는 실행할 수 있는 파일이 있네요 실행해 봅시다. 1바이트씩 잘라서 바이너리 형태로 보여주고있네요 아마 bin이 binary의 약어인듯 합니다.ltrace를 했더니 다음 level의 패스워드 파일을 오픈하는 함수가 있네요 그리고 true를 뱉습니다.그렇다면 실행했을때 저 바이너리는 아마 문자들을 바이너리로 바꾼형태 인듯 합니다.다시 바꿔주면 패스워드가 나오게됩니다.