개인적으로 딱히 그렇게 좋은 문제는 아닌 것 같다..그냥 풀고 가볍게 넘어가는 정도로 하자.
이런저런 값들을 넣어봤다.
일단 id와 pw칸에 무조건 값이 들어가 있어야하는 조건이 있는 것 같다.
무조건 참이 되는 경우인
id : 'or 1=1#
pw : 1234
를 넣어본 결과
wrong password가 뜬다.
그리고 무조건 거짓이 되는 경우인
id : 'or 1=0#
pw : 1234
를 넣어본 결과 login fail 이 뜬다.
여기까진 뭐, 참인 경우 wrong password 거짓인 경우 login fail이 뜨는 blind-sql-injection 문제의 흐름이겠다고 생각했다.
직감적으로 admin이라는 계정으로 로그인해야할 것 같다는 느낌이 와서
id : admin' or 1=1#
pw : 1234
를 넣어본 결과
wrong password가 뜬다.
일단 admin이라는 계정이 맞는 전제하에, 해당 구문이 참이라는 건데 그렇다면 sql injection 기술대로 wrong password가 아니라 로그인이 되어야 하는 게 아닌가? 의문이 들었다. 참인건 알겠는데.. admin 계정이 정말 있다면 wrong password가 뜰 게 아니라 로그인이 되어야 한다. 저건 참인 구문이니까.. 그럼 나중에 패스워드를 정확히 입력한다면 그것도 참인 경운데 그땐 왜 로그인이 된다는거지?? ㅋㅋ
true 면 로그인이 되어야지 로그인이 안되고 ..
그럼 문제풀고 아디 비번입력했을때는 왜 로그인되는겨
조금 껄끄러웠다.
후..어쨌든 일단 문제는 풀어야겠으니까 아이디와 패스워드 컬럼명부터 찾아야하는데, select 가 필터링되어있다. ㅋㅋ 다른 기능을 쓰라는 것 같은데, 그런 난이도의 문제는 아닌 것 같고...
여기서 전제가 들어간다. 전제를 해야만한다 ㅋㅋ
컬럼명이 id, pw인 컬럼이라는 것.. 이게 아니면 답이 없다 ㅋㅋ
따라서 아래처럼 입력하여 id 컬럼과 admin 게정이 있는지 동시에 확인했다.
' or id='admin'#
1234
결과로 wrong password가 뜬다. 뭐 참이란다. 즉 컬럼명이 id라는것도 맞고, 계정이 admin이 있는것도 맞다.
이게 그냥 무턱대고 컬럼명을 id, pw라고 확신하면 안된다..
여기서 url 파라미터로 id=admin&pw=124 라고 넘겨준다고 해서 sql의 컬럼이 id와 pw라는 확증은 없으므로..
어쨌든 전제가 맞았다. 사실 이 상황에서 이게 아니면 걍 노답이다.. ㅋㅋㅋ
패스워드에 대한 pw 컬럼이 존재하는지도 확인해봤다.
admin' or pw=1234#
1234
결과로 wrong password. 즉 여기서 사용하는 id, pw값은 데이터베이스에 id, pw라는 컬럼에 데이터로 들어가게 된다.
이제 id가 admin인 컬럼의 pw가 몇자린지 확인해본다. 아래와같은 과정을 갖는다.
admin' and length(pw)=36#
1234
36자리에 숫자를 넣다보면 36일 때 wrong password, 즉 참이라고 뜰 것이다.
그럼 36자리를 프로그램으로 돌려보자
admin' and ascii(substr(pw, x, 1))=y#
1234
이런 식으로 x, y 값에 각각 자릿수, 아스키코드값을 넣어보며 포문을 돌리며 값을 맞춰보면 된다.
결과는 there_is_no_rest_for_the_white_angel
그냥 풀고 지나치는 문제정도로만 바라봐야지..
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 24번 (0) | 2020.10.05 |
---|---|
[Webhacking.kr] 23번 (0) | 2020.10.03 |
[Webhacking.kr] 20번 (0) | 2020.09.30 |
[Webhacking.kr] 19번 (0) | 2020.09.28 |
[Webhacking.kr] 18번 (0) | 2020.09.28 |