begin process at 2010 02 09 21:18:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > COMMENT DÉMARRER UN PROCESSUS SUR PC DISTANT DE MANIÈRE CACHÉE ET TRANSPARENTE

COMMENT DÉMARRER UN PROCESSUS SUR PC DISTANT DE MANIÈRE CACHÉE ET TRANSPARENTE


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité Source .NET ( DotNet ) Classé sous :remote, processus, service, caché, distant Niveau :Expert Date de création :08/06/2009 Vu / téléchargé :6 025 / 724

Auteur : violent_ken

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 Description

Salut,

cette source montre comment démarrer sur un PC distant un processus, sans RIEN AVOIR A FAIRE sur le PC distant (aucune manipulation à faire dessus, pas de server à lancer manuellement, pas de WMI à activer...), de manière cachée.

Il suffit de démarrer le programme sur le PC principal et de cliquer sur "Go" pour créer un process sur la machine distante.


Comment çà marche ?

En gros :
- on créé une connection avec la machine distante (WNetAddConnection2)
- on copie le fichier "server.exe" sur la machine distante (CopyFile)
- on démarre le fichier "server.exe", qui est en fait un service, par OpenScmanager, CreateService et StartService (c'est là toute la subtilité !)
- le service démarré, il peut faite n'importe quoi.


Bref, ensuite si vous voulez vous transformez le service .Net en service codé en C complètement autonome, et vous avez un programme capable de faire n'importe quoi à distance (un malware pour les plus pessimistes).

Créez ensuite un tube nommé pour communiquer avec une archi client-server, et tout est possible, prochainement dans YAPM :-p

Ne pas oublier de détruire le service à la sortie du programme ! (j'ai pas viré le fichier *.exe dans l'exemple).

Pour info, c'est le fonctionnement de psexec de Sysinternals (en gros).

@+

Source

  • Option Strict On
  • Public Class Form1
  • Private hScm As IntPtr
  • Private hServ As IntPtr
  • Private path As String = Replace(Application.StartupPath & "\server.exe", "\", "\\")
  • Private remoteHost As String
  • Private pass As String
  • Private user As String
  • Private Net As New API.NETRESOURCE
  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  • remoteHost = Me.TextBox1.Text
  • pass = Me.TextBox3.Text
  • user = Me.TextBox2.Text
  • ' Create connection to remote computer
  • Net.dwType = API.NETRESOURCE.Type.RESOURCETYPE_ANY
  • Net.lpProvider = Nothing
  • Net.lpLocalName = Nothing
  • Net.lpRemoteName = "\\" & remoteHost & "\IPC$"
  • Dim ret As Integer
  • ret = API.WNetAddConnection2(Net, pass, user, API.CONNECT_COMMANDLINE)
  • If (ret <> 0) AndAlso (user <> Nothing) Then
  • If ret = 1219 Then
  • ' Connection already created. Disconnecting..
  • ret = CancelConnection()
  • Else
  • If ret = 1326 Then
  • If InStr(user, "\"c) = 0 Then
  • Dim CurrentUserName As String = "localhost\" & user
  • ret = API.WNetAddConnection2(Net, pass, CurrentUserName, API.CONNECT_UPDATE_PROFILE)
  • End If
  • End If
  • End If
  • If ret <> 0 Then
  • ' Error
  • RaiseError(API.GetError)
  • End If
  • End If
  • ' Share executable service
  • Dim remote As String = "\\" & remoteHost & "\ADMIN$\System32"
  • Dim ret3 As Boolean = API.CopyFile(path, remote & "\yapmserver.exe", Nothing)
  • ' Create and install service
  • hScm = API.OpenSCManager(remoteHost, vbNullString, CInt(API.SC_MANAGER_ALL_ACCESS))
  • hServ = API.CreateService(hScm, "yapm_server", "YAPM server", _
  • CInt(API.SERVICE_RIGHTS.SERVICE_ALL_ACCESS), _
  • API.SERVICE_WIN32_OWN_PROCESS, _
  • API.SERVICE_START_TYPE.DemandStart, _
  • API.SERVICE_ERROR_CONTROL.Ignore, _
  • remote & "\yapmserver.exe", Nothing, _
  • Nothing, Nothing, Nothing, Nothing)
  • If hServ = IntPtr.Zero Then
  • If Err.LastDllError = 1073 Then
  • ' Service already exists
  • hServ = API.OpenService(hScm, "yapm_server", API.SERVICE_RIGHTS.SERVICE_ALL_ACCESS)
  • End If
  • End If
  • Call API.CloseServiceHandle(hScm)
  • ' Start service !
  • API.apiStartService(hServ, Nothing, Nothing)
  • End Sub
  • ' Stop and delete service
  • Private Sub DeleteService()
  • ' Stop and delete service
  • Dim lpss As API.SERVICE_STATUS
  • API.ControlService(hServ, API.SERVICE_CONTROL._STOP, lpss)
  • Call API.DeleteService(hServ)
  • Call API.CloseServiceHandle(hServ)
  • End Sub
  • ' Cancel connection
  • Private Function CancelConnection() As Integer
  • Call API.WNetCancelConnection2(remoteHost, Nothing, True)
  • Return API.WNetAddConnection2(Net, pass, user, API.CONNECT_UPDATE_PROFILE)
  • End Function
  • Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  • Call DeleteService()
  • Call CancelConnection()
  • End Sub
  • Private Sub RaiseError(ByVal _error As String)
  • Me.rtb.Text = _error
  • End Sub
  • End Class
Option Strict On

Public Class Form1

    Private hScm As IntPtr
    Private hServ As IntPtr
    Private path As String = Replace(Application.StartupPath & "\server.exe", "\", "\\")

    Private remoteHost As String
    Private pass As String
    Private user As String
    Private Net As New API.NETRESOURCE

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        remoteHost = Me.TextBox1.Text
        pass = Me.TextBox3.Text
        user = Me.TextBox2.Text

        ' Create connection to remote computer
        Net.dwType = API.NETRESOURCE.Type.RESOURCETYPE_ANY
        Net.lpProvider = Nothing
        Net.lpLocalName = Nothing
        Net.lpRemoteName = "\\" & remoteHost & "\IPC$"

        Dim ret As Integer
        ret = API.WNetAddConnection2(Net, pass, user, API.CONNECT_COMMANDLINE)
        
        If (ret <> 0) AndAlso (user <> Nothing) Then
            If ret = 1219 Then
                ' Connection already created. Disconnecting..
                ret = CancelConnection()
            Else
                If ret = 1326 Then
                    If InStr(user, "\"c) = 0 Then
                        Dim CurrentUserName As String = "localhost\" & user
                        ret = API.WNetAddConnection2(Net, pass, CurrentUserName, API.CONNECT_UPDATE_PROFILE)
                    End If
                End If
            End If
            If ret <> 0 Then
                ' Error
                RaiseError(API.GetError)
            End If
        End If


        ' Share executable service
        Dim remote As String = "\\" & remoteHost & "\ADMIN$\System32"
        Dim ret3 As Boolean = API.CopyFile(path, remote & "\yapmserver.exe", Nothing)

        ' Create and install service
        hScm = API.OpenSCManager(remoteHost, vbNullString, CInt(API.SC_MANAGER_ALL_ACCESS))
        hServ = API.CreateService(hScm, "yapm_server", "YAPM server", _
                                  CInt(API.SERVICE_RIGHTS.SERVICE_ALL_ACCESS), _
                                  API.SERVICE_WIN32_OWN_PROCESS, _
                                  API.SERVICE_START_TYPE.DemandStart, _
                                  API.SERVICE_ERROR_CONTROL.Ignore, _
                                  remote & "\yapmserver.exe", Nothing, _
                                  Nothing, Nothing, Nothing, Nothing)

        If hServ = IntPtr.Zero Then
            If Err.LastDllError = 1073 Then
                ' Service already exists
                hServ = API.OpenService(hScm, "yapm_server", API.SERVICE_RIGHTS.SERVICE_ALL_ACCESS)
            End If
        End If

        Call API.CloseServiceHandle(hScm)

        ' Start service !
        API.apiStartService(hServ, Nothing, Nothing)

    End Sub

    ' Stop and delete service
    Private Sub DeleteService()

        ' Stop and delete service
        Dim lpss As API.SERVICE_STATUS
        API.ControlService(hServ, API.SERVICE_CONTROL._STOP, lpss)

        Call API.DeleteService(hServ)
        Call API.CloseServiceHandle(hServ)

    End Sub

    ' Cancel connection
    Private Function CancelConnection() As Integer

        Call API.WNetCancelConnection2(remoteHost, Nothing, True)
        Return API.WNetAddConnection2(Net, pass, user, API.CONNECT_UPDATE_PROFILE)

    End Function

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Call DeleteService()
        Call CancelConnection()
    End Sub

    Private Sub RaiseError(ByVal _error As String)
        Me.rtb.Text = _error
    End Sub

End Class

 Conclusion

Evidemment avec çà on peut faire un malware/virus sans problèmes, mais c'est pas le but...


Il peut y avoir des problèmes, j'ai fait çà à l'arrache !

@+

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLE SHUTDOWN SCHEDULER : ARRÊTS PLANIFIÉS (LOCAL OU REMOT...
Source avec Zip Source avec une capture Source .NET (Dotnet) YET ANOTHER (REMOTE) PROCESS MONITOR
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) +...
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT CONTRÔLER TOTALEMENT LES PROCESSUS D'UN PC DISTANT (...
Source avec Zip Source .NET (Dotnet) RÉCUPÉRER LES VARIABLES D'ENVIRONNEMENT DE N'IMPORTE QUEL PR...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) APPARTENANCE AUX GROUPES DE SÉCURITÉ par legranche
Source avec Zip Source avec une capture Source .NET (Dotnet) REMOTE KEYLOGGER par elguevel
Source avec Zip PETITE IMPLEMENTATION DE L'ALGO SERVANT AU CRYPTAGE RSA par ccgousset
Source avec Zip SAUVEGARDES FICHIERS par claude440
Source avec Zip Source avec une capture VEROUX PC AVEC API par Galactus13

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) YET ANOTHER (REMOTE) PROCESS MONITOR par violent_ken
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) +... par violent_ken
Source avec Zip Source avec une capture Source .NET (Dotnet) YET ANOTHER PROCESS MONITOR par violent_ken
Source avec Zip Source avec une capture WMI, GESTION D'UNE MACHINE (LOCALE OU DISTANTE) par zesamoth
Source avec Zip Source avec une capture SYSTEM INFO par draluorg

Commentaires et avis

Commentaire de violent_ken le 08/06/2009 23:01:23

Ah oui j'oubliais :

- le mot de passe est transmis en clair par le réseau : gaffe
- à utiliser pour des tâches d'administration par exemple
- pas de malware avec çà svp !

@+

Commentaire de Warny le 08/06/2009 23:35:41

Salut,
Ton code nécessite néanmoins d'avoir les droits d'admin sur la machine distante, ce qui limite considérablement sa portée en tant que malware, sauf si bien sûr, l'utilisateur est inconscient du danger et ouvre les portes... mais ceci n'arrive jamais.

Commentaire de violent_ken le 09/06/2009 06:43:29

Oui effectivement j'ai oublié de le préciser, les droits d'admin sont requis.

Heureusement bien sur, sinon n'importe qui ferait n'importe quoi. Par contre très souvent les gens sont admins de leur machine sans le savoir (c'est rare les comptes limités sous Windows, XP notamment).

Il faut utiliser ce type de code dans le but d'administrer un PC à distance, et bien souvent dans ces cas on est admin et on possède un compte qui a les droits requis.
Pour faire un malware, mieux vaut utiliser un exploit plutôt qu'une méthode traditionnelle et autorisée par l'OS comme celle-ci.

@+

Commentaire de MadM@tt le 11/06/2009 11:33:28

Ah ok ça me rassure qu'il soit nécessaire d'avoir les droits admin !

Très intéressant en tout cas

Commentaire de sethlaerce le 15/06/2009 11:03:38

peut on empecher ces types d'application à acceder à une machine si oui comment?
comme quoi, il vaut mieu prevenir que guerir!
Jolie source, comme toujours avec violent_ken et les process!

Commentaire de Warny le 15/06/2009 11:46:31

Salut,
C'est super simple : comme je l'ai indiqué, seuls les comptes ayant des droits d'administrateurs sur la machine sur laquelle on tente d'installer le service ont le droit effectif de le faire.
S'il s'agit de la machine local il suffit de ne pas utiliser de compte qui soit administrateur et/ou d'utiliser un programme qui réduit les droits dont il dispose aux droit nécessaires pour fonctionner (principe du bac à sable).
S'il s'agit d'une machine distante, il suffit de ne pas se connecter avec un compte administrateur de la machine distante.
A noter, le compte SYSTEM qui a TOUS les droits sur la machine locale n'a aucun droit sur la machine distante.
Quand on est administrateur d'un réseau, il est important de bien avoir en tête que lorsqu'on est connecté en tant qu'administrateur, on dispose des droits nécessaire et surtout suffisants pour propager n'importe quel programme sur un réseau d'entreprise.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Fermer un service proprement [ par florentp ] Bonjour à tous,Je voudrai savoir comment on fait pour fermer proprement un Service. On fait comme pour un processus "normal" ou y a un autre moyen?En A propot de Remote Data Service [ par Nino24 ] Salut tout le monde,J'essaye de me connecter sur une base de donnée sur un serveur IIs, et j'ai toujour ce message d'errServeur Erroret si j'itulise u Service d'acces distant [ par developpeurvb ] SltComment savoir si le service d'acces distant est installé sur le poste en cours.Comment procéder ?Merci Processus en réseau [ par wawamule ] Coucou tout le monde,Quelq'un peut-il m'expliquer ou me montrer un code qui permet de lancer des processus sur un poste distantDonc j'aimerai pouvoir Executable dans un service [ par nerone21 ] Bonjour...Alors j'ai fait un programme que je ne veut pas que l'utilisateur puisse arreter... donc création d'un service dans lequel j'ai mis un timer tuer un processus qui tourne sur un ordinateur distant [ par azizika ] j' ai probleme je veux tuer un processus qui tourne sur un ordinateur distant VB 6.0 merci d'avance pour votre aide démarrer un service en tant que [ par keopsk ] Bonjour,je voudrais démarrer un service sur un poste distant. Pour cela il faut que la session encours (du le poste client) soit ouverte avec un compt droit sur service nt [ par PBDLpc ] bonjour &#224; tous, j'ai d&#233;velopp&#233; un service NT qui n'apparait pas dans la liste des applications du gestionnaire de taches de windows xp service distant en vb.net [ par cubitus91 ] Bonjour je voudrais r&#233;cup&#233;rer l'&#233;tat des services sur un pc distant , mais je n arrive pas &#224; me connect&#233; sur l ordi distant c VBS, accés distant et Droits WMI [ par trafalgar ] <TABLE id=ctl00_Main_UCContentForum_ctl00_DGMsg style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; WI


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales