今天早上学院开了个会,说了些关于毕业实习与设计的安排之类的还有说明天有个企业来招聘,让有兴趣的人回去登录他们公司的网站看看。paperen我当然是没有这个兴趣的啦,但是宿舍的小华同学就有点兴趣,回来就上了他们的网站。但是……?

paperen我也瞅了几眼,网站不咋的啊,asp的,也不知道为啥突然想也去踩踩,看看有没有存在sql注入漏洞,登上他们的网站,看了几个页面,去到公司新闻那,有一条新闻url是xwzx_content.asp?id=456(很正常的传值,根据id值去查数据库并显示相应的数据,也很合理),但是……?

paperen我将参数改为xwzx_content.asp?id=456 and 1=1试了试,发现与id=456显示是一样的。(并不能证明是否存在漏洞)?

然后又试试这个xwzx_content.asp?id=456 and '1'='1结果是

201001111263199370?

提示错误由此可以判断出存在漏洞,因为你可以在自己的数据库随便找个表来试试这个语句?

select * from table where id=1 and 1=1(某一条记录的id号),其实加上and 1=1与不加是一样的结果,因为1=1是true的,sql肯定可以执行过去,但如果你是1=2的话就不行了,因为很显然1不等于2,为false所以查不到任何数据。?

然后继续去构造语句xwzx_content.asp?id=456 or 1=1,结果是201001111263199801?

得出这个结果也是很显然的,因为or上一个1=1(ture)结果也是true的,无论你的id号为456这条数据是否存在都会查出所有数据记录。?

从上面几个操作就证实了sql注入漏洞确实在这个页面存在,下面开始正式的注入爆出我们想得到的信息,主要是看你的RP。?

我们需要使用union联合查询出其管理密码与账号。当然前提是你要去猜出管理员那个表的名字。?

paperen我第一个想到的就是admin,试试吧。

xwzx_content.asp?id=456?union select?* from admin

结果是

201001111263200513?

提示字段数不匹配,那么我们再去猜它的字段数吧

xwzx_content.asp?id=456?union select?1,2,3,4,5,6 from admin

结果是

201001111263201404?

看来是猜对了,这个表中共有10个字段,其中4这个字段会被显示到页面中。可能大家不太明白这里到底是什么回事,paperen我不妨放出一个自己在mysql中的一个截图。

sql命令是SELECT * FROM `paper_blog` WHERE id =1 UNION SELECT 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10 FROM member

201001111263201159?

看到第二行的1,2,3,4,5了吧,反正自己领会领会吧,关于union这个联合查询不知道大家有没有用过,简单地说就是将别的表的数据都查询过来。?

再来猜他放管理员账号那个字段名,我就猜是name吧。

xwzx_content.asp?id=456?union select?1,2,3,name,5,6 from admin

结果是

201001111263201510?

这就证明猜错了,继续猜叫admin,嘻嘻,果然有了。

201001111263201608?

爆出管理员的账号是admin,再来爆他的密码,就猜叫password吧。

xwzx_content.asp?id=456?union select?1,2,3,password,5,6 from admin

结果是

201001111263203950?

密码是32位的,应该是MD5加密的,ctrl+c一下到一些在线解MD5的网站一查,密码竟然也是admin……这安全意识也太差了吧。?

账号有了密码也有了,还差什么?很明显是后台地址,但是paperen我还是找不到啊,蒙不对地址,看到这里不知道大家是不是有些少失望,唉,paperen我也有点,但是算了,我还要发表博文呢,先不花时间去碰了。反正这个网站给我的印象就是不太好,公司估计也不咋的吧。?

其实要入侵一个网站真的不是很容易的,要防入侵也是很不容易的,但是从上面说的这些可以看出某些观点去防止出现这种很低级的错误。?

1.对get传参的参数进行过滤与判断

2.不要参照某些开源的程序的数据库表或表名去建立自己的数据库

3.要使用比较复杂的密码,至少不要admin,admin888之类的

4.放后台文件的文件夹名字最好改得特别点,不要让人轻易猜到

5.对于asp网站的数据库文件最好改后缀为asp的,防止被下载?

paperen想到的就这么多了,sql注入也是一门学问吧(对于所谓的hacker而言),而大家在写代码的时候一定要切记第一条啊,过滤与判断正确的参数,这个是很很很重要滴!吹水完毕……