红日安全红队实战1环境渗透测试记录

网络拓扑:

 

 

配置环境:

虚拟机添加两个网段,分别是5272

 Kali本地使用vmnet18网卡,ip自动获取为192. 168. 52. 129

Web服务器Win7靶机身处两个网段,有两个网卡,分别接入vmnet18vmnet19

测试连通性: ping kali

 

Web服务器默认没有开启web服务,所以需要先开启web。靶机只有一个c盘。在里面找到了phpstudy集成环境。Windows使用这个还挺多的。

 

 

至此web服务器靶机环境搭建完毕。

 

测试开始: 一、信息收集

本地ip是52.128 尝试收集局域网内所有开启的主机

 显然可以看出143是我们的目标主机,尝试ping一下,不通,而该主机前面试过可以pingkali,说明该主机可能有防火墙过滤。

 使用nmap尝试进行探测:nmap -A -T4 -Pn 192.168.52.143(害怕被屏蔽速度可以再低点)

开放了80,3306等端口,其他常规998个端口有过滤提示,apache2.4.23,  php5.4,  mysql

还可以使用-sF或者-sA,分别发送的是final包和Ack包,模拟半连接发包,有助绕过防火墙。nmap默认是-sS的扫描方式,sync的包,个人理解syn是尝试连接的头半部分的包,

防火墙识别到连接意图,所以可能会过滤。

nmap -sF -A -T4 -Pn 192.168.52.143

nmap -sA -A -T4 -Pn 192.168.52.143

final主要在四次挥手时发送通知结束的包,ack一般是三次握手时的确认包,这种后半连接类型防火情一般貌似不会拦截。

如果防火墙限制了该主机某些系统程序端口数据的出入,那也是探测不出端口具体的开放情况的。不要小看防火墙。

 

浏览器尝试访问80 端口:

 

 

 是个php探针,phpstudy集成环境,并看到了web服务的绝对路径,系统内核等多个信息。首页不是一个具体的业务系统,看是否存在后台管理或者其他配置文件的未授权读取。

因此尝试使用gobuster对子目录的信息收集。

gobuster  dir  -u  http://192.168.52.143 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -x  "php,zip,rar,html"

指定有意义的后缀文件php,zip,rar,html等

 

 太多403了,加上参数 -s  200 过滤出200, 301, 302

 Gobuster的字典扫包有时会没什么结果,可能是这模块的字典不够本土地道哈哈,kali自带,不知道是不是国外哪位大牛开发的,不太了解我们这边本土命名规则,所以拷贝御剑的字典过来试试,御剑老牌子了。

 果然扫到一个包beifen,好本土的命名。立马下载。解压发现是yxcms,目录结构,源码都有了。审计走一波??

 

不着急,之前扫到的几个php页面,也尝试访问一下

phpinfodisable_functions  毫无限制。。。

 

 

  phpmyadmin : 

二、漏洞挖掘

Yxcms后台管理登陆页面大概率是需要用户密码的,所以如果能在phpmyadmin进入数据库,找到用户名密码就方便了。这边可以尝试能不能登陆进去。

尝试弱口令登陆: 123123456abcabc123abcdadminroot

O了: 密码是root,能猜几下就猜,猜不到也可以bp爆破一波。这里也是闲着,那bp也来一波,多练总是好的。

 

咦?神了,正确的和错误的长度还一样了。不知道密码情况下,这就不好区分了。

这响应包也没有数据啊。

浏览器看了下也是没有数据返回的,这bp这招也不好使了?

 从上面两个图可以看出,输入正确密码后会重定向302,所以post请求没有返回响应数据,而是跳转到了下面一个新的get请求里面。bp没有跟踪到这个请求,所以页面的长度几乎没有变化。

那我这弱口令也是运气好试出来的?

其实bp也有跟随跳转功能的,需要在Intruderoption设置一下。

这样有跳转的就会跟随,然后页面返回长度就会有所变化。

爆破本质上也是相当于脚本遍历功能,这里也是闲着就自己写了个小脚本爬虫,测试还测试,代码还是要练的呀哈哈。

源码:

审查元素发现登陆框页面提交时会有一个token随机,为了防csrf吧,所以我们要先获取到这个token,爆破之前请求下登陆页,然后解析出来就可以了,这里使用xpath,比较方便(同时正则有些忘了哈哈)。

爆破逻辑:

准备好post请求提交的参数,因为涉及到重定向跳转,为了跟随session,这里使用requests.session来跟踪请求状态。注意了,phpmyadmin最新版本好像是4.8.x,提交参数多了一个set_session的字段,需要多处理一些数据,这里还是旧版的。

测试到Python脚本 while循环ctrl + c 无法中断退出,为了方便退出,debug到脚本在运行时使用ctrl + c 会触发键盘中断异常,就在这异常里处理跳出循环就好。

 这里只是遍历密码本,用户名默认用的root,有必要的爆用户名的话在外面加多一层循环读取用户名本就可以了,这就不累赘了。

运行结果:

登陆phpmyadmin,看到了yxcms管理员密码:

 尝试somd5解密

 

这密码看起来很奇怪,一点都不规则,猜测应该不是最终密码,cmd5的网站自动检测了要钱,噗。但是密码看起来不是常规的长度,cmd5的结果估计也是有问题的。

找到后台地址,登陆看看(这里后台页面居然给出了密码...我擦,但是这种情况太少了实际肯定是没有密码显示的,为了锻炼自己那就当没看到吧)

 

使用前面somd5猜解的那段字符登陆失败:

 

 

 

 通过数据表数据看这个账户显然是没有锁定的,所以somd5猜解的密码有问题,看来还得看下代码怎么写的。

 

 结合上图,通过new的方式创建表模型的函数:

 

查询语句,直接查了,没有做安全性过滤,存在

  找到登陆函数:

 

 找到加密函数:

if($acc['password']!=codepwd($password)就是这里:

  擦咧,是md5之后截取再md5,这反推一层之后只能拿到部分,无法反推出第二层。

在审计过程中发现是可以注入的,但是这里没办法直接admin’--的方式,因为它源码里有单独判断密码是否正确。所以密码是无法绕过的。

所以又要尝试爆破了? emmm.......

前面用到的脚本改改就行,但是这里省事就用bp

 通过两次修改密码发现提示一样,这里存在验证码重用的漏洞,不刷新,那么就可以直接爆破了。如果刷新的话,就改成脚本爆破,爬虫去识别验证码。

是123456,这长度,还有下面的两个请求,两个响应。跳转的显著特征啊。

成功登陆:

 

 这里顺便拓展一下思路吧,爆破不一定能成功,而且很多时候也是不成功的,如果说管理员设置的密码比较奇怪,之前遇到过中文密码,你怎么换字典都几乎是没用的,就不存在弱口令了,所以如果爆破常规弱口令不行,那就要尝试别的思路。

1、最快的方法,查找该cms版本的exp,论坛,github都可以,不过找到的exp还是要自己看看,有些exp可能有恶意操作,检查一下源码为好。  

2、开源代码的前提下,前面的审计也发现是sql注入的,可以构造payload,写shellselect xxx into outfile或者dumpfile等等,不过这个需要mysql 文件导入导出有权限。

3、继续审计源码,看有没有文件包含,有机会读取到一些配置信息,文件,图片上传,或者未授权上传等,其他的可以getshell的。

4、可以看下子目录,页面源码等这些地方是否有js接口,有些是未授权访问的或者有信息泄露的,测试账号什么的。

5、前面phpmyAdmin进去还有一种方式写shell就是日志写shell。 开启全局日志,保存日志文件为php文件,然后select一句话,一句话作为查询日志自动被写入该php文件了,跟redis getshell一个原理。

这些都算是常规的思路吧,这里也总结复习下。

三、GetWebshell

在模板里插入php标签,首页访问就可以啦。

 

 权限很高啊,直接管理员了...很多时候是需要提权exp的。有些时候会遇到命令都无法执行,那就要想办法突破disable_funciton

 

 

 根据已开启服务,没看到有杀毒软件相关服务,看来不需要做免杀逃避。还可以使用命令systeminfo收集更多信息。

Msfvenom生成后门连接器,上传执行反弹shell得到meterpreter

 

 

 

发现了内网72段。

四、特权提升

使用msf自带的漏洞查找提权模块试试

 

 hashdump查看hash密码

 

使用mimikatz获取内存中的明文

明文密码,还是域管理员密码,那,嘻嘻嘻

五、横向渗透

把域内所有机子开起来了,物理机机子配置不行,太卡了。

 内网信息收集:

 

 

 

 可能这win7设置了访问不能访问共享,也可能不在AD活动目录,也可能这个域环境的配置问题,感觉这个域环境怪怪的。当然现在也可以通过新建用户然后rdp过去探测,但是感觉有点麻烦,先试试别的思路。

 查看当前被控机子所处网段:

 Msf添加路由跨网段扫描:

 

 设置代理:    vi /etc/proxychains4.conf

 

 

 可以看到代理服务已经监听到12366端口:

 

 使用proxychains  +  nmap  +  msf  session跨网段扫描内网主机

 

 哈哈,139445在列 我又有了域管密码,smb走一波?

这里值得注意的是我扫描使用-sT,tcp的完整连接扫描,会留下连接日志,作为红队,这样做不够隐秘,如果拿不下目标机子,没法清理日志,就泄露踪影了,

最好就是切换到CS会话去扫。

这里还有个点挺奇怪,代理nmap加上-sV可以,再加-O就启动不了了,不知道是否参数冲突,待解。

 

 没有-O,暂时看不到系统的版本,继续收集信息

 

 发现这台win7上装有nmap,那就可脱离代理,在跳板机的shell大方扫描了

 

找到nmap所在地,执行

nmap -sV -O -Pn 192.168.72.141

 探测到系统可能是xp或者2003,结合iis,基本肯定是2003.

win2008及其以下级别系统,有个很出名的08_067,可以rce哈哈,试试

如果可以正向,我一般趋向于正向,正向就是在目标机开端口绑定shell,反弹shell的话是在kali本机开端口监听,目标机子把shell交过来,考虑跨网段需要

做映射来端口转发,就比较麻烦。

 正向连接结果:

 

 

看来这个exploit不好使这次,又尝试了ms17_010系列的几个,不是导致目标机蓝屏就是无法生成session。这些热门选手这次都不给力啊。

这里顺便再提一下,正向连接和反弹连接的选择,如果目标机防火墙没有限制端口开启,那就可以在目标机开个端口绑定shell,如果目标开启端口需要防火墙设置,而又没有足够的权限执行命令,那反弹连接也是突破防火墙的方式之一,貌似一般内网防火墙限进不限出,如果可以上传msfvenom或者cs生成的后门连接,反弹连接还是很不错的。就在win7跳板机这里复习下这几条命令。

因为跨网段,所以反弹shell时,需要做一个内网的转发,在已拿下的跳板机win7设置端口映射,把72.141反弹到72.12812347端口的流量转发到kali  52.129机子的监听端口,方便记忆设置成同为12347

 转发规则

 netsh interface portproxy add v4tov4 listenport=12347 listenaddress=192.168.72.128 connectport=12347 connectaddress=192.168.52.129

 

 设置当前跳板机防火墙开放12347端口的进出

netsh advfirewall firewall add rule name="20033" protocol=TCP dir=out localport=12347 action=allow

netsh advfirewall firewall add rule name="20023" protocol=TCP dir=in localport=12347 action=allow

以前看过不少帖子在内网漫游时是直接把防火墙关了,噗,这红蓝对抗时候,关防火墙这么大动静,蓝方肯定发现的咯。

回归主题

 08_067, ms17_010都不好使,那就再换psexec试试。

 

 拿到一个meter,但是很多常用命令,比如ipconfig, getuid都没有,还真是少见。

 

 域渗透神器CS登场试试,派生个会话给CS看看

 

 

 上图之所以没看到\\QWA,是因为机子太卡了,我就先关了一个,所以net view只看到了一台。

再次把所有机子开起来。

老规矩,收集下72网段机子的端口情况。

 

 

target:

 

 因为当前域环境的配置问题(特意去靶机确认了,这就符合网络拓扑图所示,只有两台真正在域内),目前确定的是138141机子是处于活动目录的域里,跳板机stu1win7)不在里面,所以net view只能看到两台机子。

 

 

 

现实中一开始肯定是不知道哪台是域控。

 

正常的域环境内,确定域控最快的方法之一就是net time了,域内的时间通常是由域控时间作为时间源服务,所以net time实际就是问域控要时间。

Net time 来取得域控时间,从而得到域控为138OWA

 run mimikatz得到明文密码记录之后,使用psexec来获得域控的会话,smb协议是基于共享的协议,域内环境通常都会开放共享为域用户读写文件,所以基于smb协议的服务,防火墙一般不会拦截,这就是常见的突破口。

 

域控会话上线了,还是system权限哈哈哈哈,如果要admin会话可以派生会话。

 同样的方式,上线系统为2003的域机子。

 查看2003相关进程:

 

 域控文件浏览:

 查看域控的其他方式 net dclist:

 

 

 上面都是一些常规的命令来信息收集,实际上也可以通过导入powershell的脚本文件来信息收集,或者提升权限,比如比较出名的PowerTools等。

 

 整体环境的拓扑图:

 

 

 

 至此,整个域环境梳理出来了。

这次主要还是一开始就拿到了域管用户名密码,所以后面配合smb思路比较直接吧,中间也有遇到一些报错的情况,转换了一些想法,得以进行下去。通常不会那么顺利拿到这关键的信息。那么在内网探测时,还可以有如下的方式尝试:

1.可以多收集到域内机子开启的各类服务,端口,比如,redisstruct2nginxspring等这些数据库,中间件,后台框架相关漏洞,结合这些服务已有的漏洞来进行突破测试

2.留意当前域用户进程里是否有域管理的进程,可以steal_token一波,然后以高权限去dir域内其他机子的共享路径,copy 后门连接器到目标靶机,可以执行上线一波。

3.如果能拿到krbtgthash,就可以制作黄金票据,以这个票据作为登陆凭证去访问域内机子,但是这个有是时效性,有效期是8个小时好像。

4.没有明文拿到域管hash也可做pth登陆凭证,也是做高权限的访问,还有make token,这次靶机使用的psexec就是基于make token

 

好了这次的测试就到这里,既是练习,也是发散思路复习学过的东西。

 

posted @ 2021-06-24 17:36  时光苒苒  阅读(573)  评论(0)    收藏  举报