[xcz.kr] 28번 Rendezvous
파일을 다운로드하면 contact.pcap 파일을 다운로드할 수 있다.
pcap 파일을 보고 ip / 포트 / 키 를 찾아야 겠다.
pcap 파일을 열기 위해 NetworkMiner을 사용했다.
파일을 살펴보다 Chat.exe 파일을 발견했다.
xcz.kr(1.234.80.148)에서 192.168.0.123이 Chat.exe 파일을 다운로드한 것을 볼 수 있다.
이제 192.168.0.123을 보면
MAC OS(14.40.84.156)에서 통신이 들어온 것을 볼 수 있다.
여기서 패킷의 통신을 찾아보려 했지만 networkminer에서는 안 보는데 whwireshark에서는 보인다... 이유를 모르겠다... 진짜 삽질 많이 했는데 이래서 wireshark가 정말 좋다고 하는 건가...
이제 wireshark에서 14.40.48.156 통신을 확인해 보자.
192.168.0.123과 14.40.84.156이 통신한 것을 볼 수 있다.
tcp stream을 해보면
caht.exe 프로그램을 이용한 암호화 통신인 듯하다.
이게 어떻게 암호화했는지 모르니까 chat.exe 파일을 실행시켜 통신 패킷을 캡처해 봐야겠다.
두 개를 같은 pc로 연결을 해서 통신을 확인할 것이다.
Rawcap을 이용하여 패킷을 캡처했다.
왼쪽이 방을 만든 쪽 / 오른쪽이 접속한 쪽
a 97 / b 98 / c 99
A 65 / B 66 / C 67
만든 -> 접속
abc 64/66/124/31 / ABC 84/86/80/19
33/32/31/ 21/20/19/
접속 -> 만든
ABC 69/65/65/2 / abc 101/97/97/2
4 / 3/2 / 4 / 3 / 2 /
처음 abc를 통신을 보냈을 때 암호화하여 64/66/124/31을 통신을 한다.
여러 가지 연산을 해봤는데 XOR이 규칙이 있는 것 같다.
abc의 아스키코드 값은 97, 98, 99이다. 여기서 a 97과 암호화된 값 64를 XOR을 하면 33 값이 나온다.
b 98과 66을 XOR 하면 32, c 99와 124을 XOR하면 31 값이 나온다.
하지만 암호화 값에는 64/66/124/31 값이 나오는데 마지막 31은 문자의 마지막을 의미하는 숫자라고 예상하고 있다.
마지막 전에 있던 31 값을 그대로 가져다 쓴 듯하다. 나머지도 규칙이 같다.
그래서 마지막 문자는 알고 있으니 무차별 대입을 코드를 만들어 마지막 문자와 가장 어울리는 문장을 찾아 대화를 만들어 보면 될 듯하다.
data = input().split("/")
last = chr(int(data[-1]) ^ int(data[-2]))
for i in range(1,128):
for j in range(0, len(data) - 2):
num = int(data[j]) ^ i
if 32<= num <= 126:
print(chr(num), end="")
if i == 1:
i = 127
i -= 1
print(last)
print(' ')
일단 코드를 간단히 설명해 보면
암호화된 문자들이 /로 나눠져 있으니 /를 기준선으로 배열을 만들어 줬고, ASCII 가 127까지 있으니 총 127번의 반복을 주었다.
if문을 써 좀 더 편하게 빨리 문장을 찾을 수 있게 이상한 기호의 문자들은 제거를 해서 문장이 짧은 것들은 보지 않고 넘길 수 있었다.
A(14.40.84.156)
102/100/13
hi
B(192.168.0.123)
106/72/94/63/87/105/59/104/58/104/109/126/98/112/52/114/50/125/127/97/105/45/120/98/103/108/38/8
Hi~ It's quite a long time.
92/92/69/17/88/78/88/72/12/82/69/92/8/69/67/64/74/28/35
how have you been?
12/99/46/98/45/47/80/85/84/82/92/26/95/87/69/22/84/20/85/94/80/87/1/47
I'm looking for a flag.
89/83/27/67/86/77/23/93/91/91/68/18/87/92/78/73/18/45
do you know flag?
121/116/106/126/58/116/125/55/98/125/113/51/98/112/99/124/121/98/126/111/42/121/100/125/38/81/42/87/3
give me the password plz T.T
A(14.40.84.156)
120/116/58/96/119/98/54/98/117/125/124/112/48/105/98/108/107/52/42/98/99/8
do you wanna flag? kk
B(192.168.0.123)
73/74/79/69/13/10/43
yeah!!
A(14.40.84.156)
31/1/20/15/17/68/23/10/4/64/120/54/41/40/43/96/118/119/47/53/47/122/56/32/126/56/32/35/40/60/42/45/44/103/127/112/119/114/117/39/36/121/12/9/89/5/12/92/1/9/5/87/13/81/6/5/85/2/29/76/27/30/78/79/27/17/9/76/85/67/4/2/74/75/116/31
visit the 'xcz.kr/homepage/86266ee937d97f812a8e57d22b62ee29.jpg' kkk
B(192.168.0.123)
105/116/99/100/56/25
thx~!
문자열들을 얻을 수 있다. 이제 A가 제공해준 사이트를 들어가 보자.
사이트를 들어가면 이미지 하나를 얻을 수 있다.
아무것도 보이지 않는 이미지가 있다.
StegSolve 툴을 이용하면 바로 키를 얻을 수 있다.
md5(오랜 친구의 IP_포트_키)
md5(14.40.84.156_5180_HIDDEN_TEST)
플래그 값 : 775272c47334b54451ee36a9399e8aa6