CERTUNLP 2020 CTF - Writeup

skyepodium·2020년 12월 6일
1
post-thumbnail
post-custom-banner

12.02 ~ 12.04

1차 대회 참여한 기록 있다고 해서, 술마시고 있는데 대회 시작 30분전에 갑자기 이메일왔다.

그냥 개인적으로 이 대회, 처음 CTF 공부할때 참여했던 기억나서 좋아.

1. Big head

response 헤더 확인하는 문제

2. Comment

소스보기 하면 나온다.

처음에는 이런 문제가 보안과 무슨 관련이 있나 궁금했었는데,

개발자들이 중요한 내용을 주석으로 작성해놓는 경우가 꽤 많다고 들었다.

3. Login

Web 클라이언트 사이드 검사 문제

form에 Usernam, Password 입력해보면 네트워크 찌르지 않고, client-side에서 validiation check 한다.

다시 확인해보니, 처음 렌더링하면서 login.js를 받았다.

login.js 로 들어가보면 flag가 있다.

4. Decrypt

들어가보면 아래처럼 되어있다. 암호화 과정 같다.

같이 import 된 js.js에 들어가보면 암호화 방식이 적혀있다.

콘솔창에 직접 해보면 다음과 같다.

그래 프론트에서 암호화하지 말자.

5. EncoderMaster

소켓 통신하면서 인코딩 200개를 수행하면 된다.

pwntools, python3 로 했다. 뭔가 문자열 처리 좀 그래.

중간에 랜덤으로 '' 빈 값이 들어오는데 어떻게 처리해야하할지 모르겠다. 이거 이후로는 인코딩 결과가 잘 안맞는다.

그리고, 자바나 다른 언어로 해보려고했는데, base 라이브러리 임포트하는것부터 짜증난다.

파이썬쓰자

from base64 import *
from pwn import *

p = remote('encoderbase.ctf.cert.unlp.edu.ar', 5001)

en_list = "16", "32", "64", "85"

cnt = 0

while True:
    message = p.recvuntil("encode:").decode("utf-8")
    print("message {0}".format(message))

    word = p.recv()
    word = word[1:len(word) - 1]
    print(len(word))
    print("word!!! {0}".format(word))

    result = ""
    for en in en_list:
        if en in message:
            if en == "16":
                result = b16encode(word)
            elif en == "32":
                result = b32encode(word)
            elif en == "64":
                result = b64encode(word)
            else:
                result = b85encode(word)

    print("result!!!", result)
    p.sendline(result)

    message = p.recvline()
    print("message", message)
    cnt += 1
    print("cnt ", cnt)

    if cnt == 200:
        message = p.recvline()
        print("message", message)

6. Md5

코드를 보면 md5 해쉬 결과가 434d0c349e0e35ee9ed740e83a23fee5와 같으면 flag를 보여준다.ㅏ

해쉬는 비복원이다. 다만, 온라인에는 해쉬값을 저장해놓는 사이트들이 있다. 이러한 것들을 레인보우 테이블이라고한다.

몇개 뒤지면 나오는데 암호화 전이 chinitalenda 이다.

chinitalenda을 input 에 넣어주고 submit 하면된다. 사실 이 자체가 플레그다.

7. Breakpoint

같이 import 된 js 파일이 있다.

submit 누르면 실행되지만 false여서 실행되지 않는다.

필요한 부분만 console에서 실행시키자.

profile
callmeskye
post-custom-banner

0개의 댓글