二、SQL Injection
SQL Injection是现在最热门的,也是本文要重点说的!
1、ASP ACCESS数据库类型的SQL注射
现在的大多数网站是采用的这个组合,但是如果在ASP程序中没有对用户提交的变量充分过滤的话就可能导致管理员密码被猜到,整个网站的信息就会暴露无移~!
在大多数ASP站点中,我们并不知道其程序代码,靠任何扫描器也不可能发现SQL injection漏洞,这时就要靠手工检测了,由于我们执行SQL语句要用到单引号、分号、逗号、冒号和“--”,所以我们就在可修改的URL后加上以上符号,或在表单中的文本框加上这些符号!比如比较经典的金梅系统漏洞,在movie.aps中有怎么一段代码:
articleid=request("id")
set rs=server.createobject("adodb.recordset")
sql="update learning set hits=hits 1 where articleID="&articleid
rs.open sql,conn,1,3
sql="select * from learning where articleid="&articleid
rs.open sql,conn,1,1
articleid未经任何检查便提交了,所以我们就可以自己构造一些SQL语句来提交上去!
2、ASP MYSQL数据库类型的利用
MYSQL数据库简单使用和强大的功能一直以来都是网管们的最爱!但是如果是ASP中没有对变量过滤的话,我们就可以来直接的到他的系统管理员权限!
比如动网论坛、BBSXP论坛的SQL版有好几个文件都没有对ID过滤,所以我们只要找到他的存在问题的页面就可以了。看这段代码:
rs.open "select * from news where newsid=" & cstr(request("newsid")),conn,1,1
比如我们提交:
_blank>http://XXX/show.asp?id=1;exec master.dbo.xp_cmdshell 'net user xuehan ilovexuehan /add';--
_blank>http://XXX/show.asp?id=1;exec master.dbo.xp_cmdshell 'net localgroup administrators xuehan /add';--
看到了吗?我们已经在系统中田加了一个xuehan 密码是ilovexuehan的管理员帐号,以下的事情你就自己来做吧,呵呵,不用我来教了吧!!!
如果过滤了分号和单引号怎么办?呵呵,我们只要将我们的命令形式转换一下,比如我们转换成十六进制或者别的形式就可以继续注入了,还有就是他如果过滤了xp_cmdshell 我们也可以解决,我们可以写成xp' '_cmd' 'shell形式,如果他将xp_cmdshell 扩展删掉,我们可以通过xplog70.dll文件来恢复,呵呵,具体自己查找下数据库的知识,当然我们也可以用别的扩展!所以说SQL injection不仅仅是一门技术,更要有灵活的头脑和扎实的数据库知识,特别是对SQL语言的掌握程度,如果不会SQL语言,你永远都是生搬硬套,遇到障碍就过不去了!
3、PHP MYSQL数据库类型
PHP MYSQL一直以来都认为是最安全的组合,不过一些文件没有过滤单引号、反斜线等,我们也可以来进行注入,不过在最新的php安装程序里的php.ini文件默认都是对这些过滤掉的,所以很大情况下我们是无法对进行注入的,不过也有许多牛人们可以饶过这个限制的!由于我的PHP和MYSQL不是太懂,所以就不能来具体举例来说明了,大家要是有兴趣可以去找写资料来看!!!
需要从根本上解决解决SQL Injection问题。还得从程序本身入手。过滤不能单纯的过滤URL所提交的参数,在表单里的也要过滤,value=后面的可以修改的数据,修改后可以提交到服务器,总之对所有的表单提交的数据以及用户可能对HTML源文件进行修改来控制的所有来自Web服务器外部的数据进行过滤或转换,对单引号、双引号、分号“--”还有对数字键上面的所有特殊字符进行过滤,还有QUERY_STRING环境变量。在服务器上删除一些危险的扩展存储过程,比如xp_cmdshell。有条件装个IDS更好,不敢说无坚不摧,但至少可以阻挡大部分攻击者。