目錄
- 漏洞關鍵字:
- 演示案例:
- xhcms-無框架-文件包含跨站-搜索或應用-include
- earmusic-無框架-文件下載-搜索或應用功能-down等
- zzzcms-無框架-文件刪除RCE-搜索或應用-unlink、eval
漏洞關鍵字:
SQL注入:
select insert update mysql_query mysql等
文件上傳:
$_FILES,type=“file”,上傳,move_uploaded_file()等
xss跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
include include_once require require_once等
代碼執行:
eval assert preg replace call user func call user func array等
命令執行:
system exec shell_exec ’ ’ passthru pcntl_exec popen proc_open
變量覆蓋:
extract() parse_str() importrequestvariables () $$等
反序列化:
serialize() unserialize() _construct _destruct等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
#通用關鍵字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等
演示案例:
xhcms-無框架-文件包含跨站-搜索或應用-include
#通過應用及URL地址等分析可能存在xss及包含安全
抓包找到xss無過濾代碼塊及文件包含有后綴需繞過代碼塊
找跨站漏洞的話,第一個找輸出函數,第二個是功能點;如果是在輸出地方的話,那就找輸出函數,如果是功能點,那就找變量和數據有相應輸出的地方;網站留言板可以測試跨站漏洞,因為留言板存在接受數據,將數據進行留言板展示的,這個操作是滿足跨站漏洞原理的
可以從功能點上分析,也可以從代碼層面上搜索指令進行測試
在這里我們可以搜索一下全局相關的輸出性函數
一般我們是找非admin的,因為后臺一般是要我們登錄才能進行操作,所以我們優先看非后臺目錄的地方
可以看到navs是從mysql執行的地方來的,而sql語句是已經寫死了,也就是說數據庫的數據是死的,我們不能控制它,所以navs是沒作用的
echo是受pages、info兩個變量控制的,info的值是寫死的,也沒什么作用;pages明顯是從變量page接收過來的,用到了魔術引號addslashes對一些. / ' "
符號進行轉義,我們跨站語句不會觸發這些字符,所以這個地方可能存在跨站漏洞,文件是/files/contact.php
我們嘗試訪問文件看一下,文件對應存儲路徑地址和我們訪問地址,如果采用mvc結構的話,與自己寫的訪問路由結構,對應不上就會出現訪問失敗
我們看一下files下的index首頁
看一下根目錄的index
應該要這樣子訪問
在后面加個參數page=1
對應的應該是這條語句
直接執行跨站語句,成功
從功能點,網站有聯系,明顯就是互動的地方,就存在數據的接收和數據顯示的操作,這是符合跨站漏洞產生原理的
我們打開它的網站地址,找到他對應的文件,他的訪問地址是contact和我們剛才搜索找到contact.php的文件名是一樣的,再像我們剛才一樣看代碼
文件包含搜索關鍵字,因為我們從網站上看不到有類似文件包含的功能點
包含文件里面存在變量action,action又從變量file來,同樣的這個地方使用轉義來過濾,但是這個沒有作用,因為他只是過濾一些注入的,像正常傳輸文件名是沒有任何操作的
這個就是典型的限制后綴,他會自動加上.php干擾你
我們可以采取下面兩種方式進行繞過
%00截斷: 條件: magic_quotes_gpc = off php版本<5.3.4
filename=…/…/…/www.txt%00
長度截斷:條件:windows,點號需要長于256;linux 長于4096
能繞過是漏洞,不能繞過也是漏洞,只是他的版本不符合,假如他上面沒有.php,那就是典型的無限制文件包含漏洞
遠程包含取決于php環境自身設置有沒有開allow_include開關,如果是遠程包含漏洞,那危害就比較大了
earmusic-無框架-文件下載-搜索或應用功能-down等
#通過應用分析或搜索判斷可能存在文件下載操作
抓包分析下載地址找到對應代碼塊,文件下載地址由$file控制
$file從數據庫查詢語句得知,追蹤那里可更新或更改此類數據嘗試修改發現過濾,追蹤過濾機制分析繞過,采用全路徑地址繞過
這個站點類似訪問QQ音樂官網的程序,他是注冊賬號之后,可以上傳音樂作品
由于他主要是用來分享音樂,他這個上面肯定有相關文件的東西的,他是進行文件操作,有文件下載、文件刪除,文件上傳的安全問題
注冊登錄進去,看一下這個地方有那些功能,這個地方可以測試有沒有文件上傳漏洞
文件下載,通過看網站功能,就能分析到存在那些漏洞
我們拿到程序之后,你自己要去猜測程序存在那些漏洞,是根據程序自身源碼,他的應用方向決定的,他的網站偏向社交,有數據的交互,就會產生注入、跨站多一點,像這個音樂的分享、播放,就是操作文件的,這里肯定是有文件上傳、下載,這套程序比較偏向于找文件漏洞
通過搜索相關關鍵字,來搜索文件下載的函數,來找到對應的代碼
根據網站給到的功能,我可以根據文件下載功能,把對應的數據包抓到,來找到對應的下載文件的參數和地址來分析到對應代碼
我們要先確定下載地址鏈接,然后去尋找代碼
這個就是典型的id值接收過來給到變量id
intval
SafeRequest自定義函數,操作類的東西,獲取當前的魔術引號是否開啟,定義數據接收方式
這個就是進行文件下載的數據包
只是判定音樂作品是否要付費
如果不需要付費,就設置cookie
用參數進行下載,下載的文件是變量file
in_audio對應文件的下載地址,這個值等于什么,就下載什么
in_audio是id值執行完的結果,這個值是寫到數據庫里面的,無法通過傳參控制這個值
后臺的文件需要后臺登錄才能操作,漏洞即使發現,也沒有太大的意義
我們現在是看那個地方可以操作in_audio值,in_audio賦值給變量audio
在網站這邊音頻地址寫1
抓包,我們可以看到文件名ajax.php,audio為1
我們找到ajax.php,發現audio的值給到變量audio,變量audio接收到值就是1
等于1之后,就賦值給in_audio
下面這邊開始插入數據庫
就會對應修改這個地方
比如我們下載1.php,把值給保存一下
然后看一下
刷新點擊下載
如果要進行跨越下載,就…/1.php,但是我們發現這邊有過濾
因為checkrename、unescape是過濾函數,unescape是過濾正則表達式
checkrename是./觸發攔截機制,我們可以…\繞一下
把id值傳輸進去,因為你添加音樂地址的時候,數據就寫到數據庫里面去了,所以你通過id值取出音樂地址里面別人設置好的音頻地址來進行下載
功能點或關鍵字分析可能存在漏洞
抓包或搜索關鍵字找到代碼出處及對應文件
追蹤過濾或接受的數據函數,尋找觸發此函數或代碼的地方進行觸發測試
zzzcms-無框架-文件刪除RCE-搜索或應用-unlink、eval
文件刪除搜索關鍵宇unlink,對應函數del_file,查看調用此的地方
后臺delfile函數調用,如何處罰delfile函數,受參數控制,進行測試
代碼執行搜索關鍵字eval,對應配置模版解析文件,查看調用此地方判斷后臺可修改模版文件,前臺觸發模版文件,構造payload進行測試
文件刪除漏洞不是很常見,一般我們在黑盒測試很難探針到,因為他需要有特定的訪問地址,特定的參數去觸發文件類的刪除,需要代碼去輔助你,你才知道怎么去傳參,但是黑盒里面,我們無法知道,沒辦法測試,得不到效果,所以一般文件刪除漏洞,產生在白盒測試里面
利用這個漏洞主要是刪除文件的一個安裝文件叫install.lock,文件刪除漏洞觸發條件,我們要去觸發刪除文件的功能,這個參數怎么傳遞,才能刪除文件,我們需要滿足特定文件地址,特定參數值對應上才行,所以一般是代碼原因
我們判定程序是否安裝,就是判定install.lock文件是否存在,如果這個文件沒有,程序就知道你是初次安裝,可以訪問對應的安裝目錄,他會提示你已經安裝
重新安裝的含意是把網站的自身程序重新自定義
查一下unlink函數,php里面文件刪除的函數
我們打開程序看一下
這邊unlink有刪除文件操作,del_file函數要被調用
我們通過全局搜索發現del_file函數調用情況,我們優先是不看后臺的,因為后臺要登錄操作,即使發現也不是很大的高危漏洞
is_write函數調用過,我們繼續搜索
明顯這里沒有被調用過,他只是申明,這個可以忽略不計
我們搜handle_upload函數
被調用過的地方又是upload函數
我們就要搜upload函數又在那里被調用過,這個就很多了,我們先不看這個
他們是相輔相成的包含,他包含這個文件,這個文件又包含另一個文件
save.php調用del_file函數
我們全局跟蹤delfile()函數,如果act的值等于delfile,就調用delfile函數,這個函數被調用del_file也會被調用,所以我們要想辦法讓act等于defile,可以跟蹤一下act從那里來
我們先看一下getform函數,就是指向接收的方式
act就是等于get接收的值,我們定位safe_word()函數,就是保留東西不能帶特殊符號
現在大概清楚了,我們訪問文件,讓act的值等于delfile,就會調用delfile函數,delfile函數就會刪除文件,在刪除文件執行的時候,需要滿足if語句
我們定位一下arr_search(),他就是判定file_path,safe_path數組里面的值
safe_path在上面已經申明了
我們追蹤file_path函數
file通過post傳遞一個path值,在通過file_path獲取路徑,獲取路徑之后,和safe_path進行對比,如果重復,就返回true,執行下面代碼,就是說我們傳遞file_path值要帶’uplpad’、‘template’、‘runtime’、‘backup’,因為你一旦帶這幾個值,就執行下面代碼,如果沒帶就直接跳出循環
我們訪問對應地址文件,傳遞參數
這里實驗了漏洞,發現管理員權限登錄后臺,才可以刪除文件,這個漏洞很雞肋
文件刪除的作用是一旦刪除install.loc文件之后,你訪問安裝目錄,會重新安裝,這個漏洞相當于會造成系統重裝的漏洞
搜索eval關鍵字,看有沒有eval關鍵字形成代碼執行漏洞,前面幾個都是帶關鍵字不是函數使用
這邊包含$ifstr,一個個的追蹤下去
preg_match_all
$pattern匹配規則,zcontent匹配對象,把zcontent按照pattern規則匹配,匹配出的結果給matches
誰控制了zcontent,就控制了matches,控制了matches,就控制了ifstr,相當于誰引用了parserIfLabel函數,zcontent就是控制的地方
這邊寫了public,說明這可能是一個對象的寫法,就不是單純的函數
查一下,誰調用ParserTemplate對象
ParserTemplate對象創建zcontent
zcontent來自user_tpl
修改模版文件會修改指定文件,漏洞存在模版文件,修改文件,把后門寫進去
相當于修改about.html文件
后臺模版文件修改之后,前端的html文件也會被修改,而代碼執行是產生在模版里面
index.php首頁文件就是zzz_client.php文件
而這個文件調用過ParserTemplate對象,那就是說前端和后端都能修改這個模版
我們通過后臺修改代碼,因為前端不能修改代碼,讓iffile去包含變量,達到規則,前端去訪問,去解析它
他是一種程序上的設計,設計里面又不得不進行的操作,所導致的安全問題,他要讓html代碼執行出php的效果
http://192.168.0.102:91/?r=../../index.txt%00
http://192.168.0.102:94/admin/save.php?act=delfile
path=/upload/../install/install.lock