'Wargame Writeup/SuNiTaTaS'에 해당하는 글 7건


깜짝이야

웹 7번이다.


페이지를 잘 살펴보면 가운데에 YES 버튼이 있다.

그리고 이 버튼을 클릭하면-



실패..너의너는 너무 느려

라는 메시지가 뜬다.


단순히 생각하면, 페이지가 로딩되고 YES 버튼을 최대한 빨리 누르면 클리어된다.


이런 문제는, webhacking.kr에도 있는 문제로 JS Console을 이용하면 쉽게 풀리는 문제이다.


location.href="http://suninatas.com/Part_one/web07/web07.asp"; frm.submit();


콘솔에 위 두줄을 입력하고, 빠르게 입력하다 보면 AuthKey를 확인할 수 있다(...)

이미지 로딩 때문에 로딩 시간에 조금 걸린다.


좀더 연구해볼만한 문제.. 어떻게 하면 한방에 성공할 수 있을까..

'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/


웹 문제이다.

400점 짜리라 그런지 꽤 고생했던 문제.

이 문제를 풀고나면 교훈을 얻을 수 있다.



우선, README 게시글을 클릭하면 위와 같은 팝업창을 확인할 수 있을 것이다.

아래 문장을 보니 SQL Injection 해주세요라고 말하는 것 같다.


"select szPwd from T_Web13 where nIdx = '3' and szPwd = '"&pwd&"'"


우리가 만약 ssaemo를 입력한다면, 쿼리는


select szPwd from T_Web13 where nIdx = '3' and szPwd = ' ssaemo '


위와 같은 쿼리가 입력될 것이다. 쿼리 전체를 감싸는 ""는 영향을 받지 않으므로 생략하겠다.


위와 같은 쿼리에서 패스워드를 맞추지 않고 값을 가져오려면

' or 2>1 -- a

와 같이 입력해주면 된다.


select szPwd from T_Web13 where nIdx = '3' and szPwd = ' ' or 2>1 -- a '


싱글 쿼터로 쿼리를 닫고(') or 참(2>1), 그리고 주석(-- a)이다. 뒤의 ' 쿼리를 주석처리 하기위해.

sql injection이 성공하면 auth_key를 획득할 수 있다.


그런데 클리어 인증이 되지 않는다. 무언가가 더 있는 것일까? 다른 게시글에 뭐가 또 있나?

여기서 많이 헤맸다.


접근권한이 없습니다라는 메시지는 왜 뜨는 것일까? 문제 출제자의 실수인가?









위 메시지 또한 문제의 일부이다.

메시지가 뜬 순간의 URL를 잘 보자.








http://suninatas.com/Part_one/web06/view.asp?num=3&passcode=wkdrnlwnd


페이지가 어딘가로 이동하려는데, 우리에게는 해당 페이지의 접근 권한이 없다.

지금 우리가 할 수 있는 건 접근 권한을 얻어내는 것이다.

지금 우리가 가지고 있는 힌트는 auth_key이다. 이걸 어디에 활용할 수 있을까?











정답은 Cookie에 숨겨져있다.



auth_key라는 쿠키가 있었다. %3F는 '?'가 URL Encoding된 것. 우리가 얻은 auth_key를 여기에 넣으면 된다.

엥 그런데 넣어도 안된다. 뭐가 문제지?












우리가 생각않고 있던 힌트. 인코딩 사이트다. 우리는 여기서 auth_key를 인코딩 해야한다는 것을 알 수 있다.

여기서 passcode를 인코딩하고 장귀중 검색해보고 별의 별 삽질을













MD5로 인코딩된 auth_key를 입력해주면, 페이지가 정상적으로 뜨는 것을 확인할 수 있다.

필자는 ?가 %3F로 URL 인코딩 되어있어서 계속 URL Encoding하고 있었음.

그리고 저 사이트 MD5 인코딩 너무 느리므로 다른 사이트 이용 추천(너무 느려서 MD5는 아니겠네라고 단정지어버림.)


어쨌든, 여기까지는 왔는데. 여기서 뭐하라는거지? 키가 어딨음? 키를 찾아보자.























페이지 소스를 보면, KEY_HINT 이름을 가진 form 태그를 확인할 수 있다. 옆에는 Rome's First Emperor라고 적혀있다.

이게 auth_key인가?! 아니다.

구글링해보면 영문 위키피디아에서 Augustus 이 분이 로마 최초 황제라는 것을 알 수 있다.


이게 바로 auth_key. 인증하면 클리어다.

근데 이게 또 augustus라고 인증하면 안돼요. 너무하시네

괜히 답까지 찾아놓고 대소문자 때문에 삽질하는 사람은 없기를..


이 문제에서 본인은 auth_key encoding 부분에서 애를 먹었는데.

교훈은.

넣을 수 있는 건 다 넣어보자.

URL Encode에 속지말자.


어쨌든 힘들게 클리어했다.

아맞다 그리고, 서니나타스는 asp를 쓰는 것으로 보아 윈도우 서버, MSSQL을 사용하는 것으로 추측되는데

mysql 에서는 or 1이 참으로 취급되나, MSSQL에서는 or 1은 쿼리 오류이다. 참고.



'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 7번 문제  (0) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

문제에 대한 모든 요소의 설명은 불가능한 것 같다.

그래도 최대한 친절하게..


시작!



웹 문제.

아무 값이나 입력해보았더니 변함없음.

페이지 소스를 보니 자바스크립트가 있음.

eval 함수를 통해 소스 분석을 어렵게 해놓았음.

이럴 땐 콘솔을 통해 쉽게 소스를 확인할 수 있다.



다음과 같이 코드를 확인할 수 있다. 그러나 정렬이 되어있지 않아 보기 힘들다.

이럴 때 유용한 사이트가 있다.

http://jsbeautifier.org/

자바스크립트를 뷰티하게 해주는 사이트다. 매우 유용.


자 이제 다음과 같은 소스를 확인할 수 있다.


var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');


function PASS(n) {

    var result = '';

    var start = true;

    for (var i = 32; i > 0;) {

        i -= 4;

        var digit = (n >> i) & 0xf;

        if (!start || digit != 0) {

            start = false;

            result += digitArray[digit]

        }

    }

    return (result == '' ? '0' : result)

}


그리고 페이지 소스에 주석 힌트도 있었다.


<!--Hint : 12342046413275659 -->


자, 이제 문제를 어떻게 풀어나가야 할까?





분명 JS에서 PASS 함수를 정의했으나, 페이지 소스를 잘 살펴보면 PASS 함수를 사용하는 곳이 없다.

그렇다면, PASS 함수에 힌트 값을 넣는다면?


PASS 함수에서 "9c43c20c"라는 값이 반환되었다.

이 값을 인풋값으로 줬더니, Authkey를 확인할 수 있었다.


Clear!

'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 7번 문제  (0) 2015.11.05
[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/



웹 문제이다.

페이지에는 주석으로 <!-- Hint : Make your point to 50 & 'SuNiNaTaS' -->라고 쓰여있다.

뒤에 서니나타스가 무슨 의미일까?


Plus 버튼을 누르면 Point가 1씩 증가한다. 이렇게 50점을 만들면 클리어가 될 것 같다. 허나...



25점이 된 후부터는 위와 같은 alert가 뜨면서 Point가 25점에서 멈춰버린다.


화면상에는 User-Agent가 나와있다. 이건 또 왜 나와있는걸까?

지금까지 힌트는 단 두 가지 주어졌다. SuNiNaTaS, User-Agent.


Hint. 이 문제는 프록시 툴을 사용하여 풀이하는 문제이다.


풀이

Fiddler Proxy Tool을 이용해 문제를 클리어해보자.

필자는 크롬 익스텐션으로 Proxy SwitchyOmega라는 프로그램을 사용했다.

로컬호스트의 포트 8888로 임의의 이름 fiddler proxy로 프로필을 하나 만들어두면

다음과 같이 프록시를 손쉽게 제어할 수 있다.

포트가 8888인 이유는, fiddler의 default port가 8888이기 때문이다.

- 접기

또다른 프록시 툴은 burpsuite은 8080이었던 것으로 기억한다. 사용자가 변경할 수도 있다.

필자는 paros까지 3개 사용해보았다. 각각의 장점이 있으니 때에 따라 편한대로 골라 사용하면된다.



프록시 설정
피들러 실행
-----
좌측 하단의 칸을 클릭하여 request를 catch하도록 설정(response와 반대)
Plus 버튼을 눌러서 패킷 잡기

User-Agent를 SuNiNaTaS로 변조하기

아래 녹색 Run to ... 클릭(잡은 패킷 보내기)

패킷을 그만잡도록 설정하고, 잡힌 패킷들을 좌측 상단 Go 버튼으로 모두 보내주면

Point가 증가한 것을 확인할 수 있다!

-----

이미 보내진 패킷에 우클릭을 통해 더 쉽게 설정할 수 있다.

패킷을 보낸 후 페이지를 새로 고침하면 마찬가지로 포인트가 올라가있다.


우리가 변조했던 패킷을 보면, total이라는 POST 파라미터를 전송하는 것을 확인할 수 있다. 현재 Point를 가리키는 것으로 보인다.

허나, 이 값을 49, 50으로 변조하여도 Point는 정상적으로 1 증가한다.

그렇다면, 포인트를 50으로 만들려면 위와 같은 동작을 25번 반복하면 된다.

수고를 덜기 위하여 피들러의 기능을 이용해보자.

우리가 변조했던 패킷을 클릭해놓고, Shift키를 누른 상태로 좌측 상단 Replay 버튼을 클릭하면

같은 패킷을 적은 수의 갯수만큼 보내준다.


필자는 실수로 50을 넘겼더니 auth key를 확인할 수 없었다. 

?

그래서 쿠키를 삭제하고 재로그인, 세션쿠키를 갱신하여 0부터 다시 시작하였다.

포인트 49에서는 -----로 표시해둔 방법의 패킷 캡처를 통해, 웹 브라우저에서 alert 값을 확인하자.

auth key를 확인할 수 있다. 포인트가 0으로 초기화된다.


User-Agent는 브라우저 종류, 버전, 기종, OS 등의 정보가 담긴 부분이다. 그래서 alert에서 SuNiNaTaS Browser를 애타게 찾았던 것이다.

결국 User-Agent를 SuNiNaTaS로 변조했다는 것은 '서니나타스 브라우저에서 접속했습니다'라고 말하는 것이었다.




'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04
[SuNiNaTaS] 1번 문제  (0) 2015.11.03

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/


웹 문제.

Notice 게시판에 글을 써보라는 흥미로운 문제이다.

물론, Notice 게시판에 들어가봐도 글쓰기 버튼은 보이지 않는다.


어떻게 풀어야할까?

생각보다 어렵지 않은 문제이다.



1. Notice 페이지에서는 문제를 해결할 수 없다.(=다른 페이지에서 힌트를 찾자)

     2. 다른 게시판 중 우리에게 글쓰기 버튼이 보이는 게시판은 Q&A 게시판 뿐이다.

          3. 글쓰기 버튼을 누르고, URL을 자세히 보자.






풀이



Q&A 게시판에서 글씍 버튼을 누르고 URL을 자세히 보면, divi=Free라고 되어있다. 이를 divi=notice로 바꾸면, 위와 같은 화면으로 이동이 된다.

Notice 게시판에 가보면 divi=notice(모두 소문자)라고 나오기 때문에 똑같은 값을 줬더니, Notice 게시판의 글쓰기 페이지가 나왔다.

이제 아무 값이나 입력하고 submit 버튼을 누르면 auth key가 나온다.






'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04
[SuNiNaTaS] 1번 문제  (0) 2015.11.03

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

문제 화면


1번과 마찬가지로 웹 문제이다.

크롬에서 요소 검사를 하면 자바스크립트와 함께 주석 힌트를 볼 수 있다.


요소 검사





자바스크립트는 id와 pw가 같을 때 로그인을 막고 있으나, 주석에서는 id=pw 라고 하고 있다.

즉, 자바스크립트를 우회해야한다. 해당 함수를 무력화시키면 된다.


문제 풀이


방법은 여러 가지 있겠지만, JS 내 if 문을 거치지 않고 submit 되도록 크롬의 콘솔을 이용했다.

함수를 재정의 하는 방법도 있겠으나 위 방법이 가장 간단하다.

물론 id와 pw에는 ssaemo로 동일 값을 주었다. 같기만 하면 auth key가 나오기 때문에.


'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 1번 문제  (0) 2015.11.03

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

생각보다 서니나타스를 푸는 사람이 없는 것 같다. 라이트업도 없는 것 같고.

그래서 써봄.


28번 라이트업이 맘에 드는 게 없어서 고통 받다가 라이트업 써야겠다는 생각이 듬.


서론은 이것으로 마침.



문제 화면


위는 해당 페이지의 서버 사이드 스크럽트 코드를 보여준 것이다.

result의 값이 "admin"이 되도록 적절한 입력값을 입력하면, 문제는 풀리게 된다.


우리는 이 코드가 어떻게 동작하는 지 이해해야 한다.

방법은 두 가지다. 게싱 또는 코드 분석.

코드를 분석하여 푸는 방법을 소개하겠다.




코드를 분석하려면, 먼저 무슨 언어인지 알아야한다.

이미 이 언어를 사용해본 사람은 이 언어가 ASP라는 것을 알 수 있을 것이고

그렇지 않은 사람은 검색을 하거나 해당 페이지의 확장자를 보는 것이다.

서니나타스는 디렉토리 리스트를 숨겨놨다. 하지만, 우리는 이를 어렵지 않게 우회할 수 있다.




서니나타스 사이트의 아무데서나 빈 곳에 우클릭으로 페이지 소스보기를 클릭하면

메인 페이지의 경로를 확인할 수 있다. 크롬 기준 해당 링크를 클릭하면 이후부터는 디렉토리 리스트가 그대로 보인다.

1번 문제 페이지는 http://suninatas.com/Part_one/web01/web01.asp이다. 확장명을 통해 asp임을 우리는 확신할 수 있다.


굳이 asp임을 몰라도 php 등을 다뤄봤다면, 혹은 검색을 잘 했다면 replace, mid 함수의 기능을 알고 있을 것이다.

replace는 말그대로 치환하는 함수이고, mid 함수는 문자열의 일부를 자르는 함수이다.



Mid 함수의 결과는 첫 번째 글자의 인덱스를 1로 하여 "2번쨰 글자부터 길이 2만큼" 자른 것이다.

마지막으로 & 연산자는 asp에서 문자열을 합치는(연결하는) 연산자이다.

즉, 이 함수의 결과가 "admin"이 되도록 적절한 입력값을 주면 성공이다.


고로 이 문제의 정답은...

"ami"이다.

"ami"는 Replace 함수 처리 후 "aadmin"이 된다.

result1은 Mid 함수 처리 후 "ad"가 되고

result2는 Mid 함수 처리 후 "min"이 되어

result에는 둘을 이은 "admin"이 되어 문제가 클리어된다.


함수와 연산자가 어떻게 동작하는 지만 잘 알아낸다면 쉽게 클리어 할 수 있는 문제였다.




'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

사용중인 블로그 스킨이 방명록을 지원하지 않습니다.

초대장을 받고싶으신 분들은 댓글 또는 블로그 설명의 메일로.