Wargame/webhacking2017. 5. 4. 12:28

webhacking.kr 사이트의 8번 문제를 보면 다음과 같다.

할 수 있는 것이 없는 것 같으니 소스 페이지를 확인해보자.

주석으로 index.phps가 써져 있으니 해당 페이지로 들어가보면 다음과 같다.

소스를 분석해보자.

agent 변수에 HTTP_USER_AGENT의 값을 넣고 ip에 REMOTE_ADDR의 값을 넣는다.

agent에 저장된 문자열을 trim() 함수로 공백을 제거한다.

그리고 나서 . 과 / 를 _ 로 바꾼다.

pat 변수에 필터링할 문자들을 저장한다.

agent에 저장된 문자열을 소문자로 변경하고 if문에서 pat과 일치하는 것이 있으면 Access Denied 를 출력하고 종료한다.

q는 sql 쿼리문이 들어 있다.

ck는 q의 결과 값이 들어 있다.

ck의 값이 admin이면 문제가 풀리는 것 같다.

ck의 값이 없으면 insert 문으로 db에 agent, ip, guest 로 저장한다.

위 insert 문을 이용해서 admin에 대한 값을 넣을 수 있을 것 같다.


이를 봤을 때 User-Agent를 이용해야 하는 것 같다.

User-Agent를 변경하기 위해 프록시를 살린다.

burpsuite를 실행하고 페이지를 다시 로드하면 패킷을 잡아낼 수 있는데, 해당 패킷의 User-Agent의 값을 다음과 같이 변경하여 전달한다.

Imp3rio', '1', 'admin'),('2

위와 같이 전달을 하게 되면 다음과 같은 데이터가 DB에 들어간다.

agent = Imp3rio

ip = 1

id = admin


이제 User-Agent 값을 다음과 같이 Imp3rio로 변경하여 전달한다.

그러면 8번 문제가 풀린다.

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

[webhacking.kr] 11번 문제  (0) 2017.05.04
[webhacking.kr] 10번 문제  (0) 2017.05.04
[webhacking.kr] 7번 문제  (0) 2017.05.04
[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 10:35

webhacking.kr 7번 문제를 보면 아래와 같다.

Admin page라는 문자열이 출력되고 아래에 auth 버튼이 있다.

인증하는 버튼인 것 같으니 일단 클릭을 해보자.

Access_Denied 라는 알림창이 뜬다.


페이지 소스를 한번 확인해보자.

주석을 보니 admin mode는 val값이 2이다.

val값을 2로 놓고 들어가보자.

이번엔 Access Denied 라는 문자열이 출력이된다.

index.phps 페이지로 가보면 다음과 같은 코드가 있다.

* 필자는 Safari에서 한글이 깨져 firefox로 해당 페이지에 들어갔다.


우선 주석을 보니 db에 val=2가 존재하지 않고, union을 이용하라고 힌트가 나와있다.


코드를 보면 변수 go에 val로 넘어온 값을 넣는다.

ck 변수에 go에 저장된 값을 넣고 --, 2, 50 등 여러가지 문자열을 필터링한다.

rand 변수에 1~5까지의 값을 랜덤하게 넣고 if문으로 분기한다.

각 if문 안에서 result 변수에 mysql_query문을 저장하는데, 쿼리문의 형식이 조금씩 다르다.

data 변수에 mysql_fetch_array() 함수를 이용 쿼리가 저장된 result의 결과를 저장한다.

data에 저장된 값에 대해 if문으로 분기하는데, 그 값이 1이면 7번 문제 페이지에서 처음봤던 화면이 출력이 되고, 값이 2이면 문제가 풀리는 것 같다.


이제 해야할 것은 쿼리문을 우회해야 하는 것이다.

쿼리문을 보면 select vl from lv1 where lv=($go) 와 같은 형식이다.

val=1) union select (2

를 만들면 될것 같은데 필터링할 때 공백문자와, 숫자 2가 필터링이 되기 때문에 이를 우회하기 위해 다음과 같이 입력한다.

val=1)%0Aunion%0Aselect%0A(3-1


그런데 다음과 같은 화면을 볼 수 있다.

현재 7번 문제에 대해서 서버에 문제가 있는 것 같다.

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

[webhacking.kr] 10번 문제  (0) 2017.05.04
[webhacking.kr] 8번 문제  (0) 2017.05.04
[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
Posted by Imp3rio
Wargame/webhacking2017. 5. 2. 17:37

webhacking.kr 사이트의 6번 문제를 보면 다음과 같다.

HINT는 base64 암호화 알고리즘이 나와있고

ID와 PW가 나와있다.

중간에 index.phps에 링크가 걸려있는데 링크를 타고 들어가면 다음과 같은 화면이 나타난다.

위 코드부터 분석을 해보자.

user라는 이름의 쿠키값이 비어있으면 val_id 변수에 "guest"를 val_pw 변수에 "123qwe"를 설정한다.

그리고 for문을 20번 돌면서 val_id와 val_pw를 base64 암호화 알고리즘으로 암호화한다.


암호화된 값에서 1~8 까지의 숫자를 각 !~)로 변경한다.

변경이 완료된 암호화된 값을 user 쿠키와 password 쿠키에 설정한다.

아래부분 코드를 분석해 보자.

decode_id에 user 쿠키의 값을, decode_pw에 password 쿠키의 값을 넣는다.

decode_id와 decode_pw의 값에서 !~) 문자를 1~8로 변경한다.

즉, 암호화 할때 변경해준 문자는 의미가 없는 것이 된다.

그리고 for문을 20번 돌면서 base64 암호화 알고리즘을 복호화한다.


마지막으로 decode_id와 decode_pw의 값이 admin이면 solve() 함수를 호출한다.

이를 봤을 때 쿠키의 값을 변경해 주어야 한다.


먼저 admin을 base64 암호화를 20번 해준다.

webhacking.kr 사이트에서 간단하게 할 수 있다.

위 그림처럼 입력창에 admin을 입력하고 ->base64 버튼을 20번 눌러준다.

그리고나서 그 값을 복사해 놓고 브라우저에 확장프로그램으로 쿠키값을 수정할 수 있는 플러그인을 설치한다.

* 필자는 Firefox의 Cookies Manager+ 를 이용했다.


Cookies Manager+를 실행해서 도메인이 webhacking.kr인 것들 을 찾는다.

name에 password와 user를 각각 누르고 Edit 버튼을 이용해 내용에 들어있는 값을

복사해 둔 값으로 바꾼다.

그리고 Save를 누른 다음 6번 문제 페이지로 돌아와 새로고침을 한다.

그러면 다음과 같이 문제가 풀린 것을 확인할 수 있다.


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

[webhacking.kr] 8번 문제  (0) 2017.05.04
[webhacking.kr] 7번 문제  (0) 2017.05.04
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
[webhacking.kr] 3번 문제  (0) 2017.05.02
Posted by Imp3rio