来源:自学PHP网 时间:2015-04-17 10:15 作者: 阅读:次
[导读] 笔者前日无聊,看到公司附近某个服务行业机构的网站,asp语言,搭建于iis服务器中。一开始笔者并没有留意到这网站有sql注入漏洞,随手在某个news.asp?id=52的url上输入了一个单引号,随...
笔者前日无聊,看到公司附近某个服务行业机构的网站,asp语言,搭建于iis服务器中。一开始笔者并没有留意到这网站有sql注入漏洞,随手在某个news.asp?id=52的url上输入了一个单引号,随后服务器报500错误,并给出了出错的sql信息(汗,服务器相关的出错信息一定不要泄漏出来,不过貌似我以前做的站好像也没注意异常的问题),该页面获取id参数的时候应该有强制int,所以在当前页面构造了几次请求都没有发现注入点,笔者不服气的犟驴劲顿时出来了。
苦寻无果,笔者注册了该网站的会员,并登陆之,看有没有新的注入口。笔者登陆之后抓包发现cookie中明文存放了会员信息,如会员登录名,于是笔者改了一下该cookie,也是简单加了个单引号,结果。。。服务器也500了,并且给出了出错的信息。但这次的出错信息有所不同,出错信息里显示程序里直接使用了cookie,没有做任何过滤,就像 select * from xxx where username=’$_Cookie['username']‘这样。。。然后,注入点出现了。
于是笔者给网站管理员发了封邮件,告知网站会员系统有sql注入漏洞,希望网站在服务功能正式上线之前把它修复。
笔者下班之后,好奇害死猫,继续看怎么破之。 (1)笔者先猜他的后台管理系统登陆地址为 www.xxx.com/admin,果不其然,猜对了。 (2)笔者再猜他的管理员登陆表叫admin,注入了sql ‘exists(select * from admin)’,结果页面200,也猜对了。 (3)笔者猜他的管理员表admin里应该有一个字段名username,一个字段名password,结果一直500,没猜对 (4)于是笔者去看了下登录页面的html源码,希望从里面发现线索。笔者第一步看的是登陆表单,发现登陆表单名为admin,登陆密码表单名为UserPassword,于是笔者根据前面页面的报错信息猜测这个程序猿有把参数名和数据库设计映射一致的习惯,于是再猜测admin表里有个字段是admin,有个字段名是UserPassword…果然,笔者注入了sql ‘(select top 1 [admin] from admin)>0′,也成功了,相应的UserPassword也存在。。。额,这。。。 (5)笔者开始猜后台登陆用户名和密码的长度,继续注入了 sql ‘(select top 1 len(admin) from admin)=N’,使N一直递增,发现其网站第一个登陆用户名长度为5,密码长度为16. (6)拿到了字段名,长度,接下来,笔者猜测这两者应该是字母,数字组合。笔者依次注入 sql ‘(select top 1 asc(mid(admin,N,1)))=M’,对于用户名N->[1,5],M->[0,128],密码N->[1,16],M->[0,128],依次拿出了用户名和密码每一位的ascii码。。。结果发现用户名是 admin,密码是加密的16位字符串 (7)笔者猜测这是md5加密的密码,于是笔者找了个网站反向解密了这个字符串,得到xxxxxxxxxx (8)笔者跑到网站登陆页面www.xxxx.com/admin,输入破解的用户名和密码,结果。。。登陆进去了他们的后台!!!
走完这几步,已经基本完成了入侵的过程了,不过笔者没有打算再深入下去,直接关机睡觉了。
写这篇文章不是为了教大家如何去入侵一个网站,而是,通过入侵的思路,来总结一下网站系统安全建设中常见的坑,在工作中可以适当去避免。 (1)异常信息,要记得try catch,然后对外屏蔽 (2)表单之类的信息,不要跟数据库字段有强关联,最好能做一个映射 (3)不要相信来自客户端的任何输入,包括表单、url参数、cookie,需要用到时,一定要进行安全过滤 (4)如果要用cookie,不要在重要路径依赖cookie,实在没办法,请加密你的cookie (5)如果网站有后台,不要轻易暴露入口,不要用常用的名入口命名,不要在表单里暴露太多信息 (6)即使是非系统级别的错误提示,也不要给用户太详细的信息。 (7)如果有密码,可以在加密串中加入其他信息,对反向解密加干扰~ |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com