Always-Try(정보보안 및 일상)

써니나타스 - Web Challenges - 1~5번 본문

Pen Test

써니나타스 - Web Challenges - 1~5번

Always-Try 2021. 1. 24. 18:44

#1. 1번

1-1. 문제  

 

1-2. 풀이

일단, 한줄씩 그대로 한번 풀이해보자 

만약 입력 받은 str이 빈칸이 아니라면, 

a를 aad로 바꾸고,

i를 in으로 바꿔라

그리고

음 이렇게 계속 써도 답을 알 수 없을 것 같다.

 

이제 거꾸로 한번 가보자.

 

"admin"은 result1과 result2를 합쳐서 나온 문자열이다.

그럼 result1과 a, ad, adm, admi 중 1개 일 것이고, result2는 n, in, min, dmin 중 1개 일 것이다.

경우의 수를 나열해보면 result1 - result2 는 아래 4가지 케이스 중 1개일 것이다.

a - dmin 

ad - min

adm - in

admi - n

 

그리고 result1은 Mid(result,2,2) 이고 result2는 Mid(result,4,6) 이니까 흠.. 

 

***************************참고********************************

Mid는 asp의 문자열 추출 함수 중 하나이다. 

함수의 파라미터는 Mid(대상문자열, 시작 위치, 가져올 개수) 이다.

예를들어 result 가 '써니나타스'라면, 

Mid(result, 3,2)의 결과는 '나타' 이다.

****************************************************************

 

일단 첫 번째 경우의 수가 맞는지부터 한번 검증해보자.

a - dmin 가 되도록 대입해보면,

result = *a*dmin  (*는 임의의 문자열)

?? 아예 불가능하네. 왜냐면 Mid(result,2,2)의 의미는 result의 2번째 위치부터 2글자를 가져오라는 건데 애초에 result1이 1자리인게 말이 안된다.

?

그럼 result1은 2자리겠네

그럼 result1은 ad result2는 min 이라는 결론이 나온다.

 

오케이. 그럼 result를 다시 추측해보자.

result는 *admin 이 된다. 

 

이제 마지막으로 Replace 함수를 역으로 실행해보자.

*admin -> *admi

*admi -> ami

(*가 왜 a인지는 모르겠지만 넣을 수 밖에 없네)

 

정답은 ami

 

 

 

#2. 2번

2-1. 문제  

1-2. 풀이

흠. 그냥 Join 을 눌러보면 아래와 같이 나온다.

 

F12를 눌러서 개발자 도구를 살펴보자. Hint를 발견했다.

ID와 PW가 동일해야 된다고 한다. 한번 동일한 ID와 PW를 입력해보자.

ID와 PW를 동일하게 입력하면 또 다시 에러가 뜬다.

흠.. 

Burp suite를 켜고 테스트를 해보던 도중 특이한 걸 발견했다.

ID와 PW에 같은 값을 입력하면 Burp suite에 intercept on을 켜놓더라도 intercept가 발생하지 않는다. (ID와 PW에 다른 값을 입력해보면 intercept가 발생한다.

즉, ID와 PW에 같은 값을 입력하면 Client -> Server 로 요청이 가기 전에 웹 페이지 단에서 뭔가 막도록 코드가 짜여 있는 것으로 추정된다. 

 

개발자 도구를 다시 열어보고 둘러보던 도중 Sources에 아래와 같은 조건문을 발견했다.

흠. 아까 힌트에서는 ID = PW 여야 된다고 했는데 실제 코드에서는 ID = PW 일 경우 로그인 할 수 없다는 Alert을 띄어주고 있다. 그리고 else일 경우 submit 함수를 실행해준다. submit 함수가 뭔지는 모르겠지만, 쟤가 실행되도록 하면 될 것 같다.

 

개발자 도구의 콘솔에서 한번 입력해보자.

ID와 PW에 아무것도 입력하지 않은 상태에서 document.web02.submit()를 계속 입력해봐도 별다른 반응이 없었다.

그래서 힌트와 같이 ID와 PW를 똑같이 입력한 상태에서 document.web02.submit()를 실행시켜보니 Authkey가 나온다.

 

 

또다른 방법!

아까 얘기했다시피, ID와 PW가 같을때 document.web02.submit()함수가 실행되는데, ID와 PW가 같을 경우 웹페이지단에서 더 이상 진행을 하지 못하게 경고 창을 띄워주고 있다. 그럼 웹 페이지를 통하지 말고 burp suite로 ID와 PW를 일치시켜서 전달해보자. 역시 Authkey가 나온다.

 

#3. 3번

3-1. 문제  

3-2. 풀이

밑도 끝도 없이 게시판에 글을 쓰라는 화면이 나온다. 게시판을 찾아가보자.

글쓰기 메뉴가 없다. 흐음.

Burp suite를 봐도 모르겠고, 개발자도구를 봐도 모르겠다.

흐음 쓰기 메뉴가 있는 Free 게시판으로 가봤다. 

로그인을 하지 않으면 Write 메뉴가 없는데, 로그인을 하고 Free 게시판을 가보면 Write 메뉴가 있다. 

 

Write 버튼을 누르면, 웹페이지 주소창에 write 메뉴에 대한 주소가 나온다. 

그럼 Notice 게시판 URL 뒤에도 /write를 붙여볼까?

글을 쓸 수 있다! 

아무거나 입력하면 아래와 같이 Authkey가 나온다.

 

 

#4. 4번

4-1. 문제  

4-2. 풀이

User-Agent를 힌트로 사용하는 것 같다. 그리고 개발자 도구에서 힌트 발견

그리고 Plus를 눌러보니 25까지는 Point가 올라가고 25부터 더 올라가지 않고 아래와 같은 팝업이 나온다.

종합해보면, point를 50으로 올리고 User-Agent를 SuNiNaTaS로 바꾸면 해결할 수 있을 것 같다.

Burp suite로 진행해보자.

Point가 증가한다. 매번 바꾸기 귀찮으니 Repeater 기능을 써서 진행해보자. Proxy를 끄고 한 Repeater에서 Send하고 웹페이지에서 새로고침하면 Point가 올라가는 것을 확인할 수 있다. 

Point가 50이 되면 Congraturation 팝업과 함께 아래와 같이 Authkey가 나온다.

 

#5. 5번

5-1. 문제  

 

5-2. 풀이

개발자도구를 확인해보니, 힌트가 있다.

힌트의 숫자 값을 입력란에 넣어봤지만 별다른 반응이 없다.

소스 코드를 살펴보자. 스크립트가 존재한다!

구글링해보니 난독화해주는 역할을 하는 것으로 보인다.(eval함수는 자바 스크립트 난독화 함수이다.)

난독화 하지 않은 스크립트를 보기 위해서 해당 부분을 복사해서 Console에 붙여넣기한다.

alert 또는 console.log 를 이용하여 원래 스크립트를 확인해보자.

자세히보면, function에 PASS 라는 함수가 있는데, n 이라는 인자값이 존재한다.

해당 인자값에 힌트에 있던 12342046413275659 를 넣어서 실행시켜보자.

9c43c20c 라는 문자열이 출력되고, 해당 값을 Check Key Value에 넣어주면 Authkey를 얻을 수 있다.

 

 

끝.

Comments