Wargame/webhacking2017. 6. 18. 23:26

webhacking.kr 21번 문제를 보면 다음과 같다.

BLIND SQL INJECTION 하라고 한다.

BLIND SQL INJECTION을 하기 위해서는 참일 때의 화면과 거짓일 때의 화면을 알아야 한다.

즉, 참과 거짓을 판별할 수 있어야 한다.

일단 입력창에 1을 넣어보자.

url을 보면 get 방식으로 no 와id 그리고 pw가 전달되는 것을 알 수 있으며, no값이 입력창에 입력한 값이 들어가는 것을 알 수 있다.

no가 1일때 아래 Result는 True가 나온다.

no가 3 이상일 때는 다음과 같이 False가 나온다.

no를 이용해 id와 pw를 알아내야 한다.

다음과 같은 쿼리문을 넣어보자

no=3 or no=2 and length(id)=4&id=&pw=

Result가 False이다.

이번에는 다음과 같은 쿼리문을 넣어보자.

no=3 or no=2 and length(id)=5&id=&pw=

Result가 True이다.

즉, no=2인 id의 길이가 5임을 알 수 있다.


이런식으로 no=2와 no=1의 각 id 길이를 알아낼 수 있다.

그리고 substr() 함수를 이용해 id와 pw를 알아낼 수 있다.

예를 들면 다음과 같은 쿼리문을 넣으면 된다.

no=3 or no=1 and substr(id,1,1)=0x67&id=&pw=

no=1인 id의 첫번째 글자는 0x67( g )임을 알 수 있다.


하나하나 입력해보는 것보다 코드를 작성해 자동으로 알아내면 좋을 것 같다.

21.py 파일을 생성해서 다음과 같이 코딩한다.



아래 파일은 위 코드를 작성한 python 파일이다.

21.py

위 python 파일을 돌리면 no=1의 id, pw와 no=2의 id, pw를 알아낼 수 있다.

no2의 pw를 Auth에 입력하면 문제가 풀린다.



'Wargame > webhacking' 카테고리의 다른 글

[webhacking.kr] 13번 문제  (1) 2017.06.19
[webhacking.kr] 58번 문제  (0) 2017.06.18
[webhacking.kr] 54번 문제  (0) 2017.06.18
[webhacking.kr] 53번 문제  (0) 2017.06.18
[webhacking.kr] 49번 문제  (0) 2017.06.18
Posted by Imp3rio