Jakiś czas temu zauważyłem, że nazwy użytkowników i hasła podane curljako argumenty wiersza poleceń nie pojawiają się w psdanych wyjściowych (chociaż oczywiście mogą pojawiać się w twojej historii bashów).
Podobnie nie pojawiają się w /proc/PID/cmdline.
(Można jednak określić długość połączonego argumentu nazwa użytkownika / hasło.)
Pokaz poniżej:
[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 ~]#
Jak osiąga się ten efekt? Czy jest to gdzieś w kodzie źródłowym curl? (Zakładam, że jest to curlfunkcja, a nie psfunkcja? A może to jakaś funkcja jądra?)
Ponadto: czy można to osiągnąć spoza kodu źródłowego binarnego pliku wykonywalnego? Np. Używając poleceń powłoki, prawdopodobnie w połączeniu z uprawnieniami roota?
Innymi słowy, czy mógłbym w jakiś sposób maskować argument pojawiający się w danych wyjściowych /proclub pswyjściowych (myślę, że to samo), które przekazałem do dowolnego polecenia powłoki? (Sądzę, że odpowiedź na to pytanie brzmi „nie”, ale wydaje się, że warto uwzględnić to dodatkowe pół pytania).
environbezpośrednio z dostępu do zmiennych środowiskowych? - dolny wiersz: lista argumentów, podobnie jak lista zmiennych środowiskowych, znajduje się w pamięci procesu odczytu / zapisu użytkownika i może być modyfikowana przez proces użytkownika.
grepwzorca klasą postaci. Np.ps -ef | grep '[c]url'
curlpasuje, curlale [c]urlnie pasuje [c]url. Jeśli potrzebujesz więcej szczegółów, zadaj nowe pytanie, a chętnie odpowiem.