iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
1
Security

新手眼中的資安系列 第 27

[Day27]- 新手的Web系列CRLF 0x2

  • 分享至 

  • xImage
  •  

Day27- 新手的Web系列CRLF 0x2

正文

CRLF Injection原理

  • HTTP Header 定義
    • key:value的結構
    • 分行符號:
      • CR(\r)
      • LF(\n)
中文解釋 符號 十進位 ASCll 十六進位 ASCll
LF 換行 \n 10 0x0A
CR 回車 \r 13 0x0D
  • CR或是LF作為每一行的結束
  • 當使用者傳遞包含\n或是\r的資訊時,如果伺服器沒有過濾就直接回傳給 http header 的話,那攻擊者就可以任意設置一些特殊的http訊息或是直接修改 http response 的內容
  • CRLF用於許多地方,例如:多文本檔案、程式語言,所以攻擊的範圍很廣,這種攻擊用於http時被稱作 HTTP Response Splitting

CRLF Injection 攻擊手法

  • 攻擊者會注入一些錯誤的分割符號來混淆伺服器的過濾,好進行惡意攻擊
  • 要執行CRLF注入,攻擊者必須要有一個可以攔截瀏覽器和伺服器之間http封包的工具,進而竄改http封包的內容,再注入 http request 讓伺服器回傳兩個 http response ,透過第二個建構的 http response 來達到攻擊者的目的,例如:設置cookie值...等
  • 例如:一段腳本程式
<%
nameValueCollection request=Request.QueryString;
Response.cookies["name"].Value=resquest["text"];
%>
  • 正常情況瀏覽網頁:
    • http://macaron.tw/crlf.aspx?text=test
  • 用text值設定cookies["name"]
  • 那如果伺服器沒有過濾使用者的輸入
    • 惡意連結:
      • http://macaron.tw/crlf.aspx?text=yu%0D%0ASet-cookie%3A%20CRLFcookie=macaron
        • 前面有介紹,Set-cookie是http response 的資訊,用來設定與保存cookie的
        • %0D:是經過URL編碼的CR,程式中被視為\r
        • %0A:是經過URL編碼的LF,程式中被視為\n
        • CRLF作為分界點
      • 惡意連結 decoder =
        • http://macaron.tw/crlf.aspx?text=yu
          Set-cookie: CRLFcookie=macaron
          
  • 如上面那樣攻擊者注入了換行字元,將原始的cookie添加了新的cookie資訊
  • 正常情況的 http response
content-type: text/html; charset=utf-8
date: Mon, 12 Oct 2020 14:35:39 GMT
server: cloudflare
set-cookie: name=yu
  • CRLF注入後的 http response
content-type: text/html; charset=utf-8
date: Mon, 12 Oct 2020 14:35:39 GMT
server: cloudflare
set-cookie: name=yu
set-cookie: CRLFcookie=macaron
  • 攻擊者也可能不止注入http deader ,可能會注入html或是javascript程式碼
  • 結論:雖然 CRLF Injection 的攻擊方式主要還是跨網站,但因為可以任意注入,所以比xss要來的危險

上一篇
[Day26]- 新手的Web系列CRLF 0x1
下一篇
[Day28]- 新手的Web系列JSON Injection 0x1
系列文
新手眼中的資安30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言