써니나타스

웹해킹, 포렌식, 리버싱, 암호학, 해킹 워게임 제공.

www.suninatas.com

웹 문제이다.

그림 1

문제에 들어가자마자 보이는 것은 그림 1과 같이 ID와 PW를 입력하는 폼이 존재하고, Join 버튼이 있다.

 

회원가입 / 로그인 해킹 문제임을 가늠할 수 있다.

 

문제 1에서는 문제 풀이를 위한 소스코드가 제시되어 있었지만

 

여기서는 추가적인 정보가 제공되지 않는 것 처럼 보인다.

 

우선 폼이 보인다면, 개발자 도구를 통해 폼을 분석하는것이 올바르다.

그림 2

폼이 submit 되었을때, POST 메소드로 값을 전달한다.

 

Join 버튼을 눌렀을 경우, 곧장 submit 되는 것이 아니라, chk_form이라는 Javascript 함수를 실행한다.

 

chk_form은 id와 pw 필드의 값을 비교해 두 값이 같다면 초기화를 시키고, 아니면 submit를 시키는 듯 하다.

 

스크립트 아랫쪽의 힌트를 보아하니 id 필드와 pw 필드의 값이 같아야 Authkey를 획득 할 수 있는 듯 하다.

 

결론적으로, Javascript 구문을 우회할 수 있어야 한다.

 

이 문제에서 javascript를 우회하기 위한 방법은 무궁무진하다.

 

그 중 콘솔을 사용해보고자 한다.

 

크로뮴의 경우에는 개발자 도구에서 아래의 그림 3과 같이 Javascript 콘솔을 지원한다.

그림 3

때문에 콘솔을 통해서, 폼을 강제로 submit 시키는 방식을 이용하고자 한다.

그림 4

그림 4와 같이 id 필드와 pw 필드에 같은 값을 넣은 후

그림 5

그림 5와 같이 chk_form() 함수에서 사용된 submit 구문을 그대로 작성한다.

(물론, 이것 말고도 submit을 시킬 수 있는 방법은 다양하다)

그림 6

그림 6과 같이 Authkey가 출력된다.

 

사실, web02 폼은 POST로 값을 전달한다고 되어있지만,

 

1번 문제의 Request 객체를 똑같이 사용하기 때문에 GET 메소드로도 인자를 전달 할 수 있다.

그림 7

그림 7과 같이 파라미터를 넣은 다음 엔터를 치면

그림 8

그림 8과 마찬가지로 Authkey를 획득 할 수 있다.

 

따라서, Flag 값은 Bypass javascript 이다.

'Wargaming > SuNiNaTaS' 카테고리의 다른 글

[ SuNiNaTaS ] Game 01  (0) 2022.03.05
 

써니나타스

웹해킹, 포렌식, 리버싱, 암호학, 해킹 워게임 제공.

www.suninatas.com

1번 문제는 웹해킹 문제로, ASP의 코드를 확인하고, pw 값을 도출해내는 문제이다.

 

처음 문제에 들어가면, Check를 할 수 있는 입력칸과 현재 ASP의 코드로 보이는 것들이 적혀있다.

그림 1

그림 1에서 대충 코드를 읽어보면

 

특정한 과정을 거친 result값이 admin이어야 pw를 획득 할 수 있는 것으로 보인다.

 

우선 눈에 보이는 객체, 메소드들부터 정리를 해보자


 

- Request

 

Request Object

Table of contents Request Object Article 06/16/2017 2 minutes to read In this article --> The Request object retrieves the values that the client browser passed to the server during an HTTP request. Methods The Request object defines the following method.

docs.microsoft.com

그림 2

그림 2의 설명을 참고하면 Request(변수 이름)과 같이 호출을 했을 경우,

 

QueryString(GET 메소드의 파라미터) -> Form(POST 메소드의 파라미터) -> 쿠키값 -> 클라이언트 인증 -> 서버 변수 순으로 값을 탐색한다고 한다.

 

즉, 그림 1에서의 Request 객체는 GET이나 POST에 상관 없이, str 값을 찾아 str 변수에 전달한다.

 

- Replace

 

Strings.Replace(String, String, String, Int32, Int32, CompareMethod) Method (Microsoft.VisualBasic)

Returns a string in which a specified substring has been replaced with another substring a specified number of times.

docs.microsoft.com

 

다른 언어에서 흔히 사용되는 replace 함수와 같이

 

Replace(변수명, 변경할려는 문자열, 새로 바꿀 문자열)

 

과 같이 사용되는 것으로 보이며

 

그림 1에서는 a를 찾아 aad로 변경하고, 그 다음은 i를 찾아 in으로 변경하는 것으로 보인다.

 

예시로, admin을 입력했다고 가정하면 aadminn과 같이 출력이 된다.

 

- Mid

 

Strings.Mid Method (Microsoft.VisualBasic)

Returns a string that contains characters from a specified string.

docs.microsoft.com

문자열을 자르는 함수다.

 

Mid(문자열, 시작점, 길이)

 

와 같이 사용된다.

 

이때 시작점은 문자열의 첫 문자를 기준으로 1부터 시작하며, 길이는 시작점을 기준으로 얼마만큼의 문자를 뽑아올지를 결정한다.

 

예시로, Mid("abcdef", 2, 2)는 bc를 반환한다.

 

- & 연산자

 

& Operator - Visual Basic

Learn more about: & Operator (Visual Basic)

docs.microsoft.com

두 개의 문자열을 더하는 연산자이다.

 

"abc" & "def" 는 "abcdef"를 반환한다.


그림 1에서 필요한 값을 도출하기 위해서는 아래쪽에서부터 역순으로 거슬러 올라가보도록 한다.

 

우선 제일 아래 result 값부터 확인을 해보자

그림 3

result 값이 admin이 되어야 하며, 이 result값은 result1과 result2가 서로 더해진 값이다.

 

즉, "admin" = result1 + result2이다.

그림 4

result1은 result의 2번째 문자부터 2글자를 뽑아낸 문자열이고, result2는 result의 4번째 문자부터 6글자를 뽑아낸 문자열이다.

 

이를 시각화하면 다음과 같다.

 

abcdefghi       (result1    result2)

 

때문에 admin을 만들기 위해서는 result값이

 

aadmin

 

이어야 한다.

 

* Mid 함수는 시작점 + 길이값이 문자열의 길이보다 긴 경우, 문자열의 끝까지만 반환한다. 이때 시작점 값이 문자열 길이보다 긴 경우, "" 와 같이 빈 문자열을 반환하게 된다.

그림 5

a는 aad가 되고, i는 in이 되므로 ami만 입력한다면

 

ami -> aadmi -> aadmin

 

과 같은 과정을 통해 원하는 문자열을 만들어 낼 수 있게 된다.

그림 6

그림 6과 같이 ami를 입력하고 check를 누른다.

그림 7

그림 7과 같이 축하 메시지가 뜨더니

그림 8

그림 8과 같이 Flag를 획득 할 수 있다.

 

따라서, Flag는 k09rsogjorejv934u592oi 이다.

 

앞으로 어떻게 문제들이 진행되고 인증을 하면 되는 것인지 알려주는 정말 간단한 문제였다고 할 수 있다.

'Wargaming > SuNiNaTaS' 카테고리의 다른 글

[ SuNiNaTaS ] Game 02  (0) 2022.03.06

+ Recent posts