開源程序安全剖析
0day攻擊
一般是指沒有公開掀亩,沒有補丁的漏洞,也就是未公開的漏洞捉蚤。
挖掘Oday的方式一般有兩種:源代碼審計(白盒測試)和模糊滲透測試(黑盒測試)炼七。
一些常見的源代碼審計工具有Source Navigator、Fortify SCA陕悬、CheckMarx按傅、 CodeScan、Skavenger等逞敷,到目前為止并沒有一款全自動的源碼審計工具,全部都是半自動的裂问,也就是必須要人工參與牛柒。工具做的只不過是查找些危險函 數(shù)等,需要根據(jù)危險列表加以分析椭更,而這些危險列表的80%都是誤報蛾魄,得靠經(jīng)驗一一排除湿滓。
網(wǎng)站后臺安全
導(dǎo)致后臺脆弱原因
1.模板
2.文件管理
3.執(zhí)行sql語句:使用SQL導(dǎo)出一句話木馬舌狗,關(guān)鍵是看數(shù)據(jù)庫匾鸥,而與腳本無關(guān)脊僚。不同的數(shù)據(jù)庫導(dǎo)出Shell 的語句也不同
(1)Access 導(dǎo)出Shell只能配合IIS 6的解析漏洞,如果導(dǎo)出ASP格式厂抽,將會提示“不能更新君丁,數(shù)據(jù)庫或?qū)ο鬄橹蛔x”。
(2) SQL Server? 并沒有提供直接導(dǎo)出數(shù)據(jù)的語句谈截,但通過Xp_ _cmdShell 也能達到類似的功能涧偷,xp_ cmshell過程添加系統(tǒng)用戶
(3)Oracle
4.網(wǎng)站備份
MD5
在保存密碼到數(shù)據(jù)的時候不使用明文燎潮,一般會采用 MD5加密后再存儲。
破解方法:(1)彩虹表破解
彩虹表(Rainbow Table)是一個龐大的确封、針對各種可能的字母組合預(yù)先計算好的哈希值的集合。彩虹表不僅針對MD5算法颜曾,主流的算法都有對應(yīng)的彩虹表秉剑。利用它可以快速破解各類密碼。越是復(fù)雜的密碼诡曙,需要的彩虹表就越大略水,現(xiàn)在主流的彩虹表都是1TB以上的。
獲取方法:(1)在網(wǎng)上下載已經(jīng)有的彩虹表慎璧。網(wǎng)上有很多彩虹表,可根據(jù)破解的密文類型下載相應(yīng)的彩虹表胸私,大型的彩虹表都是以太字節(jié)(TB)為單位的; .
(2)使用工具生成彩虹表盖文。使用工具可以生成對應(yīng)加密算法的彩虹表,但生成速度較慢五续。常見的彩虹表生成工具有RainbowCrack、Cain 等凶伙。
配制信息:Hash:選擇要生成彩虹表中的種類它碎,也就是彩虹表的分類,Cain幾乎支持所有主流的加密算法的彩虹表生成傻挂;MinLen: 最小位數(shù)挖息,也就是明文密碼的最低位數(shù);MaxLen: 最大位數(shù)绪抛,也就是明文密碼的最高位數(shù)电禀。其他選項如Chain Len、Chain Count, N° of tables是控制所生成表破解成功的概率症副,軟件下方將會顯示當(dāng)前生成模式的破解率葫松。表分割得越細(xì),成功率就越大咕娄,生成的體積也越大珊擂,所需要的時間也越長费变。
破解:Rainbowcrack圣贸、 Cain 等工具。使用Rainbowcrack破解MD5非常簡單滑负,只需要以下一條命令即可用含。rcrack.exe -h密文彩虹表目錄
(2)專業(yè)的MD5破解站點
常見破解站點
拖庫
支持外連接
ASP.NET的數(shù)據(jù)庫配置信息一般保存在web.config文件中啄骇,一個網(wǎng)站可能會有多個confg文件,數(shù)據(jù)庫配置信息可能就在其中一個文件內(nèi)缸夹。
PHP數(shù)據(jù)庫配置信息一般都會保存在inc、db橡类、fun等目錄的config.php趟妥、conn.php、 web.php源碼文件中。而PHP源碼通常是未加密的勇凭,可以通過與數(shù)據(jù)庫交互的頁面快速找到數(shù)據(jù)庫連接信息虾标。
JSP經(jīng)常改動的信息一般都會 保存在文本文件中。這個文件主要分為兩種類型: Properties 文件(屬性文件, 一般以Properties為擴展名)與XML文件傀蚌,其保存位置一般是在/WEB-INF/文件夾中蘸吓。使用框架技術(shù)之后,其位置也可能隨之變化库继,但一般數(shù)據(jù)庫配置信息都保存在XML文件中。
Navicat 是-款強大的數(shù)據(jù)庫操作軟件艺谆,它分為很多版本,比如, Navicat for MySQL專門針對MySQL數(shù)據(jù)庫進行操作; Navicat for Oracle專門針對Oracle數(shù)據(jù)庫操作琅催,更強大的是Navicat Premium版本,支持在MySQL虫给、Oracle、PostgreSQL. sQLite及SQLServer之間傳輸數(shù)據(jù)杰捂,是各種版本的集合棋蚌。
Navicat適用于三種平臺: Microsoft Windows. Mac OS X和Linux。它可以讓用戶連接到本機或遠(yuǎn)程服務(wù)器蒿往,提供一些實用的數(shù)據(jù)庫工具(如數(shù)據(jù)模型湿弦、數(shù)據(jù)傳輸、數(shù)據(jù)同步蔬充、結(jié)構(gòu)同步班利、導(dǎo)入、導(dǎo)出庸队、備份闯割、還原、報表創(chuàng)建工具及計劃)來協(xié)助管理數(shù)據(jù)宾尚。
單擊“連接”→“SQL Server”鼓黔。在“常規(guī)"選項卡中不见,填寫數(shù)據(jù)庫的基本信息崔步,連接名任意填寫,在主機名/IP地址文本框內(nèi)輸入IP地址灶似,并在用戶名和密碼文本框內(nèi)填寫相應(yīng)的信息瑞你。
在“高級”選項卡中可以設(shè)置連接超時時間,SSH選項卡則是使用SSH通道連接春感,這兩個選項卡- -般默認(rèn)即可虏缸。
單擊“確定”按鈕后在左側(cè)將會顯示“atack”數(shù)據(jù)庫連接名稱,雙擊“atack”即可連接數(shù)據(jù)庫窥岩。
使用Navicat轉(zhuǎn)存數(shù)據(jù)可分為兩種方式:一種是導(dǎo)出表結(jié)構(gòu)宰缤,包括約束慨灭、驗證以及插入數(shù)據(jù)的SQL語句(表中的數(shù)據(jù)將以Insert 語句的方式展現(xiàn)),可以說是把整個表完全復(fù)制下來;另-種則是導(dǎo)出表中的數(shù)據(jù)缘挑,不需要表結(jié)構(gòu)信息语淘,是純數(shù)據(jù)际歼。
1.導(dǎo)出表結(jié)構(gòu)及數(shù)據(jù)
? ? ? 選中要導(dǎo)出的表,并單擊鼠標(biāo)右鍵吕粗,選擇“轉(zhuǎn)儲SQL文件”旭愧,這時宙暇,Navicat 將會提示你的文件導(dǎo)出后的保存位置议泵,設(shè)置好導(dǎo)出文件的保存位置后,單擊“保存”按鈕型奥,即可導(dǎo)出表結(jié)構(gòu)及數(shù)據(jù)碉京。
2.導(dǎo)出表數(shù)據(jù)
選擇要導(dǎo)出數(shù)據(jù)的表(可多選),并單擊鼠標(biāo)右鍵,選擇“導(dǎo)出向?qū)А碧淘幔瑢棾觥皩?dǎo)出向?qū)А睂υ捒蚍豺摺_x擇要導(dǎo)出的格式咽瓷,Navicat 提供了很多格式,最常用的有以下幾種茅姜。
TXT文本文件:不包含任何表結(jié)構(gòu)钻洒,只是純文本內(nèi)容:
HTML網(wǎng)頁文件:把數(shù)據(jù)以網(wǎng)頁形式展現(xiàn):
Excel表格:把數(shù)據(jù)以表格的形式展現(xiàn);
XML文件:把數(shù)據(jù)以XML形式展現(xiàn);
SQL文件:這個比較特殊,把數(shù)據(jù)以Insert的形式展現(xiàn)称诗。
不支持外連接
一.SQL注射
sqlmap? ?
--dump轉(zhuǎn)存數(shù)據(jù)
--csv-del: 導(dǎo)出CSV格式時头遭,列與列之間的間隔字符,默認(rèn)為空格:
--output-dir: 導(dǎo)出文件夾:
--dump-format: 導(dǎo)出格式袜香,默認(rèn)為CSV格式,可選擇的導(dǎo)出格式有CSV. HTML和SQLITE三種鲫惶。
--sql-query:執(zhí)行SQL語句,要執(zhí)行的SQL語句必須用雙引號引起來,以保證命令的完整性欢策。
burpsuite
在使用Burp Suite導(dǎo)出數(shù)據(jù)之前,首先要確定1.表結(jié)構(gòu);
2.導(dǎo)出數(shù)據(jù)條數(shù):
3.構(gòu)造好導(dǎo)出的SQL語句啄清。
導(dǎo)出數(shù)據(jù)時姑荷,一般都以ID為導(dǎo)出標(biāo)準(zhǔn),因為在一個數(shù)據(jù)表中添寺,一般會有[*id]作為表的唯一列標(biāo)識(主鍵)懈费,這是數(shù)據(jù)庫的三大范式之一.
導(dǎo)出數(shù)據(jù)
1.將URL載入到Burp Suite Intruder 模塊憎乙,并將uid的值設(shè)置為變量
2.設(shè)置PayLoads,把PayLoads類型設(shè)置為Numbers,并且從0開始,到數(shù)據(jù)條數(shù)最大值結(jié)束泞边,每次增長為l阵谚。也就是說,將遍歷所有的數(shù)據(jù)梢什,包括已經(jīng)刪除的數(shù)據(jù)
3.選擇抓取的數(shù)據(jù)嗡午,在“Option"→“Grep Extract” 模塊中單擊“add"按鈕,然后在彈出的新界面中選擇“Fetch Response”獲取返回信息荔睹。獲取返回信息后僻他,選取你要抓取的內(nèi)容,Burp Suite會根據(jù)選取的內(nèi)容自動生成正則表達式。
4.選擇“Intruder”→“Start attack",開始導(dǎo)出抓取數(shù)據(jù)
? ? ? 在抓取數(shù)據(jù)完畢后,選擇“Save”→“Results Table",保存導(dǎo)出數(shù)據(jù)的界面
? ? ? 保存數(shù)據(jù)時選擇“All Rows",表示保存所有的行翩瓜,“Delimiter” 代表列與列之間的分隔符携龟,默認(rèn)為“Tab” 制表符峡蟋,如果想自定義分隔符,可以使用“Custom”蕊蝗。
? ? ? “IneludeColumns"是重要的選項,可以勾選要保存的列蓬戚,選擇好相應(yīng)的信息后,單擊“Save”按鈕就可以保存提取出的數(shù)據(jù)豫喧。
取消空白行
主流數(shù)據(jù)庫常用的分頁語句如下(其中幢泼,I代表起始位置,N代表結(jié)束位置):
1.Postgre SQL
? ? ? select * from table limit I offset N孵班;
2.Oracle
? ? ? select t2.* from (select rownum r,t1.* from table t1 where rownum<N ) t2 where t2.r>I;
3.MySQL
? ? ? select * from table limit I ,N;
4.SQL Server
? ? ? select * from (select top I+N * from table) a where id not in(select top I id fromtable)
? ? ? SQL Server分頁的寫法有很多挥吵,這是其中最簡單的一種,效率較低房午,適用于小數(shù)據(jù)丹允。
二.越權(quán)訪問
三.本地導(dǎo)入
已有網(wǎng)站權(quán)限雕蔽,攻擊者就可以向Web 服務(wù)器上傳類似于“PHPMyAdmin"在線數(shù)據(jù)庫管理的“拖庫腳本”。這類腳本非常小巧扇售,是專門針對數(shù)據(jù)導(dǎo)出而寫的腳本。
第一步:連接數(shù)據(jù)庫信息承冰。
導(dǎo)出數(shù)據(jù)時首先應(yīng)該確定數(shù)據(jù)庫信息困乒,包括數(shù)據(jù)庫的庫名、賬號迁霎、密碼及端口信息百宇,填寫好相關(guān)數(shù)據(jù)庫的配置信息后,單擊“submit" 按鈕連接數(shù)據(jù)庫芝此。如果數(shù)據(jù)庫連接信息正確因痛,將會讀取出|指定數(shù)據(jù)庫的表數(shù)據(jù)條數(shù)及表結(jié)構(gòu)信息鸵膏。
第二步:填寫導(dǎo)出信息。
在得知表結(jié)構(gòu)之后谭企,就可以填寫要導(dǎo)出的表债查、列、每次導(dǎo)出行數(shù)征绸,以及導(dǎo)出數(shù)據(jù)的保存路徑俄占。在填寫完信息后,單擊“開始導(dǎo)出”按鈕渤弛,即可導(dǎo)出數(shù)據(jù)甚带。
Navicat
在Navicat安裝目錄下有三個PHP文件,分別是: ntunnel mysql.php辕宏、ntunnel_ pgsql.php和ntunnel_ sqlite.php。 這三個文件分別支持對MySQL、PostgreSQL聚假、 SQLite數(shù)據(jù)庫使用HTTP通道連接闰非。HTTP通道經(jīng)常用于以下情況:網(wǎng)站空間服務(wù)商不允許遠(yuǎn)程連接MySQL,也就無法利用Navicat客戶端通過填寫服務(wù)器地址來遠(yuǎn)程連接MySQL瘪贱。這時可以通過HTTP通道方式連接服務(wù)器的MySQL數(shù)據(jù)庫辆毡。
將ntunel mysql.php上傳到網(wǎng)站根目錄舶掖,然后打開Navicat,單擊“新建連接”→“MySQL",選擇“HTTP”選項卡主慰,勾選“使用HTTP通道”鲫售,在“通道地址”欄寫入ntunel mysql.php的URL,填寫完HTTP通道地址后情竹,返回“常規(guī)”選項卡藐不,填寫連接名、用戶名及密碼鲤妥。這里需要注意的是佳吞,要連接的主機IP地址應(yīng)該為“Localhost"或“127.0.0.1",代表本地連接。填寫完后棉安,即可遠(yuǎn)程連接MySQL數(shù)據(jù)庫