Vor einiger Zeit ist mir aufgefallen, dass Benutzernamen und Kennwörter, die curl
als Befehlszeilenargumente angegeben wurden, nicht in der ps
Ausgabe erscheinen (obwohl sie natürlich in Ihrem Bash-Verlauf erscheinen können).
Sie erscheinen ebenfalls nicht in /proc/PID/cmdline
.
(Die Länge des kombinierten Benutzernamen / Passwort-Arguments kann jedoch abgeleitet werden.)
Demonstration unten:
[root@localhost ~]# nc -l 80 &
[1] 3342
[root@localhost ~]# curl -u iamsam:samiam localhost &
[2] 3343
[root@localhost ~]# GET / HTTP/1.1
Authorization: Basic aWFtc2FtOnNhbWlhbQ==
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost
Accept: */*
[1]+ Stopped nc -l 80
[root@localhost ~]# jobs
[1]+ Stopped nc -l 80
[2]- Running curl -u iamsam:samiam localhost &
[root@localhost ~]# ps -ef | grep curl
root 3343 3258 0 22:37 pts/1 00:00:00 curl -u localhost
root 3347 3258 0 22:38 pts/1 00:00:00 grep curl
[root@localhost ~]# od -xa /proc/3343/cmdline
0000000 7563 6c72 2d00 0075 2020 2020 2020 2020
c u r l nul - u nul sp sp sp sp sp sp sp sp
0000020 2020 2020 0020 6f6c 6163 686c 736f 0074
sp sp sp sp sp nul l o c a l h o s t nul
0000040
[root@localhost ~]#
Wie wird dieser Effekt erzielt? Liegt es irgendwo im Quellcode von curl
? (Ich nehme an, es ist eine curl
Funktion, keine ps
Funktion? Oder ist es eine Art Kernel-Funktion?)
Außerdem: Kann dies von außerhalb des Quellcodes einer ausführbaren Binärdatei erreicht werden? ZB durch die Verwendung von Shell-Befehlen, wahrscheinlich kombiniert mit Root-Berechtigungen?
Mit anderen Worten, könnte ich ein Argument , das ich an einen beliebigen Shell-Befehl weitergegeben habe, irgendwie davor verbergen, in /proc
oder in der ps
Ausgabe zu erscheinen (ich glaube dasselbe) ? (Ich denke, die Antwort auf diese Frage ist "Nein", aber es scheint sich zu lohnen, diese zusätzliche halbe Frage einzuschließen.)
environ
direkt, um auf Umgebungsvariablen zuzugreifen? - Fazit: Die Argumentliste befindet sich wie die Liste der Umgebungsvariablen im Lese- / Schreibspeicher des Benutzerprozesses und kann vom Benutzerprozess geändert werden.
grep
Musters zu einer Zeichenklasse. ZBps -ef | grep '[c]url'
curl
passt curl
aber [c]url
nicht übereinstimmt [c]url
. Wenn Sie weitere Informationen benötigen, stellen Sie eine neue Frage und ich würde gerne antworten.