今天看書看到其中提到的乙個漏洞,那就是nginx+php的伺服器中,如果php的配置裡 cgi.fix_pathinfo=1 那麼就會產生乙個漏洞。這個配置預設是1的,設為0會導致很多mvc框架(如thinkphp)都無法執行。這個漏洞就是比如localhost/img/1.jpg是正常地訪問一張,而localhost/img/1.jpg/1.php卻會把這張作為php檔案來執行!如下圖,應該是404 notfound 才對的,它卻顯示說是有語法錯誤。
好傢伙,既然有漏洞那就嘗試怎麼攻擊吧。先看思路:首先弄乙個很小的jpg檔案方便修改,然後在jpg檔案中插入**,再上傳,最後在瀏覽器開啟。
幾個畫素就夠了。樣子隨便,你喜歡就好。
jpg如何修改成為可以執行php**?這裡以實驗目的,以成功執行乙個輸出php執行環境資訊的函式 phpinfo() 為例。
不要被嚇到,就是16進製制的數而已,右邊顯示的是對應的ascii碼,我們直接改右邊就可以了。通過幾個jpg檔案的對比發現,從第二行開始就可以自行修改了,於是開工修改,注意不要使用退格刪除導致長度縮短,要用字元替換的,否則會造成檔案格式損壞。修改成如下圖,儲存到本地的資料夾中,在本地測試。
!注意不要使用退格刪除導致長度縮短,損壞,比如像下圖第乙個的那種改了之後不顯示縮圖的就已經是損壞了,損壞的可能會在上傳的時候被攔截掉。
改好之後再本地測試,
似乎還不行,看起來應該是後面有一些php語法錯誤,那就簡單粗暴,修改成下圖這樣,即是把後面的內容全部使用/* 來注釋掉 結尾用 */ 閉合注釋,當然結尾的注釋不加也可以,只會多顯示乙個「unterminated comment starting」的警告而已。建議不需要改成*/結尾,否則修改後的在photoshop中會打不開(因為ff d9是jpg檔案的標準結尾)。
可以看到,已經可以執行php**了。本地攻擊演練成功!
這一步成功需要以下幾個條件:
1)伺服器是nginx+php並且配置裡是cgi.fix_pathinfo=1。這個是不是nginx一般可以在http響應頭里找到相應伺服器資訊,用firebug等瀏覽器除錯工具就能看到,至於這個配置項是不是1一般很難看出,就暫且當它是吧~~;
2)**沒有遮蔽上傳目錄的指令碼執行許可權。這個就比較難囉,用得上nginx的公司基本上都有專門的運維,如果這點安全意識都沒有,運維可以回家了;如果是小公司什麼都不懂就冒然使用nginx那恭喜;
3)可以訪問原圖,這個看機遇,有的可以有的沒有;
所以,慢慢找吧,也許可遇而不可求;
1)使用apache、iis等成熟久經考驗的伺服器軟體,在動態語言的支援上,nginx還是太年經了。你應該也偶爾會見到有些**掛掉了顯示個nginx錯誤出來,卻極少見**掛掉顯示不是nginx的(未備案,過期欠費 等等除外)。
2)上傳目錄、靜態資源(css/js/等)目錄,都設定好遮蔽php執行許可權。例如使用apache伺服器的在相應目錄下放乙個 .htaccess 檔案,裡面寫上
deny from all3)可以不提供原圖訪問,所有輸出時都經過程式處理,也可以在上傳儲存時就處理一遍根本不儲存原圖;
4)使用不同的伺服器,這樣可以與業務**資料完全隔離,即使伺服器被黑了,也不會洩漏多少資訊;
5)如鳥哥所說的把那個配置項設為0,此舉慎用,除非你十分確定該伺服器上的所有專案都不會因此而無法執行。
nginx檔案型別錯誤解析漏洞
80sec發現的大漏洞 之前聽阿里巴巴的同學也說到過 說明這個漏洞地下知道的人已經很多了 只是今天公開了。現在來看看漏洞描述 漏洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中存在乙個較為嚴重的安全問題,預設情況下可...
nginx檔案型別錯誤解析漏洞
漏洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中 存在乙個較為嚴重的安全問題,預設情況下可能導致伺服器錯誤的將任何型別的檔案以php的方式進行解析,這將導致嚴重的安全問題,使得惡意的攻擊者可能攻 陷支援php的ng...
nginx檔案型別錯誤解析漏洞
洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中存在乙個較為嚴重的安全問題,預設情況下可能導致伺服器錯誤的將任何型別的檔案以php的方式進行解析,這將導致嚴重的安全問題,使得惡意的攻擊者可能攻陷支援php的nginx...