티스토리 뷰

write up

제 1회 trust ctf write-up

slyfizz 2019. 2. 16. 19:15

rootctf 이후로 블로그에 글을 쓰지 않았는데 이번에 trust ctf에 참여하고 write-up을 써본다.



REV 3문제와 MISC 2문제를 풀었다.

From z3 import * 로 참여했고 12등이다.

MIC CHECK!


일반적인 mic check이다.

FLAG: TRUST{Welcome_CTF_Have_FUN!}

Easy Taebo

'left_jab' : '@==(^0^)@'
'left_mid_jab' : '@=(^0^)@'
'mid_jab' : '@(^0^)@'
'right_mid_jab' : '@(^0^)=@'
'right_jab' : '@(^0^)==@'
'left_hook' : '@(^0^)@=='
'right_hook' : '==@(^0^)@'
'left_speedball' : '@@@(^0^)'
'right_speedball' : '(^0^)@@@'
'left_kick' : '@||(^0^)==@'
'mid_kick' : '@==(^||^)==@'
'right_kick' : '@==(^0^)||@'
action_list.txt에 이런 내용들이 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *
p=remote("server.trustctf.com",44923)
for i in range(1,102):
    if i==101:
        print p.recv()
        break
    k=p.recvuntil('Taebo '+str(i)+' : ')
    print k
    result=p.recv()
    print result
    result=result.replace(' + ',' ').replace('right_mid_jab','@(^0^)=@').replace('left_mid_jab','@=(^0^)@').replace('left_jab','@==(^0^)@').replace('mid_jab','@(^0^)@').replace('right_jab','@(^0^)==@').replace('left_hook','@(^0^)@==').replace('right_hook','==@(^0^)@').replace('left_speedball','@@@(^0^)').replace('right_speedball','(^0^)@@@').replace('left_kick','@||(^0^)==@').replace('mid_kick','@==(^||^)==@').replace('right_kick','@==(^0^)||@').replace(" >>",'')
    result=''.join(result)
    print result
    p.send(result)
    print(i)
print p.recv()
cs

recv로 받은 내용을 replace를 이용해서 적절하게 바꾸어 주면 플래그를 얻을 수 있다.

Flag:TRUST{w0w_y0u_9o7_4_w0nd3rfu1_b0dy_lik3_m3}

MESS


mess.exe를 분석하다보니 S3CRe7PA5sW0rD를 넣으면 플래그를 얻을수 있었다.


FLAG:TRUST{bBRWt>UHD?5wQ}

Hello WorldS!


"Hello World"프로그램이 많아...

dukup11ch1가 8개를 만들었어.

그의 프로그램들을 찾고 "Yara rule"을 작성하세요

(Code the rule in one line.) (rule은 한줄로 짜시오.)

Yara rule은 처음들어봐서 여러 문서들을 찾아보면서 문법에 대해서 찾아보면서 풀었다.

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
import yara
 
rule = input("Input your rule... ")
 
try:
    crule = yara.compile(source=rule)
except yara.SyntaxError:
    print("SystaxError!")
    exit()
except:
    exit()
count = 0
filelist=["1.exe""2.exe""3.exe""4.exe""5.exe""6.exe""7.exe""8.exe""9.exe""10.exe""11.exe""12.exe""13.exe""14.exe""15.exe""16.exe"]
myfile=["6.exe""7.exe""8.exe""9.exe""10.exe""11.exe""13.exe""14.exe"]
notmine=["1.exe""2.exe""3.exe""4.exe""5.exe""12.exe""15.exe""16.exe"]
for file in filelist:
    fp = open('/home/ctf/' + file,'rb')
    fdata=fp.read()
    matches = crule.match(data=fdata)
    if (file in myfile and matches != []):
        count = count+1
        #print(file)
    elif file in notmine and matches == []:
        count = count+1    
        #print(file)
    fp.close()
if count == 16:
    print("TRUST{EXAMPLE_FLAG}")
 
 
cs


문제에서 주어진 코드를 해석해 보자면 myfile list의 exe에는 match되고  notmine list의 exe에는 

match되지 않는 yara rule을 작성하면 된다.그래서 grep과 string 명령어를 이용해서 1~16.exe들의 

문자열을 찾아보던중



RSDSLj@라는 문자열이 조건에 부합한다는 사실을 알았다.

1
2
3
4
5
from pwn import *
p=remote("server.trustctf.com",5252)
print p.recv()
p.sendline("rule foo: BadBoy { strings: $a=\"RSDSLj@\" condition: $a }")
print p.recv()
cs


Yara rule 문법에 맞춰서 코드를 짜주면


플래그를 구할 수 있다.

FLAG:TRUST{I9n0re_PDB_R1CH_I'm_s0rry_TT}

나를크랙!

.net 으로 작성된 프로그램이어서 de4dot로 confuserex난독화를 해제하고 dnspy로 분석해보다가

시간이 얼마 남지 않았을 때 immunity debugger로 분석을 해보던 중

크랙미 버튼을 누르고 ctrl+v를 하니 저렇게 플래그가 나왔다....


FLAG:TRUST{W0w_You_F!ind_IT}


후기:방학동안에 손목이 조금 부러져서 ctf 하기에 힘들줄 알았는데 생각보다 괜찮아서 다행이었고 

Yara rule이라는 새로운 걸 알게 되어서 기쁘다.




'write up' 카테고리의 다른 글

ASISctf 2019 quals  (0) 2019.04.22
19회 해킹캠프 rev 풀이(magic_number 추가)  (0) 2019.02.21
제 2회 rootctf  (0) 2018.12.26
x-mas ctf Endless Christmas  (0) 2018.12.24
2018 OtterCTF Hopity Hop  (2) 2018.12.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/11   »
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
글 보관함