最近收到boss指令,对某网站进行安全评估测试,当然目前网站漏洞还是存在的,写一些工作记录,希望大佬踊跃发言指导。
第一步:
首先是看看我们的网站地址吧,域名:http://www.XXXX.com.cn,来到页面查看,基本上是静态页面,唯一的兴奋点就是在它页面上的登陆页面。
登陆页面
在测试了一波实在是没办法后,难道只能暴力破解吗?admin/admin,还有一些万能密码什么or 1=1--等等,冷淡的只给你一个用户不存在。
登陆反馈
对需要登陆的页面进行抓包,使用brupsuit,进行暴力破解吧,好久没有做这样的事了,复习下功课。好啦,开始暴力破解,一开始暴力破解,就发生了一件比较欣慰的事情,666,数据库报错了,这是一个希望。
爆破回包报错
看来这个登陆的地方是有注入漏洞???。但是呢,通过手工构造和brupsuit一样的参数,手工查找,使用工具注入还是不能确定注入点。不过令人愉快的是,爆破成功拿到网站管理员的一个账号密码。注入就先放下,先进去看看。
得到账号后成功登陆
第二步:
在后台可以做的事就多了,可以发布网页信息,查看网站的一些人身份账号信息等等,当然,测试工作不能止步于此。按照常规操作,当然是找一些上传点进行检测,看看是否可以通过上传脚本对网站进行检测。在资料更新地方发现了一个上传点
资料更新上传点
通过一番上传,很遗憾,并没有上传成功,貌似限制的很严格。可以发现上传涉及到的一些参数,有address、id等
资料上传
之前发现过这个网站可能存在注入,既然上传点利用,注入再找找。对这几个参数进行测试,使用引号’对ID进行测试的时候,服务器返回了久违的数据库报错信息。开心。
报错信息
那么,这个ID,您就可能是悲剧的缔造者了,来吧,先使用order by n --+进行一波字段猜解
当n=4
不行,数据库继续报错,但是执行了,基本上断定这是一个注入漏洞了。通过尝试,最后确定n=2是精确值。
n=2
boss说,网站的管理员不服这个漏洞,需要拿到数据才牛逼,继续“干”啊,为了确定这个注入点,根据上面我们构造语句union select database(),version() --但是这个返回结果可以看到对逗号进行了过滤很难受。根本执行
显示语法错误
当然,没关系我再构造语句 union select * from ( (select sleep(5))a JOIN (select version())b),我们成功执行了sleep函数,服务器在五秒后给出相应。
成功执行sleep()
至少漏洞再一次证明存在,但是连一些database(),version().等等函数全部没有回显信息。猜数据库名一些大于号也过滤不好进行语句构造。and 列名 is not null--
细心的可以发现当我们输入一个列名字的时候,没有的话会报错,有没有哈哈,我们结合暴力破解,对其进行一个列名的猜解选中我们的这个参数作为我们的暴力破解的对象。
选中爆破参数
然后添加我们的column的字典文件,当然最好的就是各种注入工具的字典,我的是使用sqlmap自带的字典文件,然后添加进行爆破,很快,我们就可以看到一些成功的不报错的返回信息。
通过暴力破解我们就可以爆破出它的一些表名,库名,甚至榨取它的一些数据,因为过滤太严格,所以有点复杂,思路差不多,有机会以后和大家分享具体过程。
第三步:
菜鸟我搞了半天,boss说怎么回事呀,有注入还这么艰难,我来看看。他看到这个界面可以对一些文章进行分享,随机挑选一篇待审核的文章进行分享,然后权限选择对所有人可见,发表后,来到查看来到一个页面http://XXX/asd/id=1998,这个页面只用一篇文章,就是刚刚发表过的,所哟刚刚没找到,丢人。boss直接启动了sqlmap,他要干嘛?
sqlmap -u "url" ----random-agent --dbms=mysql走起,结果:
--dbs结果:
--file-read="/etc/passwd"结果:
整个一个基础教学,看来这个月又加不了工资。呜呜呜!
*本文作者:tdcoming,转载请注明来自FreeBuf.COM