天天看點

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

今天看書看到其中提到的一個漏洞,那就是Nginx+PHP的伺服器中,如果PHP的配置裡 cgi.fix_pathinfo=1 那麼就會産生一個漏洞。這個配置預設是1的,設為0會導緻很多MVC架構(如Thinkphp)都無法運作。這個漏洞就是比如 localhost/img/1.jpg 是正常地通路一張圖檔,而 localhost/img/1.jpg/1.php 卻會把這張圖檔作為PHP檔案來執行!如下圖,應該是404 NotFound 才對的,它卻顯示說是有文法錯誤。

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

好家夥,既然有漏洞那就嘗試怎麼攻擊吧。先看思路:首先弄一個很小的JPG檔案友善修改,然後在JPG檔案中插入代碼,再上傳,最後在浏覽器打開。

幾個像素就夠了。樣子随便,你喜歡就好。

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

JPG圖檔如何修改成為可以執行PHP代碼?這裡以實驗目的,以成功執行一個輸出PHP運作環境資訊的函數 phpinfo() 為例。

首先這裡編輯圖檔的話并不是說用畫圖或者Phtoshop之類的圖形軟體,這次要用到的軟體叫做 二進制編輯器,其中我用的這款名叫 Bz.exe,打開圖檔檔案如下圖

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

不要被吓到,就是16進制的數而已,右邊顯示的是對應的ASCII碼,我們直接改右邊就可以了。通過幾個JPG檔案的對比發現,從第二行開始就可以自行修改了,于是開工修改,注意不要使用倒退删除導緻長度縮短,要用字元替換的,否則會造成檔案格式損壞。修改成如下圖,儲存到本地的圖檔檔案夾中,在本地測試。

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

!注意不要使用倒退删除導緻長度縮短,圖檔損壞,比如像下圖第一個的那種改了之後不顯示縮略圖的就已經是損壞了,損壞的圖檔可能會在上傳的時候被攔截掉。

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

改好之後再本地測試,

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

似乎還不行,看起來應該是後面有一些PHP文法錯誤,那就簡單粗暴,修改成下圖這樣,即是把後面的内容全部使用/* 來注釋掉 結尾用 */ 閉合注釋,當然結尾的注釋不加也可以,隻會多顯示一個“Unterminated comment starting”的警告而已。建議不需要改成*/結尾,否則修改後的圖檔在Photoshop中會打不開(因為FF D9是jpg檔案的标準結尾)。

《Nginx檔案類型錯誤解析漏洞--攻擊演練》 (轉)

可以看到,已經可以執行PHP代碼了。本地攻擊演練成功!

這一步成功需要兩個條件:

1)伺服器是Nginx+PHP并且配置裡是cgi.fix_pathinfo=1;

2)網站沒有屏蔽上傳目錄的腳本執行權限;

是以,慢慢找吧,也許可遇而不可求;

1)使用Apache、IIS等成熟久經考驗的伺服器軟體,在動态語言的支援上,Nginx還是太年經了。

2)上傳目錄、靜态資源目錄,都設定好屏蔽腳本執行權限。例如使用Apache伺服器的在相應目錄下放一個 .htaccess 檔案,裡面寫上

http://www.cnblogs.com/batsing/p/nginx_bug1_attack.html

繼續閱讀