Webhacking Writeup 21번 문제입니다.
접속해보면 대놓고 블라인드 SQL문제라고 알려줍니다.
그럼 일단 블라인드 SQL 푸는 방식답게
True 의 경우와 False 경우를 찾아야합니다.
True를 출력해줄 1=1# 을 이용해봤는데
아무것도 출력되지 않았습니다.
URL을 보면 pw= 이후 비어있는것으로 보아 pw에도 값 입력이 필수인것 같습니다.
해서 pw에도 값을 추가해보니
wrong password가 출력되었습니다.
wrong password가 True의 경우이니
다음으로 False의 경우도 찾겠습니다.
login fail이 출력되었습니다.
이제 위에서 말한대로 True의 경우와 False의 경우를 찾았으니
블라인드 SQL이 가능해졌습니다.
우리가 찾을건 admin의 계정이므로
id는 admin이어야 하고 pw의 길이는? 이라는 문장이 되어야 하기에
id=admin and length(pw)=?#
구문으로 길이를 찾을 구문을 작성하였습니다.
이걸 문제사이트에 전송해보면
패스워드의 길이가 1개일리 없으니 당연히 False가 출력되어
login fail이 출력됩니다.
그래도 전송을 하면 URL인코딩이 되었으므로
파이썬으로 코드를 짜는데 도움을 받을 수 있습니다.
코드를 작성해보면
길이는 몇인지 몰라 예상으로 100까지를 잡아뒀습니다.
길이를 찾으면 바로 패스워드값 하나하나를 도출하는 코드도 필요하니
바로 작성해보겠습니다.
substr 함수를 이용해 패스워드값을 하나씩 받아와 'a' 처럼 값일 비교하는 식을 구성했습니다.
다시 문제사이트에 제출해 URL인코딩을 확인해주고 코드를 작성해주면
위에서 구한 길이만큼 반복을 해주고,
아스키코드로 33~127까지를 chr타입으로 변경해 비교하고
값이 일치해 True인 wrong password가 출력된다면 저장하는 방식으로
코드를 작성했습니다.
이제 실행해주면
패스워드의 길이는 36이 도출되었구요
패스워드도 출력되었습니다.
이를 제출해주면...
네 실패합니다...
여기서 한번 흔들리고 검색하면서 찾아보니
mySQL은 대소문자 구분을 안하지만
pw를 입력받아 비교하는 부분은 구분을 하더라구요
출력된 패스워드 값을 전부 소문자로 치환해서 전달해주면
문제가 해결되었습니다!
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup 51번 문제 (0) | 2022.08.20 |
---|---|
Webhacking Writeup 34번 문제 (0) | 2022.08.19 |
Webhacking Writeup 44번 문제 (0) | 2022.08.16 |
Webhacking Writeup 61번 문제 (0) | 2022.08.15 |
Webhacking Writeup 56번 문제 (0) | 2022.08.15 |