문제를 보는 순간 ASCII 값일꺼 같다는 생각을 했습니다.



그래서 python을 이용해서 바꿔보니


VG9kYXkgaXMgYSBnb29kIGRheS4gVGhlIEF1dGhLZXkgaXMgVmVyeVZlcnlUb25nVG9uZ0d1cmkh

위와 같은 문자열이 생성되었습니다. 


영어 대소문자와 숫자로만 이루어져 있는 것을 보아 base64 인코딩이 되어있다고 생각해 decode까지 수행하는 python 코드를 만들어 실행해봤습니다.



base64 decode까지 수행하니 다음과 같이 인증키가 나왔습니다.



[python code 과정]

payload에 문제에서 주어진 문자열을 저장 ▶ " "(공백)으로 문자열을 나누어 list에 저장 

▶ 각각의 값을 문자열로 변환 ▶ base64 decoding 수행


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

SuNiNaTaS_3 [WEB]  (0) 2018.09.06
SuNiNaTaS_19 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22
SuNiNaTaS_8 [WEB]  (0) 2018.08.21

suninatas의 비밀번호가 인증키라는 것 같습니다.



다운로드해서 확인해보면 passwd, shadow파일 두개가 있습니다.

둘다 유닉스에서 쓰는 /etc/passwd, /etc/shadow라는 것을 짐작 할 수 있습니다.


처음에 열었을때 개행이 안되어 있어서 구분하기 위해 개행을 다 해봤습니다.


여러 계정의 정보가 있지만 중요한건 suninatas의 비밀번호이므로 shadow파일에 집중합니다.




[/etc/shadow 파일구조] 

① Login Name

② Encrypted: 패스워드 암호화 값

③ Last Changed: 1970.01.01부터 패스워드가 수정된 날짜 일수

④ Minimum: 패스워드 최소 사용 기간

⑤ Maximum: 패스워드 최대 사용 기간

⑥ Warn: 패스워드 사용 만기일 전 경고 메시지 제공 일수

⑦ Inactive: 로그인 접속차단 일수

⑧ Expire: 로그인 사용 금지 일수(월/일/연도)

⑨ Reserved: 사용x


Encrypted의 값이 암호화된 비밀번호이므로 패스워드 크랙을 해야한다.


  $6$QlRlqGhj$BZoS9PuMMRHZZXz1Gde99W01u3kD9nP/

  zYtl8O2dsshdnwsJT/1lZXsLar8asQZpqTAioiey4rKVpsLm/bqrX/


위의 suninatas의 암호화된 패스워드는 $를 기준으로 나눠진다. (한줄에 안나와서 개행)


첫번째 $는 암호화 방식을 나타냅니다. $6이므로 SHA-512로 해쉬 암호화 했고,

두번째 $는 salt 값입니다. 해쉬 암호화 할때 비밀번호와 함께 붙여서 암호화를 합니다.

세번째 $는 hash_value로 암호화 방식과 salt값에 따른 결과입니다.




그렇다면 어떻게 비밀번호를 크랙하는가?


John the ripper라는 툴을 이용해서 하면됩니다.

많이 알려진 툴인데 windows와 unix에서 모두 가능하고 저는 windows에서 사용했습니다.

(처음에 다운받고 실행했는데 error가 나서 고전... 컴퓨터 재부팅하니깐 되네요)


root의 비밀번호는 toor

suninatas의 비밀번호는 iloveu1라고 나오게 됩니다.




[참고/출처]

https://idchowto.com/?p=10251

http://blog.plura.io/?p=3284

http://blog.naver.com/PostView.nhn?blogId=koromoon&logNo=220611830118

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

SuNiNaTaS_19 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22
SuNiNaTaS_8 [WEB]  (0) 2018.08.21
SuNiNaTas_2 [WEB]  (0) 2018.08.20

README가 있는 이상 먼저 읽어보고 싶어서 클릭해 봤습니다.




password를 입력해야 할것같은 창이 나왔고, 친절하게 SQL문도 보여줍니다.

nIdx가 '3'이고 입력한 password가 맞으면 szPwd를 보여주는 구문입니다.


이걸보니 Sql Injection을 해야할 것이라고 생각됬습니다.



우선 기본적으로 1을 입력해 봤을때 False라는 구문이 나왔습니다. 틀린 password겠죠?



Sql Injection구문 중에 고인물인 1' or 1='1로 입력해봤더니 No! hacking!이라는 alert창이 하나 나왔습니다. password 값을 입력할때 필터링을 하는 문자가 있는거 같습니다.





'='을 넣고도 확인해보니 '='이라는 문자는 필터링 규칙으로 되어있는거 같습니다.

그밖에도 몇가지가 필터링 규칙으로 정해져 있었습니다.


그래서 '='을 대신할 수 있는 like구문으로 injection을 해봤습니다.


nIdx='3'이라는 구문과 nIdx like '3'은 동일한 역할을 수행합니다.

(nIdx의 I부분이 i의 대문자인줄 모르고 l로 몇번 수행해봤던...)



구문이 성공하여 Congratulation!!과 함께 auth_key값을 줍니다.


그리고 확인을 눌러보면 접근권한이 없다고 나오게됩니다.




이리저리 보다가 cookie값을 확인해 봤는데 auth%5Fkey라는 cookie가 생성되어있었습니다.

%5F는 '_'값이고 value로는 '?????'가 들어가 있었습니다.


cookie 값으로 어떤 사용자인지 확인할 수 있기에 획득한 'suninatastopofworld!'를 넣어보고 해봤지만

똑같이 접근권한이 없다고 합니다.


value값이 인코딩 되어있는 점과 게시물중 reference! 게시물을 보니 md5 해쉬를 해야할것 같습니다.




md5로 해쉬한 값을 cookie에 넣어주고 다시해보니 게시물을 확인 할 수 있었습니다.


여기서 얻은 auth_key 값으로 문제 인증을 해봐도 안되고 게시물의 내용인 'KeyFinding^^'으로 인증하려고해도 실패해서 고전 했습니다..


그러던 중 소스보기를 해보니 'KEY_HINT'라는 이름의 form이 있었고 

action으로 "Rome's First Emperor" 값이 있어서 인증창으로 가서 해봐도 소용이 없었습니다.


그리고 구글에 검색해보니 "Augustus"가 로마의 최초 황제라고 하여 인증했더니 성공했습니다.

(이렇게까지 해야했나요? ㅜㅜ)




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

SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_8 [WEB]  (0) 2018.08.21
SuNiNaTas_2 [WEB]  (0) 2018.08.20
SuNiNaTas_1 [WEB]  (0) 2018.08.17

소스보기를 해보니 Hint가 있었고 'admin'으로 로그인을 하라는것 같다.

비밀번호는 0~9999 사이 인것 같으니 brute force 하면 쉽게 해결할 것으로 보인다.



python3 중 requests라는 모듈을 이용해 password를 brute force 해보니 쉽게 답을 찾을 수 있었다.

소스 보기에서 id,pw는 post방식으로 넘어가는 것을 확인하고 requests.post()를 사용한다.

(블러 처리한 부분은 본인의 cookie값)





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

SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22
SuNiNaTas_2 [WEB]  (0) 2018.08.20
SuNiNaTas_1 [WEB]  (0) 2018.08.17

처음 시작하면 아래와 같은 화면이 나옵니다.


ID, PW에 1, 1 값을 입력해봤는데 다음과 같은 alert창이 발생합니다.



개발자 도구로 소스를 확인해보니 join을 클릭 시 ID,PW가 동일하면 alert창을 띄우고 다르면 submit을 한다는 것을 확인합니다.


또 아래 주석으로 HINT가 있는대 id = pw인것을 보니 id랑 pw값이 동일하면 문제가 풀리는 것으로 보여집니다.





id, pw를 동일하게 보내면 script로 alert창이 발생하기 때문에 burp suite라는 프록시 툴로 임의로 값을 바꿔줍니다.




javascript는 서버단에서 처리하는게 아니라 사용자 웹브라우져에서 처리하는 값이므로 이미 값이 보내졌고 중간에 변경된 값은 확인할 수 없습니다. 


웹브라우져에서도 검사를하고 서버단에서도 검사를 이중으로해야 좀 더 안전해집니다.


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

SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22
SuNiNaTaS_8 [WEB]  (0) 2018.08.21
SuNiNaTas_1 [WEB]  (0) 2018.08.17

asp 코드로 짜여있는 문제입니다.


특정 텍스트를 입력 시 아래의 스크립트가 실행되어 result 값에 "admin"이 나오면 되는 문제입니다.



   Replace(변수, 변경문자, 변경하려는 값) 

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

   &연산자: 문자열을 합침




Replace 함수를 통해 문자열에서 "a"는 "aad"로 "i"는 "in"으로 변경해줍니다.


admin이라는 문자열을 입력했으면 aaddminn 값으로 변경되고

Mid함수를 통해 result1 = "ad", result2 = "dminn"라는 값이 입력되어 result = "addminn"라는 값으로 풀리지 않습니다.

(Mid로 6자리를 가져오려고 해도 문자열 끝에 도달하기 때문에 5개만 가져오게 됩니다.)


ami라는 문자열을 입력하면 aadmin 값으로 변하고

result1 = "ad", result2 = "min", result = "admin"이 되어 성공하게됩니다.




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

SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22
SuNiNaTaS_8 [WEB]  (0) 2018.08.21
SuNiNaTas_2 [WEB]  (0) 2018.08.20

+ Recent posts