[FTZ] level3 풀이

이예은·2022년 5월 22일
0

FTZ

목록 보기
5/9

이건 정석적인 풀이 과정이 아닌, 어떻게 생각해서 어떻게 풀이해 보았는지 작성한 포스트입니다. 때문에 더 깔끔한 풀이를 보고 싶으신 분들은 다른 포스트를 보시는 걸 추천합니다.


일단 언제나처럼 ls-al을 하고,

hint를 보고... 이게... 뭐지......
일단 짧은 지식으로 c언어 코드를 읽어보니, 기본적으로 argc와 argv라는 변수가 있는 메인 함수에서 argc가 2가 아니라면 오토 디거의 버전을 출력한 뒤 사용 방법을 알려주고, 그렇지 않다면-즉 argc가 2라면-cmd에 있는 메시지에 dig @ argv[1] version.bind chaos txt를 이어붙이는 것으로 보인다. 맞는지는... 잘 모르겠지만...

일단 이름으로 파일을 찾았고 실행해보았다.

맨 처음 생각했던 것처럼 방법이 나와서, 어떻게 해야 될지 모르겠지만 일단 소켓을 사용하니 어떤 명령어를 주는 걸까 싶어 mypass를 써봤는데 딱히 되진 않았다. 생각해 보니 저 위치에 host를 쓰라는 것 같아 level4도 입력해 보았지만 큰 진전은 없었다. 그래서 힌트를 보고 문자열 형태로 전달해보기 위해 ""를 넣어보았다.

그냥으로는 안돼서 sql injection 공격의 원리처럼 하면 되지 않을까 생각해보았다.

sql injection 공격은 예를 들어

password=="(받은인자)" 

꼴로 처리하는 서버가 있을 때, 인자를 1" or "1" == "1과 같이 주는 것과 같다고 기억하고 있다. 이렇게 되면 전체 꼴이

pasword=="1" or "1" == "1"

이 되어 항상 성립하게 되어 버리므로, 제대로 된 비밀번호를 입력하지 않아도 실행되는 것이다.

이 공격에서 억지로 성립하는 식을 만들기 위해 프로그래밍 언어를 이용한 것처럼, c언어에서 명령어가 끝나는 것은 ;로 표시함을 이용해

dig @;my-pass version.bind chaos txt 

형태가 되도록 만들어 보았다. 이렇게 되면 dig @까지를 하나의 명령어로 인식하고, 다음 cmd 창에 들어온 명령어가 my-pass가 된다. 따라서 level4의 비밀번호를 뱉어내게 된다. 야호!

개인적으로는 왜 해킹을 하더라도 코딩을 공부해야 되는지 보여주는, 좋은 문제였던 것 같다.

profile
Testing leads to failure, and failure leads to understanding.

0개의 댓글