[Tenable CTF] One Byte at a Time - 포너블 / XOR
간단한 포너블 문제
풀이수가 401 이나 되는걸 보니 아주 쉬웠나보다.
별다른 설명없이 원격으로 접속할 수 있는 주소만 주어진다.
nc 를 이용해 원격접속을 해보면
[flag]> 라는 프롬포터가 나오면서 사용자의 입력을 받는다.
그럼 사용자의 입력값이 플래그와 어느정도 일치하는지 검증한 후,
입력한 부분까지 일치한다면
플래그의 그 다음글자를 어떤 IPv4 주소의 랜덤한 부분과 XOR 한 결과를 알려준다.
일단 플래그 포맷이 flag{} 라는것을 알고 있기 때문에
맨 먼저 f 부터 입력해봤다.
여러번 반복해서 입력해본 결과
f 를 입력했을때 결과로 나오는 값은
0x1b, 0x6e, 0x7c 세 가지였다.
이 세 값이 f 다음글자인 l 과 XOR을 했을때 나오는 값은
0x77 0x02 0x10 세 가지이다.
이 세 가지 숫자가 IPv4 주소를 구성한 숫자라고 추측할 수 있다.
그럼 한글자씩 늘려가면서
0x77, 0x02, 0x10 과 각각 XOR 을 해보고 의미있는 문자열이 나오면
계속 플래그에 추가하는 방식으로 전체 플래그를 알아낼 수 있다.
Pwntool 을 이용해 문제를 풀어보려 했으나
네트워크 문젠지 너무 느려서 그냥 수작업으로 풀었다.
풀이는 이런 방식이다.
먼저 CyberChef(https://gchq.github.io/CyberChef/) 의 Input 값에
77 10 02 를 써놓고 From Hex 레시피를 추가한다.
그다음 원격접속 서버에서 출력된 값을
XOR 키값으로 넣은 뒤
Output 에 나오는 값을 보고 의미있는 문자열이 나오면 하나씩 추가하는 것이다.
이런 방식으로 한글자씩 알아내면
플래그를 찾을 수 있다.