Jaeseo's Information Security Story

RITSEC CTF 2019 - WriteUp - URGGGGG 본문

Write UP/RITSEC CTF 2019

RITSEC CTF 2019 - WriteUp - URGGGGG

Jaeseokim 2019. 11. 25. 15:11

URGGGGG

문제구분 난이도 작성자
Forensics JaeSeoKim

문제 내용

문제 풀이

와이어 샤크로 분석을 해보면 무수히 많은 USB 시그널 패킷이 보입니다. USB keyboard에 대한 패킷으로 예상됩니다. 일단 tshark를 이용하여 usb.capdata만 추출합니다.

tshark -r URGGGGGG.pcapng -T fields -e usb.capdata > usb.txt

이제 추출된 usb.txt 파일을 가지고 python 스크립트를 짜봅니다.

keyboard_code = {
    '01': '🌐🌐', #LCtrl
    '02': '✅✅', #LShift
    '04': 'aA',
    '05': 'bB',
    '06': 'cC',
    '07': 'dD',
    '08': 'eE',
    '09': 'fF',
    '0a': 'gG',
    '0b': 'hH',
    '0c': 'iI',
    '0d': 'jJ',
    '0e': 'kK',
    '0f': 'lL',
    '10': 'mM',
    '11': 'nN',
    '12': 'oO',
    '13': 'pP',
    '14': 'qQ',
    '15': 'rR',
    '16': 'sS',
    '17': 'tT',
    '18': 'uU',
    '19': 'vV',
    '1a': 'wW',
    '1b': 'xX',
    '1c': 'yY',
    '1d': 'zZ',
    '1e': '1!',
    '1f': '2@',
    '20': '3#',
    '21': '4$',
    '22': '5%',
    '23': '6^',
    '24': '7&',
    '25': '8*',
    '26': '9(',
    '27': '0)',
    '28': '\n\n',
    '29': '⛔⛔', #esc
    '2a': '💥💥', #BackSpace
    '2b': '\t\t',
    '2c': '  ',
    '2d': '-_',
    '2f': '[{',
    '30': ']}',
    '38': '/|',
    '39': '🆎🆎', #CapsLock
    '3a': '¹¹', #F1
    '4c': '💢💢', #delete
    '4f': '➡➡',
    '50': '⬅⬅',
    '51': '⬇⬇',
    '52': '⬆⬆'
}

f = open("usb.txt","r")
lines = f.readlines()
f.close()

usb_data = list()
usb_data_tmp = ""
for i in lines:
    if i != "00:00:00:00:00:00:00:00\n" and i != usb_data_tmp:
        usb_data.append(i[:-1])
        usb_data_tmp = i

for i in range(len(usb_data)):
    print(usb_data[i])


flag = ""
x = 0
y = 0
copy_tmp = ""

for line in usb_data:
    data = line.split(":")
    if "01" in data[0]:
        print("Ctrl!")
        for i in range(0,8):
            if "2a" == data[i]:
                flag = flag[:-1]
            elif "00" != data[i]:
                flag += keyboard_code[data[i]][0:1]

    elif "02" in data[0]:
        print("Shift!")
        for i in range(0,8):
            if "2a" == data[i]:
                flag = flag[:-1]
            elif "00" != data[i]:
                flag += keyboard_code[data[i]][1:2]

    else:
        print("just input!")
        for i in range(2,8):
            if "2a" == data[i]:
                flag = flag[:-1]
            elif "00" != data[i]:
                flag += keyboard_code[data[i]][0:1]

print(flag)

결과물을 보고 flag를 추측합니다.

ablglddolglfikfj
jhf
a✅✅)✅✅(✅$✅&✅49✅✅(✅Y✅9¹afg
💢 
✅✅R✅✅I✅✅T✅✅S✅✅E✅✅C✅⛔✅✅{✅w✅✅H✅0✅✅_✅s✅✅@✅⛔⬆⬅⬇⬅⬆⬅✅✅⬅✅🌐🌐xx⬇➡🌐🌐vvd✅✅_✅n⬆➡✅✅⬅✅🌐🌐c🌐⬇🌐🌐vtw0r✅k1n✅✅G✅✅_✅w✅✅A✅s
jlkgjkgfe⬆✅✅_✅t✅✅H✅3✅✅_✅o✅✅N✅l✅✅Y✅✅_✅p✅✅A✅ck3t✅✅_✅✅T✅y✅✅P✅3✅✅}✅⬇
akjilhflfskfefdgsdfcehjiuha
RITSEC{wH0_s@id_netw0rk1nG_wAs_tH3_oNlY_pAck3t_TyP3}

참고 포인트

  • wireshark,tshark
  • usb_keyboard_code
Comments