Python Penetration Testing: การรวบรวมชื่อผู้ใช้และกลุ่มจาก AD บน Linux
ร. อีริค คิเซอร์
ลองนึกภาพว่าคุณเป็นผู้ทดสอบการเจาะระบบที่ประสบความสำเร็จในการละเมิดเซิร์ฟเวอร์แอปพลิเคชันเว็บ Linux ที่โฮสต์ระบบการจัดซื้อจัดจ้าง เนื่องจากระบบดังกล่าวมีความสำคัญและไม่ควรประสบปัญหาการหยุดทำงาน คุณจึงต้องดำเนินการอย่างนุ่มนวลแต่รวดเร็ว มีแนวโน้มว่าคุณจะพบผู้ใช้โดเมน บัญชีบริการ และบางทีแม้แต่บัญชีโดเมน คุณนำทางไปยัง/homeโฟลเดอร์เพื่อค้นหาผู้ใช้หลายคน การดำเนินการนี้อาจใช้เวลานานและซ้ำซาก แต่มีวิธีทำให้กระบวนการเป็นไปโดยอัตโนมัติ ในบทความนี้ ผมจะแสดงวิธีเขียนสคริปต์ Python ที่อ่านว่า/home ไดเรกทอรี กรองชื่อผู้ใช้ออก แล้วใช้ชื่อผู้ใช้เหล่านั้นเพื่อตรวจสอบเซิร์ฟเวอร์ Active Directory เพื่อกำหนดว่าผู้ใช้อยู่ในกลุ่มใด ซึ่งจะช่วยให้คุณสามารถระบุเป้าหมายที่เป็นไปได้ได้อย่างรวดเร็วและจัดลำดับความสำคัญของความพยายามของคุณตามความสามารถในการเข้าถึง
เราจะต้องนำเข้าโมดูลไลบรารี Python บางส่วนเพื่อเริ่มต้น โมดูลosจัดเตรียมวิธีการโต้ตอบกับระบบปฏิบัติการ รวมถึงการเข้าถึงระบบไฟล์ ตัวแปรสภาพแวดล้อม และการเรียกใช้คำสั่งระบบ โมดูลsubprocessจัดเตรียมวิธีการเรียกใช้คำสั่งระบบจากภายในสคริปต์ Python ช่วยให้คุณสามารถดำเนินการคำสั่งได้ราวกับว่าคุณกำลังเรียกใช้จากอินเทอร์เฟซบรรทัดคำสั่ง (CLI)
import os
import subprocess
# Get a list of usernames in the Linux home directory
usernames = [f.name for f in os.scandir("/home") if f.is_dir() and not f.name.startswith(".")]
คำbash -cสั่งใช้เพื่อรันid -nGคำสั่งในเชลล์ใหม่ สิ่งนี้จำเป็นเนื่องจากidเป็นคำสั่งในตัวของเชลล์และไม่สามารถเรียกใช้โดยตรงโดยsubprocess.run. ตัวแปรusernameจะถูกส่งเป็นอาร์กิวเมนต์ไปยังid -nGคำสั่งโดยใช้การจัดรูปแบบสตริง
อาร์กิวเมนต์capture_output=Trueบอกsubprocess.runให้จับเอาต์พุตของคำสั่ง และtext=Trueอาร์กิวเมนต์บอกให้ส่งคืนเอาต์พุตเป็นสตริง อาร์กิวเมนต์shell=Trueเปิดใช้งานการดำเนินการของเชลล์ซึ่งจำเป็นเนื่องจากidคำสั่งเป็นคำสั่งในตัวของเชลล์
เอาต์พุตของคำสั่งที่เป็นผลลัพธ์คือสตริงที่มีรายชื่อกลุ่มสำหรับผู้ใช้ ซึ่งจะถูกแบ่งออกเป็นรายการโดยใช้split()เมธอด รายการผลลัพธ์ของกลุ่มจะถูกเก็บไว้ในgroupsตัวแปร ผลลัพธ์จะถูกจัดรูปแบบดังนี้:
username1: group1, group2, group3
username2: group2, group3, group4
username3: group1, group4, group5
# Loop over the usernames and print their groups
for username in usernames:
result = subprocess.run(f"bash -c 'id -nG {username}'", capture_output=True, text=True, shell=True)
groups = result.stdout.strip().split()
print(f"{username}: {', '.join(groups)}")
บทความการทดสอบการเจาะ Python อื่น ๆ โดย R. Eric Kiser:
Pentesting Lateral Movement: การแยก Chrome Bookmark โดยใช้ Python เขียน Python Reverse TCP Shells ในเวลาน้อยกว่า 5.1 นาที




































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)