Wargame/webhacking2017. 6. 18. 20:51

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

우선 SQL INJECTION이라고 출력되어 있으니 SQL INJECTION 문제인 것 같다.

일단 페이지 소스를 보자.

index.phps가 힌트로 주어졌으니 일단 들어가 소스를 보도록 하자.

소스코드를 분석해보자.

GET 방식으로 lv 값을 전달받으며, lv 값에 공백, /, *, % 가 있으면 없앤다.

그리고 union, select, from, challenge, 0x, limit, cash 가 있으면 종료한다.

select문을 이용해 가져온 데이터 값을 변수 q에 저장한다.

q 값이 있고, lv 값이 있으며 q[0]의 값이 admin이면 문제가 풀린다.


일단 1을 입력해 보면 다음과 같은 화면을 볼 수 있다.

lv 값을 1로 넘겼을 때 변수 q의 값은 "zzibong"인 것을 알 수 있다.

다른 값을 넘기면 아무것도 출력이 되지 않는다.


우선 query문을 다시 보자

select id,cash from members where lv=$_GET[lv]

이를 우회하기 위해 다음과 같은 쿼리문을 만들면 될 것 같다.

select id,cash from members where lv=x or id='admin'

x는 1이 아닌 임의의 값이면 된다.

이유는 lv=1은 zzibong의 값이기 때문이다.


위에서 처럼 쿼리문을 만들 때 공백을 넣으면 안된다. 입력된 값에서 공백을 없애버리는 필터링이 걸려있기 때문이다. 이를 우회하기 위해서는 %0A나 %0D를 이용하면 된다.

또한 입력창에 입력을 하면 안된다. 그 이유는 입력창에 입력된 값은 GET 요청을 할 때 URL 인코딩이 되어 전달되기 때문이다. 따라서 URL에 직접 입력을 해야 한다.

아래와 같은 공격구문을 URL에 넣으면 다음과 같은 화면을 볼 수 있다.

3%0Aor%0Aid='admin'

처음 화면이 나타난다.

" ' "를 없애는 기능이 켜져있는 것 같다.

이를 우회하기 위해 char() 함수를 이용한다.

다음과 같이 입력을 하면 문제가 풀린다.

3%0Aor%0Aid=char(97,100,109,105,110)



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

[webhacking.kr] 53번 문제  (0) 2017.06.18
[webhacking.kr] 49번 문제  (0) 2017.06.18
[webhacking.kr] 39번 문제  (0) 2017.06.18
[webhacking.kr] 38번 문제  (0) 2017.06.18
[webhacking.kr] 35번 문제  (0) 2017.06.18
Posted by Imp3rio