얼마 전에 curl
커맨드 라인 인수로 지정된 사용자 이름과 비밀번호 가 ps
출력에 나타나지 않는다는 것을 알았습니다 (물론 bash 기록에 나타날 수도 있습니다).
마찬가지로에 표시되지 않습니다 /proc/PID/cmdline
.
(그러나 결합 된 username / password 인수의 길이는 파생 될 수 있습니다.)
아래 데모 :
[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 ~]#
이 효과는 어떻게 달성됩니까? 의 소스 코드 어딘가에 curl
있습니까? ( curl
기능 이 아닌 기능 이라고 가정 ps
합니까? 아니면 일종의 커널 기능입니까?)
또한 : 바이너리 실행 파일의 소스 코드 외부 에서이 작업을 수행 할 수 있습니까? 예를 들어 아마도 루트 권한과 결합 된 쉘 명령을 사용합니까?
즉 , 임의의 쉘 명령에 전달 된 인수 /proc
가 ps
출력에 나타나 거나 출력 되는 것을 막을 수 있습니까 (동일한 것 같습니다) ? (나는 이것에 대한 대답이 "아니오"라고 생각하지만이 여분의 반 질문을 포함시키는 것이 가치가있는 것 같습니다.)
environ
환경 변수에 액세스 할 직접? — 결론 : 환경 변수 목록과 같은 인수 목록은 읽기 / 쓰기 사용자 프로세스 메모리에 있으며 사용자 프로세스에 의해 수정 될 수 있습니다.
grep
패턴 의 첫 문자를 문자 클래스로 만드십시오 . 예ps -ef | grep '[c]url'
curl
일치 curl
하지만 일치 [c]url
하지 않습니다 [c]url
. 더 자세한 정보가 필요하면 새로운 질문을하면 기꺼이 답변 해 드리겠습니다.