Wargame/webhacking2017. 6. 18. 21:59

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

hello wolrd 문자열만 출력되고 아무것도 없다.

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

index.phps 가 주어졌다. 열어보자.

코드를 분석해보자.

hidden_table 변수에 물음표가 문자열로 저장되어 있다.

GET 방식으로 answer 를 전달받으며 이 값이 hidden_table의 값과 같으면 문제가 풀린다.

GET 방식으로 val 을 전달받으며 필터링을 거친다.

val 값을 이용해 select문을 통해 test1 값을 뽑아내며 그 값을 변수 f에 저장한다.

f에 값이 있으면 table name음 입력 하는 form이 생성된다.


일단 val값을 1부터 넣어보자.

위와 같은 화면이 나오며, 2는 guest, 3은 admin, 4는 zombie가 출력이 되며 5부터는 존재하지 않는다.

val 값을 이용해서 테이블 명을 뽑아내야 한다.

이를 위해 사용할 수 있는 것은 mysql 함수인 procedure analyse()이다.

이 함수는 필드명, 최소값, 최대값, 최소길이, 최대길이 등 해당 테이블의 정보를 나타내주는 함수이다.

필드명에는 데이터베이스명.테이블명.칼럼명이 들어있다.

즉, 이를 이용해 테이블명을 확인할 수 있다.

쿼리문을 다음과 같이 만들도록 val 값을 입력하자.

select test1 from $hidden_table where test2=1 procedure analyse()


다음과 같이 테이블명을 알 수 있다.

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

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

[webhacking.kr] 58번 문제  (0) 2017.06.18
[webhacking.kr] 54번 문제  (0) 2017.06.18
[webhacking.kr] 49번 문제  (0) 2017.06.18
[webhacking.kr] 46번 문제  (0) 2017.06.18
[webhacking.kr] 39번 문제  (0) 2017.06.18
Posted by Imp3rio
Wargame/webhacking2017. 6. 18. 21:14

webhacing.kr 49번 문제는 다음과 같다.

46번 문제와 비슷한 문제인 것 같다.

우선 페이지 소스를 보자.

index.phps 가 주어져있다. 들어가 보자.

우선 코드를 분석해보자.


GET 방식으로 lv 를 전달받으며, lv에 값이 있을 때 union, from 등을 필터링하며 해당 문자열이 존재하면 아무것도 안하고 종료한다.


46번 문제와 비슷한 맹락인 것 같다.


일단 쿼리문을 다음과 같이 만들면 될 것 같다.

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


여기서 x는 1을 제외한 임의의 숫자다. 그 이유는 1은 zzibong을 가리키기 때문이다.

그런데 공백과 or은 필터링되기 때문에 사용할 수 없다.

or을 ||로 변경하고 공백은 없이 입력해보자.

즉, 쿼리문은 다음과 같다.

select id from members where lv=3||id='admin'


처음 화면이 나타난다.

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

char() 함수를 이용하려고 하니까 "("와 ")"는 필터링되어 있다.

0x가 필터링되지 않았기 때문에

0x를 이용해 쿼리문을 다음과 같이 만든다.

select id form members where lv=3||id=0x61646d696e

그러면 문제가 풀린다.


이번 문제 역시 입력창에 입력하면 안되고 URL에 직접 입력해야 한다.

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

[webhacking.kr] 54번 문제  (0) 2017.06.18
[webhacking.kr] 53번 문제  (0) 2017.06.18
[webhacking.kr] 46번 문제  (0) 2017.06.18
[webhacking.kr] 39번 문제  (0) 2017.06.18
[webhacking.kr] 38번 문제  (0) 2017.06.18
Posted by Imp3rio
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