CRLF、CSRF、SSRF攻擊與利用
前言
本文敘述了crlf、csrf和ssrf的原理、攻擊利用和一些繞過方法,作為個人筆記,內容可能不全面,日後有接觸新的方法會更新。
CRLF
原理
這個漏洞名詞來源於印表機,在計算機中表示一行的結束:
回車=CR=\r=%0d=Ascii(13)=Ascii_16(0D)
換行=LF=\n=%0aAscii(10)=Ascii_16(0A)
在不同作業系統中表示行結束的方法也不相同:
Windows:CRLF
Linux/Unix:LF
Mac:老版本用CR,新版用LF
在http頭的規範中是以CRLF表示一行的結束,因此無論是請求頭還是響應頭,每行的末尾都有一個
\r\n
。
GET http://example。com/skipto?u=http://other。com HTTP/1。1\r\n
Host:example。com\r\n
User-Agent:Mozilla/5。0 (X11; Ubuntu; Linux x86_64; rv:89。0) Gecko/20100101 Firefox/89。0\r\n
Accept:text/html,application/xhtml+xml,application/xml;q=0。9,image/webp,*/*;q=0。8\r\n
Accept-Encoding:gzip, deflate, br\r\n
Accept-Language:zh-CN,zh;q=0。8,zh-TW;q=0。7,zh-HK;q=0。5,en-US;q=0。3,en;q=0。2\r\n
Connection:keep-alive\r\n
上面程式碼是一個普通的頁面跳轉請求頭,我們很容易發現
u
的值是使用者可控的,正常執行的話返回的會是第2頁的內容,那麼現在重新發送請求,將請求截下來,把
u=http://other。com
改成
u=http://other。com\r\nSetCookie:crlf
再提交,假如伺服器沒有對
u
引數進行檢查並過濾,在響應頭中直接將使用者輸入拼接到Location的值裡面,響應頭就會變成像下面那樣的程式碼:
HTTP/1。1 302 Found\r\n
Date: Sun, 08 Aug 2021 07:01:25 GMT\r\n
Location:http://other。com\r\n
SetCookie:crlf\r\n
Content-Length:0\r\n
Content-Type: text/html; charset=utf-8\r\n
Connection: keep-alive\r\n
在拼接http響應頭的過程中,伺服器檢測到
\r\n
的時候會按照http規範認為已經到達一行的末尾,後面的資料輸出到下一行。在對檔案進行io讀寫的時候也經常會以
\r\n
或者
\n
作為判斷行末尾的依據,後面的資料換行後再輸出,這兩個的原理是一樣的。
CRLF這種攻擊本質和sql注入、xss一樣,都是由於沒有對使用者輸入進行完全檢查與過濾導致的漏洞,區別在於sql注入作用在資料庫,xss的效果體現在網頁主體,clrf則會將惡意程式碼輸出在響應頭中。
攻擊&利用
這種漏洞屬於客戶端漏洞,經常會出現在有重定向或者頁面跳轉的地方。攻擊的方法很簡單,觀察輸入是否在響應頭中,然後提交
\r\n
,記得編碼,檢視伺服器是否響應,最後一步根據需要將漏洞轉換成會話固定、xss等。
至於利用的方式,大致有以下幾種:
會話固定
上面的例子就是一個典型的會話固定,透過插入請求頭的方式實現給訪問者設定一個session,當然除了cookie也能插入其他請求頭。
#部分請求頭:
GET http://example。com/skipto?u=http://other。com\r\nSet-Cookie:mycookie HTTP/1。1\r\n
。。。
#對應的響應頭:
HTTP/1。1 302 Found\r\n
Location:http://other。com\r\n
SetCookie:mycookie\r\n
。。。
xss
在http規範中,響應頭和正文之間是用兩個CRLF進行區分的,也就是
\r\n\r\n
,我們可以利用這個特性往正文裡寫入xss:
#部分請求頭
GET http://example。com/skipto?u=\r\n HTTP/1。1\r\n
。。。
#對應的響應頭,利用xss直接將cookie傳送到攻擊者的伺服器
HTTP/1。1 302 Found\r\n
Location:\r\n
快取中毒
這種攻擊方式需要服務端有CDN、負載均衡或者反向代理等快取裝置。利用方式如下:
#直接在請求頭中插入X-Forwarded-Host,觀察響應包中是否有回顯
GET http://example。com/skipto?u=\r\nX-Forwarded-Host:http://fishing。com HTTP/1。1\r\n
。。。
另一個名字相近但完全不同的攻擊方式叫
快取欺騙
,利用前要滿足下列條件:
Web快取功能設定為透過URL的副檔名來判斷是否進行快取檔案,且忽略任何快取頭;
當訪問一個不存在資源時返回一個頁面而不是顯示頁面不存在;
誘使訪問URL時,受害者必須已經透過身份驗證;
其攻擊的過程如下:
透過釣魚/xss等方法誘使已經登入的使用者訪問攻擊者伺服器上的一個資源(http://hack。com/attack/1。png);
請求到達代理/CDN,代理不熟悉這個檔案,於是向web伺服器發起請求;
web伺服器返回受害者的使用者頁面內容和200狀態碼,這裡對應了上面第二點和第三點條件,沒有返回頁面不存在並且是使用者已登入狀態;
快取機制收到響應同時發現url以資原始檔副檔名(。png)結尾,並且由於快取機制忽略響應頭,這個資源會被儲存在新建的attack目錄下,被快取的檔名為1。png,這裡對應了第一個條件;
然後受害者接收到他的賬戶頁面;
攻擊者訪問http://hack。com/attack/1。png,請求到達代理伺服器,代理直接將受害的快取賬戶頁面返回給攻擊者。
繞過
對於CRLF來講核心就是
\r\n
,伺服器防止CRLF大部分也是透過過濾器限制這兩個字元,繞過的方法大致有以下幾種:
url單/雙層編碼;
更改http版本到1。0,不傳送Host頭,並將請求分片構建特殊請求;
將\r\n轉換成ascii碼;
另外在傳送給客戶端xss語句的時候可能會被瀏覽器過濾掉,這個時候只需要在前面再插入一個請求頭
X-XSS-Protection:0
即可繞過。
CSRF
原理
CSRF的中文翻譯叫跨站請求偽造,和XSS利用方式有點像,但是XSS利用的是站點內信任的使用者,而CSRF是透過偽裝成被信任的使用者請求受信任網站。攻擊原理如圖:
由此可以看出來,要利用這個漏洞必須滿足下面兩個條件:
登入存在漏洞的網站,並在本地生成cookie;
在不登出的情況下訪問攻擊者的伺服器;
攻擊&利用
這種漏洞會出現在使用者操作中的增、刪、改功能的位置,比如使用者修改密碼的地方,如果網站在上述三種功能中沒有用到Referer/Token技術,那麼肯定存在csrf,如果存在,可以繞過,那也一樣有漏洞。型別分為GET、POST兩種,他們攻擊方式的區別就是GET型只需要構造url,然後誘導受害者訪問即可,POST型則要構造自動提交的表單,再誘導受害者訪問。
整個攻擊流程如下:
製作偽裝頁面->誘導使用者訪問->觸發非法操作
不管是哪種型別,漏洞利用的核心就是根據需要構造頁面,然後誘導受害者點選,可以透過釣魚,也可以利用xss等。
GET
404 not found
POST
post模式通常是構造一個自動提交的隱藏表單:
404 not found
document。forms[0]。submit();
繞過
對於CSRF的保護通常是使用Referer和Token,因此為了達到攻擊的目的,這兩種防護措施就是需要繞過的物件。
Referer
1。利用偽協議:http://、https://、ftp://、file://、data:、javascript:,這時候referer置空就能繞過了。
2。在html頁面中透過meta將Referer置空:
3。觀察Referer驗證的是哪個域名,是否存在指定的域名關鍵詞,驗證方式是不是隻驗證開頭,繞過方式分別如下:
驗證格式為*。xxx。com:在域名前面增加子域名繞過;
驗證包含關鍵詞為xxx。com:新建網站目錄名字為xxx。com,作為csrf檔案的存放目錄;
驗證開頭格式xxx。com:新建域名為xxx。com。hack。com的web伺服器作為csrf載體;
Token
1。完全刪除token,適用於賬戶刪除功能,因為很多刪除使用者的功能中幾乎不認證token;
2。token解碼,透過識別演算法破解,然後按規律改變值再進行加密編碼,這種適用於演算法簡單的token;
3。一般token由靜態、動態兩部分組成,有時候只用靜態部分就可以透過檢測。
SSRF
原理
SSRF的意思是服務端請求偽造,如字面意思,就是攻擊者構造的由伺服器發起請求的一種漏洞。而服務端能夠訪問外界訪問不到的內網,因此可以利用這個特性來攻擊部署在內網的脆弱中介軟體以及其他服務。其原理如下圖:
攻擊&利用
可能會出現SSRF的地方有:
分享功能
收藏功能
網站採集功能
其他一些要呼叫url的功能
頁面最佳化轉碼
線上翻譯
圖片載入/下載
雲服務廠商
內建資料庫(redis、mongodb)
郵件系統
對資料進行線上處理的地方
從遠端伺服器獲取資源
未公開的API
可以透過下列url關鍵字查詢:
share
wap
url
link
src
source
target
u
display
sourceurl
imageurl
domain
漏洞挖掘的時候透過排除法判斷,一種情況是直接回顯,另一種情況則是跟其他地方相比發生變化(類似sql布林盲注):
http://example。com/service?image=http://www。baidu。com/img/bd_logo。png
#像這種的新視窗開啟連結,如果位址列顯示http://www。baidu。com/img/bd_logo。png,則不存在漏洞;
或者抓包分析請求是否由伺服器發起,ssrf是伺服器發起的請求,在測試介面的時候本地瀏覽器不應該發起請求,這一點透過抓包可以體現出來。
在漏洞利用方面,對外可以透過SSRF訪問其他網址,對內可以掃描內網做資訊收集,用其他協議請求敏感檔案,能夠透過請求攻擊內網應用,也可以進行DOS攻擊,具體做法是請求大檔案,並始終keep-alive。
繞過
一般在服務端會對請求地址做限制,過濾ip的流程可能如下圖:
因此就有了下面幾種繞過方法:
攻擊本地:
http://127。0。0。1:80
http://localhost:80
http://0。0。0。0:80
http://[::]:80
利用@:
http://example。coom@127。0。0。1
使用短網址:
https://dwz。cn/
利用DNS解析服務:
http://127。0。0。1。xip。io
#會重定向到127。0。0。1
利用DNS重綁攻擊:
前置條件:需要一個域名,並且將其解析指定到攻擊者搭建的dns,設定TTL=0。
攻擊過程:
1。服務端獲取到url,進行第一次解析,獲取一個外網ip;
2。對這個ip進行判斷,透過驗證;
3。服務端再次訪問這個url,由於TTL=0,需要再次進行dns解析,這次解析返回內網地址;
4。驗證已經繞過,服務端傳送請求,返回的是內網資源。
檔案上傳處:
type=file -> type=url
比如在上傳圖片的地方,將圖片換成url,就可能觸發漏洞。
特殊識別符號(Enclosed alphanumerics):
http://ⓔⓧⓐⓜⓟⓛⓔ。ⓒⓞⓜ
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
句號替換點號:
http://127。0。0。1 -> http://127。0。0。1
進位制轉換(十六、十、八、二):
http://127。0。0。1 -> http://2130706433/
利用特殊地址:
http://0/
更換協議:
dict://127。0。0。1:22
sftp://example。com:21111
tftp://example。com:21111
ladp://0。0。0。0:11211/%0astats%0aquit
gopher://。。。
file://。。。
相關文章
- 2021-07-25魔獸世界:TBC灰燼使者人多事多,熱鬧非凡,演戲看戲很帶勁
- 2021-06-19微軟產品“漏洞成長率”破紀錄, Windows獨佔七成
- 2021-04-26「網路安全自學篇」駭客攻防和實戰程式設計看這篇就夠了(內含實戰)
- 2021-04-23三字母、三數字域名均以中六位數成交,sedo最新交易!
- 2021-04-02《寶可夢》遊戲漏洞:冠軍青綠音效不消失,劇毒狀態的錯誤!