Shikata Ga Nai

Private? There is no such things.

HTTP request smuggling, basic TE.CL vulnerabilityをやってみた

Hello there, ('ω')ノ

 

HTTPリクエストの密輸、基本的なTE.CLの脆弱性を。

バックエンドサーバはチャンクエンコーディングをサポートしていなくて。

フロントエンドサーバは、GETまたはPOSTメソッドを使用していないと拒否して。

ラボを解決するには、リクエストをバックエンドサーバに密輸して。

バックエンドサーバによって処理される次のリクエストが。

GPOSTメソッドを使用しているように見えるようにと 。

 

フィールドを手動で修正するのは難しい場合があるので。

Burpの拡張機能で、HTTP Request Smugglerが役立つようで。

 

f:id:ThisIsOne:20210308070303p:plain

 

今回は、インストールだけしておいて時期をみて使ってみようかと。

 

f:id:ThisIsOne:20210308070402p:plain

 

ではまず、サイトにアクセスして。

 

f:id:ThisIsOne:20210308073946p:plain

 

リクエストをリピータへ。

 

f:id:ThisIsOne:20210308074018p:plain


GETをPOSTに変更して。

これは、最後にバックエンドにGPOST要求を受信させるために。

 

f:id:ThisIsOne:20210308074122p:plain


下記を追加して。

 

Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked

5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0

 

f:id:ThisIsOne:20210308074233p:plain

 

Sendするとタイムアウトエラーが。

 

f:id:ThisIsOne:20210308074500p:plain

 

チャンクデータを構築するには、最後に2つのCRLFを追加する必要があるので。

0のあとに改行(\ r \ n \ r \ n)を2つ入れて。

一回目のSendを。

フロントサーバがTE: chunkedに従って5c(=16進数なので92)~0の行を処理して。

バックエンドサーバに転送して。

 

f:id:ThisIsOne:20210308074529p:plain

 

二回目にSendすると。

バックエンドサーバがCL: 4に従って処理をするので。

5c\r\nが、最初のリクエストの本文であると見なされて。

次からが2番目のリクエストであるため。

認識されないHTTPメソッドとしてGPOSTに応答して。

 

f:id:ThisIsOne:20210308074558p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210308074625p:plain

 

Best regards, (^^ゞ