《Nginx文件类型错误解析漏洞--攻击演练》 (转)
今天看書看到其中提到的一個漏洞,那就是Nginx+PHP的服務器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就會產(chǎn)生一個漏洞。這個配置默認是1的,設為0會導致很多MVC框架(如Thinkphp)都無法運行。這個漏洞就是比如 localhost/img/1.jpg 是正常地訪問一張圖片,而 localhost/img/1.jpg/1.php 卻會把這張圖片作為PHP文件來執(zhí)行!如下圖,應該是404 NotFound 才對的,它卻顯示說是有語法錯誤。
好家伙,既然有漏洞那就嘗試怎么攻擊吧。先看思路:首先弄一個很小的JPG文件方便修改,然后在JPG文件中插入代碼,再上傳,最后在瀏覽器打開。
第一步,小的JPG文件當然是直接用Photoshop做一個了;
幾個像素就夠了。樣子隨便,你喜歡就好。
第二步,在JPG中插入代碼,這個要用到二進制編輯器;
JPG圖片如何修改成為可以執(zhí)行PHP代碼?這里以實驗目的,以成功執(zhí)行一個輸出PHP運行環(huán)境信息的函數(shù) phpinfo() 為例。
首先這里編輯圖片的話并不是說用畫圖或者Phtoshop之類的圖形軟件,這次要用到的軟件叫做 二進制編輯器,其中我用的這款名叫 Bz.exe,打開圖片文件如下圖
不要被嚇到,就是16進制的數(shù)而已,右邊顯示的是對應的ASCII碼,我們直接改右邊就可以了。通過幾個JPG文件的對比發(fā)現(xiàn),從第二行開始就可以自行修改了,于是開工修改,注意不要使用退格刪除導致長度縮短,要用字符替換的,否則會造成文件格式損壞。修改成如下圖,保存到本地的圖片文件夾中,在本地測試。
!注意不要使用退格刪除導致長度縮短,圖片損壞,比如像下圖第一個的那種改了之后不顯示縮略圖的就已經(jīng)是損壞了,損壞的圖片可能會在上傳的時候被攔截掉。
改好之后再本地測試,
似乎還不行,看起來應該是后面有一些PHP語法錯誤,那就簡單粗暴,修改成下圖這樣,即是把后面的內(nèi)容全部使用/* 來注釋掉 結尾用 */ 閉合注釋,當然結尾的注釋不加也可以,只會多顯示一個“Unterminated comment starting”的警告而已。建議不需要改成*/結尾,否則修改后的圖片在Photoshop中會打不開(因為FF D9是jpg文件的標準結尾)。
可以看到,已經(jīng)可以執(zhí)行PHP代碼了。本地攻擊演練成功!
第三步,上傳,因為上傳的確實是jpg格式的文件,網(wǎng)站幾乎無法識別和攔截;
第四步,在瀏覽器打開,Hello World!
這一步成功需要兩個條件:
1)服務器是Nginx+PHP并且配置里是cgi.fix_pathinfo=1;
2)網(wǎng)站沒有屏蔽上傳目錄的腳本執(zhí)行權限;
所以,慢慢找吧,也許可遇而不可求;
?
|++ 此漏洞的功擊效果與“文件上傳漏洞”相當
∞、防御建議
1)使用Apache、IIS等成熟久經(jīng)考驗的服務器軟件,在動態(tài)語言的支持上,Nginx還是太年經(jīng)了。
2)上傳目錄、靜態(tài)資源目錄,都設置好屏蔽腳本執(zhí)行權限。例如使用Apache服務器的在相應目錄下放一個 .htaccess 文件,里面寫上
RewriteEngine On RewriteRule (?i:\.php)$ - [F]?
http://www.cnblogs.com/batsing/p/nginx_bug1_attack.html
轉載于:https://www.cnblogs.com/softidea/p/5350828.html
總結
以上是生活随笔為你收集整理的《Nginx文件类型错误解析漏洞--攻击演练》 (转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贪心算法-Best cow line-字
- 下一篇: Nginx + 阿里云SSL + tom