Thay đổi hoán vị của một tập tin với sự giúp đỡ của con mèo của tôi


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

Hệ thống tập tin gốc đã chết. Nhưng con mèo của tôi vẫn còn sống (trong ký ức của tôi):

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

Anh ấy cô đơn mặc dù, tất cả bạn bè của anh ấy đã biến mất:

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

Hệ thống vẫn đang chạy, và hoàn thành mục đích của nó. Tôi biết, tôi biết, phản ứng lành mạnh duy nhất cho việc này là để hệ thống ngừng hoạt động và thay thế ổ đĩa gốc. Thật không may, đó không phải là một lựa chọn vì nó sẽ tốn rất nhiều thời gian và tiền bạc. Ngoài ra, nó sẽ giết con mèo của tôi, và điều đó sẽ làm tôi buồn.

Tôi đã nghĩ đến việc mang cho anh ta những người bạn bình thường của mình từ một nhà tài trợ. Tôi không dám thử scp chúng, trong trường hợp ssh cố tải nó và cắt dòng (dù sao thì nhị phân cũng biến mất). Điều này nghe có vẻ như một công việc cho em họ của con mèo của tôi:

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

Thật không may, anh ấy đã đi lâu.

Bây giờ, tôi có thể cố gắng lừa con mèo của tôi để thực hiện một nghi thức để hồi sinh anh ta:

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

Và đó là loại làm việc. Anh ấy gần như còn sống:

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

Anh ta chỉ cần một tia lửa nhỏ của cuộc sống. Câu +xthần chú nhỏ mà tôi không thể đọc được vào lúc này.

Bạn có thể giúp tôi đưa bạn bè của con mèo của tôi trở lại?


3
Bạn có thể chạy /lib/ld-linux.so.2 ./netcat(hoặc tương đương với hệ thống của bạn) và có được điều gì đó xảy ra không?
Michael Homer

4
Ngoài ra: hệ điều hành này là gì? Bạn có bất kỳ hệ thống tập tin vfat hoặc NTFS được gắn kết? Hệ thống tập tin mạng? Phân vùng bạn có thể xóa nội dung của? Có bất kỳ tập tin có thể truy cập với sự cho phép thực hiện?
Michael Homer

3
"Ngoài ra, nó sẽ giết con mèo của tôi, và điều đó sẽ làm tôi buồn." - Tôi luôn nghĩ câu nói "Không có đứa trẻ nào bị hại trong quá trình sản xuất thứ này" chỉ là một câu nói, nhưng cũng vậy
Rugk

7
Tôi hoàn toàn phải nâng cao điều này cho tất cả những sự tương tự của con mèo…
rugk

2
chú mèo tội nghiệp, tôi hy vọng nó sẽ ổn :(
con mèo

Câu trả lời:


37

Có một số khả năng, tất cả phụ thuộc vào các thông số chính xác của tình huống của bạn ngay bây giờ. Tôi sẽ giả sử Linux trong các ví dụ sau đây khi áp dụng, nhưng chức năng tương tự tồn tại trên các nền tảng khác trong hầu hết các trường hợp.

  • Bạn có thể có được trình tải động để chạy một tệp thực thi cho bạn. Giả sử catđược liên kết động, /lib/ld-linux.so.2khả năng tương đương với nền tảng của bạn cũng sẽ nằm trong bộ nhớ và do đó có thể sử dụng để chạy nhị phân:

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

    Bạn có thể có nhiều trong số này (có khả năng 32 và 64 bit) và có thể có nhiều bản sao có sẵn hoặc liên kết tượng trưng cần giải quyết. Một trong số đó có thể làm việc.

  • Nếu bạn có một hệ thống tệp vfat hoặc NTFS được gắn hoặc một hệ thống khác xử lý tất cả các tệp là 777, bạn có thể tạo tệp thực thi của mình trên đó.

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • Nếu bạn có một hệ thống tệp được gắn kết, ngay cả khi nó không thể ghi cục bộ, bạn có thể tạo các tệp trên hệ thống từ xa và sử dụng các tệp đó một cách bình thường.
  • Nếu có một phân vùng được gắn kết mà bạn không quan tâm đến nội dung của, trên một ổ đĩa vẫn đang hoạt động, bạn có thể thay thế nội dung bằng một hình ảnh mới của cùng loại hệ thống tệp có chứa các tệp thực thi mà bạn muốn - catsẽ tốt cho việc này trong vai trò mọi người thường sử dụng ddvà bạn có thể cung cấp hình ảnh qua mạng.

    $ cat > /dev/sdb1 < ...

    Điều này là hợp lý, nhưng có rất nhiều nơi không hoạt động tùy thuộc vào chính xác những gì vẫn còn trong bộ nhớ từ phân vùng đó.

  • Nếu có bất kỳ tệp có thể truy cập nào có quyền thực thi trên bất kỳ hệ thống tệp có thể ghi nào, bạn có thể cat >vào tệp đó để thay thế nội dung bằng tệp nhị phân bạn chọn.

    $ cat > ~/test.py < ...
  • Vì Bash vẫn đang chạy, bạn có thể tự động tải một plugin Bash vào quá trình hiển thị chmod. Cụ thể, bạn có thể cài đặt và tảictypes.sh , cung cấp giao diện chức năng nước ngoài cho Bash, sau đó dlcall chmod ./netcat 511.
  • Bạn có thể mang vào một tệp thư viện động foo.socủa công trình của bạn và sau đó cattải nó thay mặt bạn LD_PRELOAD, cho phép bạn thực thi mã tùy ý.

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

    Nếu bạn chặn, ví dụ open:

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

    sau đó bạn có thể làm bất cứ điều gì bạn cần làm trong đó.

Đề nghị của tôi sẽ là mang đến một busyboxthực thi được liên kết tĩnh như là mục đầu tiên (hoặc thực sự, chỉ mục) để bạn có đầy đủ các lệnh có sẵn mà không cần sử dụng lại bất cứ điều gì hack khiến bạn kiệt sức.


3
"Liên kết tĩnh busybox": Lưu ý sashđược thiết kế riêng cho loại trường hợp sử dụng này và có thể sẵn sàng hơn trong một nhúm (ví dụ: bạn có thể cài đặt trước và để lại một bản sao chạy ở đâu đó trong bộ nhớ khi hệ thống phá vỡ ... hoặc bạn có thể bỏ thú cưng của bạn và mua một đàn gia súc thay thế, tôi cho rằng).
Kevin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.