โพสต์นี้จะเป็นการเพิ่มสิทธิ์ของ user ใน Linux ผ่านการกำหนด PATH environment นะครับ โดย PATH environment จะเป็นตัวแปลที่เก็บตำแหน่งของคำสั่งใน Linux ไว้นั่นเอง ซึ่งแต่ละ user ก็จะมี PATH ที่แตกต่างกันไปครับ ทีนี้หากเราใช้คำสั่งเช่น ifconfig เวลาที่ Linux ทำงานคือ มันก็จะไปหา ifconfig ว่าอยู่ใน path ไหนใน PATH Environment นั่นเอง ทีนี้เรามาเรียนรู้กันดีกว่าว่า /sbin/ifconfig กับ ifconfig แตกต่างกันยังไง

สิ่งที่แตกต่างกันคือหากเป็นคำสั่งแรกเครื่องจะไปทำการหาก่อนว่า ifconfig อยู่ในซึ่งก็จะพบว่า ifconfig นั้นอยู่ใน /sbin/ จากนั้นจึงรันคำสั่ง ทีนี้หากมี ifconfig อยู่หลายที่ แบบอยู่ที่ /sbin/ กับ /bin/ สิ่งที่เกิดขึ้นคือมันจะรัน /sbin/ifconfig ก่อน เพราะใน $PATH นั้น /sbin/ อยู่ก่อน /bin/ นั่นเอง แต่กลับกันมาในคำสั่งที่ 2 หากเป็น /sbin/ifconfig อันหลังนั้นมันจะไม่หาใน PATH เลย เพราะถือว่าเป็น absolute path ที่เป็นการกำหนดแน่นอนอยู่แล้วนั่นเอง

ทีนี้พอเข้าใจหลักการทำงานของคำสั่งใน Linux แล้วก็มาลอง exploit กันดูครับ

Preparing phase (รันด้วย root user)

โดยการกระทำนี้เราต้องเตรียม environment ก่อน โดยเราจะสร้างไฟล์ที่ execute คำสั่ง “ps” ก่อน โดยการกระทำดังกล่าวเราจะเริ่มจากการสร้างไฟล์ภาษา c ที่เขียนเป็น

จาก source code จะเห็นว่ามันมีการ set ให้ user id และ group id เป็น root (0) ก่อน จากนั้นค่อยรันคำสั่ง “ps” อีกที ทีนี้ให้เรา compile โดยใช้คำสั่ง

จากนั้นกำหนด permission ให้มี sticky bit หรือก็คือสิทธิ์ในการรันคำสั่งด้วยสิทธิ์ของ user เจ้าของไฟล์ได้

นำไฟล์ดังกล่าวไปไว้ใน path user เข้าถึงได้ เช่น home ของ user

Exploit phase (John user)

มาถึง part นี้คือการแฮ็คจริงๆกันแล้วนะครับ ก็เริ่มจาก login เป็น user john ก่อน จากนั้นทดสอบรันไฟล์ check_process ดู

จะเห็นว่า binary file ดังกล่าวก็ทำงานได้ปกติดี

ทำการแก้ไข PATH environment

จากด้านบนจะเห็นว่าสิ่งที่เราทำคือการสร้างไฟล์ /tmp/ps ขึ้นมา โดยภายในนั้นมีการรัน shell (/bin/sh) จากนั้นถึงกำหนดให้ PATH environment ให้ path /tmp ไปอยู่ด้านหน้าสุดของค่า PATH Environment เดิม

ทีนี้ให้เรารันคำสั่ง check_process อีกที ก็จะพบว่าเรารัน shell เพราะ Linux มันพบคำสั่ง ps ใน /tmp ก่อน /bin/ นั่นเองครับ

(ที่ได้สิทธิ์ root เพราะใน source code ของ check_process มีการกำหนดสิทธิ์ก่อนรันคำสั่ง ps นั่นเอง)

PS. จะเปลี่ยนไปใช้วิธีการ symlink แทนก็ได้นะครับ