เปลี่ยนการอนุญาตของไฟล์ด้วยความช่วยเหลือของแมวของฉัน


56
root@system:~# less myfile
-bash: /bin/less: Input/output error

ระบบไฟล์รูทตาย แต่แมวของฉันยังมีชีวิตอยู่ (ในความทรงจำของฉัน):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

เขาเป็นคนขี้เหงา แต่เพื่อน ๆ ของเขาก็จากไปแล้ว:

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

ระบบยังคงทำงานอยู่และบรรลุตามวัตถุประสงค์ ฉันรู้ว่าฉันรู้ว่าการตอบสนองที่มีเหตุผลเพียงอย่างเดียวของเรื่องนี้คือทำให้ระบบล่มและแทนที่ไดรฟ์ราก น่าเสียดายที่มันไม่ใช่ตัวเลือกเพราะมันต้องใช้เวลาและเงินเป็นจำนวนมาก นอกจากนี้มันจะฆ่าแมวของฉันและนั่นจะทำให้ฉันเศร้า

ฉันคิดว่าจะพาเขาไปหาเพื่อนผู้บริจาคของเขา ฉันไม่กล้าลอง scp พวกเขาในกรณีที่ ssh พยายามโหลดและตัดเส้น (ไบนารี่หายไปแล้ว) เสียงนี้เหมือนงานสำหรับลูกพี่ลูกน้องแมวของฉัน:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

น่าเสียดายที่เขาหายไปนาน

ตอนนี้ฉันสามารถลองหลอกแมวของฉันให้ทำพิธีกรรมเพื่อชุบชีวิตเขาได้:

cat > netcat < /dev/tcp/localhost/9999

และการทำงานแบบนั้น เขาเกือบจะมีชีวิตอยู่:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

เขาแค่ต้องการจุดประกายชีวิตเล็ก ๆ +xคาถาวิเศษเล็กน้อยที่ฉันไม่สามารถท่องได้ในขณะนี้

คุณช่วยฉันพาเพื่อนแมวของฉันกลับมาได้ไหม


3
คุณสามารถเรียกใช้/lib/ld-linux.so.2 ./netcat(หรือเทียบเท่ากับระบบของคุณ) แล้วทำอะไรต่อ
Michael Homer

4
ด้วย: ระบบปฏิบัติการนี้คืออะไร? คุณมีระบบไฟล์ vfat หรือ NTFS ติดตั้งอยู่หรือไม่? ระบบไฟล์เครือข่าย พาร์ทิชันที่คุณสามารถลบเนื้อหาของ? มีไฟล์ใดบ้างที่สามารถเข้าถึงได้ซึ่งมีสิทธิ์ดำเนินการ
Michael Homer

3
“ มันจะฆ่าแมวของฉันด้วยและนั่นก็ทำให้ฉันเศร้า” - ผมคิดเสมอว่าคำกล่าวที่ว่า "ไม่มี kiddens ถูกทำร้ายในระหว่างการผลิตนี้" เป็นเพียงแค่คำพูด แต่ดี ...
rugk

7
ฉันต้องถอนการลงคะแนนสำหรับการเปรียบเทียบแมวเหล่านี้โดยสิ้นเชิง…😂
rugk

2
แมวที่น่าสงสารฉันหวังว่าเขาจะโอเค :(
แมว

คำตอบ:


37

มีความเป็นไปได้หลายอย่างทั้งหมดขึ้นอยู่กับพารามิเตอร์ที่แน่นอนของสถานการณ์ของคุณในขณะนี้ ฉันจะสมมติว่า Linux ในตัวอย่างต่อไปนี้ที่สามารถใช้งานได้ แต่ฟังก์ชั่นที่คล้ายกันมีอยู่บนแพลตฟอร์มอื่น ๆ ในกรณีส่วนใหญ่

  • คุณอาจได้รับตัวโหลดแบบไดนามิกเพื่อเรียกใช้โปรแกรมปฏิบัติการให้คุณ สมมติว่าcatมีการเชื่อมโยงแบบไดนามิกความเทียบเท่าของแพลตฟอร์มของคุณ/lib/ld-linux.so.2จะอยู่ในหน่วยความจำและทำให้สามารถใช้งานไบนารี:

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand
    

    คุณอาจมีหลายอย่าง (น่าจะเป็น 32- บิตและ 64- บิต) และอาจมีสำเนาหลายชุดหรือ symlink ที่ต้องแก้ไข หนึ่งในนั้นอาจทำงานได้

  • หากคุณมีระบบไฟล์ vfat หรือ NTFS ที่ติดตั้งอยู่หรือระบบไฟล์อื่นที่ใช้กับไฟล์ทั้งหมดเป็น 777 คุณสามารถสร้างไฟล์ปฏิบัติการของคุณได้

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • หากคุณมีระบบไฟล์เครือข่ายที่ติดตั้งอยู่แม้ว่าจะไม่สามารถเขียนได้แบบโลคัลคุณสามารถสร้างไฟล์บนระบบรีโมตและใช้งานได้ตามปกติ
  • หากมีพาร์ติชันที่เมาท์ซึ่งคุณไม่สนใจเกี่ยวกับเนื้อหาของบนไดรฟ์ที่ยังใช้งานได้เป็นส่วนใหญ่คุณสามารถแทนที่เนื้อหาด้วยอิมเมจใหม่ของระบบไฟล์ชนิดเดียวกันที่มีไฟล์ปฏิบัติการที่คุณต้องการ - catควรจะดีสำหรับสิ่งนี้ บทบาทที่คนมักจะใช้ddและคุณสามารถให้ภาพผ่านเครือข่าย

    $ cat > /dev/sdb1 < ...

    อันนี้น่าเชื่อถือ แต่มีสถานที่มากมายที่จะไม่ทำงานขึ้นอยู่กับสิ่งที่ยังคงอยู่ในหน่วยความจำจากพาร์ติชันนั้น

  • หากมีไฟล์ใด ๆ ที่สามารถเข้าถึงได้ซึ่งมีการอนุญาตให้ใช้สิทธิบนระบบไฟล์ที่สามารถเขียนได้ใด ๆ คุณสามารถcat >เข้าไปที่มันเพื่อแทนที่เนื้อหาด้วยไบนารีที่คุณเลือก

    $ cat > ~/test.py < ...
  • เนื่องจาก Bash ยังคงทำงานอยู่คุณสามารถโหลดปลั๊กอิน Bash แบบไดนามิกในกระบวนการที่แสดง chmod โดยเฉพาะอย่างยิ่งคุณสามารถติดตั้งและโหลดctypes.shdlcall chmod ./netcat 511ซึ่งมีอินเตอร์เฟซที่ฟังก์ชั่นต่างประเทศเพื่อทุบตีแล้ว
  • คุณสามารถนำไฟล์ไลบรารีแบบไดนามิกfoo.soของสิ่งก่อสร้างของคุณแล้วcatโหลดในนามของคุณโดยLD_PRELOADอนุญาตให้คุณรันโค้ดโดยพลการ

    $ LD_PRELOAD=./hack.so cat /dev/null

    หากคุณตัดตัวอย่างเช่นopen:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }
    

    จากนั้นคุณสามารถทำสิ่งที่คุณต้องทำในนั้น

ข้อเสนอแนะของฉันคือการนำbusyboxไฟล์ปฏิบัติการที่ลิงก์แบบสแตติกมาเป็นรายการแรก (หรือรายการเดียวเท่านั้น) เพื่อที่คุณจะได้รับคำสั่งแบบเต็มรูปแบบที่มีอยู่


3
เรื่อง "ลิงก์ที่เชื่อมโยงแบบคงที่busybox": โปรดทราบว่าsashได้รับการออกแบบมาโดยเฉพาะสำหรับกรณีการใช้งานประเภทนี้และอาจพร้อมใช้งานได้ง่ายขึ้นในการบีบ (เช่นคุณสามารถติดตั้งล่วงหน้าได้และปล่อยให้สำเนาทำงานอยู่ที่ไหนสักแห่ง พัก ... หรือคุณสามารถทิ้งสัตว์เลี้ยงของคุณและซื้อวัวมาแทนได้ฉันคิดว่า)
Kevin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.