距离上次分享文章已经过去了5个月,写这篇文章之前。我已经做了较多的渗透项目,也打了一些地级和省级市的红队项目。在此期间,让我感觉非常受用的技巧无非是对于信息的收集,不管是在前期打点,亦或是拿到shell后的横向,对于目标信息的掌握程度,很大层面决定了能打到多深,能打到多宽。由于自己技术受限,仍然停留在安服水平,因此文章主要以简单技巧分享为主。主要是分享自己在早期以及近期遇到的两个例子,也是较为简单的实战技术理论,并不是较为复杂的研究性分享,分别以外部和内部为例。
并且本文主要是说收集信息,而不是信息收集,希望加以区分。
这个例子是我以前众测的时候找到的一系列漏洞,主要成果就是通过日志泄露到Getshell。
该站点是Thinkphp的,但是做了Nginx反代,通过wappalyzer可以收集到站点指纹,通过路径报错,也可以判断出是TP站点,一般此时要么是3.x要么是5.x
最后通过漏洞扫描工具ThinkphpGUI-1.2-SNAPSHOT发现存在Tp3.x日志泄露的问题
通过TPlogScan获取日志python3 TPLogScan.py -u http://xx.xx.xx.xx -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
获取了若干日志后,就到了收集信息的重点,这里主要分享的实战理论就是
在收集信息中,一定要将所获得的信息和关键字关联,进行灵活筛选
所获得的信息,在这里就是指,我们获取的TP日志,回想一般日志会记录的东西,比如Sql语句,比如攻击流量,比如程序运行日志。
关键字,在这里就是指,我们经常关心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
关联:将这些得到的信息和关键字关联,比如Sql语句中会出现对用户名称和密码的对比是否正确,会出现数据的添加删除等。
灵活筛选:根据现有信息,去优先选择我们需要获得的信息
如只有一个后台登录页面,当前最好的筛选是通过用户名密码的字段在大量的日志中去筛选password,username,passwd,user等关键字,尝试获取某个用户的账号密码,进入后台,去扩展自己的攻击面;
又或是此时已获得后台用户权限,想找到一个Sql注入打到shell或内网,此时应该以Insert,Delete,Update,Select,Where,Order By等关键字为主,去筛选查找;
或通过漏洞拿到了shell分但是数据库用户密码是加密的,此时还想继续获取数据分,呢么还是类似1的方式,筛选password,username,Admin,Administrator,root,system等高权限用户关键字,尝试获取在写入数据库前的加密明文,比如select username,password from users where password=md5('[email protected]')
等等系其他情况,灵活关联
我当时正处于第一种情况只有一个登录页面,此时立马去筛选关键字,在庞大的日志中,筛选出来了一条关于管理员用户admin的查询语句
获取到了hash值,然后很幸运的是,cmd5有相关缓存,直接解了出来
进入后台后,在上传处有对后缀的限制,有对内容的限制
此处我通过换行绕过后缀限制,脏数据绕过了对内容的限制,成功上传了php的shell
其实这些后续的bypass上传花费了我更长的事件,上述上传还需要一次特别的更名操作,才能被解析,但这里不是写Getshell的,而不是分享收集信息的实战理论,因此不多讲。这里主要就是跟大家啰嗦了下,在拿到仅限的大量无用信息中,一定要把此时自己获得的信息和关键字做匹配,做关联,减少在废物信息中的搜寻时间,最效率化利用当前的信息,去扩展自己的渗透攻击面
前期Shiro打点(我也很好奇,2022年了,还有shiro),特别小的内网,没任何东西打,只能拿数据分了。
尝试翻找各种数据库配置文件,可以根据数据库后缀文件名进行检索,比如yml,ini,conf,config等
这个数据库里面数据很少,基本凑不够。
于是找到一个源码备份文件,虽然不懂Java,但是只要能收集信息的地方,我们一个都不能漏。在源码文件中,我们可以收集到的信息,往往有很多硬编码的信息,注释中的测试账号密码,泄露的token,api,accesskey等。
即使你不会java,你也可以解压缩jar包,然后丢到IDEA中可查看源代码。或者使用Jd-Gui直接打开jar包也可以查看源代码
发现jar包中打包进来了数据库配置文件,里面有一个内网的aliyun mysql数据库。没有太多的用户数据,但是发现了一些app_id,app_secret字段
拿着通过这些关键字,我在源代码中检索,发现跟微信相关
通过查询资料发现,app_id和app_secret是关于企业微信的,两个参数认证后可以获取Token,通过Token可以调用企业微信的各种API,比如将自己添加到企业微信用户中,获取企业微信部门人员列表等,具体利用可参考下面的文章
https://mp.weixin.qq.com/s/MyIUhkxmyw-msCPnhUi92A
这里我通过id和sercert认证获取Token中,由于不在白名单中,被拒绝了。
此时我仍没有放弃,在数据库中继续检索关键词Token(sql语句检索列名或内容可参考百度学习),发现了token_cache的字段,翻译过来就是token缓存
此时通过/cgi-bin/groups/get api验证Token是可用状态,后续的信息利用就不放出了,无非是获取了部门所有人员详细信息,以及提个严重漏洞罢了
搞完数据库,我接着看源码,此时我没有立刻搜索文件内容,而是搜索整个jar包中的文件名,关键字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通过关键字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通过文件名我找到了一个带有OSS名字的class
通过该Class我又找到了一些存储配置的Class
找到了两个阿里云 accesskey,一个七牛云的acesskey
通过阿里云accesskey拿到一个OSS BUCKET 以及150多台的云主机
通过上述内网的两个例子,主要就是想将现有信息和关键字关联,灵活筛选。
简单的说,就是要根据当前获得信息的固有属性来与关键字做适配,什么环境该拥有什么属性,什么属性该适配哪种检索关键字以及检索方式。尽可能的做一个关联性假想。
本篇文章实质是实战技术案例分享,但是想透过两个特别简单的例子,来描述下自己心中对于收集信息,扩展攻击面的认知。基本是自我粗糙的拙见,如果能给各位师傅带来一点技巧的扩充帮助,也足够我欢喜了。
喜欢就点在看哦~
长按识别二维码
欢迎投稿
EMAIL:
博客:
www.langsasec.cn