GoogleCTF#beginners/re-gatekeeper

4510 단어 CTFGoogleCTF


문제





풀어 보았다.



첨부파일을 다운로드하고 압축을 풉니다.



어떤 파일을 모르기 때문에 BZ에서 보았을 때 ELF 파일이었습니다.
Linux 실행 파일입니다. Windows에서 말하는 exe 같은 이미지.



bintext에서 플래그가 없는지 살펴 보겠습니다.



flag 안에는 변수가 들어가는 것 같아서 대답은 몰랐습니다.
직전에 이상한 문자열이 있었기 때문에 감으로 해 보았습니다만, 어느쪽도 달랐습니다.
  • CTF{0n3_W4rM}
  • CTF{zLl1ks_d4m_T0g_I}

  • IDA를 사용하여 흐름을 살펴보겠습니다.



    왠지 정답하면 flag가 나올 것 같습니다.
    어셈블리를 읽는 것은 뼈가 부러지기 때문에 Ubuntu에서 움직입니다.



    인수에 유저명과 패스워드를 입력해 주는 에러로 아무것도 하지 않고 종료했습니다.
    유저명과 패스워드는 모릅니다만, 아까의 캐릭터 라인이 괴롭기 때문에 해 봅니다.



    좋지 않았습니다. 사용자 이름과 비밀번호를 반대로 시도합니다.



    좋지 않았습니다.
    하지만 잘 읽지 않았기 때문에 조금 깨닫지 못했습니다.
    Incorrect username
    

    라는 문자가 있다는 것을 깨달았습니다.
    처음에는 비밀번호가 다르다는 오류로 이번에는 사용자 이름이 다르다는 오류입니다.
    라고 하는 것은 1회째는 유저명은 있었다고 하는 것이 될 것 같습니다.

    다시 IDA를 살펴 보겠습니다.



    단순히 문자열을 비교하고 있는 것 같기 때문에, 있다고 생각합니다만. . .
    라고 생각하면 그 앞의 오른쪽으로 가는 처리가 조금 신경이 쓰입니다.
    오른쪽으로 가면 다시 돌아올 것 같습니다.
    혹시 입력한 문자열을 편집하고 있을지도 모릅니다.
    하지만 어셈블러를 읽을 수 없습니다.

    조사한 곳
    리눅스 ltrace 명령을 사용하면 함수 호출을 볼 수 있습니다.
    이제 strcmp를 보면 좋지 않을까요?

    해보자.



    대량의 데이터가 넘쳐 와서 이것은 힘들다.
    파일로 출력합니다.



    그리고 test.txt 안에서 strcmp를 봅니다.



    암호의 첫 번째 인수의 문자가 뒤집혀 있습니다.
    조금 전의 IDA를 보는 한 첫 번째 인수는 아마 입력의 문자열 쪽이라고 생각합니다만, 일단 확인해 보겠습니다.



    이것을 실행하고 test.txt의 strcmp를 다시보십시오.



    하야 입력한 문자열이 뒤집히는 것 같습니다.
    아까의 수수께끼의 처리에서 뒤집어 놓고 있겠지요.
    그래서 뒤집은 문자열을 인수로 다시 실행해 보겠습니다.



    했습니다.

    좋은 웹페이지 즐겨찾기