Main Level1의 Hint를 보시면 [Ctrl+U]를 하라고 합니다.


소스를 보라고 하는거 같네요. 




소스코드를 보면 눈에보이게 username, password를 주석으로 만들어 놓은게 보이실 겁니다.



'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] Main level4  (0) 2018.08.24
[HackThis] Main level3  (0) 2018.08.24
[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level2  (0) 2018.08.23

Hint의 내용을 보면 찾고있던 페이지가 아니라고 합니다.


처음에 소스코드도 다 뒤져보고 무슨 힌트인지 몰라서 이것저것 하다가


URL 뒷부분의 '?input'이라는 글자가 붙어있는게 이상하다고 생각했지만 알 수 없었네요..


[Forum]의 글을 좀 봤습니다.. 


big big big hint라면서 url을 잘보라고 했습니다.. 확실히 '?input'이라는 글자가 이상합니다.


저는 소스코드를 볼 때 항상 개발자도구로 보는 습관이 있는데 여기서는 

view-source를 통해 봐야합니다.





view-source를 통해 보면 863라인부터 우리가 눈으로 보는 Password 입력란이 보입니다.


이 곳에서도 특별한건 찾지 못했고 혹시나 해서 '?input'을 지워보게 됬습니다.



'?input'을 지우고 소스코드를 확인하니 비슷한 라인의 다음과 같은 script 구문이 있었습니다.

페이지를 로드한 동시에 url의 '?input'을 붙이는 것을 확인 할 수 있습니다.


그 밑에 보시면 Password도 확인 가능하고 인증에 성공합니다... ㅜ



'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] Main level3  (0) 2018.08.24
[HackThis] Main level1  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level2  (0) 2018.08.23
[HackThis] javascript level1  (0) 2018.08.23

1,2번과 동일하게 Password 입력란만 있으니 javascript 코드를 확인합니다.



Password의 입력한 값과 'thecode'라는 값이 동일하면 성공합니다.

'thecode' 변수는 'code123'이라고 초기화 되어있기 때문에 입력을 해봅니다.



분명 'code123'으로 제대로 입력했는데 성공하지 않습니다.

console창으로 가서 값이 제대로 들어가 있는지 확인합니다.


$('.level-form #pass')[0].value 는 제가 입력한 값이므로 'code123'이 제대로 들어갔는데

'thecode'를 확인해보니 다른 값이 들어가 있었습니다.


이 값으로 Password에 입력하면 성공합니다.




'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] Main level1  (0) 2018.08.24
[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level2  (0) 2018.08.23
[HackThis] javascript level1  (0) 2018.08.23
[HackThis] basic+ level5  (0) 2018.08.23

1번과 마찬가지로 Password 입력란만 있으니 script구문을 확인해 봅니다.



javascript구문을 보니 password입력하는 글자 수가 'length'라는 변수 값과 일치하면 성공합니다.



'length'를 검색하여 찾아보면 다음과 같은 javascript를 확인할 수 있습니다.


Math.sin(radians): 

      radians 인수는 라디안으로 측정된 각도를 포함하는 숫자 식, 반환 값은 인수의 사인 값

 Math.ceil(number): 

      number 인수는 숫자 식, 반환 값은 숫자 인수보다 크거나 같은 가장 작은 정수와 동일한 정수 값

 Math.floor(number): 

      number 인수는 숫자 식, 반환 값은 숫자 인수보다 작거나 같은 가장 큰 정수와 같은 정수 값


직접 함수를 생각해서 확인해도 되지만 이미 'length' 값은 정해져 있으니 개발자 도구 console 창에서 검색하면 값을 쉽게 얻을 수 있습니다.




'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level1  (0) 2018.08.23
[HackThis] basic+ level5  (0) 2018.08.23
[HackThis] basic+ level1  (0) 2018.08.23

Password 입력란만 있을 뿐 아무것도 보이지 않았습니다.


소스보기로 javascript 구문을 확인해야 할 것 같습니다.



아래와 같이 document.getElementById('pass').value == correct 구문으로 

Password 입력란의 값과 correct 변수값을 비교하여 같으면 성공하게 됩니다.



'correct'를 검색해보면 바로 아래 부분의 변수가 선언되어 입력 시 성공하게 됩니다.



'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level2  (0) 2018.08.23
[HackThis] basic+ level5  (0) 2018.08.23
[HackThis] basic+ level1  (0) 2018.08.23

b5.jpg라는 이미지와 함께 Username, Password를 입력하는 창이나옵니다.


이미지를 통해 Username, Password를 얻어야 할 것으로 보입니다.



b5.jpg을 클릭해보니 다음과 같은 사진이 나와서 분석해보기 위해 다운을 받았습니다.



HxD라는 툴을 사용하여 보던중 맨 밑에 PK라는 낯익은 파일 시그니처가 보입니다.


PK는 ZIP파일의 파일 시그니처로 이미지는 ZIP파일을 숨기고 있는 것으로 판단됩니다.

(스테가노그래피)



PK부분부터 끝까지 따로 때내어 새로운 파일을 만들어 볼수 있습니다.

HxD로도 secret.txt라는 파일이 있다는 것을 확인할 수 있습니다.








[참고]

파일 시그니처: http://forensic-proof.com/archives/300


기본적인 파일 시그니처는 익숙해지시는게 좋습니다.

'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level2  (0) 2018.08.23
[HackThis] javascript level1  (0) 2018.08.23
[HackThis] basic+ level1  (0) 2018.08.23

b1.txt라는 파일을 받을 수 있으며

Username, Password를 입력하면 풀리게 됩니다.



b1.txt를 받아서 열어보면 다음과같이 시작하고 이상한 글자들로 가득합니다.



혹시 HxD로 열어보면 뭔가 보이지 않을까해서 열어봤고,

보통 파일유형에 따라서 파일 시그니처라는 것이 있는데 42 4D값은 BMP, DIB라는 

Graphics - Windows Bitmap Format입니다.



bmp라는 이미지 확장자라는 것을 알았으니 확장자를 bmp로 바꾸고 열어보면

다음과 같이 이미지로 user와 pass를 알려줍니다.





[참고]

파일 시그니처: http://forensic-proof.com/archives/300

'WarGame > hackthis.co.uk' 카테고리의 다른 글

[HackThis] javascript level4  (0) 2018.08.24
[HackThis] javascript level3  (0) 2018.08.23
[HackThis] javascript level2  (0) 2018.08.23
[HackThis] javascript level1  (0) 2018.08.23
[HackThis] basic+ level5  (0) 2018.08.23

18번의 이어서 Cipher 문제입니다.

0과 1로만 이루어져 있는 수 많은 수를 보면 어쨌든 어떤 10진수가 될거고 

그게 문자가 될꺼라고 생각합니다.



python을 통해 전체 길이를 확인하니 624글자가 됩니다.

이게 어떤 문자의 2진수를 이어붙인 것이라면 일정한 간격으로 떼어놓고 풀어야겠죠?


보통 8bit 단위로 문자를 쓰기때문에 8자리로 나눠서 해봤습니다. 

(마침 길이도 624/8은 나누어 떨어지죠)


앞에 총 24개의 이진수를 8개씩 나눠 문자열로 변환해보니 NVC라는 값이 나왔습니다.

무슨말인지는 모르겠지만 이 방법이 맞는거 같아 진행합니다.



일일이 나눠도 되지만 

python에는 list compression이라는 깔끔하게 한줄로 코딩할 수 있는 기능이 있습니다.

모두 8개의 숫자로 나눠서 리스트에 저장합니다.



각각의 값들을 문자열로 바꿔주면 다음과 같은 내용이 나오는데 뭔가 잘못한줄 알았습니다.

하지만 암호학을 배우신 분들이라면 전치암호라는 말을 들어보셨을 겁니다.


전치암호는 암호문과 평문이 1:1 대응을 이루고 있습니다. 

그렇다는건 아래 알파벳들이 원래는 다른 알파벳이 아닌가 유추할 수 있습니다.


'R'이라는 문자가 혼자서 쓰이고 있습니다. 영어에서 보통 혼자 쓰이는 문자는 a, i 두가지 입니다.

① 'R'이 'A'였다고 가정합니다.


ABCDEFGHIJKLMNOPQRSTUVWXYZ


R과 A의 거리는 17입니다. 이게 맞다고 가정하고 다른 문자를 바꿔보겠습니다.

(Z까지 이동하면 다시 A로 시작)

REU라는 문자는 IVL이라는 알수없는 문자가 됩니다.


② 'R'이 'I'라고 가정합니다.


ABCDEFGHIJKLMNOPQRSTUVWXYZ


'R'과 'I'의 거리는 9입니다.

REU라는 문자는 AND



아래 python 코드를 이용해 결과값을 도출하였습니다.




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

SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_3 [WEB]  (0) 2018.09.06
SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22

문제를 보는 순간 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

+ Recent posts