SuNiNaTaS

Web Level9(Prob_22)



9번째 문제입니다. Blind SQL Injection을 이용한 문제 풀이인데, 소스를 확인 해 보니 admin의 pw를 알아내는 것이 목표라고 합니다.


위와 같이 id에 admin'--, pw에 아무 값이나 넣어주면 pw 부분이 주석 처리 되어 바로 로그인이 가능해집니다.



이를 이용하여 and 뒤의 값을 적절히 변형시켜주면 참과 거짓일때의 반응이 다르다는 것을 알 수 있습니다.



참일때는 OK admin, 거짓일때는 false를 뱉어냅니다.



len 함수를 이용하여 pw의 길이를 확인 해 보니 10글자인 것을 알 수 있었으며



substring 함수를 이용하여 pw의 값을 한 글자씩 끊어서 판별 할 수도 있습니다.



python 스크립트를 이용하여 bruteforcing으로 키값을 알아내는 코드를 작성했습니다.



최종 값이 나오면 Auth 페이지에서 인증하면 됩니다.






References

 - Zairo(http://zairo.tistory.com/entry/SuNiNaTaS-Challenge-Level-22)

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

SuNiNaTaS System Level1(Prob_16)  (0) 2016.05.10
SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09
SuNiNaTaS Web Level6  (0) 2016.05.09

SuNiNaTaS

Web Level8




8번째 문제입니다.

얼핏 봐서는 SQLi 문제같지만... 소스코드를 확인 해 보니 아닌 것을 알아챘습니다.




아래 힌트에 패스워드는 0부터 9999까지라고 나와 있기에... 이것은 브루트포싱을 이용한 무작위 대입으로 풀이하는 것이 맞다고 생각했습니다.



그래서 우리들의 영원한 친구 파이썬을 이용하여 브포 코드를 작성했습니다.

Password Incorrect! 문구가 나오지 않을 때까지 돌리는 코드입니다.

그리고 화장실 갔다왔습니다.



패스워드가 7707일때 AuthKey를 뱉어내네요.

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

SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09
SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09

SuNiNaTaS

Web Level7




7번째 문제입니다. 들어오자마자 아이유가 반겨주네요... 좋습니다.

아래로 조금 내려보니 YES라는 버튼이 있는데... 한번 눌러보도록 하죠.


버튼을 눌러보니



느리답니다...

YES 버튼이 아래 있기 때문에 손으로는 누르기 어려울 것 같습니다.

소스를 한번 확인 해 보도록 하죠.



js로 Tab과 F5를 막아놓았네요. 두 번째의 else if는 컨트롤R, N을 막고 있습니다. 컨트롤R은 F5와 동일한 기능을 하고, 컨트롤N은 새 창 띄우기를 막아 놓은 듯 합니다.

아무튼 탭과 새로고침을 통해 YES버튼을 누르는 것은 포기하는 편이 좋을 것 같습니다.

아래의 힌트를 보니 Faster and Faster, 최대한 빠르게 눌러보라고 합니다. 우리 손으로는 힘들 것 같으니, 프로그램의 도움을 받아보도록 하죠.



header에 referer를 넣어 web07.asp를 거치지 않고 바로 web07_1.asp로 들어가보았지만, 결국 실패하여.. web07.asp를 거쳐 web07_1.asp로 들어가는 코드를 작성했습니다.


(작성 하고 나서 수정하다보니 알게 된 것인데, 굳이 POST 요청을 때리지 않아도 키 값은 나오는 듯 합니다. req2에서 param 데이터는 굳이 넣지 않아도 무방합니다.)



짠! 키값을 뱉어내주었습니다.

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

SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07

SuNiNaTaS

Web Level6




6번째 문제입니다. Hint와 reference 글을 읽어보면 README 글을 열람하라는 내용과, 인코딩 및 디코딩을 지원해주는 http://tools.web-max.ca/encode_decode.php 웹페이지 URL이 적혀있습니다. README 글을 클릭 해 보면 아래와 같은 창이 나타납니다.



파란 글씨로 SQL Query가 써져있는데, Single Quotation을 이용한 SQL Injection을 통해 간단하게 인증을 우회 할 수 있을 것 같았습니다.

그래서 위 그림과 같이 query를 날려주었습니다.(1' or 1=1#과 같은 쿼리를 날려 줄 수도 있지만, =과 # 필터링으로 인해 like와 --을 사용했습니다.)




Congratulation!!

Auth_key를 뱉어내길래 이 키로 바로 Auth 메뉴에 넣어줬더니 계속 틀린 값이라고 합니다... reference 글에 나타나있는 대로 뭔가 인코딩이 필요할 것 같아 base64, sha1, md5 등 인코딩을 해서도 날려봤지만 역시 인증이 되지 않았습니다.

한참 고민하던 중, 몇 번 다시 돌려보니 위 팝업창이 뜬 이후 http://suninatas.com/Part_one/web06/view.asp?idx=3&num=3&passcode=wkdrnlwnd 이라는 URL로 요청을 때리는데, 접근 거부 팝업이 뜨는 것을 확인했습니다.

그래서 한 단계가 더 있는 것을 깨닫고, 쿠키를 확인 해 봤더니 쿠키 중 auth_key라는 값이 있었습니다.

이 곳에 우리가 찾아낸 key값을 집어 넣는 듯 합니다.



이 auth_key 값을 suninatastopofworld!로 넣어주었더니 그래도 안되길래... base64, sha1, md5 등 인코딩을 하다 보니 md5 hash 값을 넣어 주었을 때 해당 글이 읽혔습니다.



저는 크롬 확장프로그램 중 하나인 EditThisCookie 툴을 이용하여 쿠키를 변조 해 주었습니다.



접근 거부가 뜨던 웹페이지가 정상적으로 접속이 되고, KeyFinding^^라는 본문 내용을 담고 있는 페이지가 나왔습니다.



소스를 확인 해 보니, 시작 부분에 KEY_HINT가 Rome's First Emperor 라고 주어져있습니다.

찾아보니 로마의 첫 번째 황제는 아우구스투스였습니다.



구글링을 통해 아우구스투스의 라틴 이름을 Auth 메뉴에 박아주니 인증 되는 것을 확인하였습니다.



이번 문제는 게싱이 많이 포함되어 있는 문제였습니다. 힌트가 없었다면 풀이하기 많이 어려웠을 것 같습니다...

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

SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06

SuNiNaTaS

Web Level5




5번째 문제입니다. 문자열을 체크하는 웹페이지인데, 소스를 확인 해 보도록 하죠.



빨간 네모 박스를 보면 js가 패킹되어있는 것을 확인 할 수 있는데, http://jsbeautifier.org/ 에 넣어주면 깔끔하게 언패킹 됩니다.



PASS라는 함수가 선언이 되어있네요.

파이썬으로 복호화 루틴을 짜서 돌려보는 방법도 있지만, 개발자 도구의 콘솔 기능을 이용하여 바로 PASS의 결과값을 도출 해 내도록 하겠습니다.



힌트에 나와있는 수를 PASS 함수에 넣어주니 9c43c20c 라는 16진수가 나타났습니다.



해당 값을 check 해 주면 Auth Key를 뱉어줍니다.

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

SuNiNaTaS Web Level7  (0) 2016.05.09
SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06
SuNiNaTas Web Level2  (0) 2016.05.06

SuNiNaTaS

Web Level4






4번째 문제입니다. Plus 버튼과 User-Agent, Auth key가 명시되어있습니다. 아마 User-Agent를 조작하여 다른 이름으로 변환시키는 문제인 것 같습니다.

소스를 보도록 하죠.



맨 아래 힌트 부분을 확인 해 보니 Point를 50으로 만들고 'SuNiNaTaS'를 어떻게 하라고 나와있는데, 역시 User-Agent를 SuNiNaTaS로 바꾸도록 유도하는 문제인 것 같습니다.

파이썬으로 소스를 짜서 변조 해 보도록 하죠.



소스에서 알 수 있듯이, Plus 버튼을 누르면 web04_ck.asp로 넘어가게 되며, 여기서 Point를 1 더해주는 형식입니다. 그래서 총 60번을 돌리면서 Auth Key에 있는 '?????'가 문자열로 표시 되었을 경우 해당 response 값을 출력하는 스크립트를 작성했습니다.

하지만 이렇게 돌렸을 경우, Point가 한번에 50까지 오르지 않고 10씩 올라가는 것을 확인 할 수 있었는데, DoS를 방지하기 위해 10번 참조하면 쉬도록 만들어 놨나 봅니다.

총 5번 스크립트를 돌렸을때 아래와 같은 응답값을 뱉어냈습니다.



Auth Key의 값이 ?????에서 문자열로 바뀌었습니다.

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

SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level3  (0) 2016.05.06
SuNiNaTas Web Level2  (0) 2016.05.06
SuNiNaTas Web Level1  (0) 2016.05.06

SuNiNaTaS

Web Level3




3번째 문제입니다. 아무것도 주지 않고 공지사항 게시판에 글을 쓰라고 하네요.



소스를 확인 해 보니 역시 이곳에도 아무 힌트도 주어지지 않았습니다.

그렇다면 남은것은 써니나타스 웹페이지 자체의 공지사항에 글을 쓰라는 말이 되겠네요.



공지사항 게시판에는 Write 버튼이 없기 때문에 Q&A(FreeBoard)에서 글쓰기를 하여 해당 URL을 확인하였습니다.

http://suninatas.com/board/write.asp?page=1&divi=Free

위와 같은 형식으로 나와있는데, 공지사항의 경우 ~/list.asp?divi=notice 의 형태입니다.

그렇다면 여기서 divi=notice로 바꿔주면 NoticeBoard에 글을 쓸 수 있는 페이지가 나올 듯 합니다.


역시나, 해당 페이지가 나타났고 아무 내용이나 입력 후 Submit을 했더니 Authkey를 뱉어냈습니다.

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

SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTas Web Level2  (0) 2016.05.06
SuNiNaTas Web Level1  (0) 2016.05.06

SuNiNaTaS

Web Level2




2번째 문제입니다. 겉으로만 보면 SQLi 문제로 보이는데.. Join밖에 없네요. 소스를 한번 확인 해 보도록 하죠.



소스상에는 js로 가입 하는 부분이 구현되어있습니다. 따로 db에 저장하거나 하진 않고, id와 pw가 같을 경우 해당 값들을 초기화시키는 부분이 있습니다.

그런데 아래 힌트를 보니 id와 pw가 같게 만들라고 합니다.

chrome의 개발자 도구를 이용하여 직접 때려박으면 쉽게 우회가 가능합니다.



위와 같이 직접 js 코드를 때려박아주면 Authkey를 뱉어줍니다.


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

SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06
SuNiNaTas Web Level1  (0) 2016.05.06

SuNiNaTas

Web Level1




첫 번째 문제입니다. <%를 봐선 asp로 짜인 소스인것같습니다. 인증 루틴을 확인 해 보니 result 변수에 "admin"이 들어가 있을 때 Authkey를 뱉어내는 것 같습니다.

그 위를 확인 해 보니 result 변수에는 result1과 result2를 &연산 한 값이 들어가는데, 얼핏 보면 문자열끼리 비트연산을 하는 것 같지만 ASP에서는 &가 문자열의 연결을 뜻합니다. PHP의 .과 같은 역할을 한다고 보면 되겠네요.

result1과 result2는 모두 Mid연산으로 문자열을 잘라내는데, result1은 2번째 인덱스부터 2개의 문자를 빼오고 result2는 4번째 인덱스부터 6개의 문자를 빼옵니다. 이렇게 빼내온 문자열을 연결했을 때 admin이라는 문자열이 나와야하네요.

처음에 우리가 입력한 str 변수를 a -> aad, i -> in으로 치환하니, 치환 된 상태에서 어떻게 result1, 2가 구성 될 지 생각을 해야합니다.

만약 str에 'ami'를 입력한다면 다음과 같이 result 값이 나옵니다.


aadmin


여기서 result1, result2를 생각 해 본다면 아래와 같습니다.


result1

  ↓

a[ad][min]

        ↑   

      result2



ami를 입력하니, 우리가 생각 했던 대로 Authkey를 내뱉고 Level1이 종료됩니다.



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

SuNiNaTaS Web Level6  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06
SuNiNaTas Web Level2  (0) 2016.05.06

OverTheWire Behemoth 

[ level2 -> level3 ]




베히모스 lv2입니다. 실행 시켜보니 touch 명령어로 2520이라는 이름의 파일을 만들며, sleep을 긴 시간 넣어 둔 것 같습니다. 실행을 멈추고 gdb로 disassemble 해보도록 합시다. 



sprintf 부분에서 buffer에 "touch %d"를 넣어주고 있습니다. %d의 값으로는 getpid로 가져 온 pid 값을 집어 넣어 주고 있습니다.

두 번째 박스에서는 system 함수로 아까 저장한 buffer의 내용을 실행시켜줍니다. 즉, "touch PID"를 실행 시키는거죠.

여기서 touch 명령어는 절대 경로가 아닌 'PATH' 환경변수에 지정된 경로에 존재하는 touch 바이너리를 실행시키는 것입니다. 따라서 PATH의 값을 바꿔준다면 이 touch를 이용해서 다른 행위를 할 수 있을 것입니다.



env 명령어를 이용해 환경변수를 확인 해 본 결과입니다. 원하는 경로에 touch 명령어를 생성해주고, 이 명령어를 통해 다음 레벨로 갈 수 있는 패스워드를 알아내는 쉘스크립트를 작성한 후 PATH의 값을 변경해주면 다음 레벨의 패스워드를 알아 낼 수 있을 것 같습니다.



환경변수는 앞에 있는 값부터 확인 하기 때문에 += 연산이 아닌 =연산으로 모두 뜯어고칠 예정이므로, cat 명령어도 절대경로로 지정해주었습니다.



export명령어를 이용하여 PATH의 값을 우리가 만들어준 touch 명령어가 있는 경로로 바꿔주고, behemoth2 바이너리를 실행시키면 다음 레벨로 갈 수 있는 패스워드를 알아 낼 수 있습니다.



[ * ] Specially thanks to Zairo!

'Wargame > Behemoth:OverTheWire' 카테고리의 다른 글

OverTheWire Behemoth [level1 -> level2]  (0) 2016.04.28
OverTheWire Behemoth [level0 -> level1]  (0) 2016.04.07

+ Recent posts