Hướng dẫn pymem inject python shellcode - pymem tiêm python shellcode
Pymem cho phép bạn tiêm python.dll vào một quy trình đích và sau đó ánh xạ py_run_simple_string với một cuộc gọi đến 6. Show
from pymem import Pymem import os import subprocess notepad = subprocess.Popen(['notepad.exe']) pm = Pymem('notepad.exe') pm.inject_python_interpreter() filepath = os.path.join(os.path.abspath('.'), 'pymem_injection.txt') filepath = filepath.replace("\\", "\\\\") shellcode = """ f = open("{}", "w+") f.write("pymem_injection") f.close() """.format(filepath) pm.inject_python_shellcode(shellcode) notepad.kill() Vậy mã đó đã làm gì?
13 phút đọc Nếu bạn thực hiện kiểm tra thâm nhập như công việc hàng ngày của bạn, thường sẽ hữu ích khi đưa cửa hậu vào ứng dụng hợp pháp. Có rất nhiều công cụ ngoài kia có thể thực hiện các loại nhiệm vụ đó, nhưng bạn có biết chúng thực sự hoạt động như thế nào không? Trong bài đăng này, tôi sẽ chỉ cho bạn một phương pháp đơn giản để đưa một cửa hậu vào một thực thi. Ở đây chúng tôi sẽ sử dụng Python vì nó là một ngôn ngữ thực sự linh hoạt và cũng là một trong những ngôn ngữ được sử dụng nhiều nhất trong điện toán tấn công. Tôi thực sự khuyên bạn nên đọc một trong những bài viết trước của tôi về định dạng thực thi di động để hiểu đầy đủ bài đăng này. Giới thiệuỞ đây, mục tiêu là đưa mã nước ngoài vào một thực thi, nhưng chúng tôi vẫn muốn người thực thi ban đầu hoạt động (vì chúng tôi không muốn đưa ra bất kỳ sự nghi ngờ nào từ mục tiêu của chúng tôi). Dưới đây là ý tưởng toàn cầu về cách chúng tôi sẽ sửa đổi ứng dụng để tiêm cửa sau của chúng tôi: Có 2 phương pháp chính để tiêm mã cho một thực thi:
Ở đây, chúng tôi sẽ sử dụng phương pháp đầu tiên vì nó dễ dàng và đáng tin cậy hơn, nhưng nếu bạn muốn thử phương pháp thứ hai, bạn có thể kiểm tra liên kết sau. Lưu ý: Hãy cẩn thận, nếu bạn chạy một chất chống vi -rút trên máy của bạn, việc sửa đổi cấu trúc của một thực thi có thể được hiểu là một cuộc tấn công của virus và AV sẽ chặn hoặc loại bỏ thực thi của bạn. Bây giờ bạn biết. Be careful, if you run an antivirus on your machine, modifying the structure of an executable could be interpreted as a viral attack and the AV will block or remove your executable. Now you know. Nhắc nhở nhanh chóngTrước khi thêm một phần mới, chúng ta cần biết các chi tiết cấu trúc để không phá vỡ thực thi của chúng ta. Trong một thực thi PE, phần bao gồm 2 phần:
Độ dài tiêu đề phần là 40 byte và theo cấu trúc này:
Mỗi trường giúp Windows tải các phần đúng vào bộ nhớ. Ở đây, chúng tôi chỉ quan tâm bởi các trường sau, các trường khác sẽ được khởi tạo ở mức 0.
Lưu ý: Nó thực sự quan trọng để phân biệt VA (địa chỉ ảo) và RVA (địa chỉ ảo tương đối). Địa chỉ ảo tương đối là địa chỉ ảo của một đối tượng từ tệp sau khi được tải vào bộ nhớ, trừ địa chỉ cơ sở (thường bằng 5) of the file image.Cuối cùng, chúng tôi phải chăm sóc sự liên kết. Giá trị SWE sẽ được đặt vào tiêu đề phần phải được căn chỉnh theo giá trị được đặt vào 6 của tệp PE.
Không đủ rõ ràng? Hãy nói rằng 8 bằng 512 byte và 7 bằng 4096 byte. Nếu phần mới của bạn chứa 515 byte trên đĩa, giá trị kích thước phần trên đĩa ( 2) sẽ là 1024 vì 515> 512, vì vậy chúng tôi làm tròn nó. Điều tương tự đối với 0, nó sẽ bằng 4096 byte, vì 515 <4096. Đây là cách tìm các giá trị phù hợp với bạn:
Trong các phần follwing, tôi sẽ mô tả các bước khác nhau mà tôi đã sử dụng để đưa một cửa hậu vào một thực thi. Mã đầy đủ sẽ có sẵn ở cuối hướng dẫn. Bây giờ, chúng ta có thể bắt đầu. Chúng tôi đã có thể đặt 4 giá trị trong tiêu đề của chúng tôi. Tôi giả sử rằng shellcode của chúng tôi sẽ nhỏ hơn 4096 byte.
Đối với 1 và 3, chúng tôi phải chắc chắn rằng chúng tôi không thể ghi đè lên các phần khác. Nếu một trong những con trỏ trỏ đến một tiêu đề hiện có, chúng tôi sẽ làm hỏng việc thực thi. Để tránh vấn đề này, chúng tôi sẽ đặt con trỏ của chúng tôi đi theo phần cuối cùng của thực thi.
Bây giờ, phần mới sẽ được đặt ngay sau phần cuối cùng trên đĩa và trong bộ nhớ. Để tuân thủ căn chỉnh, chúng tôi sẽ sửa đổi mã để tính toán các giá trị phù hợp cho kích thước phần.
Lưu ý: Đối với các bài kiểm tra tôi đã sử dụng putty.exe. Putty là triển khai miễn phí SSH và Telnet cho Windows, nhưng bạn có thể sử dụng bất kỳ thực thi nào. For the tests I used putty.exe. PuTTY is a free implementation of SSH and Telnet for Windows, but you can use any executable. Chúng tôi có giá trị phù hợp cho tiêu đề phần mới, nhưng chúng tôi đã không chèn bất cứ điều gì trong thực thi. Hãy để nhận được địa chỉ tiêu đề phần cuối và thêm 40 byte (kích thước của tiêu đề phần) để lấy địa chỉ để viết phần của chúng tôi.
Dễ dàng, phải không? Bây giờ chúng ta có thể viết tiêu đề mới đúng cách, nhưng chúng ta phải chăm sóc 2 điều:
Lưu ý: Trên tấm dựa trên Intel, giá trị là bằng Little-endian. Thông tin thêm ở đây. On Intel-based plateform, the value are in little-endian. More info here.
Một số chi tiếtTiêu đề phần mới của chúng tôi đã được thêm vào thực thi, nhưng trình tải có thể nhìn thấy nó. Chúng tôi không thể sửa đổi một số giá trị thành tiêu đề cấu trúc chính của tệp trước:
Liên quan đến phần cuối cùng này, tôi nhắc bạn rằng chúng tôi đã nói với người thực thi rằng có một phần mới của 4096 byte ở đâu đó, vì vậy chúng tôi phải thêm một số không gian trống để tuân thủ thông tin tiêu đề mà còn để thêm shellcode của chúng tôi. Chúng tôi chỉ tạo tiêu đề phần không phải là chính phần.
Nếu chúng ta kiểm tra kết quả trong một trình gỡ lỗi ngẫu nhiên, chúng ta sẽ thấy phần mới. Tại thời điểm này, Putty nên chạy hoàn hảo khi chúng tôi thêm một tiêu đề phần. Lưu ý: Ở đây tôi đã sử dụng trình gỡ lỗi miễn dịch để có được đầu ra này. Here I used Immunity Debugger to get this output. Chỉnh sửa điểm nhập cảnhChúng tôi tốt cho cấu trúc tiêu đề phần. Bây giờ chúng tôi sẽ chỉnh sửa điểm nhập của người thực thi để thực hiện cửa sau của chúng tôi trước phần còn lại của mã (ứng dụng).
Đầu ra 0Viết điểm nhập ban đầu ở đâu đó vì chúng tôi sẽ sử dụng nó sau để chuyển hướng luồng thực thi đến ứng dụng ban đầu. Tiêm mãBước cuối cùng là tiêm ShellCode của chúng tôi trong phần mới. Tôi đã tạo một shellcode đơn giản với metasploit, nó sẽ hiển thị một hộp thông báo trước khi bắt đầu ứng dụng. 1Trước khi tiêm ShellCode này, chúng ta cần sửa đổi nó để chuyển hướng luồng thực thi đến ứng dụng. As-is, shellcode này sẽ đóng ứng dụng sau khi được chạy. Để chuyển hướng luồng thực thi, chúng tôi phải sửa đổi 6 byte cuối cùng của shellcode và bảo nó tiếp tục thực hiện ứng dụng. 2Để không phá vỡ luồng ứng dụng, hãy thay thế các byte cuối cùng của shellcode từ 9 thành 0.Bạn nên hỏi tại sao điểm nhập ban đầu của chúng tôi ( 1) khác với điểm chúng tôi sử dụng trong shellcode của chúng tôi ( 2). Điều đó bởi vì một khi được tải trong bộ nhớ, bộ tải thêm cơ sở hình ảnh ( 5), chứa trong 6 vào điểm nhập. Nếu chúng tôi không thêm cơ sở hình ảnh, chúng tôi sẽ chuyển hướng luồng thực thi đến một địa chỉ không chính xác và phá vỡ ứng dụng.Đây là kết quả sau khi sửa đổi ShellCode: 3Thực thi backdoor này sẽ hiển thị một hộp thông báo và trả lại điều khiển cho ứng dụng chính. Mã nguồnDưới đây là mã nguồn của tập lệnh với một số ý kiến. 4Đầu ra 5Viết điểm nhập ban đầu ở đâu đó vì chúng tôi sẽ sử dụng nó sau để chuyển hướng luồng thực thi đến ứng dụng ban đầu.Tiêm mã Bước cuối cùng là tiêm ShellCode của chúng tôi trong phần mới. Tôi đã tạo một shellcode đơn giản với metasploit, nó sẽ hiển thị một hộp thông báo trước khi bắt đầu ứng dụng.
|