Jakiś czas temu zauważyłem, że nazwy użytkowników i hasła podane curl
jako argumenty wiersza poleceń nie pojawiają się w ps
danych 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 curl
funkcja, a nie ps
funkcja? 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 /proc
lub ps
wyjś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).
environ
bezpoś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.
grep
wzorca klasą postaci. Np.ps -ef | grep '[c]url'
curl
pasuje, curl
ale [c]url
nie pasuje [c]url
. Jeśli potrzebujesz więcej szczegółów, zadaj nowe pytanie, a chętnie odpowiem.