서버에 접속했을 때 이다. This is function x()>>>가 출력되며 자유롭게 입력이 가능하다.
여러가지 testcase들을 통해 접근한다.
test들을 통해 계산을 해주고 입력이 길면 Big size~를 출력해주는 것을 알 수 있다.
__file__는 파이썬 심볼로 현재 실행중인 파일의 위치와 이름을 반환해준다.
__file__을 통해 py 즉 파이썬 파일이라는 것을 알 수 있다.
open(__file__)은 현재 실행중인 파일의 주소와 정보를 출력해준다.
Mode 'r' 을 통해 읽기 모드를 지원한다는것을 알 수 있다.
open(__file__).read()를 입력하면 소스코드가 출력된다.
소스를 분석해보면
ThreadTCPServer(host,port), TreadTCPRequestHandler) //목적지 호스트와 포트에 들어오는 request에 대해 해당 클래스에 있는 handler을 실행시킨다.
프로그램을 실행시키면
위 함수가 실행된다.
recv함수를 통해 입력을 받으면 self.data로 입력한 값이 들어가고 self.data를 x함수에 인자로 넣어준다.
입력한 데이터가 들어가는 곳이다.
지금까지는 플래그와 관련없는 프로그램이 동작하는 소스를 분석한것이다.
플래그와 관련이있는 부분은 o함수이다.
위 함수의 조건문을 충족하면 flag를 보여준다.
a는 우리가 입력할 문자열이다.
플래그를 얻으려면 우리가 입력한 문자열과 key데이터들을 xor연산한값이 secret값과 일치해야한다.
그러므로 secret값을 hex디코딩 한 값과 key의 값을 xor연산하면 플래그가 나온다.
문제해결 소스
플래그
'CTF_writeup > 2018' 카테고리의 다른 글
Noote_ver0 (0) | 2018.12.22 |
---|---|
PCTF_2013_ropasaurusrex (0) | 2018.12.22 |
MMA-CTF-2-greeting (0) | 2018.12.22 |
Trustealth CTF easy (0) | 2018.12.22 |
ISITDTU_CTF_dead_note_lv1 (0) | 2018.12.22 |