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