CTF
-
[Clear] LINE CTF 2021 babycrypto2 WriteupCTF/LINE CTF 2021 2021. 3. 22. 20:37
주어진 파일을 분석해보자 . #!/usr/bin/env python from base64 import b64decode from base64 import b64encode import socket import multiprocessing from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto.Util.Padding import pad, unpad import hashlib import sys class AESCipher: def __init__(self, key): self.key = key def encrypt(self, data): iv = get_random_bytes(AES.block_size) sel..
-
[Clear] LINE CTF 2021 babycrypto1 WriteupCTF/LINE CTF 2021 2021. 3. 22. 20:34
주어진 문제 파일을 분석해보자. #!/usr/bin/env python from base64 import b64decode from base64 import b64encode import socket import multiprocessing from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto.Util.Padding import pad, unpad import hashlib import sys class AESCipher: def __init__(self, key): self.key = key def encrypt(self, data): iv = get_random_bytes(AES.block_size) s..
-
[Clear] LINE CTF 2021 diveinternal WriteupCTF/LINE CTF 2021 2021. 3. 22. 19:23
주어진 페이지에 접근해보자. 비트코인 관련 페이지인데, 사용자 입장에서 액션을 취할 수 있는 기능은 이메일을 입력하여 구독하는 것 뿐이었다. 이를 참고하여 주어진 파일을 분석해보자. 우선 주어진 파일의 구성을 통해 해당 서버는 Public, Private로 나뉘어있음을 알 수 있다. 여기서 첫 번째 문제점은 가장 핵심적인 내용을 담고 있는 main.py 를 보면 다양한 기능이 있지만 Public에서는 /coin, /addsub 이외의 기능은 사용이 불가하다. 가장 의심스러웠던 메일을 통한 구독 기능, 즉, /addsub 의 로직을 분석해보았지만 별다른 특이점은 없었다. 그렇다면, 플래그를 출력해주는 부분을 찾아서 역추적을 해보도록 하자. rollback.py에 아래 부분에서 플래그를 출력해줌을 알 수 있..
-
-
[Study] zer0pts CTF 2021 Kantan Calc WriteupCTF/zer0pts CTF 2021 2021. 3. 10. 23:20
주어진 페이지에 들어가보자. 계산기 기능을 하는 페이지와, 그 소스가 있다. ${code} 부분이 사용자 입력 값인데, 임의의 코드를 삽입해서 플래그값을 출력해주도록 하면 될 것 같다. 하지만 입력값의 최대 길이는 29이고, 플래그를 통째로 출력하려고 시도하면 zer0pts 문자열을 포함하면 에러를 출력하는 구문때문에 제한된다. 따라서 시나리오는 1. 29자 이하의 코드를 삽입하되, 2. 플래그를 한글짜씩 출력해야한다. 29자 이하의 코드만 삽입 가능하기 때문에 간단하게 함수를 정의하는 방법을 알아보다가 화살표 함수라는 것을 알게 되어 사용했으며, /* ${FLAG} */ 부분을 통째로 문자열화시켜서 주석을 무효화시킴과 동시에 ${FLAG} 파라미터를 읽어오도록 하였다. 우선 로컬에서 테스트환경을 구축하..
-
[Study] ze0rtps CTF 2021 infected WriteupCTF/zer0pts CTF 2021 2021. 3. 9. 22:52
문제 서버에 접근하면 아래와같은 안내문이 출력된다. ????에 해당하는 네자리 문자열을 요구하는듯 하다. 주어진 pow.py를 실행시키면 Suffix, Hash 를 요구하는데 각각에 sha256() 안에 ????를 제외한 부분과 뒤의 해쉬값을 입력해주면 네자리 문자열을 출력해준다. 이를 입력하면 쉘에 접근이 가능하다. 플래그 획득을 위해서는 /root에 접근해야 하는데, 권한이 없다. 또 하나의 주어진 파일의 이름이 backdoor이므로 이와 관련성을 찾아보았다. backdoor이름으로 파일 검색을 해보니, /dev/backdoor 라는 device가 존재한다. 해당 디바이는 character device임을 알 수 있었다. (character device란, 버퍼 캐시등을 이용하지 않고 데이터를 읽고 ..
-
-