HTTP헤더 인젝션은 유명한 해킹방법이며 어떻게 하는지와 대책을 알아보겠습니다.

 

일단 HTP헤더 인젝션은 알기 위해서는 HTTP방식과 HTTP를 이용한 통신 방법을 이해하는 것이 중요합니다.

잘 모르시는분은 위의 통신방법을 먼저 공부해 주시기를 추천드립니다.

 

 

예졔)

---------------------------------------------------

1) 브라우저 --------------------------> 웹서버

                          request

 

2) 브라우저 <-------------------------- 웹서버     

                          response  

--------------------------------------------------

위의 예제를 보시면 평소 인터넷의 Web구조입니다.

 

하지만, 요청시 데이터에 악성코드가 포함되는 경우엔 response를 할때 원래의 요청이 아닌 다른 내용의 컨텐츠를 표시하는 것입니다.

 

예를 들어 http://site.com?bug="ttttt"에 엑세스를 한다고 생각해봅니다.

위 요청을 받은 사이트는 bug의 매개변수로 설정되어있는 tttt를 응답헤더의 bug헤더로 설정하여 응답합니다.

 

여기서 tttt를 개행코드가 두줄이 설정되어있는 경우, 그외의 문자열의 레스폰스바디를 조작할수 있기 때문입니다.

위의 그림을 보시면 헤더와 바디 사이에 개행이 존재합니다.

개행을 넣음으로써 헤더가 아닌 바디로 취급되는것입니다.

그러므로 tttt가 아닌 개행코드가 있다면 그후 문자열에서 바디부분을 조작할수 있다는 점입니다.


좀더 구체적으로 본다면,

site.com?bug=%0d%0d<script type="javascript">alert("hello")</script>

%0d는 개행코드입니다.

개행코드 뒤의 script부분은 바디로 설정됩니다.

 

여기서 이게 왜 무서운가 좀더 설명하자면,

바디부분이 조작이 되어버리면, 사용자에게 표시되는 web컨텐츠 자체가 바뀌기 때문에,

사용자의 입력폼을 바꾸거나, 쿠키를 빼내는 스크립트를 포함 시킬수 있다는 것 입니다.

 

대책방법으로는,

1) 리퀘스트 바디의 값을 레스폰스헤더의 값으로 설정하지않는것

2) 리퀘스트바디의 값을 레스폰스헤더의 값으로 설정하는경우에는, 개행코드를 방지하는 할수 있게 하는것

 

그리고 PHP를 사용한다면, 좀더 쉽게 대책을 알아볼수 있습니다.

htmlspecialchars($str, ENT_QUOTES, ‘UTF-8′);

PHP에 있는 htmlspecialchars함수가 문자열을 이스케이프를 시켜주는 함수입니다.

 

이로써 http헤더인젝션에 대해 알아보았습니다.

다음에는 다른 공격방법에 대해서 알아보도록 하겠습니다.

+ Recent posts