hack me - 15번 문제

Hack me 2015. 7. 20. 16:04

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

홈페이지로 들어가 15번 문제를 눌러주세요.

쉬운 암호화 라고 되어있네요. 밑의 글자를 암호화하라는 뜻인것 같군요. 그래서 아는 프로그램으로 인코딩을 해보겠습니다.

안되구요.

안되네요.

그래서 전에 했던 것처럼 홈페이지에서 한번 해보겠습니다 crack으로 들어갑시다.

정말 간단하게 되는군요.... 패스워드를 입력합시다.

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


'Hack me' 카테고리의 다른 글

Hack me - 35번 문제  (0) 2015.07.15
Hack me - 4번문제  (0) 2015.07.13
Hack me - 2번문제  (0) 2015.07.06
Posted by englishmath
,

안녕하세요. 오늘은 웹해킹 56문제를 풀어보겠습니다.

홈페이지로 들어가 56번 문제를 눌러주세요.

음 보드가 하나 나오네요.일단 소스를 봅시다.

빨간색 부분을 보시면 HellSonic을 눌렀을때 어딘가로 이동된다는 군요. 그럼 한번 눌러 봅시다.

???? HellSonic이 아이디였나 봅니다. 순위는 2위이고.. 밑에 금액은 20이라 되있네요.

밑의 challenges를 눌러 봅시다.

HellSonic이 여태까지 푼 문제가 나오는군요. 진짜 많이 푸셨네요. 일단 얻을게 없으니 

뒤로 가봅시다. 이 challenges 말고 다른 버튼은 동작을 안합니다. 텍스트 칸처럼 보인 것도 눌러보니 입력이 안되더군요. 흠... 문제로 다시 돌아갑니다.

이 HellSonic 앞엔 Thanks to 가 나와있습니다. 즉 HellSonic한테 고맙다라는 인사를 한 것이지요. 제 생각엔 HellSonic이 문제출자자인것 같습니다. 문제를 내줘서 고맙다라는 소리지요. 즉 실제문제와는 아무런 관계가 없다고 볼 수 있습니다.

다시 문제를 살펴봅시다.

subject쪽에 하이퍼링크로 되있는 글자가 두개 있습니다. 한 번 눌러 봅시다.

readme를 눌렀을때

hi~를 눌렀을 때..

guest 쪽은 hi라고 나왔지만 admin쪽은 접근 거부 라고 나오네요. 아무래도 이번 문제는 admin으로 접속하는 것 같습니다.

그 밑에 보시면 검색버튼이 있습니다. 음 뭘 검색하라는 걸까요? 그래서 보드에 있는 내용 전부를 닥치는 대로 입력해보았습니다. 그랬더니 3가지 경우를 찾을 수 있었습니다.

1. 검색한 값이 hi~일때

2. 검색한 값이 0일때


3. 그외의 나머지값일때

음 일단 주목할 점은 1번인것 같습니다. hi~를 검색했더니 guest가 나왔습니다. 대문자로 입력을 해도 똑같이 나오더군요. 대소문자 구별을 안하는 것 같습니다. 보통은 subject의 값으로 로그인 할 수 있을거라고 생각하겠지만 readme를 검색했더니 3번의 결과가 나왔습니다. 즉 이 검색창에 무언가를 입력해서 admin으로 접속 할 수 있도록 하는 것이 이번 문제인것 같습니다.

일단 guest의 hi~를 하나씩 나누어 검색해보았습니다. 그러자 i와 ~은 guest를 출력했는데 h하나만은 admin과 guest를 둘다 검색하였습니다. ?? 뭔가 이상해서 알파벳 전부를 하나씩 넣어보기로 했습니다. 하나씩 다 해보니 다음과 같은 결과가 나왔습니다.

k와 p를 넣었을때 admin이 출력되었습니다.

정리를 해보면 

admin : 0 h k p

guest : 0 h i ~ 

입니다. 그런데 곰곰히 생각해보니 hi는 특수문자가 들어갑니다. 혹시 admin도 들어가는지 시험하기 위해 모든 특수문자 ~!@#$%^&*()_+|-=\`<>?,./:";'{}[]를 다 넣어 보았습니다. 그러자 몇개를 더 알게 되었습니다.

admin : 0 h k p . % _ 이 하나라도 들어갈 경우 출력된다.

guest : 0 h i ~ % _ 이 하나라도 들어갈 경우 출력된다.

여기서 %는 어느 문자열에나 올 수 있기 때문에 제외시킵시다. 그리고 _는 임의의 숫자나 문자입니다. 다른 말로 어떠한 수나 문자가 될 수도 있다는 뜻입니다. 그렇기 때문에 _을 클릭하면 둘다 출력되는 것입니다. 

예를 들어 guest의 값이 hi~ 이면 검색창에 ___이 세개를 넣어도 guest가 검색이 됩니다.

그런데? ____이렇게 4개를 넣으면 guest의 값은 나오지 않습니다. 왜냐하면 guest의 글자수는 3개이기때문에 4자리가 오면 당연히 검색되지 않는 것이지요. 다들 여기서 눈치채셨겟지요? _를 이용하면 우리가 구하고자 하는 admin의 글자수를 알수 있습니다. ____부터 하나씩 늘려가며 검색을 해봐서 admin의 글자수를 봅시다.

_______부턴 admin이 검색되지 않습니다. 즉 admin은 6글자다 라는 추측이 나옵니다.

그러면  admin의 값은 ?????? 이군요. 지금부터 한자리씩 맞춰봅시다.

간단합니다. 여기서 0_란 말은 0으로 시작하는 임의의 수입니다. 만약 값이 00, 01 02 03 04 등, 자릿수가 맞고 0으로 시작하면 0_으로 다 검색시킬 수 있습니다. 그렇기 때문에 우리는 첫수를 알기 위해 0_____부터 ._____까지를 다 검색해봅시다. 딱 하나가 admin으로 뜨는군요.

그렇습니다. 첫자리는 k입니다. 첫자리수를 구하셧으면 반복해줍시다.

k0____ 부터 k.____까지 입니다. 참고로 반복된 문자가 있을 수 있습니다. 마찬가지로 하나가 뜨는군요. 두자리 수도 k입니다.

다시 kk0___ 부터 kk.___까지 검색합시다. 이것도 노가다네요.... 세번째 자리수는 .입니다. 

kk.0__부터 kk..__까지 검색합시다. 네번째 자리수는 p입니다.

kk.p0_부터 kk.p._까지 검색합시다. 다섯번째 자리수는 h입니다.

kk.ph0부터 kk.ph.까지 검색합시다. 마지막 자리수는 p입니다.

그렇다면 admin의 값은 kk.php입니다. 딱 봐도 주소군요. 문제 뒷자리에 적어줍시다.

엔터를 눌러주시면

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




'Webhacking' 카테고리의 다른 글

webhacking - 35번 문제  (0) 2015.07.29
webhacking - 32번 문제  (0) 2015.07.29
webhacking - 47번 문제  (0) 2015.07.17
Webhacking - 33번 문제  (2) 2015.07.11
Webhacking - 27번문제  (2) 2015.07.10
Posted by englishmath
,

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

홈페이지로 들어가 문제를 눌러주세요.

음 무슨 뜻일까요? 일단 소스를 봅시다.

밑부분에 주석처리 되있는 부분이 보입니다. 문제인것 같으니 한번 확인해봅시다. 

음. 일단 if문부터 봅시다.

email의 값이 포스트 방식으로 전송되면 mail함수를 실행한다고 되어있네요.

mail은 말 그대로 email을 보내는 함수입니다. 형식은 다음과 같습니다.

mail("받는사람주소","제목","내용", 추가로 지정한 헤더정보);

즉 이 함수를 해석해보면 제목이 readme이고 내용이"password is $pass"인 메일을 admin@webhacking.kr이 받는답니다.

그런데 마지막에 있는 헤더정보가 신경쓰이는군요. 헤더란 여기서 추가옵션이라는 뜻입ㄴ;디. 여기선 header변수가 쓰였군요. header를 살펴봅시다.

$header="From: $_POST[email]\r\n"

From은 ~로부터 란 뜻이군요. 즉 보내는 사람인 것 같습니다. 보내는 사람의 주소는 $_POST[email]의 값이구요. 뒤쪽의 \r\n는 줄바꿈입니다.

음 정리하면 email의 값을 POST 방식으로 넣으면 패스워드가 admin@webhacking.kr로 보내진답니다. 그런데 우리의 메일주소는 admin@webhacking.kr이 아닙니다. 즉 email값에 어떤걸 넣어도 패스워드메일은 admin@webhacking.kr로 가기 때문에 패스워드를 볼 수 없습니다. 그러면 어떻게 해야 할까요?

지금 여기서 우리가 보낼 수 있는 값은 $_POST[email]의 값입니다. 그리고 $_POST[email]의 값은 header로 들어가고 header값은 mail로 들어가기 때문에 결국은 mail함수의 내용을 바꿀수 있다는 소리입니다. 하지만 위치로 봤을때 받는 사람의 주소를 바꿀 순 없습니다.받는 사람의 주소를 바꿀 수 없는데 우린 패스워드를 알아야 합니다.

그러면? 우리도 메일을 받을 수 있도록 해야 하지요. 그런데 그냥 $_POST[email]값을 주면 보내는 사람이 되버립니다. 우리는 받아야 하는데 보내는 사람이 되버리면 곤란하지요. 이때 문제를 다시 보시면 취약점을 공략할 수 있는 구문이라고 힌트를 주는군요. 취약점이라...

따로 검색을 해보니 메일을 보낼때 주의할 점으로 cc라는 말이 나오더군요. cc란 참조란 뜻입니다. 메일에서 참조는 뭔지 다들 아실겁니다. 받는 사람외에 참조로 또 다른 이메일주소를 적어주면 그 사람도 메일을 받는 것이지요. 호오.. 그런데 이것이 왜 취약점이냐구요?

메일을 보낼 때 받는 사람은 보낸 사람이 지정한 참조 주소도 같이 보게 됩니다. 예를 들어 설명하면 

A가 B에게 메일을 보내는데 C를 cc로 지정했습니다. 그래서 정리를 하면

1.B는 메일을 받습니다. 왜냐하면 A가 보냈으니까요.

2. C도 메일을 받습니다. 왜냐하면 A가 cc로 지정했기 때문입니다.

3.B는 A로부터의 메일을 받을때 A가 cc로 지정한 C주소도 함께 보게 됩니다.

4.B와 C는 서로 아는 사이가 아니인데도 불구하고 B는 C의 이메일 주소를 알게 됩니다.

이런 문제가 있습죠. 이런.. 너무 길어졌네요.

자 그러면 우리는 참조를 이용해서 꼽사리식으로 메일을 받아먹어 봅시다. 헤더를 수정하여 cc를 추가해야 합니다. 그렇게 되면 이렇게 되야겠지요. 

$header="From: abcde@naver.com\r\ncc: 자기id"; 이렇게 바꾸면 되겠네요.

우리는 $_POST[email]값만 바꿀 수 있으므로 $header="From: 뒤쪽부분만 써주시면 됩니다. 그러면 보냅시다.

문제에 있는 칸에 아까 형식을 입합시다. 참고로 줄바꿈 \r\c는 아스키로 변환하여 %0d%0a로 입력하셔야 합니다. 그리고 cc뒤에 입력하실 때 띄어쓰기를 해줘야 합니다. 그러면 입력합시다.

abcde@naver.com%5Cr%5Cncc: 회원가입때 입력한 자신의 이메일

보내는 주소와 cc를 같이 입력하실땐 줄바꿈을 해야 하는데 엔터가 안되므로 %0d%0a로 대체하였습니다.

앞의 주소는 아무주소나 써도 상관없습니다.

제출합시다.

?? 안됩니다. 틀린게 아니었는데 말입니다.

한참 삽질하다가 문제를 다시 보았습니다.

서버문제로 메일함수가 주석처리 되었답니다.

.......................................................

한마디로 밑의 메일칸은 낚시라는 소리입니다.

..............

mail함수가 맛이 갔으므로 다른 방법으로 email 값을 제출할 필요가 있습니다.

이번엔 파로스라는 프로그램을 사용해봅시다. 파로스란 http패킷을 수정할 수 있도록 도와주는 프로그램입니다. 우리는 $_POST[email]의 값을 줘야하는데 문제내에선 보낼 수 없도록 해놨으므로 프로그램을 이용하여 보냅시다. 파로스를 다운받아 실행시킵시다.

파로스의 기본화면입니다.

앞서 말씀했다사시피 http패킷을 수정하는 것이므로 http패킷을 잡아 줄 필요가 있습니다.

먼저 크롬이 아닌 익스플로러로 들어가 도구 - 인터넷 옵션을 눌러줍시다.

연결 - lan설정 - 프록시서버를 다음과 같이 설정해줍니다.

왜 프록시 서버를 설정할까요?

프록시란 데이터를 가져올 때 해당 사이트에서 바로 자신의 PC로 가져오는 것이 아니라 임시 저장소를 거쳐서 가져오는 것을 말합니다. 프록시 서버는 그 임시저장소를 의미하지요. 즉 데이터를 임시저장소에서 수정하여 수정한 것을 자기 PC로 가져올 수 있다는 것입니다. 프록시서버를 설정하였으면 아래와 같이 무언가가 잡힌 것을 알 수 있습니다.

아무래도 현재 활동한 사이트 같네요. 아 그리고 표시한 박스에 둘다 체크해주세요. 패킷을 강제로 잡기 위해서입니다. 요청과 응답을 둘다 하겠다는 뜻입니다.

자 이것이 끝났으면 웹해킹 문제 index.php쪽으로 가봅시다.

왼쪽부분은 여태까지 갔던 사이트 들입니다. 맨마지막에 웹해킹문제로 들어왔습니다. 조금 오래 걸릴 수 있습니다. 그런데 맨위쪽 보시면 GET방식이 보입니다. 우리는 POST방식으로 보내야 하는데 말입니다. 그래서 문제에서 아무거나 쓰시고 제출을 눌러서 다시 잡으세요. 그러면 아래그림처럼 POST가 뜰것입니다. 그리고 문구를 써주세요.

email=abcde@naver.com%0d%0acc: 자기id@naver.com 를 쳐주시고

하단의 continue를 눌러주시면 아래와 같이 뜹니다.

패스워드가 나왔군요. 그럼 이제 이 패스워드를 인증하러 갑시다.

auth에 입력해주시면


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

P.S 하드코딩으로 해놨기 때문에 실제로 메일이 오지않고 그냥 패스워드만 출력될 것입니다.

여기서 하드코딩이란 메모장 같은 간단한 프로그램으로 직접 하나하나의 코딩작업을 의미합니다.




'Webhacking' 카테고리의 다른 글

webhacking - 32번 문제  (0) 2015.07.29
webhacking - 56번문제  (1) 2015.07.19
Webhacking - 33번 문제  (2) 2015.07.11
Webhacking - 27번문제  (2) 2015.07.10
Webhacking - 문제24번  (0) 2015.07.10
Posted by englishmath
,