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
Wargame/webhacking2017. 6. 18. 22:37

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


일단 페이지 소스를 열어보자.

kk.js 파일과 kk2.js 파일이 있다. 그리고 hackme.swf 파일도 있다.

hackme.swf 이 파일을 분석해야 되는 것 같다.

클릭해 들어가보자.

처음 화면과 다를게 없다.

이를 hackme.swf 라는 이름으로 저장하자.

safari에서 저장하면 제대로 저장되지 않는다. 그래서 firefox를 열고 해당 페이지를 다운받았다.


다운받은 파일을 hex에디터로 열어보면 다음과 같은 화면을 볼 수 있다.

맨 아래 부분쪽에 가면 url이 나오는데 이 url로 이동하면 문제가 풀린다.


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

[webhacking.kr] 13번 문제  (1) 2017.06.19
[webhacking.kr] 21번 문제  (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
Wargame/webhacking2017. 6. 18. 22:16

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

처음 화면이 위와 같고, 시간이 지나면 password를 한글자씩 보여준다.

노가다 식으로 하나하나 받아 적어도 되지만, 일단 페이지 소스를 보도록하자.

소스를 보다보면 answer() 함수가 정의되어 있는 것을 볼 수 있다.

function answer(i)

{

x.open('GET','?m='+i,false);

x.send(null);

aview.innerHTML=x.responseText;

i++;

if(x.responseText) setTimeout("answer("+i+")",100);

if(x.responseText=="") aview.innerHTML="?";

}

aview.innerHTML 부분에 저장된 값이 출력이 되며, x.responseText에 한글자가 저장되기 때문에 한글자씩 출력이 된다.

즉, aview.innerHTML=x.responseText에서 "="를 "+="로 변경해주면 한글자씩 뒤에 붙을 것이다.

마지막 if문을 보면 x.responseText가 null이면 aview.innerHTML에 "?"를 저장한다.

즉, 마지막에 ?를 출력하게 된다.

이를 없애주면 될 것 같다.

burp suite를 이용해 response를 변조하도록 하자.

그러면 위와 같이 password가 한글자씩 뒤에 붙으면서 출력이 된다.

이 값을 Auth에 입력하면 문제가 풀린다.

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

[webhacking.kr] 21번 문제  (0) 2017.06.18
[webhacking.kr] 58번 문제  (0) 2017.06.18
[webhacking.kr] 53번 문제  (0) 2017.06.18
[webhacking.kr] 49번 문제  (0) 2017.06.18
[webhacking.kr] 46번 문제  (0) 2017.06.18
Posted by Imp3rio