利用联合查询获取cms 网站后台管理员帐密
环境介绍
物理机:Firefox浏览器(上加入hackbar插件)
win2008虚拟机:搭建有cms网站(不会搭建的可以看我前面的博客)
判断网站是否存在sql注入漏洞
我们用物理机的Firefox浏览器访问虚拟机上的cms网站,F12打开开发者工具,在后面可以看到hackbar工具,点到该工具窗口。
首先我们先用最简单的方法判断是否存在漏洞。我们需要把地址框中的内容复制到hackbar框中,更改id的值,如果数据库中的内容回显到网页中,说明存在漏洞。
很明显的看到,id的值发生改变,网页中显示出了不同的内容,并且没有报错。这样我们就可以断定存在sql注入漏洞,并且判断可以采用联合查询的方法进行漏洞利用。
联合查询
判断列数
我们可以用order by方法来判断查询表的列数,可以从order by 1开始,直到order by n停止(看到报错停止),此时的查询列数为(n-1)。本次查询直到order by 16开始报错,所以为15列(如果列数太多从1开始+1查找比较费劲,可以使用折半查找的方法)。
判断显示位
判断显示位的方法用到union合并查询,具体写法如图所示
可以从网页中显示的信息判断可能是第3列和第11列为显示位,或者可以用一下方法准确判断
我们将查询版本、查询所属数据库语句分别放在第3位跟第11位,网页中显示出了版本信息跟数据库信息,证明我们的判断是正确的。
查询所有表名
上面我们知道了所属数据库是cms,现在我们看一下总共有哪些表,而这些表中哪些属于cms库,并且存放了用户信息。学过数据库的应该都知道,我们用的数据库都会有一个默认库,里面存放的就是所有库名,表名,字段名。
http://10.3.139.59/cms/show.php
?id=35 and 1=2 union select 1,2,UNHEX(HEX(group_concat(column_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()
解释一下这一堆是什么意思,HEX为哈希加密,写上这个数字不用转换为16进制,但是网页中列出的表名会被加密,我们必须再加上UNHEX进行解密,其他语句不做解释,学过数据库的应该都知道什么意思。→_→
如上图所示,我猜cms_users表中大概率存放了用户信息,所以接下来我们进行字段名获取。
字段名获取
http://10.3.139.59/cms/show.php
?id=35 and 1=2 union select 1,2,UNHEX(HEX(group_concat(column_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name=‘cms_users’ and table_schema=database()
查询命令不多做解释。
从图中不难看出距离我们的目标越来越近了,此时,只要我们获取到
username、password字段中的内容就算大功告成了。
在第3列放入查询username字段内容的命令,第11列放入查询password字段内容的命令
如图看到的admin为用户名,(e10adc3949ba59abbe56e057f20f883e)为MD5加密过的密码。
接下来让我来给大家口算MD5值(开玩笑这谁能算出来)→_→
www.cmd5.com这是MD5密文、明文互相转换的网址。
大功告成!今天的博客就写到这里,感谢您的观看,觉得有用请点个赞,谢谢!