當前位置:編程學習大全網 - 源碼下載 - 網絡怎麽學習找漏洞。

網絡怎麽學習找漏洞。

這是我在網上看到的,希望對樓住有所幫助壹 如何尋找漏洞

這個是大家最關心的。大家尋找漏洞只能尋找能讀到源代碼碼的,沒有源代碼但有註入漏洞的系統只能猜,具有特殊性。網上很多主機用的是成品,它的系統源代碼可以從網上下到。至於如何判斷主機用的是哪個系統,就需要大家有壹定的積累了。這也沒法用語言描述,我舉個簡單的例子。

以動網6為例,看到某個論壇界面酷似動網,9成是動網論壇,再看看下面的版本就知道是動網6了。這個時候就可以去Chinaz下個動網6來讀壹下,不會ASP的就沒辦法了。當然漏洞早就公布,我只是告訴大家如何判斷主機用哪個WEB系統。

漏洞是如何被發現的呢?其實也沒什麽訣竅,主要是紮實的基礎知識,要是連HTTP協議不懂,不會抓包,也別找漏洞了,找到也不會用,這樣最好先補基礎知識。有了基礎知識,剩下的就是毅力和耐心。論能力,現在好多系統漏洞,張三找的到,李四也找的到。

主要是看誰先找,誰下的工夫深。有的漏洞讀壹遍源碼是找不到的。

找漏洞的過程也是熟悉這個WEB系統的過程,首先要了解它的數據庫結構,這是最基本的。接下來就得壹個文件壹個文件的讀。先讀不需要權限的。

有的頁面開頭就來個SESSION判斷,就算下面有漏洞都沒用。

找漏洞的過程其實就是壹個文件壹個文件讀的過程。下面以壹個頁面為例。  首先把握系統流程。所謂系統的流程就是系統到底如何執行。壹般系統為 開頭——中間——結尾 模式。開頭壹般是輸出HTML中<HEAD></HEAD>之間內容,對我們找漏洞沒有影響。

壹般文件開頭都會包含很多頭文件,大家看了感到頭暈,其實頭文件都沒什麽用。主要是數據庫連接文件,  全局配置文件,和函數庫。我們大可不理會這些東西,再找漏洞時用到了回頭再看也不遲。

但是函數庫裏面關於輸入串過濾的函數要重點看壹下。

結尾是輸出系統版權信息,有的用到SQL查詢,不過這裏用處也不大,我們可以很粗略的看壹下。

中間部分是我們重點關註的地方。  其次重點關註輸入變量。因為這些變量是我們控制的,沒有外來輸入變量也不用談註入了。

大家要有這樣壹種概念,不管是GET,POST,還是COOKIE方法,只有是從用戶提交的變量都可以由我們指定,我們想讓它是多少就是多少。

至於系統取得變量後做了什麽過濾是另外壹回事。

在輸入變量中要重點關註能參與SQL執行的變量,有的變量比如action或者page都是控制流程的,根本就沒用,就算改了值也沒什麽意思。  再者就要深刻了解數據庫了,沒有對數據庫全面的把握,很可能錯失很多註入點,這也是高手和菜鳥最大的差別所在。

我們常見的數據庫有Access、Mysql和SQLServer,至少要對他們有很深的了解才能找出漏洞。二 分三個方面並舉實例講解註入點的尋找及利用

1 註入點很容易發現,利用也很簡單

這種漏洞相信已經很少了,除非程序作者根本就不關心程序的安全才會有此漏洞。以前經典的 ' or '1=1就屬於此類

典型的類似(模型,以下類同)

select * from tablename where user='request("user")',

select * from tablename where id=request("id")

有的程序對這些變量做了過濾,但不全,也可以歸結為這壹類。

相信這樣的漏洞大家都能發現而且也很容易利用,更不用說防範了。這種漏洞容易找,也很少。我給大家截了幾個有漏洞的圖,是幾個系統存在的類似漏洞。

圖壹

動網某插件更改密碼註入漏洞

圖二

某PHP插件ftpid 變量未過濾漏洞

2 註入點容易發現,但利用相對困難

這種漏洞是註入需要很高技巧的,作者也基本不可能避免。

典型的類似 select * from tablename where user='FilterFunc(request("user"))'

select * from tablename where id=FilterFunc(request("id"))  也就是把輸入的變量做了過濾,但未過濾全,有壹線生機。尤其是沒過濾引號。這種利用確實存在,大家不要看著簡單。

有個程序只過濾了空格,比如以前的BBSXP系統。尤其當用戶提交的數據是用COOKIE的時候,作者更有恃無恐,做了簡單的過濾。  首先談如何防範,我給大家壹個PHP例子。

function getRequestVariables()

{

foreach ($_POST as $postKey => $postValue)

{

global $$postKey;

$$postKey = filter(trim ($postValue)));

}

foreach ($_GET as $getKey => $getValue)

{

global $$getKey;

$$getKey = filter(trim($getValue)));

}

}  思想就是把所有的變量都用這個函數進行常規的提前過濾,不是所有符號都過濾,每個變量需要輸入的數據不壹樣。做了過濾之後,可以在具體頁面進行二次過濾,目的就是防止寫程序時忘記過濾,有壹次過濾使損失減到最少。

ASP也可以使用類似方法。

前幾天驚雲下載系統 edti.asp文件就屬於此類。既然註入點容易發現,那就要談如何利用。

拿 select * from tablename where id=FilterFunc(request("id")) 為例,如果系統只過濾了單引號,和諸如"exec declare // -- ; "等,我們同樣就可以猜測用戶名密碼(這些是建立在我們知道系統數據庫結構的基礎上).

假如系統表名為 admin,用戶字段為username,密碼字段為password,那麽我們可以構造以下查詢(適合各種數據庫,只是函數不壹樣)。  猜測用戶名密碼長度

select * from tablename where id=1 and (select count(*) from admin where id=1 and len(username)=1)=1

 以上ID=1是指定的,根據具體情況變化,如果註入上面的內容返回為真(再解釋),說明ID為1的用戶名為1,為假就繼續猜,我想基本不會在20個長度以上(如果是,那個人太變態了)。密碼同樣方法。猜測字符也類似。

MYSQL中情況有點不壹樣,因為MYSQL不支持子查詢(5.0不清楚)。MYSQL要用下面的方法(系統得支持UNION,現在有很多系統支持):

select * from tablename where id=1111111 union select [字段匹配] from admin where id=1

上面的字段匹配表示要和tablename的字段數目壹致,MYSQL列類型檢查非常送,有null即可完成匹配,上面的方法可以讓系統暴露敏感信息。

比如

select a,b,c from tablename where id=1111111 union select null,username,null from admin where id=1  至於上面所提到的返回為真概念是想當廣泛的。可以是服務器返回標誌,如HTTP 500就是內部錯誤,還有根據頁面的返回,這種類太多要自己體會。

3 註入點非常隱蔽,只要找到就能利用  這種漏洞就需要很深的功底和長期積累的技巧了。漏洞很少,但發現之後影響很廣。前期動網USER-AGENT註入漏洞和BBSXP5.0sq1漏洞應該屬於此類。

本人在這方面也只能起個拋磚引玉的作用. 本文來自CSDN博客,轉載請標明出處: /aspstu/archive/2005/01/11/249266.aspx

  • 上一篇:如何通過網絡調用WebService遠程控制電燈泡開關燈
  • 下一篇:Asp調用WORD
  • copyright 2024編程學習大全網