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
Wargame/webhacking2017. 5. 2. 17:01

webhacking.kr 사이트의 5번 문제를 가면 다음과 같이 나타난다.


Login 버튼과 Join 버튼만 존재하는데

Join 버튼을 누르면 다음과 같은 화면을 볼 수 있다.

권한이 없다고 하니 Login 버튼을 누르자.

그럼 위와 같은 화면이 나타나는데 형식이 ID와 PW를 입력하는 것 같다.

ID와 PW를 모르기 때문에 일단 아무 값이나 넣어보자


그러면 위와 같은 화면이 나타난다.

admin으로 로그인 해야 되는 것 같으니 admin으로 PW는 아무값이나 넣어보자

그러면 PW가 틀렸다고 나온다.

admin의 패스워드를 찾아야 하는 것 같다.

PW에 SQL 쿼리문을 이용해 인증을 우회해 보자.

PW에 1' or '1' = '1 을 입력해 보면 위와 같은 화면이 나타난다.

SQL Injection 문제는 아닌 것 같은 기분이 든다.


그럼 처음 페이지에 가서 소스를 보도록 하자.

소스를 보다보면 함수가 두개 나온다.

Login 버튼을 눌렀을 때 move() 함수가 호출되고, Join 버튼을 눌렀을 때는 no() 함수가 호출된다.

move() 함수를 살펴보면 경로가 나와있다.

mem/login.php

Login 이라서 login.php 페이지로 넘어가는 것 같다.

Join은 join.php일 것 같으니 mem/join.php 페이지로 넘어가 보자.

주소창에 mem/join.php를 입력하면 다음과 같은 화면이 나타난다.

검은색 화면이 나타나고, 소스를 보니 스크립트로 뭔가 작성되어 있는 게 보인다.

이를 burpsuite로 보면 다음과 같다.

뭔가 굉장히 복잡하게 난독화 되어 있는 것이 보인다.

코드를 보면 if 문이 두개, else문 한개가 있다.

if문 두개를 보면 하나는 bye, 나머지 하나는 access_denied 알림을 띄운다.

두 개의 if문에서 걸리지 않으면 else문이 실행되는데 else문 안에 있는 코드가 실행되어야 할 것 같다.

난독화 되어 있는 코드는 신경 쓰지말고

burpsuite에서 else 문에 있는 코드를 첫 번째 if문에 넣고 나머지 조건문들은 제거하자.

burpsuite에서 수정할 수 있는데 위 그림처럼 수정을 하고 해당 데이터를 전달하면

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

admin으로 회원가입을 해보도록 하자.

위와 같이 입력을 하면 결과 화면은 다음과 같이 나타난다.

admin은 존재한다는 메시지가 출력이 된다.

다시 Join 페이지로 가서 ID를 admin+로 해서 등록하려고 하면 입력이 되지 않는다. 

이는 길이 제한을 문자5개로 뒀기 때문이다.

일단 admin으로 두고 burpsuite로 admin+로 변경해 전달해 보자.

* 웹에서 +는 띄어쓰기와 같은 기능을 한다.

위 그림과 같이 id 값을 변경하여 전달하면 웹페이지는 다음과 같이 나타난다.

가입이 됐다는 화면이 출력이 된다.

그럼 이제 login.php 페이지로 넘어가서 로그인을 해보자.

ID = admin, PW = admin

그러면 문제가 풀린다.

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

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

webhacking.kr 페이지의 4번 문제를 보면 다음과 같다.


암호를 푸는 문제인 것 같다.

암호문을 보니 끝이 ==로 끝나는 것으로 봐서 해당 암호문은 base64를 이용한 것 같다.

값을 복사해 base64 디코딩 사이트에서 복호화를 해보자.

여전히 읽을 수 없는 암호문이 나타났다. 

이번 암호문은 끝이 ==로 끝나지 않기 때문에 base64는 아닌 것 같다.

16진수의 값으로 이루어져 있기 때문에 해쉬 함수일 것 같은 느낌이 강하다.

md5, sha-1이 의심이 간다.

해당 암호문을 md5로 복호화 해보도록 하자.

또 다른 암호문이 나타났다. 이 값을 다시 한번 복호화 해보자.

test라는 문자가 나타났다.

이 값을 4번 문제 password 입력하는 곳에 입력을 하면 4번 문제가 풀린다.


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

[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 3번 문제  (0) 2017.05.02
[webhacking.kr] 1번 문제  (0) 2017.05.02
[webhacking.kr] 가입하기  (0) 2017.05.01
Posted by Imp3rio
Wargame/webhacking2017. 5. 2. 14:12

webhacking.kr 페이지에서 3번 문제에 들어가면 다음과 같은 화면이 나타난다.

생김새를 보면 수도쿠와 같은 모양이다. 문제를 풀어보면 다음과 같다.

gogo 버튼을 눌르면 다음과 같이 나타난다.

name을 입력하라고 나오는데 일단 입력을 해보자.

그러면 위와 같이 나타나는데, 더 이상 진행하는 것이 없다.

그럼 3번 문제 페이지의 소스를 보도록 하자.

소스를 보면 클릭이 가능한 칸에 hidden으로 값이 0으로 설정되어 있는 것을 확인할 수 있다.

소스를 더 열어보면 다음과 같은 코드를 확인할 수 있다.

클릭 했을 때 해당 칸이 black이 아니면 black으로 바꾸고 해당 위치의 변수에 1 값을 넣는다. 그 반대의 경우 white로 바꾸고 그 값을 0으로 바꾼다.

즉, 클릭 했을 때 해당 변수의 값이 설정이 된다.

그리고 script 부분을 보면 다음과 같다.

go 라는 함수가 정의되어 있고 이 함수는 answer 변수에 각 위치의 값을 저장한다. 그리고 그 값을 kk.answer 변수에 넣고 kk를 넘겨준다.

gogo  버튼을 누르면 go() 함수를 호출하게 된다.


이제 두 번째 페이지의 소스를 보도록 하자.

소스를 보면 answer 값이 hidden으로 숨어 있고 name을 입력받는 코드이다.

answer 값이 hidden으로 숨어 있는 것을 보니 꺼림찍하다. 이 값을 변경해서 보내보도록 하자.

그러기 위해 일단 프록시를 설정해야 한다. 프록시 설정은 이전 포스팅을 참조바란다.

프록시를 살리고 name 값을 입력한 뒤 write 버튼을 누르면 다음과 같은 화면을 확인할 수 있다.

answer 값 끝에 필자는 큰따옴표( " )를 추가하여 보냈다.

그러면 문제 페이지에 다음과 같은 화면을 볼 수 있다.

query error! 라는 문자열을 출력해준다. 이를 보니 쿼리문을 이용해야 하는 것을 추측할 수 있다.

SQL Injection 문제 같은 느낌이 조금 난다.

SQL 인증 우회를 위해 값을 true로 전달해보자.

answer 부분 끝에 'or 1'을 추가하여 전달했다. 그러면 다음과 같은 화면을 볼 수 있다.

no hack 이라는 문자열을 출력해 주는데 'or' 가 필터링이 걸리는 것 같다.

'or' 의 다른 표현인 '||'를 이용해보자.

위와 같이 answer 끝에 '|| 1'을 추가해서 전달했다.

그러면 다음과 같은 화면을 확인할 수 있다.

answer의 값이 우리가 찾고자 하는 플래그 값인 것 같다.

해당 값을 복사해서 답을 넣어보면 3번 문제를 풀린다.

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

[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
[webhacking.kr] 1번 문제  (0) 2017.05.02
[webhacking.kr] 가입하기  (0) 2017.05.01
Posted by Imp3rio
Wargame/webhacking2017. 5. 2. 00:59

webhacking.kr 사이트의 1번 문제


1번 문제에 들어가 보면 위와 같은 화면이 나타난다.


뭔지 모르겠지만 일단 index.phps를 열어보자.

주소창 끝에 index.phps를 입력하면 아래와 같이 나타난다.

코드를 보니 user_lv 라는 이름의 쿠키 값을 1로 설정한다.

중간에 있는 if 문을 보면 eregi 함수로 문자열을 비교한다.

eregi("[^0-9],.", $_COOKIE[user_lv]) 이 함수의 의미는 user_lv에 있는 값을 0~9 까지의 숫자와 .( dot ) 을 제외한 모든 문자열과 비교한다는 의미이며 이 값이 True이면 user_lv 값을 1로 설정한다.

두 번째 if문을 보면 user_lv 값이 6 이상이면 user_lv 값을 1로 설정한다.

마지막 if 문을 보면 user_lv 값이 5보다 크면 solve() 함수를 호출하는 것을 볼 수 있다.


즉 우리가 해야 할 것은 5 보다 크고 6보다 작은 수를 user_lv 값에 넣어야 한다는 것이다.


이를 위해 프록시를 이용한다. 필자는 burpsuite를 사용한다.


먼저 burpsuite를 실행한다. 

proxy 탭에 가보면 위와 같은 화면이 나타난다. Intercept is on 이라고 되어 있으면 프록시가 동작하는 것이다.

options 탭에 들어가서 Intercept Server Responses 부분에도 체크를 해준다.

그러면 서버에서 응답해주는 것까지 받아올 수 있다.


burpsuite 설정을 하고나서 이제 브라우저에서 프록시를 사용하도록 설정해야 한다.

필자는 Safari를 이용하기 때문에 Safari 환경설정에 들어가 프록시를 설정해 준다.

보통 프록시의 포트는 8080으로 설정한다.

프록시 설정할 때 기본적으로 local domain에 대해서 예외를 설정하는데 이 부분을 제거해 주어야 한다.


* 다른 브라우저를 사용할 경우 해당 브라우저의 설정에 들어가 네트워크 관련된 부분을 보면 프록시 설정을 할 수 있는 설정창이 나타난다.


설정이 완료된 후 webhacking 1번 문제 페이지를 새로고침 하면 burpsuite에서 다음과 같은 화면을 볼 수 있다.


3번 째 줄에 보면 user_lv=1 로 되어 있는데 이 부분을 5.x 로 설정하고 intercept is on을 클릭하게 되면 다음과 같이 1번 문제를 풀었다는 메시지를 확인할 수 있다.

* 여기서 x는 원하는 숫자를 쓰면 된다. 앞서 코드를 분석했을 때 숫자와 .( dot )은 첫 번째 if 문에서 걸리지 않기 때문에 소수점을 이용해 5와 6사이의 값을 설정할 수 있다.



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

[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
[webhacking.kr] 3번 문제  (0) 2017.05.02
[webhacking.kr] 가입하기  (0) 2017.05.01
Posted by Imp3rio
Wargame/webhacking2017. 5. 1. 23:57

webhacking.kr 사이트에 접속해 보면 다음과 같은 화면을 볼 수 있다.



login 부분만 보이고 아이디를 입력 하는 부분과 비밀번호를 입력하는 부분 그리고 회원가입 하는 부분은 보이지 않는다.


우선 페이지의 소스를 보도록 하자.




소스를 보다보면 위 그림과 같이 나타나는 것을 알 수 있다.

회원가입 하는 부분이 주석처리가 된 것을 확인할 수 있다.

즉, 이 주석을 제거해주면 다음과 같이 회원가입 할 수 있는 버튼이 나타나는 것을 확인할 수 있다.


Register를 누르면 다음과 같은 화면이 나타난다.


decode me 부분에 암호문이 있다. 이 암호문의 끝을 보니 '==' 로 끝나는 것으로 봐서 base64 암호화 방식인 것을 유추할 수 있다.

해당 부분의 값을 복사해서 base64 디코드 사이트에서 디코딩 해보자.


여전히 읽을 수가 없다. 읽을 수 있는 문자가 나올 때까지 반복하면 자신의 IP 주소가 나타나는 것을 확인할 수 있다. 디코딩 한 값을 회원가입 페이지의 decode me 부분에 넣고 가입을 하자.

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

[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
[webhacking.kr] 3번 문제  (0) 2017.05.02
[webhacking.kr] 1번 문제  (0) 2017.05.02
Posted by Imp3rio