안녕하세요. 오늘은 webhacking 42번 문제를 풀어보겠습니다.

홈페이지로 들어가 webhacking 42번을 눌러주세요.

음 download버튼이 있습니다. 한번 눌러 봅시다.

test.txt는 위와 같이 뜨는군요.

test.zip은 위와 같이 접근거부 당했습니다.

자 이제 소스를 한 번 봅시다.

주석처리된 부분을 보시면 test.zip의 패스워드는 오로지 숫자만으로 되어있다는군요.

그렇다면 test.zip을 받을 필요가 있습니다. 그러면 어떻게 해야 할까요?

자 본페이지로 돌아가서 관리자도구를 열어 봅시다. 열어서 삼각형 버튼을 눌러 쭉 훑어보면

아래와 같은 화면이 나옵니다.

txt의 download 링크는 down값이 dGVzdC50eHQ= 인 주소로 하이퍼링크가 되구요.

zip의 download링크는 접근거부 창이 뜨는 주소로 하이퍼링크가 되어있네요.

그렇다면 여기서 궁금증이 하나 생기죠.

dGVzdC50eHQ=가 도대체 뭘까요?

딱 봐도 소문자 대문자 숫자가 섞인걸 보아 인코딩된 문구라는 것을 알 수 있습니다. 

게다가 문구 뒤에 =가 붙어있기 때문에 base64로 인코딩 된 것을 알 수 있습니다.

그렇다면 base64로 디코딩 해 봅시다.

위의 주소로 들어가시면 base64가 있습니다.

디코딩을 하니 test.txt가 나오는군요.

즉 정리하면 down 값에 파일이름을 base64로 인코딩한 값을 넣으면 그 파일의 주소로 이동하게 된다 라고 해석이 되겠네요.

우리는 test.zip의 주소로 이동해야 하므로 test.zip을 인코딩하여 down에 넣어봅시다.

dGVzdC56aXA=란 값이 나왔군요. 그렇다면 down에 넣어봅시다.

변수에 값을 넣을때는 아래와 같이 주소뒤에 ?를 붙이고 넣어야 합니다.

엔터를 칩시다.

그러면 test.zip이 다운되는 것이 보입니다. 한번 열어 봅시다.

readme.txt가 보이네요. 보기를 위해 압축을 풀어 줍시다.

암호를 입력하라는군요. 아까 소스창에 적힌 것을 보면 암호는 오로지 숫자만으로 되어있답니다. 그런데 숫자로만 되어있다 해도 몇글자인지 모르니까 이건 뭐 별 소용이 없습니다.

그래서 zip파일의 암호를 풀어주는 프로그램을 써봅시다.

여기선 azpr프로그램을 사용해 보겠습니다.

다운받아서 열어봅시다.

열어서 위와 같이 해주시면 됩니다. 따로 설명이 없어도 다들 아시겠죠?

Zip-file부분엔 test.zip넣어 주시고 비번은 온리 숫자이므로 all digits 체크해주시고 start버튼을 눌러주시면 끝입니다. 정말 간단하지요,

해독이 완료되었습니다. 뜬 창을 보면 total passwords가 있는데 이것은 패스워드를 찾기 위해 대입한 숫자구요. 진짜 패스워드는 빨간 박스안에 있는 패스워드입니다.

알집에 입력해서 풀어봅시다.

주소가 하나 나오는군요. 주소를 입력해 봅시다.

패스워드가 나왔습니다. 이제 이 패스워드를 인증해봅시다.

웹해킹 홈페이지의 auth에 들어가 패스워드를 입력해 주시면 됩니다.

Submit를 눌러주시면

이렇게 뜹니다.

네 이것으로 문제풀이를 마치겠습니다.


'Webhacking' 카테고리의 다른 글

webhacking - 60번 문제  (0) 2015.09.25
webhacking - 20번 문제  (0) 2015.09.25
webhacking - 58번 문제  (0) 2015.09.18
webhacking - 61번 문제  (0) 2015.08.07
webhacking - 49번 문제  (0) 2015.08.07
Posted by englishmath
,

안녕하세요. 오늘은 webhacking 58번 문제를 풀어보겠습니다.

홈페이지로 들어가 webhacking 58번을 눌러주세요.


PW와 login이 있네요. 소스부터 봅시다.

화면의 오른쪽 마우스를 눌러 소스보기를 누릅시다.

kk.js란 파일이 들어가 있음을 알 수 있습니다. 확장자js 인 파일은 외부 Javascript 파일입니다. 즉 JavaScript 코드만을 가지고 있는 text 파일이라고 보시면 됩니다.

그러면 이 kk란 파일은 어떤 것을 의미하는 걸까요. 확인을 위해 본페이지로 돌아가 개발자 도구를 열어봅시다.

개발자 도구의 Elements를 누르면 위와 같은 화면이 나옵니다.

소스에 있는 kk.js외에도 kk2.js와 hackme.swf 파일이 있는 것을 알 수 있습니다.

확장자가 swf인 파일은 플래시 파일을 의미합니다.

그렇다면 이러한 파일들을 확인해 볼 필요가 있습니다. 주소창 바로 뒤에 파일이름을 적어줍시다.

엔터를 치시면 아래와 같이 나옵니다.

보니까 kk에 document.URL을 저장시키고 저장된 kk의 값에서 앞에서 10번째다음 숫자부터 4개의 값을 뽑아내 kk에 다시 저장시킨다는군요.

다음 파일을 봅시다.

kk에 me.swf를 더한 값을 kk에 저장시키고 그다음 embed태그와 kk를 적어 출력시키고 있습니다. embed는 플래시를 재생하게 해주는 태그입니다. src는 플래시의 주소겠지요.

음.. 일단 마지막 파일을 확인 해 봅시다.

문제의 화면이랑 똑같은 것이 나오네요. 아무래도 이 것이 플래시인것 같습니다.

login을 누르니 wrong이라고 나오네요.

그런데 kk2.js를 보시면 kk값에 me.swf를 더한다는 수식이 있습니다.

동영상을 어떻게 더한다는 것일까요? 일단 동영상을 받을 필요가 있어보이는군요.

그런데 어떻게 받아야 할까요? 오른쪽 마우스를 눌러도 파일을 받는 선택지가 없으니까요.

이럴땐 메모장을 하나 열어줍시다. 그리고 아래와 같이 씁시다.

그리고 저장시켜줍시다.

a href는 하이퍼링크를 걸어주는 태그입니다. 글자를 누르면 hackme가 있는 장소로 가게 해주는 것이지요. 그럼 왜 만드느냐고요? 보시면 압니다.

파일 이름은 html로 저장시켜 줍시다.

그리고 파일을 열면 하이퍼링크 걸린 글자가 나옵니다. 그대로 오른쪽 마우스를 눌러 다른 이름으로 대상을 저장합시다.

다운 받은 동영상을 재생시키면 그냥 별거 없습니다. 단 kk+me.swf이므로 문자 또는 숫자로 더할 가능성이 있습니다. 메모장으로 동영상을 열어봅시다.

그냥 메모장을 켜고 동영상을 메모장에 끌여다 놓으시면 됩니다.

알 수 없는 문자들만 우르르 적혀 있군요. 쭉 살펴봅시다.

잘 살피면 우리가 알아들을 수 있는 문구가 하나 보입니다. 주소가 적혀있네요. 한번 들어가 봅시다.

입력하시면 잘못된 주소라고 나옵니다

....

굳이 잘못된 주소를 적어놓았을까요?

메모장을 다시 한번 살펴봅시다.

다시한번 보니까 세번째 줄에 php가 보입니다. php는 웹페이지의 확장자 중 하나입니다.

d.php... 뭔가 이상하죠. 혹시 짤린건가 생각해서 주소에 d.php를 붙여 보았습니다.

엔터를 치시면

음? 바로 해결이 되는군요.. 좋은건가..

네 이것으로 문제풀이를 마치겟습니다. 


'Webhacking' 카테고리의 다른 글

webhacking - 20번 문제  (0) 2015.09.25
webhacking - 42번 문제  (0) 2015.09.18
webhacking - 61번 문제  (0) 2015.08.07
webhacking - 49번 문제  (0) 2015.08.07
webhacking - 21번 문제  (0) 2015.08.02
Posted by englishmath
,

안녕하세요. 오늘은 basic rce level 15 문제를 풀어보겠습니다.

홈페이지로 들어가 basic rce level 15를 눌러주세요.

14번이랑 문제가 똑같군요. 일단 프로그램을 다운받아 봅시다.

이름과 시리얼 입력칸이 나왔습니다. 아무거나 입력해 봅시다.

다시 시도라하네요. 올리디버그로 열어봅시다.

재생버튼을 눌러줍시다.

pushad가 없는걸로 보아 패킷된 파일은 아닌것 같습니다. 그렇다면 바로 성공문자열을 찾아봅시다. 위와 같이 들어갑시다.

성공문자열은 모르겠지만 실패문자열은 잘 보이는군요. 더블클릭 해봅시다.

이러한 실패문자열이 있으면 당연히 성공과 실패가 나뉘는 부분이 있죠. 좀 위로 올라가시면 위 그림과 같이 CMP 부분이 보입니다.

EAX와 DWORD PTR DS:[45B844]를 비교한다네요.

PTR DS:[45B844]는 메모리주소[45B844]에 저장된 값을 의미합니다. 앞에 DWORD는 4byte를 의미합니다. WORD는 2byte이지요.

즉 정리하면 EAX와 메모리주소[45B844]에 저장된 4byte값이 같으면 성공한다 라고 보시면 되겠군요. 일단 EAX를 찾읍시다.

CMP에 브레이크를 걸고 실행시켜서 아래와 같이 입력해봅시다.

Check it을 누르면 CMP부분의 브레이크에 걸립니다. 값을 확인합시다.

EAX가 2라고 나와있네요. 즉 serial은 EAX값입니다. 자 이제 문제를 풀어봅시다.

Name가 CodeEngn일때 라고 했으므로 CodeEngn을 써 줍시다.

그리고 check it을 눌러 브레이크 부분에 걸렸으면 아래와 같이 메모리주소를 확인합시다.

하단쪽을 보시면 아래 그림처럼 메모리주소창이 뜹니다.

그런데 여기서 주의하실점이 있습니다. 바로 메모리 덤프주소는 리틀 엔디언 방식으로 읽어주셔야 한다는 것입니다.

엔디언이란 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방식을 뜻합니다. 빅 엔디언, 리틀 엔디언, 미들 엔디언으로 나뉘어집니다.

빅 엔디언 방식은 큰 단위의 바이트가 앞에 오는 방식이고 리틀 엔디언 방식은 작은 단위의 바이트가 앞에 오는 방식을 뜻합니다.

자 그러면 어떻게 읽어야 할까요>

일단 주소를 들고 오면

60 61 00 00 09 00 00 00 입니다.

리틀 엔디언 방식으로 읽어야 하므로 작은 단위가 앞에 와야합니다. 바이트단위이므로 

00 00 00 09 00 00 61 60으로 읽어야 합니다.

DWORD이므로 4byte를 들고오면

00006160이 됩니다. 

즉 정리하면 EAX값은 16진수 6160값이 되어야 합니다.

근데 입력창은 10진수로 입력해야 하므로 16진수 6160을 10진수로 바꾸어 줍시다.

24928이로군요. 이 값을 프로그램에 넣어봅시다.

아무래도 정답이 맞는 것 같습니다. 그럼 인증을 해 봅시다.

정답이 맞는 것 같습니다.

네 이것으로 문제풀이를 마치겠습니다.




'codeengn' 카테고리의 다른 글

codeengn - basic rce level 18  (0) 2015.09.25
codeengn - basic rce level 17  (0) 2015.09.25
codeengn - basic rce level 14  (0) 2015.08.18
codeengn - basic rce level 13  (0) 2015.08.12
codeengn - basic rce level 12  (0) 2015.08.12
Posted by englishmath
,