内网渗透
端口转发
需要三个主机,Windows7、Windows2016、kali
Windows7为内网主机
Windows2016为跳板机
kali为攻击机
使用到的工具
netsh、MSF
我们先在Windows7上开启一个80服务,而这个80服务只能由Windows2016访问,kali不能访问
我们使用netsh进行端口转发,这条命令是在Windows2016上执行的,目的就是在Windows2016上开启一个监听端口,将其流量发送至Windows7的80端口
一旦命令执行成功,我们就可以在kali上访问Windows7的80服务了(Windows2016 IP + 监听端口)
我们还可以使用MSF,前提是能够将木马上传至Windows2016上
首先我们制作一个木马,上传到Windows2016上,使其上线
上线之后我们会在kali中进入meterpreter,也就是上线成功的一个标志,然后输入shell,将Windoiws2016的终端返回到我们的kali上
接着就是和上面一样的操作,继续往下执行就可以了
当然我们也可以在meterpreter中直接输入portfwd add -l 8889 -r 192.168.209.129 -p 80,然后直接在kali上访问localhost:8889即可访问到Windows7的80服务
当然使用MSF的时候不仅可以进行反向连接,还可以进行正向连接
开启一个Windows2003主机,将其藏在内网当中去
我们先制作一个正向连接的木马程序,然后将其上传到Windows2016上去,执行木马程序,使其上线
然后去添加一个内网的路由,让我们的MSF进入到内网当中去
既然我们的MSF进入到了内网当中,我们可以让木马在后台进行执行,然后在MSF里面进行端口扫描,看看有啥端口开放,接着使用arp -a去看一下内网中还有啥主机,发现有一台Windows2003,我们可以使用MSF框架中的端口扫描对该主机进行扫描,将开放的端口都扫描出来,既然是Windows2003,说明可能会存在永恒之蓝漏洞,然后通过永恒之蓝漏洞进行连接,注意的是paylaod要用正向连接的payload
使用正向连接而不使用反向连接的原因:kali可以通过植入木马到Windows2016上,然后通过Windows2016去访问Windows2003,但是Windows2003却无法去访问kali,反向连接不成功,所以我们使用正向连接
内网代理
上传木马到代理服务器上,然后让木马在后台进行执行,我们使用MSF里面的代理功能来做一个代理
做完代理之后还得添加路由,添加内网的一个路由,同时也添加攻击机的路由,其次在kali的浏览器上去配置代理然后才能去访问Windows7上的80服务
Meterpreter 的路由功能主要关注的是目标内网的流量如何通过跳板机转发
使用socks添加路由的目的:将 Kali 的流量通过代理服务器转发到目标内网。
当然,我们也可以配置Linux的全局代理,然后去修改配置文件,在最后一行添加socks 127.0.0.1 1080,然后在终端上执行命令,通过代理去访问Windows7的80服务
隧道通信
基于Neo-reGeorg
http正向隧道工具
首先在Windows2016上开启80服务,然后去kali上确认看看能否访问,然后进入Neo-reGeorg工具,使用命令去生成木马文件,将生成的木马文件上传至Windows2016上去,然后在本机上进行访问tunnel.php,接下来在kali上进行连接,连接之后还是建立了一个代理隧道,然后我们去kali的浏览器上去配置一个代理,然后就可以正常访问了
上述木马属于二进制,我们还可以生成一个PHP型的木马文件,然后上传到Windows2016上,运行让其上线,上线之后我们为其添加路由,添加路由的目的是能够让流量从kali到达目标内网,然后再使用MSF中的代理功能,开启一个代理,然后访问就可以了
我们基于PHP建立了TCP的连接,然后帮助我们基于TCP协议来做socks5的代理,然后在流量监听的时候只能监听到TCP协议的流量,不能监听到HTTP的流量
基于SSH的隧道通信
SSH本地转发
开启WIndows2016上的OpenSSH server,然后使用我们本机进行连接,我们可以执行命令,如下:
ssh -CfNg -L 8879:192.168.209.129:80 administrator@192.168.3.41
先进行远程连接,然后将8879端口上的流量转发到目标主机的80端口,然后就可以使用kali去访问Windows7的80端口
其实很简单,就是让远程的SSH的服务帮助我们做一个端口转发
SSH远程转发
我们可以先在Windows2016上执行如下命令
ssh -CfNg -R 3333:192.168.209.129:3306 kali@192.168.3.38 并输入kali的SSH密码
远程连接到kali,然后将kali本机的3333端口流量转发到目标主机的3306端口,然后就能访问成功了
内网隧道
EarthWorm的使用
正向代理
在Windows2016这台主机上使用这个工具,命令如下:
ew_for_win_32.exe -s ssocksd -l 1080
然后在kali浏览器上配置,配置的IP为windows2016这台主机的IP和1080端口
然后访问localhost:1080就能够访问了
反向代理
公网服务器上开启EarthWorm工具服务端,开放1080和8086端口,1080是代理端口,8086是通信端口,然后在Windows2016跳板机上启动客户端,和公网的8086端口进行通信,在kali的浏览器配置一个代理,代理的IP为公网IP,端口为1080,然后就可以成功访问localhost:1080
端口映射
就是将内网一台主机的端口映射到公网服务器或者其他机器上的某个端口,通过访问公网服务器的这个端口就能事项对内网目标端口的访问
CS免杀与应用开发
在公网服务器上开启CS的服务端,kali上开启CS的客户端,进入到CS的页面中,然后新建一个监听器,监听器建好之后,生成一个payload,然后将这段paylaod复制到我们的kali里面,接下来我们应该创建一个python文件,然后将这段shellcode进行加密处理,也同时将我们的加载器代码进行加密,然后将我们加密过的shellcode和加载器代码与他们的解密代码放在一个python文件当中,然后使用exec去执行这段加载器代码,上线成功,接着我们使用psinstall将python文件打包成一个exe应用程序,上传到火绒进行检查,如果没检查出来,说明加密的好
那我们如何去包装这个木马
我们可以通过python来开发一个简单的应用,然后将我们的代码引入进去,通过运行开发的应用来间接的去运行这个木马,然后在CS上线,更好的优化方式就是多几个线程,不要让线程一直被占用,从而导致无法运行我们的那个木马
网络分离免杀
打开公网服务器上的80服务,在公网服务器上开启CS的服务端,kali上开启CS的客户端,接下来的操作就是将我们生成的shellcode并将其放到我们的公网服务器上,同时也将我们的加载器代码放到我们的公网服务器上,然后做分离免杀,然后我们新建一个python文件,里面加入我们调用公网服务器资源的代码,然后使用exec去执行,但是需要注意的是,我们输入的shellcode必须得是二进制的,然后去执行这个python文件就可以上线成功了
因为我们输入的shellcode是字符串型的,而非二进制的,所以我们有两种方法将这个字符串型修改为二进制文件
第一种方法,进行格式化
第二种方法:将我们的shellcode在前面手工添加一个b,代表二进制文件,然后将我们的这个二进制文件读入到以bin结尾的文件中,然后去读取的时候也就变成二进制文件了,接着将其放入到公网服务器上即可,然后运行,看看是否上线成功
接着我们使用pyinstaller将其打包成一个exe应用程序,看看是否免杀
模拟DLL劫持技术
DLL劫持技术:在一个DLL文件中植入一个木马,将其模拟成一个被别的应用程序所调用的函数或者接口
就比如说我们使用python开发一个exe,使用这个应用程序去调用DLL中的函数,进而实现木马免杀和上线
C语言加载调用shellcode的几种方式
堆加载
申请内存加载
函数指针加载
ICMP隧道
icmpsh工具
icmpsh工具要替代本身系统的ping命令的应答程序
由于ping命令就是基于ICMP协议,所以我们要在本身系统关闭这个响应
在kali将服务端启动,并且将主机IP和目标IP输入进去,然后在Windows2016上启动客户端,kali这边就已经获取到了Windows2016的命令行了
PowerShell ICMP客户端
PowerShell ICMP客户端,可以运行在任意有PowerShell的环境中
在kali启动这个工具,目标系统进入到PowerShell,然后导入Invoke-PowerShellIcmp.psl这个模块,然后使用这个模块进行连接,这时候不出问题我们的kali就会获取到Windows2016的反弹shell
PingTunnel
三台操作机器,centos、kali、Windows2016、Windows7
我们首先在centos上运行ptunnel服务端,然后使用kali去连接,指定代理端口和目标IP和端口,连接上之后,就可以去访问centos的80服务,接着我们去kali浏览器配置代理,IP为本机,端口为监听端口,然后就可以去访问
同时也可以代理非HTTP端口,比如说mysql的3306端口,我们只需要在上面的基础上做一个简单的操作即可,就是将80端口修改为3306端口,然后去访问就能够访问到目标系统的mysql信息
面对内网面试官最爱问的问题:当某台机器不出网的时候,你会怎么办
其实在我们实验的过程中,我们的Windows7就是不出网机器,它不能上外网,也不能访问外网,因为我们ping百度的ping不通的,所以这就叫作不出网机器
不出网能不能使用端口映射
当然不能,端口映射是与公网服务器打交道,不出网的话就无法与公网服务器打交道
对于这种问题,我们有三个解决问题
第一个是内网路由,通过设置内网的路由,能够让流量知道如何从攻击机传输到内网
第二个是内网代理,通过设置代理,使用代理去访问内网,往内网里传输数据
第三个是通过跳板机进行端口转发
例如我们通过ICMP该怎么办
使用pingtunnel来做端口转发,与跳板机建立连接
那如果跳板机也无法访问到我们的windows7该怎么办
只能去找能够访问到Windows7的跳板机
DNS隧道
DNS隧道就是将其他协议的内容封装到DNS协议中,然后DNS响应和数据包完成传输数据的技术
支持直连模式和中继模式
直连模式:用户端直接与指定的目标DNS服务器建立连接
中继模式:通过迭代查询的方式而实现的中继DNS隧道
iodine既支持中继模式,同时也支持直连模式
iodine的原理:
通过在公网服务器上运行iodine的服务端,运行之后会新建一张虚拟网卡,而如果目标机器上运行iodine的客户端,目标主机上也会建立一张新的虚拟网卡,至此DNS隧道建立成功,而两张网卡都是在同一网段,可以ping通
利用DNS隧道
我们将公网服务器和目标机器的80服务开启,然后通过虚拟网卡的IP就能访问到
同时相同的操作也可以去访问mysql
利用DNS隧道建立SOCKS5代理隧道
在公网服务器配置frps,配置完之后运行
在内网主机上配置frpc,配置完运行
然后在kali浏览器配置代理,为公网IP➕端口,当然也可以给命令行配置代理
然后就可以访问到内网了
在CS上使用DNS隧道
启动CS,然后新建一个监听器,为Beacon DNS,然后生成一个payload为exe类型的可执行文件,将其上传到Windows2016跳板机上,然后运行可执行文件,使其上线,然后就可以做其他的操作了