前言

本文是利用非常规手段突破安全战略的内部网渗透记录。

[查看资料]

环境概述说明

web打点getshell、webshell是蝎子,权限是。是net,权限很低,服务器是server 2016,目标不落网!

安装了防病毒软件(奇摩、微软附带的WD),ASMI默认打开,对power shell有特殊的政策限制。由于Tcp、icmp、DNS协议不通,无法直接与公共网络的Cs服务器端连接(内部网的cs服务器端也无法连接),公共网络也无法访问大象Web服务(纯Intranet Web服务)非常严格的出入境战略。

入站规则:只有http允许入站,只有一个80、8080两个http端口可以在内部网系统上正常访问

出站规则:不允许非8080端口外部通信。

用手画一张拓扑图,马上就能看到了。

为什么连接到cs?

Webshell权限太低、太有限、需要在线cs访问。这是因为cs可以使用反射dll加载PE程序,从而在执行mimikatz密码捕获等敏感任务时发挥特定的Bypass作用。

由于Webshell权限太低,本地转储LSA,然后转储dumpHash不起作用。要转储LSA,您必须至少具有管理员权限。

另外,由于大象网络环境比较苛刻,所有非http协议的通信都被防火墙拦截,无法正确创建具有交互功能的外壳。

坑点1:使用Pystinger反向代理联机cs

查看相关资料后发现,大部分互联网文章通过Pystinger实现内部网反向代理,使用http协议将大象系统端口映射到cs服务器侦听端口,只能访问web服务,如果不使用internet,则可以使cs联机。

但是这里有个问题。公共网络cs服务器不能访问目标的web服务。由于只有同一内部网中的系统可以访问大象web服务,因此不能直接在服务器上安装pystinger,将大象系统端口反向代理到公共网络cs侦听端口。

此处使用的解决方案是在执行pystinger倒数第二代任务之前,在本地直接实施cs服务。

1.在本地启动cs服务

2.通常,使用监听端口60020配置基于reserver的侦听器(上图中的6002少0).)

3.上传到大象服务器,访问:

4.上传到大象服务器并运行以下命令:

开始d : \ 0.0.0.0

5.跳板机械的本地实现

命令:

stinger_client -w 0.0.0.0 -p 4002

6.免费处理一下resever_bind,上传至目标并执行不上线,执行一下tasklist发现已经执行了,就是不上线,pystinger报错。


  1. 最后的结果是,报错,具体原因不知道,可能是目标web环境有问题,可能是reserver型shell通讯有问题。
    遂Pystinger反代上线cs失败。

坑点二:正向代理+正向shell上线公网CS


既然反向代理行不通,那就用正向代理,然后采用正向shell来连接。
目标机器不出网,本机能出网,可通过本机当作跳板机将目标机器的正向shell带出来。
原理图:

常见的http隧道工具Neo-reGeorg、reGeorg(应该这两款用得比较多)能适用于大多数网络环境,但是在这里就是不行,会出现跳板机直接与cs服务器断开的情况,而cs的connect正向连接请求是由跳板机的beacon发出的,你只能将beacon代理进socks隧道才能使connect请求能连接正向shell的监听端口,但因为目标机不出网,在跳板机的beacon进入代理隧道之后是无法连接到处于公网的cs服务端的,所以只能是端口对端口映射,而不能用http协议搭建的socks隧道(我猜的)。

所以这里将使用ABPTTS进行http隧道搭建。

  • ABPTTS优点
    对抗特征检测十分优秀
    创建的隧道十分稳定

1、 配置abptts:

python ab -o server \\生成服务端脚本,初始化。

2、 上传server脚本到目标机器

坑点三:文件上传


这个地方冰蝎、大马都传文件传不上去,只能用哥斯拉的大文件上传把ab传了上去(后面exe的上传也是用的哥斯拉的大文件上传功能)exe文件落地也是个坑,在正常环境中,我们可以用certutil、powershell等方法下载exe到目标上,但是这台机器他不出网,因为出站规则的原因,甚至都无法访问内网中其他机器的web服务器,最后用哥斯拉的大文件上传解决了这个问题。

上传完成之后的ab地址:http://10.1.1.1:8080/ab
访问一下ab,页面回显一长串密文说明abptts客户端正常

3、 启动http隧道

Python ab -c server -u "http://10.1.1.1:8080/ab"-f 127.0.0.1:7777

这里的127.0.0.1:7777是本机端口,127.0.0.1:1111是目标机的端口
意思是将目标机的1111端口通过http隧道映射至本机的7777端口,你向本地的7777端口发送的请求都将转发至目标机的1111端口。

坑点四:正向bind免杀

Cs的正向shell介绍(beacon tcp)


正向shell的作用原理是,bind在目标机器上开放一个监听端口,等待其他主机来访问这个监听端口,子Beacon从父Beacon接受请求,而不是直接与cs服务端通讯。
而反向shell则是,由目标发起请求访问cs服务端的监听端口

1.创建一个正向监听器:

2.生成正向载荷(在生成正向载荷的时候只能选择stageless Beacon ):

为什么使用正向shell:


假若目标机器的出站规则十分严格且目标也不出网,反向shell在这种情况下则无法正常与cs服务端保持通讯。
假若采用正向shell的话,在无论他的入站规则多严格,他也不会去阻止本地端口之间的通讯,这样就能绕过严格的出入站规则策略。

  • 通讯过程:

    Cs服务端(公网)--> 跳板机(父baecon)--> 7777端口--> 目标8080端口(http隧道)--> 目标1111端口(子baecon)

  • Bypass分析

    在目标机的防火墙眼中是本地的8080端口与本地的1111端口通讯,而攻击机与目标的8080端口则是正常被允许的交互行为,从而bypass了出入站策略。

正向Bind免杀

上面有提到过目标上有火绒和WD两款杀毒,直接上传正向shell肯定是会被秒杀的,本地测试报毒。

Reserver_Bind免杀较为简单,直接生成shellcode,通过分离免杀等方法加载shellcode。
但是正向shell不能生成shellcode,它属于stageless型Beacon,而stageless型Beacon无法生成shellcode,所以无法通过常规的分离式免杀来绕过杀毒。

  • 提一下stager与stagerless的区别:
    stager和stagerless型beacon
  • Stager型:只包含简单的加载逻辑部分,stager通过将c2的payload加载进内存从而实现pe加载,这种加载方式也就是反射型DLL加载。
  • Stagerless型:stager+payload全写死在木马中,相比较于Stager型体积更大,特征码更明显。
    由下图可以看到,在生成payload的时候没有正向bind监听器这个选项,只有Reserver监听器选项。

  • 既然无法通过混淆加载器的方法来免杀,那就加强壳+定位特征码的方法来免杀。

    国内大部分杀软估计都是基于模糊hash算法的特征码查杀,对代码层强混淆几乎就能绕过大部分杀毒,强壳(Aspack、upx、Safengine、VMPoject,实测Aspack、upx效果不是很好)。
    主要用到的工具:VirTe Resource Hacker +SafengineShielden+upx
  • VirTe:
    自动化定位特征码,因为不会汇编,所以就直接用010Editor修改特征码的十六进制来破环特征码。

  • 其他修改特征码的方法: 替换汇编函数、调换指令顺序、指令跳转。
    注意:在修改完特征码之后,要测试exe还能不能正常运行。
  • SafengineShielden
    反LPK注入、反调试器附加、反内存转储选上,复杂度拉满,虚拟机检测不要打勾。

  • 最后加一层upx壳(upx壳视情况而定,有时候加了upx壳反而会被杀),Resource Hacker加入一个任意图标文件,成功过掉火绒。

目标机运行正向shell

上传正向bind,在冰蝎上执行 D:/beacon_se.exe,可以看到木马在目标机上开启了1111端口,我们通过http隧道去连接这个位于目标机1111端口上的正向bind。

本机(跳板)正向连接shell

本机(攻击者)上线cs作为跳板机,然后在本机shell中执行

connect 127.0.0.1 7777

成功正向上线 10.1.1.1,但是上线的shell权限极低,mimikatz无法运行,因为正向shell的原因,就算提权成功也无法直接反弹shell,而且因为目标系统是2016,插件中的常见提权脚本都会提权失败。

PrintSpoofer提权

上传Prin至目标主机。

执行如下命令,以system的权限运行我的正向shell,那么我将得到一个system权限的shell,而不是asp的低权限shell。

C:\Windows\Temp\PrintSpoofer -c D:/1111_se.exe

Netstat -ano确认一下有没有在本地开放一个1111端口。

正向shell正常运行,跳板机再次连接正向bind。

connect 127.0.0.1 7777


成功提权,渗透至此已基本结束战斗,得到一个system权限的正向shell,mimikatz抓密码,无明文,但能拿到hash。

绕过杀毒添加用户&&登录桌面

Net1改名添加用户,报错,必然是被火绒拦截了,上杀器直接驱动层干杀软。


本地实验能干掉,但是不知道为什么在目标上就实现不了。

换思路:火绒、360等国内杀毒拦截添加用户命令往往只针对net、net1这俩进程,并没有hook底层函数,所以我们只需要不去执行net、net1而去直接调用底层函数就能绕过杀毒的监控。
原理不去深度剖析了,网上有文章。

  • Windows API 添加管理员用户
    项目地址:
    绕过杀毒添加上了一个用户,接下来就是常规操作,用打印机漏洞提权,利用sys权限切换到adminsitrator用户的桌面。
  • hash传递攻击
    再或者就是hash传递,直接上adminsitrator的桌面。sekurlsa::pth /user:Administrator /domain:用户名 /ntlm:194f34439dd27846db00c6723036da6b "/run:mstsc.exe /restrictedadmin"194f34439dd27846db00c6723036da6b
    Hash传递的好处就是,动静更小,不需要新建用户,留下的痕迹更少,降低攻击者被发现的概率。
    如下图:

跟上面操作一样,把对方的3389端口反向代理至本地,连接之。
最后附上登录的桌面的截图,登上来就是一个backstab的报错,这刚好就解释了之前在干火绒的时候,为什么没有kill成功(因为程序兼容性问题导致崩溃了)。

总结

总结一下整个渗透过程中有趣的几个点,整个流程大概花了两天的时间,主要是有几个地方踩坑了。

  1. 第一点:写http隧道马的时候,用哥斯拉直接编辑新建一个隧道马,但是连接的时候报错,可能是哥斯拉出现了数据断流,导致写进去的文件缺东西了,后来直接把隧道马传上去就不报错了。
  2. 第二点:网上的例子大多数都用pystinger反代cs服务端来处理这种不出网上线cs的情况,但是可能因为目标网络环境的不一样导致各种玄学报错,所以Pystinger的局限性还是很大的,而且Pystinger客户端还不免杀。
  3. 第三点:正向shell免杀,不多说的,cs的无阶段木马都是这样,无法通过混淆加载器的方法免杀。
  4. 第四点:正向shell的提权,cs插件提权只能反弹一个反射型的shell,无法反弹正向shell。
  5. 第五点:有趣的是,无阶段木马是能生成powershell脚本的,而powershell脚本是很好混淆免杀的,但是目标是server2016,默认开启AMSI,混淆免杀在它面前形同虚设。(要是目标是2012、2008系统就可以通过powershell正向bind上线)

结尾

本还可以尝试msf的正向bind,自带混淆器,效果可能更好。
本次渗透是在获得授权的真实环境中进行的。
在利用pystinger反向代理套反向shell失败的情况下,改用正向代理中套正向shell来上线不出网主机。

最后

关注我,持续更新!私我获取【网络安全学习资料·攻略】

1.《【cs16僵尸插件】内部网渗透使用非传统手段突破安全战略在线CS》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【cs16僵尸插件】内部网渗透使用非传统手段突破安全战略在线CS》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2565927.html