문제 화면이다. 관리자로 로그인하라는 힌트외엔 아무런 힌트가 없다.


웹에선 일반적으로 관리자 페이지를 admin이란 이름으로 지정한다.

해서 suninatas.com/admin에 들어가니 또다른 힌트가 나온다.


qrcode.jpg를 다운받아서 웹용 qrcode 리더에 업로드 하면 URL이 나온다.

이곳에 들어가면 아래와 같은 로그인 창이 나온다. 

로그인에 성공하면 될것 같은데.. 로그인 창이 단순히 html로 이루어진 폼이 아니라 swf파일이다.

로그인 버튼을 누르면 어디로 값을 전송하는지 알 수 없어서 고민하다.. swf를 decode 해주는 사이트를 알았다.

여기에 해당 url을 던져주면 디코드한 코드가 나온다.

코드를 보면 아이디는 admin이고, 비밀번호는 myadmin!@ 이지만

굳이 로그인할 필요없이 저 Auth에 있는 문장이 플래그다. 


'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS MISC13번  (0) 2017.05.31
SuNiNaTaS MISC17번  (0) 2017.05.31
SuNiNaTaS binary10번  (0) 2017.05.22
SuNiNaTaS binary11번  (0) 2017.05.22
SuNiNaTaS binary09번  (0) 2017.05.22

문제를 다운받아 PEiD로 보면 C#으로 컴파일 된 파일이다.

.net Decompiler로 이 파일을 열어보자.

디컴파일러는 jetbrains dotpeek를 사용했다.


디컴파일된 소스를 보면 인증키가 나온다.


'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS MISC17번  (0) 2017.05.31
SuNiNaTaS MISC12번  (0) 2017.05.26
SuNiNaTaS binary11번  (0) 2017.05.22
SuNiNaTaS binary09번  (0) 2017.05.22
SuNiNaTaS web23번  (0) 2017.03.10

문제 파일을 다운받고 실행 시키면 메시지 창이 나온다.

우선 아무 값이나 입력하고 버튼을 눌러보면 반응이 없다. 정확한 값을 입력해야지 반응이 있을것으로 보인다.


올리디버거로 열어서 참조 문자열들을 보니 Congratulation!이라는 문자열이 있다.

이 주변에서 호출되는 함수들에 BP를 걸고 그 주위를 살펴보자.


올리에서 실행시키고 12345를 입력하고 BP에서 멈춘다.


0045034C에서 EBP-4에는 012621D4라는 주소가 들어있는데, 012621D4에는 사용자가 입력한 값이 들어있다. 이 값을 EAX에 MOV한다는 것이다.

0045034F에서 EBX+330는 012621BC라는 주소가 들어있는데, 012621BC에는 입력갑과 비교할 값이 들어있다. 이 값을 EDX에 MOV한다는 것이다.

레지스터는 아래와 같다.

그리고 아래 함수를 호출하면 JMP가 활성화 되지 않고 진행되어서 인증키가 나온다.

'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS MISC12번  (0) 2017.05.26
SuNiNaTaS binary10번  (0) 2017.05.22
SuNiNaTaS binary09번  (0) 2017.05.22
SuNiNaTaS web23번  (0) 2017.03.10
SuNiNaTaS web22번  (0) 2017.03.07

소스보기에 나오는 이상한 값들에 대해 구글링 해보니 Bz compress다. decompress해보자
import bz2

un = "BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084"
pw = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08"

un = bz2.decompress(un)
pw = bz2.decompress(pw)
print un
print pw

'Wargame > pythonchallenge' 카테고리의 다른 글

pythonchallenge LEVEL 6  (0) 2017.04.14
pythonchallenge LEVEL 5  (0) 2017.04.12
pythonchallenge LEVEL 4  (0) 2017.04.12
pythonchallenge LEVEL 3  (0) 2017.04.12
pythonchallenge LEVEL 2  (0) 2017.04.12
import re

def read_file(input):
    f = open("C:/Users/Administrator/Downloads/"+input+".txt", 'r')
    dat = f.read()
    f.close()
    return dat
        
num = "".join(re.findall("[0-9]",read_file("90052"))) #start!

for i in range(910):
    if "Next nothing is" in read_file(num):
        num = "".join(re.findall("[0-9]",read_file(num)))
        print "[*] text : " + num
    else:
        print read_file(num)
        break
# -*- coding:utf-8 -*-
import re
import zipfile

def read_file(input):
    f = open("C:/Users/Administrator/Downloads/"+input+".txt", 'r')
    dat = f.read()
    f.close()
    return dat

def append_num(num):
    num_list = []
    for i in range(910):
        if "Next nothing is" in read_file(num):
            num = "".join(re.findall("[0-9]",read_file(num)))
            num_list.append(num)
        else:
            break
    return num_list

def Main():
    num = "90052"
    result = ""
    zip_file = zipfile.ZipFile("C:/Users/Administrator/Downloads/channel.zip")
    num_list = append_num(num)

    for i in num_list:
        result += zip_file.getinfo(i+'.txt').comment
    print result

if __name__ == "__main__":
    Main()

'Wargame > pythonchallenge' 카테고리의 다른 글

pythonchallenge LEVEL 8  (0) 2017.04.15
pythonchallenge LEVEL 5  (0) 2017.04.12
pythonchallenge LEVEL 4  (0) 2017.04.12
pythonchallenge LEVEL 3  (0) 2017.04.12
pythonchallenge LEVEL 2  (0) 2017.04.12
import urllib
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"

res = urllib.urlopen(url).read()
dat = pickle.loads(res)

for line in dat:
    string = ""
    for cnt in range(len(line)):
        char = line[cnt][0]
        for n in range(line[cnt][1]):
            string += char
    print string

'Wargame > pythonchallenge' 카테고리의 다른 글

pythonchallenge LEVEL 8  (0) 2017.04.15
pythonchallenge LEVEL 6  (0) 2017.04.14
pythonchallenge LEVEL 4  (0) 2017.04.12
pythonchallenge LEVEL 3  (0) 2017.04.12
pythonchallenge LEVEL 2  (0) 2017.04.12
import urllib2
import urllib2
import re

def http_conn(param):
    url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
    req = urllib2.Request(url+param)
    res = urllib2.urlopen(req).read()
    return res

param = "".join(re.findall("[0-9]",http_conn("8022")))
for i in range(400):
    if "and the next nothing is" in http_conn(param):
        param = "".join(re.findall("[0-9]",http_conn(param)))
        print "[*] "+"".join(re.findall("[0-9]",http_conn(param)))
    else:
        print http_conn(param)
        break


'Wargame > pythonchallenge' 카테고리의 다른 글

pythonchallenge LEVEL 6  (0) 2017.04.14
pythonchallenge LEVEL 5  (0) 2017.04.12
pythonchallenge LEVEL 3  (0) 2017.04.12
pythonchallenge LEVEL 2  (0) 2017.04.12
pythonchallenge LEVEL 1  (0) 2017.04.12
import re

dat = """
""" # input value

print "".join(re.findall("[^A-Z]+[A-Z]{3}([a-z])[A-Z]{3}[^A-Z]+", dat))


'Wargame > pythonchallenge' 카테고리의 다른 글

pythonchallenge LEVEL 5  (0) 2017.04.12
pythonchallenge LEVEL 4  (0) 2017.04.12
pythonchallenge LEVEL 2  (0) 2017.04.12
pythonchallenge LEVEL 1  (0) 2017.04.12
pythonchallenge LEVEL 0  (0) 2017.04.12

+ Recent posts