crackme01


메인을 보면 대놓고 플래그 관련 문자열을 보여준다. 그냥 쭉 이어주면 된다.



crackme02


아이디,비밀번호 값을 받아서 간단한 연산을 통해 정수형 값을 구한다음 이 값으로 플래그 테이블 값들을 복호화 한다. 플래그 형식이 encrypt{?} 이기 때문에 간단히 브포 돌려서 encrypt 문자열 있는거 찾아주면 된다.


payload.py


a = "08030E1F141D192E392B162C010A021F041905001E4003021940080C1E1410"

flag = ""

for j in range(0,128):

    flag = ""

    for i in range(0,len(a),2):

        flag +=chr(int("0x"+a[i:i+2],16)^j)

    if "encrypt" in flag:

        print flag



crackme03


5가지 조건에 맞는 인풋을 넣어주면 되는데 아래와 같이 로직이 상당히 심플하다. 



아래와 같이 인풋 구해서 원격서버에 보내주면 플래그가 나온다.


payload.py

from pwn import *


def getInput_1():

return "CRACKME02"


def getInput_2():

return p32(0xDEADBEEF)


def getInput_3():

return "ZXytUb9fl78evgJy3KJN"


def getInput_4():

for i in range(0,128):

if i * i * i + 2 * (2 * i * i - i) - 3==0:

return str(i)


def getInput_5():

table = [0xD5,0xCE,0xE7,0xC9,0x69]

frontString = ""

endString = ""

for i in range(0,len(table)):

if i == len(table)-1:

frontString += chr(table[i])

break

if table[i]%2==0:

frontString += chr(table[i]/2)

endString += chr(table[i]/2)

else:

frontString += chr(table[i] / 2)

endString += chr(table[i] / 2+1)

print frontString

print endString

return frontString+endString[::-1]


p = remote('104.154.106.182', 7777)


p.sendlineafter(': ', getInput_1())

p.sendlineafter(': ', getInput_2())

p.sendlineafter(': ', getInput_3())

p.sendlineafter(': ', getInput_4())

p.sendlineafter(': ', getInput_5())

p.interactive()



Sweeeeeet

들어가보면 아무것도 없다. 그냥 페이지 들가보면 쿠키값에 플래그처럼 보이는거 세팅되는데 가짜다. 할수있는게 딱히 없는데 쿠키 값 보면 md5처럼 보이는 값이 있다. 이거 레인보우 테이블에 돌려보면 100나오는데 0으로 md5만들어서 보내주면 플래그 나온다.


Slash Slash

Flask 소스를 주는데 코드를 보면 특정 페이지 요청할때 서버 내 저장된 환경변수 값 읽어서 뿌려준다. 근데 원격서버가 아니고 소스만 주고 내 서버에서 하라해서 해보면 환경변수가 당연히 세팅이 안되있어서 플래그가 안나온다. 근데 주석보면 virtualenv라는 파이썬 가상환경 같은걸로 돌려보라고 되있다. 해당 환경대로 구축해서 돌리면 서버 구동할 때 환경변수가 세팅되는 듯 한데, 이게 상당히 귀찮은 작업이라 대충 꼼수로 생각해보면 어쨋든 서버 구동하면서 환경변수 세팅하는 코드가 내가 받은 코드 중에 존재할 수 밖에 없다. 컴파일된 pyc면 죄다 디컴해서 확인해야해서 상당히 귀찮을 수 있는데 일단 이 가능성 배제하고 환경변수 세팅이 가능한 setenv(python code) or export(linux shell)로 다운받은 전체 코드 검색해보면 딱봐도 수상해보이는 export로 세팅해주는 base64 인코딩 값이 있다. 이거 디코딩해주면 플래그 나온다. 


vault

로그인창하나 나오는데, 인젝션해주면 로그인되면서 flag.png인가 qrcode이미지 준다. 이거 디코딩해봤자 이상한 링크하나 나와 의미가 없다. 디비 다 뒤져봐도 플래그가 없다. 근데 file_priv가 살아있어서 블라인드로 파일 내용 읽을 수 있다. 근데 또 mysql 권한으로 소스코드 leak가 안된다. 답도 없는 상황인데 자세히보면 그냥 인젝션으로 로그인만 해주면 세션 쿠키에 base64인코딩된 플래그가 있다.


repeaaaaaat

간단한 flask ssti다. 필터가 아예 없어서 그냥 아래 페이로드로 구해주면 된다.

payload = {{url_for.__globals__.os.popen('cat ./flag.txt').read()}}






'CTF > Writeup' 카테고리의 다른 글

Midnightsun CTF 2019 Marcodowno  (0) 2019.04.07
Radar CTF 2019 Inj3c7  (0) 2019.04.05
Codegate 2019 Open CTF Reversing Write up  (2) 2019.04.02
b00t2root CTF 2019 Web Writeup  (0) 2019.03.31
Securinets CTF Quals 2019 AutomateMe  (0) 2019.03.26
블로그 이미지

JeonYoungSin

메모 기록용 공간

,