Jaeseo's Information Security Story

RITSEC CTF 2019 - WriteUp - Uplink 본문

Write UP/RITSEC CTF 2019

RITSEC CTF 2019 - WriteUp - Uplink

Jaeseokim 2019. 11. 25. 15:09

Uplink

문제구분 난이도 작성자
Pwn JaeseoKim

문제 내용

문제 풀이

일단 주어지는 주소를 통해 접속을 해봅니다.

root@kali:~# nc uplink.ritsec.club 8001
G��
 @��
 @��
 @��
 @��
 @��
 @��
 @��
 @��
 @��
 @��
 @��root@kali:~# 

접근을 하자 알 수 없는 문자만 출력을 해주는 모습을 볼 수 있습니다. 이때 한번 hex 형태로 받아서 봅니다.

root@kali:~# nc uplink.ritsec.club 8001 | xxd




00000000: 0847 bfff 2040 80c2 2040 80c2 2040 80c2  .G.. @.. @.. @..





00000010: 2040 80c2 2040 80c2 2040 80c2 2040 80c2   @.. @.. @.. @..





00000020: 2040 80c2 2040 80c2 2040 80c2 2040 80c2   @.. @.. @.. @..
root@kali:~# 

hex값을 통해 보니 처음 0847 bfff이후는 동일하게 엔터입력에 대해 동일한 응답값 2040 80c2로 응답 하는 것을 볼 수 있습니다.

제공해주는 PDF 문서를 보니 2진수를 가지고 처리를 하는 것으로 보입니다. 2진수로 받아서 확인해봅니다.

root@kali:~# nc uplink.ritsec.club 8001 | xxd -b -c 4
00000000: 00001000 01000111 10111111 11111111  .G..

00000004: 00100000 01000000 10000000 11000010   @..

00000008: 00100000 01000000 10000000 11000010   @..

0000000c: 00100000 01000000 10000000 11000010   @..

00000010: 00100000 01000000 10000000 11000010   @..

00000014: 00100000 01000000 10000000 11000010   @..

00000018: 00100000 01000000 10000000 11000010   @..

0000001c: 00100000 01000000 10000000 11000010   @..

00000020: 00100000 01000000 10000000 11000010   @..

00000024: 00100000 01000000 10000000 11000010   @..

00000028: 00100000 01000000 10000000 11000010   @..

0000002c: 00100000 01000000 10000000 11000010   @..
root@kali:~# 

00001000 01000111 10111111 11111111을 해석해보면 아래와 같이 해석이 되는 것을 볼 수 있습니다.

00001000 01000111 10111111 11111111
00aq???? 01?????? 10?????? 11??????
    1000   000111   111111   111111
일단 채널 7bit
    1000   000 == 10진수 64 == 8진수 0o100 == Heartbeat 채널
나머지 데이터
    111   111111   111111 == 8진수 0x77777 == Heartbeat 채널 기본 데이터 

이제 PDF에서 알려주는 방법을 통해 satellite의 이름을 알아내보도록 합니다.

00aq???? 01?????? 10?????? 11??????
00010000 01001000 10000000 11000000
\x10 \x48 \x80 \xc0
query bit를 1로 하고 채널을 name으로 한다음 나머지 데이터는 0으로 설정.
root@kali:~# python -c 'print "\x10\x48\x80\xc0"' | nc uplink.ritsec.club 8001 |xxd -b -c 4
00000000: 00001000 01000111 10111111 11111111  .G..
00000004: 00100000 01001000 10000000 11000000   H..
00000008: 00100000 01000000 10000000 11000010   @..

일단 패킷을 분석 해보면 첫번째는 Heatbeat 패킷이고 두번째가 name에 해당하는 채널 이지만 abort bit가 1이므로 system abort 상태 입니다. 그리고 마지막 TLE 패킷이고 abort bit가 1이므로 Invalid Size 입니다.

설명 byte byte byte byte
Signatures(S) 2bit*4 SS?????? SS?????? SS?????? SS??????
Abort siganls(A) 1bit SSA????? SS?????? SS?????? SS??????
Query bit(Q) 1bit SSAQ???? SS?????? SS?????? SS??????
Channels(C) 7bit SSAQCCCC SSCCC??? SS?????? SS??????
Data(D) 15bit SSAQCCCC SSCCCDDD SSDDDDDD SSDDDDDD

위의 구조를 참고하여 Data에 해당하는 영역을 가져온다음 15bit이기 때문에 ascii로 변환한다면 ascii 7bit + dummy bit? 1bit + ascii 7bit로 해서 문자열로 읽어 오면 됩니다. 하지만 현재 정상적으로 응답을 주지 않고 있기 때문에 여기 까지 분석 했습니다..... ㅠㅠ

참고 포인트

  • PDF 문서 사라질 정도로 참고..........
  • xxd를 이용하여 hex,binary 형태로 응답 보기

 

UPLINK_SPEC_V1.pdf
0.28MB

Comments