ฉันสังเกตเห็นเมื่อไม่นานมานี้ว่าชื่อผู้ใช้และรหัสผ่านที่กำหนดให้curl
เป็นอาร์กิวเมนต์บรรทัดคำสั่งไม่ปรากฏในps
ผลลัพธ์ (แม้ว่าแน่นอนว่าพวกเขาอาจปรากฏในประวัติทุบตีของคุณ)
/proc/PID/cmdline
เขาก็จะไม่ปรากฏใน
(ความยาวของอาร์กิวเมนต์ชื่อผู้ใช้ / รหัสผ่านรวมกันสามารถได้รับแม้ว่า)
การสาธิตด้านล่าง:
[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
คุณสมบัติหรือเป็นคุณสมบัติเคอร์เนลของการจัดเรียงบางอย่าง?)
นอกจากนี้: สามารถทำได้จากนอกซอร์สโค้ดของไบนารีที่ปฏิบัติการได้หรือไม่? เช่นโดยการใช้คำสั่งเชลล์อาจรวมกับสิทธิ์ root หรือไม่
กล่าวอีกนัยหนึ่งฉันสามารถซ่อนอาร์กิวเมนต์ไม่ให้ปรากฏใน/proc
หรือในps
ผลลัพธ์ (ในสิ่งเดียวกันฉันคิดว่า) ที่ฉันส่งไปยังคำสั่งเชลล์โดยพลการ ? (ฉันเดาว่าคำตอบสำหรับคำถามนี้คือ "ไม่" แต่ดูเหมือนว่าคุ้มค่าที่จะรวมคำถามพิเศษครึ่งหนึ่งนี้)
environ
โดยตรงในการเข้าถึงตัวแปรสภาพแวดล้อมหรือไม่? - บรรทัดล่าง: รายการอาร์กิวเมนต์เช่นรายการตัวแปรสภาพแวดล้อมอยู่ในหน่วยความจำกระบวนการผู้ใช้ในการอ่าน / เขียนและสามารถแก้ไขได้โดยกระบวนการผู้ใช้
grep
แบบของคุณเป็นคลาสตัวละคร เช่นps -ef | grep '[c]url'
curl
ตรงcurl
แต่ไม่ตรงกับ[c]url
[c]url
หากคุณต้องการรายละเอียดเพิ่มเติมถามคำถามใหม่และฉันยินดีที่จะตอบ