본문 바로가기

CTF/Write-up

TAMU CTF reversing

https://ctf.tamu.edu/scoreboard




threads - 100


스트링을 보면 플래그가 보인다

전체적으로 문제들이 매우 쉬웠다.



threads2 - 100


md5값이 보여서 바로 복호화했더니


바로나온다



fancy bear - 100


after func0을 출력한다

함수중에 func0이란 함수명이있는데 한번보자


0x66


0x66보다 크면 넘어가게된다.

이런식으로 함수가 func0~func37까지 있는데

헥스레이의 저부분을 다 리스트화해서 1씩 더한값을 출력하면된다.


1
2
3
4
5
6
= [0x660x680x660x640x6c0x7a0x630x780x6d0x600x6c0x680x620x5e0x640x650x650x6e0x710x730x5e0x330x360x2f0x630x640x320x630x630x640x350x340x340x350x310x620x340x7c]
 
result = ""
for x in a:
    result += chr(x+1)
print result
cs


1
gigem{dynamic_effort_470de3dde65562c5}
cs




SEDNIT - 200


원래 풀이를 안쓸려고 했는데 이 문제 때문에 쓴다


우선 문자열을 봤더니 별게 없다


이렇게 문자들이 보였는데 바이너리에서 저부분을 쫙 뽑았다 

(이렇게 안해도 f2() 함수에서 알아서 출력해주더라...)

아무튼 문자들을 다 구하면 


이렇게 base64가 보이게되는데 첫번째는 패스하고 나머지 2개를 복호화하면


RSA라는 것을 알게된다

첫번째는 RSA 복호화 할 문자열인데 참 좋게 private key을 줬다

원래 생각한 RSA는 n e p q 이런걸로 푸는건줄 알았는데

openssl이라는것을 알 수 있었다 openssl을 처음써봤는데


한번에 안풀렸다 계속 삽질을 하다가 ddddh형의 도움으로 풀수있었다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from base64 import b64decode
 
 
def decrypt_RSA(privkey, message):
    key = open(privkey, "r").read()
    rsakey = RSA.importKey(key)
    # rsakey = PKCS1_OAEP.new(rsakey)
    decrypted = rsakey.decrypt(b64decode(message))
    return decrypted
 
flag = "qheRHIyKE/tFq4aDh0x8uvPsaWefzmbWgbCD1ogaTiRSftMnrbFpSigVdYw5UVxwmcUWWIypVLGMco7i4O5uNadtTq++I5bEKl9LyXL7XIMLF2gu6VvRYi7DAe3L8sGlVrji/msWTzyIJhm6BxKuqp7lliRhgfmgjR0LgkCowEQ="
print decrypt_RSA('test.key', flag)
cs


이렇게 소스를 검색하다 찾았는데 제대로된 키를 얻을 수 없었다

PKCS1_OAEP

PKCS1_v1_5.new 이부분을 주석처리하고 돌리게되면 제대로된 키값을 구할 수 있다.



1
gigem{feels_g00d_2b_a_pIrate__b061efc2712c4109}
cs


'CTF > Write-up' 카테고리의 다른 글

hust 2017 참가 후기 & 풀이  (1) 2017.05.28
defcon 2017  (0) 2017.05.01
Reto Android Crackme #2  (0) 2017.03.05
Reto Android Crackme #1  (0) 2017.03.05
pragyan ctf MI6  (0) 2017.03.03