Description

Category: Crypto

Source: SECCON 2017 Quals.

Points: 300

Author: Jisoon Park(js00n.park)

Description:

Decrypt index.html from PCAP.

Please, submit the flag in the format: "SECCON{" + Answer + "}"

 Answer is written in index.html

source : SECCON 2017 Quals.

Write-up

파일의 압축을 풀어보면 pcap 파일 하나만 들어있다. 일단 wireshark로 열어보자

역시나 TLS 통신을 위한 패킷들이 보인다. 살펴봐야 할 패킷 자체가 별로 없으므로, 한번 훑어보면 plain으로 주어진 힌트는 별달리 없는 것을 알 수 있다.

TLS 자체를 공격해야 할 것으로 생각되니, 우선 서버의 인증서를 추출하도록 한다.
(위의 Wireshark 화면에서 Certificate 항목에서 우클릭 후 'Export packet bytes'를 하면 저장할 수 있다.)

추출된 인증서를 열어보면 제대로 추출되어 정상적으로 파싱되는 것을 확인할 수 있다. 이제 인증서에서 서버의 공개키를 다시 추출한다.

추출된 서버의 공개키에 대해 defactoring(인수분해)을 시도해본다. 당연히 해봐야 하는 시도이기도 하지만, 문제 이름에 'Smooth'가 들어가는 걸로 봐서 간단히 defactoring이 가능한 smooth number의 사용으로 인한 RSA 취약점 문제임을 유추할 수도 있다. (사실 나도 잘은 모른다......)

정확한 알고리즘은 모르지만(;;;) 빠른 시간 내에 defactoring에 성공하여 private key를 얻을 수 있다.

pcap 파일을 잘 보면 Key Exchange 후에 584번 포트를 이용해서 Application Data가 전송되는 것을 확인할 수 있다.

얻어낸 private key를 이용하여 TLS 패킷을 복호화 해보자. 네트워크 패킷 분석 전문 도구인 wireshark는 IP와 포트를 이용해서 stream을 지정해주고 private key를 알려주면 알아서 TLS stream을 복호화 해준다.

wiki

584번 포트의 데이터에 Follow -> SSL Stream을 적용하면 복호화된 html 컨텐츠를 확인할 수 있고, flag를 찾을 수 있다.

Flag : SECCON{One of these primes is very smooth.}

'writeups > Crypto' 카테고리의 다른 글

drinks  (0) 2019.11.25
RSAaaay  (0) 2019.11.23
Simon and Speck Block Ciphers  (0) 2019.11.23
Ps and Qs  (0) 2019.11.23
Messenger  (0) 2019.11.23

Description

Category: Crypto

Source: SECCON CTF 2017 Quals.

Points: 100

Author: Jisoon Park(js00n.park)

Description:

Simon and Speck Block Ciphers

Simon_96_64, ECB, key="SECCON{xxxx}", plain=0x6d564d37426e6e71, cipher=0xbb5d12ba422834b5

source : SECCON CTF 2017 Quals.

Write-up

Simon and Speck 암호를 이용한 문제이다.

Simon 암호화, 96bit Key와 64bit Block을 갖는 모드에서 Plain Text와 Cipher Text를 기반으로 Key를 찾는 문제이다.

Key의 4byte만 가려져 있으므로 Brute-Forcing을 이용해서 키를 확인한다.
(애초에 4byte만 가려져 있다는 점에서 암호 알고리즘 자체의 취약점을 찾는 문제가 아니라는 것을 유추할 수 있다.)

문제에서 Simon and Speck 암호의 스펙이 제공되는데, 인터넷에서 간단히 구현체를 찾아서 다운로드 하였다. 다운로드 한 코드에서 테스트 부분을 수정하여 Brute-forcing을 수행하면 된다.

실행시켜보면 약간의 시간이 흐른 후 flag를 확인할 수 있다.

Flag : SECCON{6Pz0}

'writeups > Crypto' 카테고리의 다른 글

RSAaaay  (0) 2019.11.23
Very Smooth  (0) 2019.11.23
Ps and Qs  (0) 2019.11.23
Messenger  (0) 2019.11.23
crack crack crack it  (0) 2019.11.23

Description

Category: Crypto

Source: SECCON CTF 2017 Quals.

Points: 200

Author: Jisoon Park(js00n.park)

Description:

Ps and Qs

Decrypt it.

(zip file pass:seccon2017)

source : SECCON CTF 2017 Quals.

Write-up

주어진 파일을 unzip으로 풀어보면, RSA public key 2개(pub1.pub, pub2.pub)와 이를 이용해서 암호화 한 파일인 cipher 파일을 확인할 수 있다.
ciper 파일을 복호화하면 flag가 나올 것 같다.

사용할 수 있는 데이터가 두 개의 public key이기 때문에, 두 public key로 부터 공통의 p를 찾아내는 공격을 시도한다. 공격에는 RsaCtfTool이 제공하는 기능을 사용하였다.

(두개의 Key Pair의 n(modulus)이 동일한 p를 이용해서 생성되었기 때문에 gcd(n1, n2)를 통해 p를 직접 계산하고, 이로부터 q와 e를 알아내어 직접 복호화를 수행해도 무방하다. 간단한 계산이긴 하지만, 역시 도구를 사용하는게 더 편리.)

도구의 힘으로 1초도 안되어 p, q를 찾아내고 p, q, e를 이용하여 private key 데이터를 생성하였다.

툴이 찾아준 private key를 파일에 쓰고, 이를 이용하여 cipher 파일을 간단히 복호화 하였다.

Flag : SECCON{1234567890ABCDEF}

'writeups > Crypto' 카테고리의 다른 글

RSAaaay  (0) 2019.11.23
Very Smooth  (0) 2019.11.23
Simon and Speck Block Ciphers  (0) 2019.11.23
Messenger  (0) 2019.11.23
crack crack crack it  (0) 2019.11.23

Description

Category: Crypto

Source: Samsung CTF 2017 Quals.

Points: 100

Author: Jisoon Park(js00n.park)

Description:

I made a new Messenger with Identity Based Cryptography.

The flag is in admin's messages. Can you read it?

nc 10.113.108.125 30303

source : Samsung CTF 2017 Quals.

Write-up

우선, 주어진 IBM.py 파일을 살펴보자.

서비스 시작과 동시에 messages 디렉토리의 admin 파일에 flag를 기록하고,
pk(public key)와 서버의 sk(secret key)를 생성한다.

이후 사용자가 register를 요청하면 사용자 ID와 pk, sk를 이용하여 사용자별 sk를 생성하여 반환해준다.

read 또는 write 요청이 있는 경우에는 (brute-force 공격을 막기 위해 POC 단계를 거친 후) 사용자 ID와 사용자 sk를 이용하여 로그인 수행 후에 read/write 요청을 수행한다.

read 및 write 기능은 messages/[id] 파일을 통하여 이루어 지므로, register/read/write를 잘 조합하여 messages/admin 파일의 내용을 읽어 오면 flag를 획득할 수 있겠다.

user_sk 하나만 가지고는 진도를 나가기 힘들어 보인다. register 시도 횟수에는 제한이 없으니 두 개의 id와 그에 따른 sk를 생성하여, 각각을 sk_a, sk_b라고 하자.

주어진 ID 기반 암호화 시스템은 sk의 비밀성에 기반을 두고 있으니, 서버의 sk만 알 수 있으면 시스템을 공격할 수 있을 것이다.

서버의 sk에 지수 연산을 하여 사용자 sk를 생성하고 있으니, 두 개의 사용자 sk를 알고 있으면 확장 유클리드 알고리즘(extended euclid algorithm)을 사용하여 서버의 sk를 찾을 수 있을 것으로 여겨진다.

확장 유클리드 알고리즘을 이용하여 다음을 만족하는 a와 b를 찾는다.

id1과 id2는 SHA256을 적용 했을 때 서로 소(relative prime)인 id를 사용하면 된다.
아무거나 몇 번 시도해보면 쉽게 찾을 수 있다.

지수 연산과 곱셈 연산을 통해 다음과 같이 서버의 sk를 찾아낼 수 있다.

sk를 찾았으므로, register와 login 및 read 과정을 참고하여 exploit을 작성 후 실행해보면
admin의 메세지에 있는 flag 값을 찾아낼 수 있다.

Flag : SCTF{Constructing_ID_Based_Cryptosystem_is_so_hard_:(}

'writeups > Crypto' 카테고리의 다른 글

RSAaaay  (0) 2019.11.23
Very Smooth  (0) 2019.11.23
Simon and Speck Block Ciphers  (0) 2019.11.23
Ps and Qs  (0) 2019.11.23
crack crack crack it  (0) 2019.11.23

Description

Category: Crypto

Source: wargame.kr

Points: 375

Author: Jisoon Park(js00n.park)

Description:

.htaccess crack!

can you local bruteforce attack?

Write-up

패스워드를 잊었다고 하고, .htpasswd 파일이 제공된다. 제공된 파일의 내용은 다음과 같다.

blueh4g:$1$3iKA/0.9$AbeqHOgXKAQlQRly3q2R8/

인터넷을 검색해보면 .htpasswd 파일은 .htaccess에 대한 암호화를 제공하는 패스워드 파일이라고 한다.

앞의 blueh4g는 id, 뒤의 내용은 암호화된 패스워드인데, 암호화된 패스워드가 1로 시작하는건 md5를 이용한 암호화라고 한다. 두번째 $ 이전까지가 salt고 어쩌고 하는데, 알아봐야 별 무소용인 내용이었다.

md5는 대부분 쉽게 복호화할 수 있으니 그렇게 푸는 문제인 줄 알았지만 좀 더 찾아보니 그냥 md5가 아니고, md5 crypt라고 해서 md5를 여러번 돌려서 만드는거라 복호화가 어려워 보였다.

.htpasswd crack으로 검색해 봤더니 주로 JtR(John the Ripper)을 이용하는 것 같았다.

JtR 공부하는셈 치고 옵션을 찾아봤더니 이럴 때 쓸만한 mask 옵션이 있었다.

문제에서 첫 7글자는 주어졌으니 뒤에 많아봐야 한 글자에서 다섯 글자 정도 더 있을거라고 생각하고 옵션을 구성하여 JtR을 돌려보았다.

생각보다 간단하게 빠른 시간 내에 찾을 수 있었다. 해킹은 툴빨이라더니 역시...

알아낸 비밀번호를 웹페이지에 등록하면 flag를 얻을 수 있다.

Flag : b151d5a5957025875c4c811f0bba3b8865aa2026

'writeups > Crypto' 카테고리의 다른 글

RSAaaay  (0) 2019.11.23
Very Smooth  (0) 2019.11.23
Simon and Speck Block Ciphers  (0) 2019.11.23
Ps and Qs  (0) 2019.11.23
Messenger  (0) 2019.11.23

+ Recent posts