Wargame/xcz.kr

[xcz.kr] 28번 Rendezvous

광팔2 2021. 2. 10. 13:48
반응형

문제

파일을 다운로드하면 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

반응형