SuNiNaTaS

System Level2(Prob_24)




시스템 파트 2번째 문제입니다.

첫 번째 문제와는 달리 아무런 힌트도 주어지지 않은 상태에서 다운로드만 가능합니다.

다운로드명은 suninatas로, rwxrwxrwx권한이 주어져있지만 실행이 되지 않는 바이너리 형태였습니다.



혹시나 하는 마음에 .zip으로 확장자를 바꾼 후 압축 해제를 했더니 아니나 다를까, *.jar, *.apk를 압축해제 했을 때의 파일 구조를 보여주었습니다.

classes.dex 파일을 dex2jar 툴로 jar파일로 바꿔주도록 합시다.



classes-dex2jar.jar 파일을 jd-gui 툴을 이용하여 열어보았습니다.

해당 jar 파일 안에는 suninatas.class 파일이 존재했는데, 확인 해 보니 localObject1와 localObject2, paramAnonymousView 값에 각각 id, pw, key값을 받아내는 부분이 있었습니다. 그리고 정해진 key값이 들어오면 ~/chk_key.asp로 request요청을 날려주는데, id와 pw, key값을 모두 날려주는 것을 확인 할 수 있었습니다. 빨간 밑줄의 뒷 부분이 key값을 GET 형식으로 보내주는 부분입니다.



해당 url을 그대로 suninatas 웹페이지의 id, pw 그리고 class파일의 key값을 넣어 요청을 때렸더니 Wrong!Wrong!이라는 경고 메시지를 띄워줄 뿐 Auth Key를 뱉어주진 않았습니다.



그래서 직접 request를 때리지 않고 apk파일인만큼 직접 안드로이드에서 돌려보자는 생각을 해 보았습니다.



이클립스의 AVD 툴을 이용해 안드로이드 예뮬 환경 구축 후 직접 돌려보았습니다.



request 요청을 직접 때렸을 때와 달리 Auth Key값을 뱉어내는 것을 확인 할 수 있었습니다.

이번 문제는 가상 안드로이드 환경을 구축 할 수 있는지 없는지의 여부를 확인하는 문제였던 것 같습니다.

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

SuNiNaTaS System Level2(Prob_24)  (0) 2016.05.10
SuNiNaTaS System Level1(Prob_16)  (0) 2016.05.10
SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09

SuNiNaTaS

System Level1(Prob_16)




써니나타스 시스템 카테고리 첫 번째 문제입니다.

SuNiNaTaS.com에 속해있는 멤버의 패스워드를 알아내는 것이 우리의 목표입니다.

Download 버튼을 누르면 packet_dump.pcap 파일이 담겨있는 압축 파일이 받아집니다. 이 파일을 분석하여 패스워드를 알아내도록 하죠.



필터링은 http.request.full_uri contains "suninatas" 로 걸고 suninatas.com에 해당하는 패킷을 살펴보았습니다.

당연히 id/pw를 보내는 요청이기에 POST 요청만 확인하였으며, 맨 아래의 POST 패킷을 제외한 나머지 패킷에는 로그아웃을 한 흔적이 없었습니다.

따라서 맨 아래에 나와있는 id/pw가 실제로 로그인 되는 계정으로 추측 할 수 있습니다.

여기서 구해낸 ultrashark/=SharkPass01 로 suninatas 메인 페이지에서 로그인을 하면 아래와 같이 Key 값을 얻어낼 수 있습니다.



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

SuNiNaTaS System Level2(Prob_24)  (0) 2016.05.10
SuNiNaTaS System Level1(Prob_16)  (0) 2016.05.10
SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09

SuNiNaTaS

Web Level10(Prob_23)




써니나타스 웹 카테고리의 마지막 문제입니다.

Hard Blind SQL Injection 문제라고 합니다.

이번에는 admin이라는 단어 자체가 필터링이 되어 있습니다. 이를 우회하여 admin 계정의 패스워드를 알아내는 것이 우리의 목표가 되겠습니다.



기본으로 주어지는 계정인 guest/guest 계정을 이용하여 주물럭거리다 보니 위와 같은 형태로 문자열 필터링 우회가 가능하다는 것을 알아냈습니다.



그래서 22번 문제와 동일한 방법으로 admin 계정의 pw 길이를 먼저 알아냈습니다.



그런데 쿼리를 작성하다 보니 자꾸 No Hack. 필터링이 걸리기에 확인을 해봤더니 역시나 쿼리 길이 제한이 있었습니다.

우와 같이 30byte까지는 허용 범위이지만



30byte를 넘어가는 순간 No hack을 뱉어내고 종료시킵니다. 따라서 우리는 30byte 이내의 쿼리를 작성해야 하는 상황이 됩니다.



한참 고민하던 중 22번과 다르게 23번 문제는 or 이 필터링 되지 않았다는 것을 알고 바로 이용했습니다.

substring, substr이 필터링 되기 때문에 이를 우회하기 위해 left 함수와 right 함수를 함께 사용하여 기능을 구현했습니다.

또한 쿼리를 작성하다보니 계속 30byte를 넘겨서 고민을 계속 해본 결과 위와 같은 형태의 쿼리문이 완성되었습니다.



딱 30byte



바로 python으로 브포 코드를 작성하여 key값을 찾아냈습니다.



SuNiNaTaS web level all clear!

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

SuNiNaTaS System Level2(Prob_24)  (0) 2016.05.10
SuNiNaTaS System Level1(Prob_16)  (0) 2016.05.10
SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09

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 Level9(Prob_22)  (0) 2016.05.09
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 Level8  (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 Level7  (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 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 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 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

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 Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06
SuNiNaTas Web Level2  (0) 2016.05.06
SuNiNaTas Web Level1  (0) 2016.05.06
  1. SDE 2017.07.25 13:32

    저 코드 그대로 실행시켰더니 먼저 로그인하라는 문구만 나오네요 ㅜㅜ

    • Choiys 2017.07.27 13:44 신고

      스크립트에 있는 쿠키 값은 풀이자분이 로그인하셨을때의 쿠키를 사용하셔야합니다. :)

  2. SDE 2017.07.25 13:32

    저 코드 그대로 실행시켰더니 먼저 로그인하라는 문구만 나오네요 ㅜㅜ

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 Level3  (0) 2016.05.06
SuNiNaTas Web Level2  (0) 2016.05.06
SuNiNaTas Web Level1  (0) 2016.05.06

+ Recent posts