반응형

M4ndU


1. Easy Teabo






action_list.txt를 참고하여 예시처럼 출력되도록 코드를 짜서 돌리면 된다.


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
from pwn import *
def teabo(a):
    a = a.replace('left_jab''@==(^0^)@')
    a = a.replace('left_mid_jab''@=(^0^)@')
    a = a.replace('right_mid_jab''@(^0^)=@')
    a = a.replace('right_jab''@(^0^)==@')
    a = a.replace('left_hook''@(^0^)@==')
    a = a.replace('right_hook''==@(^0^)@')
    a = a.replace('left_speedball''@@@(^0^)')
    a = a.replace('right_speedball''(^0^)@@@')
    a = a.replace('left_kick''@||(^0^)==@')
    a = a.replace('mid_kick''@==(^||^)==@')
    a = a.replace('right_kick''@==(^0^)||@')
    a = a.replace('mid_jab''@(^0^)@')
    a = a.replace('+ ''')
    a = a.replace(' >>''')
    a = a.replace('\n''')
    print(a)
    return a
 
 
= remote("server.trustctf.com"44923)
p.recvuntil('Taebo 1 : ')
order = p.recvline()
p.sendline(teabo(order))
 
for i in range(099):
    print(p.recvuntil(': '))
    order = p.recvline()
    p.sendline(teabo(order))
 
p.interactive()
 
cs


flag : 1 TRUST{w0w_y0u_9o7_4_w0nd3rfu1_b0dy_lik3_m3}




2. IDENTITY_5



apk파일이 주어진다. zip으로 확장자명을 바꿔주고 classes.dex를 추출해서 dex2jar을 이용해 디컴파일을 했다. 그 다음 gui을 이용해 코드를 봤다.


 

mainactivity에서 링크를 찾을 수 있다. 2번째 플래그 조각, qr코드를 스캔하면 문자열이 나온다.




secondhacking에서 4번째 플래그 조각 qr코드 링크를 찾을 수 있다.







apk파일을 압축을 풀어서 \res\drawable\ 폴더에서 flag.png와 flag5.png을 찾을 수 있다.
각각 1번째 5번째 플래그다.

3번째 플래그는 대회 사이트 문제에서 찾을 수 있다. (처음에 없었다가 출제 미스로 생겨났다. 이거 찾느라 2시간이...)

flag : TRUST{Th1s_1s_fl@g_@ndr0id_@dd_Qrc0d3}



3. Starcraft2




스타크래프트 2 맵파일로 보이는 파일이 주어진다.





배틀넷 런처에서 스타크래프트 2 편집기를 실행하고




편집기로 해당 파일을 열면 플래그를 얻을 수 있다.

 

flag : TRUST{FUN}


 


4. MESS




실행해보면 주어진 문자열의 복호화된 값을 입력해주면 플래그가 나올 것 같음을 알 수 있다.

 



올리디버거로 열어서 참조된 문자열을 확인해보면, 정상적인 문자열이 있다.



 


실행을 하면 이 값이 암호화되어 출력된다.



 


암호화되기 전 문자열을 입력해주면 플래그가 나온다.



Flag : TRUST{bBR\t>UHD?5wQ}




5. Archiver


main.py에서 saveArchive함수를 보면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def saveArchive():
    url = request.form['url']
    T = int(time.time())
    
    try:
        res = requests.get(url)
    except:  
        return util.alert("Error!")
    
    if res.status_code != 200:
        return util.alert("code is not 200")
    
    data = unicode(res.text)
    hashed = util.hashing(url)
 
    os.system("mkdir %s/%s" % (app.config['path'], hashed))
    fd = open('%s/%s/%s' % (app.config['path'], hashed, str(T)), 'w')
    fd.write(data)
    fd.close()
 
    return redirect(url_for('main'))
cs


urlT(시간) 값을 받아서 해당 페이지의 내용을 읽어서 아래 경로에 저장해둔다.


/tmp/[random_string]/[url_hashed]/[T]


이때 url은 해시값으로 들어가며, T는 그대로 들어간다.

 

viewArchive 함수를 보면,


1
2
3
4
5
6
7
8
9
def viewArchive():
    url    = request.form['url']
    T      = request.form['T']
    hashed = util.hashing(url)
 
    fd = open('%s/%s/%s' % (app.config['path'], hashed, str(T)), 'r')
    data = unicode(fd.read())
    fd.close()
    return render_template('view.html', data=data)
cs


urlT값을 받아 해당 경로에 있는 파일의 내용을 읽어서 출력해준다. 여기서 T값을 이용해 flag를 읽도록 하면 된다.

 

파일을 하나 저장해두고, burp suite를 이용해 T값을 ../../../flag로 조작해주면

파일 경로가 /tmp/[random_string]/[url_hashed]/../../../flag가 되고 main.py/flag을 읽어오게 된다.

 


flag : TRUST{Easy_Local_file_traversal_N3xt_t1me_i_1l_us3_DB..:(}






번외 - 아쉽게 못 푼 문제.


RSA1




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
from time import time
 
def powermod3(a, b, n):
    r = 1
    while b > 0:
        if b & 1 == 1:
            r = r * a % n
        b /= 2
        a = a * a % n
    return r
 
def powermod4(a, b, n):
    if b == 1:
        return a % n
    r = powermod4(a, b / 2, n)
    r = r * r % n
    if (b & 1== 1:
        r = r * a % n
    return r
 
= 1649729212658550722856763813613372
= 1275312736838027047985273062147003
= 1695538043948767252952277333354653
 
starttime = time()
print powermod3(a, b, c)
print time() - starttime
 
starttime = time()
print powermod4(a, b, c)
print time() - starttime
 
cs


(시간함수 빼도 된다.)


나온 값을 두자리씩 끊어서 ascii로 바꿔주면 된다.


복호화값이라길레 그냥 정수값으로 넣어서 인증 못한...





--추가 RSA2


문제 : 

암호화키 e : 34873453193

두 소수의 곱 N : 443961743055319980564015263729

암호문 c : 기록 안해두어서 모릅니다...



N을 소인수분해. https://www.wolframalpha.com/input/?i=factorize+443961743055319980564015263729


rsatool.py 이용해(python rsatool.py -p 657862726787803 -q 674854684689443 -e 34873453193) d를 구해준뒤 rsa1에서 사용한 코드를 이용해 복호화 한 뒤, ascii 돌리면 된다.

반응형

+ Recent posts