安全矩阵

 找回密码
 立即注册
搜索
查看: 4770|回复: 0

渗透实战 | 记录我的第一次

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-8-10 08:28:55 | 显示全部楼层 |阅读模式
原文链接:渗透实战 | 记录我的第一次

0x00 前言
好羡慕师傅们能把渗透报告写的行云流水又妙趣横生,不知道我什么时候才能达到那种境界。
这次给大家分享一下我的第一次……独立完成的项目,项目距今已经过去很久了,现在回看其实没什么技术含量。但由于当时个人技巧的粗糙,反而使项目过程变得曲折无比,发出来给大家引以为戒。
项目过程没有截图记录,就算有也不可能发出来,万分抱歉只能让大家看着表情包脑补一下。


0x01误入歧途

这次的目标是一个App,最初拿到手的就只是一个宣传页面,附带App的下载地址。现在的我会选择直接下载App抓包测试,尽快找到核心功能相关域名。


但当时缺乏经验的我选择了从页面上泄露的公司名称入手,这个错误的选择导致我浪费了一周的时间。经过一系列常规的信息收集流程后,我找到了该公司的一个商城www.abc.com





一番手工测试,前台搜索框sql注入注出管理员密码。登陆后台后找了一个上传点:


·后端检测后缀绕过:修改cms系统配置添加上传类型白名单php。
·前端检测后缀绕过:上传gif抓包修改后缀。


但是上传后发现后端还对文件内容进行了检测,过滤了<?,上传webshell受阻,一时间渗透陷入僵局。



万事不决问百度,经过一番临时抱佛脚,我学到了新姿势:用<script language=”php”>代替<?php,绕过了文件内容检测成功getshell!


当时真是年少轻狂,面对阿里云上传了最基本的那种……嗯……就是那种,随便什么waf识别率100%的一句话木马,蚁剑连接的一瞬间,当场被杀。





又是一番临时抱佛脚,我带着当时划时代现在烂大街的冰蝎马重新归来,上传,连接,操作十分顺畅,丝毫感受不到阿里云云盾的存在。


我翻着文件和数据库,心里想着第一次就这么简单的结束了吗?





然而我越翻越感觉情况复杂:这台服务器孤零零的没有内网,上面挂着至少10个不同公司不同功能的网站,数据库里全是测试数据。一度让我怀疑我是不是进了一个蜜罐。


好在之前我在后台收集到了管理员邮箱信息,复用后台密码登陆邮箱翻看往来邮件,没看几个就被管理员顶下线了,我就不应该在大白天登陆……





不过看到的邮件里提到了码云,我又去尝试登陆,最后探明,这是一个外包建站公司的测试服务器,上面都是正在灰度测试的资产。


也就是说,我错搞到目标的开发商了,且是目标边缘资产的开发商,和这次项目基本没有什么联系。拿到shell了却还要重新找口子的滋味着实不好受。

当时的我还没领悟到所谓渗透测试就是在100次失败中寻找那1次成功,这次失败让我有点受挫的暂时放下了项目,转去开发小工具了。当我再度提起信心时,已经是一周之后了。


0x02卷土重来
一周后重新开始,这次我明智的下载了app,拖进安卓模拟器中抓包测试,发现了目标的核心域名xxx.com,app核心功能的子域名是app.xxx.com,后台管理子域名是admin.xxx.com。


技术情况分析:服务器部署了CDN无法找到真实ip,系统框架为thinkcmf,修复了thinkcmf的模板注入漏洞,页面没有错误回显。同时开启了php的魔术引号,附加CDN自带的waf(web应用防火墙)防护。





看似无懈可击的布防却有一个小漏洞:thinkcmf基于thinkphp开发,thinkphp的日志路径和文件名可猜测,且管理员未正确部署系统时可直接访问到日志文件。日志中会泄露sql语句信息。





虽然我没有在泄露的sql语句中找到后台密码,不过却意外的发现系统某功能的sql语句中有一个参数是数字型,没有被单引号包裹且外部可控,这意味着可以绕过php魔术引号防御进行注入。





至于那个CDN附带的waf不是很主流,配合日志中sql语句信息调整payload+利用mysql的可执行注释/*!50000*/做个混淆就绕过了。


注入点用户权限不高,但足以注出管理员后台密码哈希,然后满怀希望的拖到cmd5去解密,结果……





又是一番信息收集后,我发现了目标的测试系统test.xxx.com,测试系统同样的注入点,但mysql用户权限升为了root,可以查到数据库用户和密码。


然并卵,受CDN限制找不到真实ip,也就没办法直接连接数据库,mysql也做了安全配置不能读写文件。渗透再次陷入僵局。



0x03 危机四伏
不过彼时的我似乎体会到了渗透测试的本质就是信息收集,陷入僵局那就一定是信息收集的不够。


不知又进行了多久的毫无章法的信息收集,我突然用公司名做关键字在网络空间搜索引擎fofa上搜索到了目标的真实ip,3306端口开放!

(图是我写文章时随便截的)


那就不客气了,直接连接数据库,不过里面只有测试系统的数据。看来任务还没有结束,需要想办法连接到生产系统的数据库,首先考虑先怎样拿下这台服务器。


thinkcmf新版本采用加盐的hash加密密码,盐写在配置文件里,且加盐方式cmd5没有收录,老版本加密方式因没有加盐不够安全而被替代。


但是我审计代码后发现,其实新版本中同样保留着老版本的加密方式,只要密文前面匹配到###,就按照老版本的来(代码如下图)。

于是在不知道盐的情况下,我仍然可以自行构造密码替换掉管理员密码,成功登陆后台。

后台利用thinkcmf已知RCE漏洞:修改sp_auth_rule表中对应的url的condition字段插入代码,然后登陆低权限用户访问该url即可触发代码执行。


年少轻狂的我又写了个标准的不行的一句话,操作两下后当场被杀,幸好死前留了一个冰蝎马,连接后探测到生产系统的数据库在内网另一台服务器上。


项目本应到此结束,但当时我错误的认为先多藏几个木马以后再搞,管理员删不干净的,于是潇洒的去浪了,甚至连管理员密码都忘了改回来。





过段时间再看,管理员应该是用了一键还原,所有马都没了,日志泄露和注入点也修了……





不过数据库密码没有改,重新替换密码进入后台,发现之前利用RCE漏洞的功能被删除了。但管理员显然不清楚漏洞的本质——所有需要权限校验的功能都可以触发漏洞,换了一个功能继续触发。





虽然RCE漏洞还在,但是我又发现,管理员重新设置了目录权限,我找不到可以写入webshell的目录了。雪上加霜的是,php执行系统命令的函数悉数被禁。



0x04 水到渠成
无法写文件,RCE漏洞payload又有数据库字段的长度限制,似乎能做的事情很有限。但其实到这一步可操作的空间有很多。





利用php远程文件包含,一句include即可执行远程服务器上任意大小的php脚本。包含执行php备份脚本将整站源码备份了下来。





然后把RCE的payload改为混淆过的一句话插入数据库,蚁剑添加后台cookie直接连接,无文件落地的控制服务器。


逐个查看目录权限,找到旁站一个可写文件的目录写入http隧道脚本,navicat直接连入内网控制数据库,结束收工。





顺便一提后面翻看源码时发现了一份密码表,直接root登陆,提权都省了。



0x05 结束
利用链:thinkcmf日志泄露sql语句——数字型sql注入得到数据库密码——利用thinkcmf遗留加密算法缺陷构造密码替换进入后台——后台已知RCE——翻到密码表提权。


受限于个人技术,恳请各位师傅对此份报告错误与不足之处批评指正,以便我能为大家发出更高质量的渗透记录和学习心得,小黑拜谢!














回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 07:54 , Processed in 0.017522 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表