内网渗透--对不出网目标的打法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内网渗透--对不出网目标的打法相关的知识,希望对你有一定的参考价值。

参考技术A 配置网络

在VM虚拟机中按照下边的网络拓扑进行配置网络。网络拓扑图如下:

win7具有双网卡,其中外网ip是192.168.8.133,内网网段是52。三台机器彼此互通,但是win server 2008和win2003不通外网。用我mac作为攻击机,来对这个靶场环境进行渗透测试。

外网打点

在win7这台靶机上,使用phpStudy让网站可以运行起来。在攻击机上,访问  http://192.168.8.133  可以看到是一个phpStudy 探针。对这网站进行渗透,因为本文主要写在内网渗透过程中对不出网主机的渗透,所以此处外网打点就不写的很详细了。

针对此靶场进行外网渗透拿权限大致有这几种方法:

通过phpmyadmin弱口令,进入phpmyadmin后台。然后知识点就变成了,通过phpmyadmin进行getshell,这个点又分为,得到网站绝对路径后,使用select into outfile的方式写shell和利用日志写shell。在此处,我是使用日志写shell的方法拿到权限。因为secure_file_priv配置为null,禁止修改目录下的文件,也就不能使用into outfile的方式写入shell。

通过目录扫描可以扫出beifen.rar,备份文件。在源码中可以找到登陆后台的账号密码:admin/123456和登陆路径/index.php?r=admin,在前台模板文件中添加一句话木马连接也可获取shell。

获得webshell的信息收集

通过外网打点获得的webshell,可以进行一波信息收集,摸清我是谁?我在哪?有没有内网环境?有没有杀软?通过拿到webshell后的信息收集的结果来评估一下有没有必要继续深入或者初步了解继续深入的话需要哪些手段。

我是谁?

蚁剑已经给出基础信息

我在哪?

使用ipconfig /all 看一下网络信息

目标有两个网卡,并且存在域环境,那么就有打它内网的必要了。

有没有杀软?

tasklist查看一下进程信息

根据进程查一下是否有杀软

目标没有使用杀软,还有域环境那么让它直接cs上线。

内网渗透

cs上线

内网信息收集

信息收集每个人都有自己的习惯,信息收集的顺序和信息收集的项目也都不太一样,只要根据自己的习惯和嗅觉,针对目标具体情况进行收集,以求尽快的拿下目标就好。信息收集的越全面突破口也就会越多,考虑到篇幅和文章内容匹配度等因素,此处并没有写出大量信息收集方法。

使用cs自带的net view查看域信息。

使用cs自带功能进行端口扫描,分别对8和52两个网段进行扫描进行完这两个步骤以后,cs会把扫到的目标列出来。

因为拿到的是管理员权限,可以先抓一波密码。用 cs 的 hashdump 读内存密码,用 mimikatz 读注册表密码:logonpasswords。

此处打码的地方是因为配置靶机登陆时靶机提示重置密码,我给靶机改了个包含个人信息的密码。蠢哭。拿到密码后,目标主机没有开启防火墙,可以使用cs自带的psexec做一波横向,因为抓到很多域中机器密码,域控密码也抓到了。

内网横向(通过登录凭证)

这个靶机设置的比较简单,抓到密码后,因为抓到了域控登陆的凭证,那么使用psexec即可横向内网所有机器。因为,另外两台内网的机器不出网,那么就到了本文着重练习的点了,打不出网的机器。

不出网机器上线一般有以下几种方式:

使用smb beacon

配置listener通过HTTP代理上线

使用pystinger搭建socks4代理

这几种方式之前有师傅也在先知写过 《不出网主机上线方法》 。此处我采用的SMB beacon这个方法。

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。

首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线

使用条件

具有 SMB Beacon 的主机必须接受 445 端口上的连接。

只能链接由同一个 Cobalt Strike 实例管理的 Beacon。

利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。

使用方法:

1.建立smb的listener

2.在cs中使用psexec进行横向移动,选择现有的beacon作为跳板,这里凭据必须是administrator ,即拥有目标主机管理员权限

3.连接成功,可以看到smb beacon上线的主机右侧有∞∞标识

使用这种方法上线的机器,主要是通过出网机作为一个中间人,不出网主机成功上线后,如果出网机一断开,这个不出网主机也会断。

内网横向(通过ms-17010)

在拿下win7的时候,可以给它传一个fscan,给win7做一个内网大保健。上传fscan后,运行扫一下内网。

发现存在ms17010。

ms17010常见的几种打法:

msf

ladon/ladon_ms17010

从msf分离出的exe

nessus里的exe

cs插件

这几种打法,我在这个环境中都做过尝试。过程就不一一叙述了,直接说我测试的结果。msf是最稳定的,但是打起来有稍许的麻烦因为要设置监听模块和选择攻击模块等配置。ladon_ms17010方便但是不太稳有时候会打不成功。cs插件也不稳,并且在这种不出网网络不稳定的情况下成功率会变的更低。

这个图片的ip可能跟上边配置符不起来,因为我在测试过程中,网断过几次,ip就变了。所以,在打的时候,如果ladon和分离出的exe没有打成,不要轻易放弃,用msf在打打试试,毕竟工具就是工具,不能过分依赖某个工具。

在这种不出网的情况下,可以优先考虑使用从msf分离出的exe和ladon_ms17010来打,打成功会直接通过自定义的dll新建一个用户并加入管理员组,开启3389端口。根据实际情况,可考虑在合适的时间段和条件下直接远程登入,翻一下敏感数据,往往会因为运维人员的很多“好习惯”而给渗透带来很多便利,比如说“密码本.txt”。

msf打不出网机器的ms17010

msf在单兵作战的时候还是很稳定很香的。首先,让出网机器先在msf上线,可以用cs直接传递会话,或者生成个msf马直接运行一下。在这的方法就很多了。win7在msf上线后,因为我们已经提前知道了,存在52这个不出网的段,那么就需要在msf中添加路由。

查看路由

run get_local_subnets

添加路由

run autoroute -s 192.168.52.0/24

查看添加的路由

run autoroute -p

把shell切换到后台,然后使用ms17010模块进行漏洞利用,监听时使用正向监听,即可

小贴士:

漏洞检测方法:

use auxiliary/scanner/smb/smb_ms17_010

之后设置一下目标ip和线程即可,这里因为已经扫出存在漏洞的机器了,也就不在叙述。

漏洞利用常使用的是:

auxiliary/admin/smb/ms17_010_command

exploit/windows/smb/ms17_010_eternalblue

exploit/windows/smb/ms17_010_psexec

这里的第一个和第三个模块需要目标开启命名管道,并且比较稳定。第二个模块只要存在漏洞即可,但是会有概率把目标打蓝屏,而且杀软拦截也会比较严格,如果有杀软就基本可以放弃这个模块了。

在打ms17010的时候,不妨使用auxiliary/admin/smb/ms17_010_command模块探测一下是否可以使用命名管道。

use auxiliary/admin/smb/ms17_010_commandsetrhosts192.168.164.156192.168.164.161setcommandtasklistshow optionsrun

如果命令执行成功的话就可以优先考虑

auxiliary/admin/smb/ms17_010_commandexploit/windows/smb/ms17_010_psexec

这两个模块进行利用。

我在上边打得时候因为目标机器没有杀软就直接使用exploit/windows/smb/ms17_010_eternalblue来打了,期间为了测试打过多次,确实出现了把目标机器打重启的情况。

总结

这个靶场设计的技能点比较基础,外网打点获得shell后,直接可以通过cs上线,在管理员权限下,抓取密码,新建一个smb beacon然后使用psexec对内网两台不出网的机器进行横向。

如何用内网渗透突破安全策略

前言

本文为一篇利用非常规手段突破安全策略的内网渗透记录

环境简述&说明

  • web打点getshell,webshell是冰蝎,权限为.net,权限很低,服务器为server 2016,目标不出网!

  • 装有杀毒软件(火绒、微软自带的WD),ASMI默认开启,而且对power shell有特殊策略限制。

  • Tcp、icmp、DNS协议不通,无法直接与公网的cs服务端建立连接,(内网的cs服务端也无法与其建立连接)公网也无法访问目标web服务(纯内网web服务)
  • 极其严格的出入站策略
    入站规则:只有http允许入站,只有一个80、8080两http端口能供内网机器正常访问
    出站规则:不允许非8080端口对外通讯。
    手绘了一张拓扑图,将就着看一下。

为了感谢广大读者伙伴的支持,准备了以下福利给到大家:
【一>所有资源获取<一】
1、200多本网络安全系列电子书(该有的都有了)
2、全套工具包(最全中文版,想用哪个用哪个)
3、100份src源码技术文档(项目学习不停,实践得真知)
4、网络安全基础入门、Linux、web安全、攻防方面的视频(2021最新版)
5、网络安全学习路线(告别不入流的学习)
6、ctf夺旗赛解析(题目解析实战操作)

为什么要上线cs

webshell权限太低,限制性大,需要上线cs提权,因为cs是采用反射dll来加载pe程序,从而在执行一些敏感操作的时候能起到一定的bypass作用,例如mimikatz抓密码等操作。
像转储LSA到本地然后再dumphash都是行不通的,因为webshell权限太低了,转储LSA至少得管理员权限。
而且目标网络环境较为苛刻,任何非http协议的通讯都会被防火墙拦截,无法正常建立一个具有交互功能的shell。

坑点一:利用Pystinger反向代理上线cs

在查阅相关资料后,发现网上大部分文章都通过Pystinger来实现内网反向代理,利用http协议将目标机器端口映射至cs服务端监听端口,能在只能访问web服务且不出网的情况下可以使其上线cs。
但是这里有个问题,公网cs服务器无法访问目标的web服务,只有同处于在一个内网的机器才能访问目标web服务,所以无法直接在服务器上搭建pystinger将目标机端口反向代理至公网cs监听端口上。
这里采用的解决方法是直接在本机上搭建一个cs服务,然后再进行pystinger反代操作。

  1. 本地起一个cs服务

  1. 常规配置reserver型监听器,监听端口60020
  2. proxy.aspx上传至目标服务器,访问:

4.stinger_server.exe 上传到目标服务器,执行命令:

start D:\\stinger_server.exe 0.0.0.0

5.跳板机本地执行命令:

stinger_client -w http://10.1.1.1:8080/2.aspx-l 0.0.0.0 -p 4002

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

最后的结果是,报错,具体原因不知道,可能是目标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 abpttsfactory.py -o server \\\\生成服务端脚本,初始化。

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

坑点三:文件上传

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

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

3、 启动http隧道

Python abpttsclient.py -c server/config.txt -u "http://10.1.1.1:8080/abptts.aspx"-f 127.0.0.1:7777/127.0.0.1:1111

这里的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,所以无法通过常规的分离式免杀来绕过杀毒。

  • 提一下stagerstagerless的区别:
    stager和stagerless型beacon

  • Stager型:只包含简单的加载逻辑部分,stager通过将c2的payload加载进内存从而实现pe加载,这种加载方式也就是反射型DLL加载。

  • Stagerless型:stager+payload全写死在木马中,相比较于Stager型体积更大,特征码更明显。
    由下图可以看到,在生成payload的时候没有正向bind监听器这个选项,只有Reserver监听器选项。

    既然无法通过混淆加载器的方法来免杀,那就加强壳+定位特征码的方法来免杀。
    国内大部分杀软估计都是基于模糊hash算法的特征码查杀,对代码层强混淆几乎就能绕过大部分杀毒,强壳(ASPack、upx、Safengine、VMPoject,实测Aspack、upx效果不是很好)。
    主要用到的工具:VirTest5.0+ Resource Hacker +SafengineShielden+upx

  • VirTest5.0:
    自动化定位特征码,因为不会汇编,所以就直接用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提权

上传PrintSpoofer.exe至目标主机。

执行如下命令,以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等国内杀毒拦截添加用户命令往往只针对netnet1这俩进程,并没有hook底层函数,所以我们只需要不去执行net、net1而去直接调用底层函数就能绕过杀毒的监控。
原理不去深度刨析了
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上线)

以上是关于内网渗透--对不出网目标的打法的主要内容,如果未能解决你的问题,请参考以下文章

如何用内网渗透突破安全策略

内网渗透系列:内网穿透(隧道)学习

内网渗透系列:内网穿透(隧道)学习

奇安信技术总监熬夜总结,全网最全内网渗透姿势!

奇安信技术总监熬夜总结,全网最全内网渗透姿势!

内网渗透系列:内网隧道之pingtunnel