php
PHP - HTTP 헤더 인젝션
HTTP 헤더 인젝션은 공격자가 헤더에 개행문자를 삽입하여 헤더를 추가하여 공격하는 수동적 공격 방식입니다.
이 공격이 허용되는 경우 쿠키를 임의대로 생성하거나 임의로 URL를 리다이렉트 시킬 수 있습니다.
위과 같은 코드가 있다면 아래 코드로 고쳐서 공격합니다.
결국 아래와 같은 결과 값을 얻게 되므로 쿠키를 만들게 됩니다.
공격자가 입력한 %0D%0A 는 \r\n 을 의미하므로 결과적으로 새로운 헤더가 만들어 지게 되는 것입니다. 다음의 방법도 주의해야할 부분입니다.
위 문자열이 HTTP 인젝션이 가능하게 되면 아래와 같은 결과가 나타나게 됩니다.
이 공격에 의해 유저에게 가짜 웹페이지를 표시하여 개인 정보를 입력받거나 크로스 사이트 스크립팅과 같은 공격을 받게 됩니다. 물론 개행문자를 이용해 메일 헤더 인젝션 공격도 시도할 수 있습니다.
이렇게 입력받게 되면 공격자는 Bcc에 임의대로 수신자를 추가해 버릴 것입니다.
그래서 다음의 방법 등으로 문자열을 치환해서 공격을 회피해야 합니다.
http://example.com/?id=1001
위과 같은 코드가 있다면 아래 코드로 고쳐서 공격합니다.
http://example.com/?id=101%0D%0A%0D%0ASet-cookie+SID=a123456789
결국 아래와 같은 결과 값을 얻게 되므로 쿠키를 만들게 됩니다.
http://example.com/?id=101
Set-cookie+SID=a123456789
공격자가 입력한 %0D%0A 는 \r\n 을 의미하므로 결과적으로 새로운 헤더가 만들어 지게 되는 것입니다. 다음의 방법도 주의해야할 부분입니다.
http://example.com/?id=101%0D%0A%0D%0A<html><body><h2>Hello Habony!!</h2></body></html>
위 문자열이 HTTP 인젝션이 가능하게 되면 아래와 같은 결과가 나타나게 됩니다.
http://example.com/?id=101
<html>
<body>
<h2>Hello Habony!!</h2>
</body>
</html>
이 공격에 의해 유저에게 가짜 웹페이지를 표시하여 개인 정보를 입력받거나 크로스 사이트 스크립팅과 같은 공격을 받게 됩니다. 물론 개행문자를 이용해 메일 헤더 인젝션 공격도 시도할 수 있습니다.
http://example.com/?email=you@example.com%0D%0Ato@example.com
이렇게 입력받게 되면 공격자는 Bcc에 임의대로 수신자를 추가해 버릴 것입니다.
<?php
$header = "you@example.com%0D%0Ato@example.com";
mail($to, $subject, $content), $header);
/*
결과:
you@example.com
to@example.com
*/
?>
그래서 다음의 방법 등으로 문자열을 치환해서 공격을 회피해야 합니다.
<?php
$str = "http://example.com/?id=101%0D%0A%0D%0ASet-cookie+SID=a123456789";
$str = str_replace(array("\r", "\n"), "", $str);
?>
0 댓글