% Y5 m% H$ K, C9 q) E一般来说,应用程序开发人员假定用户将输入整数值。 尝试用模糊测试所有的应用程序输入点。 那么究竟什么是模糊? 这是一个过程,输入一些特殊意义的参数等,并尝试找到应用程序报错的差异反应。差异的报错表明可能存在漏洞。 # ]2 \" X3 q2 k0 B* J# L/ {以下是一些任意的输入:& A9 c/ E* G, Q X; D) O) e
“ 9 X) y8 d7 g" Y; w
“ q1 I' } |7 f9 U! o8 q; J: C8 v
\ . t, a* D9 ^, P4 t7 K9 B4 b) i; 5 V/ B* }' g {6 P
%00 : m2 a2 N7 |) Y% v! c4 t
) 1 J4 s- A, Z7 z- y% [( 2 q, b" u7 ^, p: k: g& laaa + f8 H& H7 H* [) x2 S d( r
整数或字符串测试:由于输入参数似乎是整数值,让我们尝试输入ID参数的字符串值,并观察其行为。 * F3 |1 t3 b! g. c. ~' C8 t9 PLess1: http://localhost/sqli-labs/Less-1/?id=asdf & L# ]. r8 @1 j, B k2 W8 vLess2: http://localhost/sqli-labs/Less-2/?id=asdf 5 h* h# Q6 u4 c2 _% o% t4 V/ l6 c+ p* B2 T2 X8 R% l
Less3: http://localhost/sqli-labs/Less-3/?id=asdf . o- E. ?# r5 L( z! lLess4: http://localhost/sqli-labs/Less-4/?id=asdf " \! g: i+ m: W. d) q- o # i! V. b) |2 T( t% _& A9 g& F整数和字符串测试的结果:我们看到,Less1、Less3、Less4返回的页面是空的,没有任何结果和报错,而Less2返回不同的,有一个MySQL错误消息。 从非常基本的编程技术,我们知道一个字符串参数始终包裹在单引号或双引号中,而整数不是这样。 因此,我们可以假设,Less1、Less3和Less4使用某种形式的引号包裹用户输入。他们认为输入的字符串值在数据库中不存在的,因此返回空值。Less2产生了一个错误提示,这意味着用户输入没有被引号包裹,因此整数型的输入在查询中正常工作,但是输入字符串值确产生了报错。 综上,我们可以推断出, less1、less3、less4是基于字符串的注入,而less2是一个整数型的注入。 + u0 W: K( l% a8 m# U$ q继续模糊化:现在,让我们进一步采取模糊的字符. 3 U. o5 G! b6 g用单引号来进行测试 ' ]$ R( J9 S/ r+ X6 nless1 ( i. H" g& d4 s" d- ?; @http://localhost/sqli-labs/Less-1/?id=1‘ ; ]/ O4 F7 {) M5 b1 qYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”1” LIMIT 0,1′ at line 1 $ a/ S$ n" y6 Jless2% C# Q# {2 N& q: a" u
http://localhost/sqli-labs/Less-2/?id=1 ’ 3 P( f9 J3 I+ y6 m1 t; GYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” LIMIT 0,1′ at line 1 9 ~) A2 m( `; l, A d% l$ _" w" _' r! |( D' N7 j! [2 I
less3 : ?+ _! {" E) o5 |* Mhttp://localhost/sqli-labs/Less-3/?id=1 ’ , G G5 Z/ q- Q# H: Z' O/ xYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”1”) LIMIT 0,1′ at line 18 Y; {( j4 a* R- q3 Q
所有这三个都产生错误提示,只有less4没有错误提示,反正正常的查询结果.0 i' O S4 z, p
用双引号进行测试 # V2 c! t8 @& y& h: b$ j用双引号测试发现只有less4会产生错误提示,less1、less2、less3都返回正常的结果。% V& A1 f+ k8 w' h( f