记录下某年某省HW期间,一个上午“打穿”某还算不错的高校的经历。
过程中只用到很简单的方法,所以加了个标题“有手就行”。
文中内容已做脱敏处理,渗透过程已获得授权, 相关漏洞也已经修复。
所介绍方法请勿用于非法用途!本文请勿转载。
这一块涉及一些隐私问题,就不展开说了,只说下可行的思路吧。可以去看下其他师傅的文章。
用VPN等方式总归是不稳定,需要找到稳定的跳板机来进行后续的渗透。对重点的网段进行扫描,如信息中心、财务处、学校官网主站等所在的网段。我当时用的是inscan,但现在inscan好像不维护了,最新的release也有问题,现在一般用轻量的fscan。直接扫重要的C段即可,扫的时候弱口令根绝学校名和缩写适应性地加一些。
探测到该校购买了大量的华为物理机部署在机房内,但其Web管理密码及KVM的连接用户密码均为出厂时的密码。我们可以通过Web管理平台直接执行系统命令,或者用华为官网提供的工具KVM连接(到虚拟机?)后执行命令。
可以看到root和远程控制
可见服务器配置还是挺高的,不挖矿可惜了(bushi
部分机器内还跑着OpenStack的服务,我们可以构造环境变量来管理这些虚拟机。
# 首先初始化环境变量 export OS_PASSWORD=*** export OS_AUTH_URL=https://identity.az1.dc1.domainname.com:443/identity-admin/v2.0 export OS_USERNAME=*** export OS_TENANT_NAME=*** export OS_REGION_NAME=*** export NOVA_ENDPOINT_TYPE=internalURL export OS_ENDPOINT_TYPE=internalURL export CINDER_ENDPOINT_TYPE=internalURL export OS_VOLUME_API_VERSION=2 export BASE_BOND=brcps # 旧版本 nova server list # 新版本 openstack server list
此外还找到一些该公司其他云服务的默认密码,这里跟上边的一块,统一列几个吧
root / Huawei12#$
root / FusionSphere123
root / [email protected]!
这些默认密码在华为官方的文档其实都有~
通过扫描,还发现某IP的80服务开着未授权的Hadoop,且存在RCE漏洞。
EXP不放了,可以参考Vulhub链接。
有趣的是每次弹回来的机器的host和IP会变,多次开端口监听,获得了node001-node010十台高配置物理机的shell。
shiro还没修完也是离谱,java我谢谢你。
在上面我们得到稳定的跳板后,继续是用inscan对该校重点网段进行简单的扫描。
发现某IP的80端口有个安全设备需要登录,但5001端口可直接访问。
如图,会对所有的接口双向数据进行检测,记录其中的敏感信息。但这网站自带的搜索功能太鸡肋了,我无法快速筛选到需要的信息。我直接抄起Python对该网站的API进行一个的爬,然后存到本地的mongo数据库中(因为数据量大且字段不固定)。注:该数据库在授权测试后已删除。
然后使用mongo对应的SQL查找我想要的信息。以下为部分代码,不解释了,大家肯定能看懂是在找什么。
db.event.find({"req.args.password":{"$exists":true}},{ host: 1, req: 1,_id:0} ) db.event.find({"req.args2.password":{"$exists":true}},{ host: 1, req: 1,_id:0} ) db.event.find({"req.body":{$regex:'admin'}},{ host: 1, req: 1,rsp:1,_id:0} ) db.event.find({"rsp.header.set-cookie":{$regex:'(?i)rememberMe'}},{ host: 1, req:1,rsp:1,_id:0} ) db.event.find({"host":{$regex:'itc'}},{ host: 1, req: 1,rsp:1,_id:0}) db.event.find({"apiUrl":{$regex:'login'}},{ host: 1, req: 1,rsp:1,_id:0}) db.event.find({"host":{$regex:'xxx'}},{ host: 1, req: 1,rsp:1,_id:0}) db.event.find({"net.dst_ip":{$regex:'xxx'}},{ host: 1, net:1,req:1,rsp:1,_id:0}) db.event.find({"net.src_ip":{$regex:'xxx'}},{ host: 1, net:1,req:1,rsp:1,_id:0}) db.event.find({"referer":{$regex:'edr'}},{ host: 1, req: 1,rsp:1,_id:0}) db.event.find({"rsp.body":{"$regex":"password"}},{ host: 1, req: 1,_id:0} ) db.event.find({"req.args2.pwd":{"$exists":true}},{ host: 1, req: 1,rsp:1,_id:0} )
使用上面我们筛到的管理员用户名、密码、甚至是Cookie,收获下一步的资产。
这个平台还是蛮有意思的,可以进行学校的资产管理、安全通报、应急处置、安全监测、安全预警、安全管理、威胁情报、态势分析等,其中安全通报可以看到教育部(上交平台)、工信部、手动添加的学校漏洞信息。
比如别人提交的报告,好多还没修复呢~
从上边mongo里筛出来的token,构造并访问,可以获取admin管理权限。
可以看到很多数据,比如保卫处的门禁数据~
这个系统背后对接的数据库连接方式也找到了一些,在后边统一说。
这个就不写是哪个厂商了。看起来是魔改了一个OpenStack来管理的几台物理机,托管一些安全设备。数据库审计、日志审计、堡垒机、云WAF等。不过我都打到这个程度了,就不搞这些安全设备了。
此外一些虚拟机可以vnc直接访问,没有密码。部分已登录的可以直接获取root的shell,剩下的我们可以重启进入恢复模式强制改root的密码(怕影响业务,未进行)。可以参考下重启改密码
发现了一个接口,URL的PATH是一串很长的随机字符串,在这里可以输入OA账户的ID,用统一的密码来登录。我们简单遍历一下就可以登上校长和书记的OA。还可以看到一些涉密,当然我没瞎看啊。
可以查很多信息,不过对我来说也都是塞牙缝了。
还有一些系统,不是不重要,只是我懒得再写了。包括几十个学院官网的管理员、学术数据管理平台、广电专用网络存储平台、学校网络管理与性能监测系统、阿X云混合云All In One管理平台等等的管理权限。
这是一个很重要的系统。该系统对学校一些核心的数据库进行了进程,每晚会同步数据,比如将业务库的数据同步到核心库,我们有时候补办校园卡第二天才能生效刷开门禁就是这个道理。
该系统集成的数据库有:X大主数据仓库,X大主数据缓存库,人事中间库,研究生中间库,本科生教务中间库,校园卡中间库,科研中间库,房产和教师公寓管理库,财务系统中间库,数据中心共享库,x大通行码,安保处人行通道中间库,数据中心机构库,校园网实时在线系统,后勤中间库,设备资产系统,流程平台,通讯录,执行标准库,教学资源系统中间库,图书系统,OA系统,XX学院中间库,后勤集团中间库,数栈安保大屏,财务中间库,图书馆人员中间库,工会人员中间库等等等等。
各个数据库的IP地址、端口、连接方式、用户名等是明文的,但抓包显示密码是加密的,我解了半天发现只要检查元素将类型改成text就可以显示了。省去了我逆向JS的过程,这也太安全了。
获得了几十个库,上万个schema的管理权限,基本上该校的核心数据都在这里。
接下来简单展示几个:
人脸照片、教师科研成果信息、财务信息、房产信息;学生家庭住址、父母职业等,共十万条。
近几千万条带经纬度的健康打卡定位信息。
校园网实时在线信息,包括某个师生的IP地址和MAC地址。不展示了。
财务收费信息。不展示了。
反正就是挺危险的,理论上我啥也能干了,包括但不限于改成绩、改学费、改校园卡金额(当然对账系统很复杂,我改了肯定能被发现哈哈,只是口嗨下)。
一套走下来,还是很顺利的,学校没有企业那种的域管生产网,还是数据重要~
提一些众所周知的安全建设方法吧。
这边还有不少之前渗透的有趣经历,最近找暑期实习整得身心俱疲,等有机会再接着分享:(