Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | XOR Encoded Shellcode

Shellcode‘lar, bir exploit‘in veya yazılmış zararlı yazılımdan sonra yapılacak işlemleri yapan kod parçalarıdır. Haliyle hedef sistem de mevcut olabilecek, Firewall, IPS&IDS gibi çözümler bu saldırılara bir nebze olarak engelleme faaliyetleri sürdürecektir. Saldırı yapan kişiler de bu firewalları geçmek için belirli bir encoding haliyle göndermektedir.

XOR, bilgisayar mimarilerin de iki değerin aynı olması durumun da 0, farklı olması durumun da 1 set eder.

A – > 1
B – > 1

A xor B -> 0

C  -> 0
D -> 1

A xor B -> 1

Bir shellcode yazacağız.
Python ile XOR encoding edeceğiz.
Encoding hali, Assembly ile Decoding edip çalıştıracak..

Peki bu nasıl olacak, bizim yazdığım Shellcode’un byte byte hali ile XOR byte’mız ile Encoding edecek. Çıkan sonuç XOR Encoding shellcode olacak sonrasında biz bu Shellcodu tekrar Decoding edeceğiz.

Örneğin;

H -> 01001000
XOR Karakter M -> 01001101
XOR Encoding -> 00000101 haline gelecektir.
00000101 hex -> 0x5 gibi bir karaktere denk geliyor.

XOR anlatmak için basit’in basiti. H bu durum da shellcode, M ise 0xAA olmuş oluyor.
Bu 5 karakterini geri H karakterine çevirme işlemini yapacağız yani.

  • Başlayalım, shellcode yazmaya başlamadan önce Python ile bir XOR Encode yazalım. Siz herhangi bir dil de seçebilirsiniz.

1

Program’dan bahsedelim, burada iki tane değişken söz konusu bir tanesi shellcode için diğeri encoded shellcode için ve bir döngüye tabi bu döngü byte dizisi uzunluğunda sürecek ve bu süreç de 0xAA ile XOR edip gerekli parametreleri ekleyecek.

Buna başlamadan önce yazdığımız Shellcode hakkında biraz bilgi vereyim.

2

Shellcode yazıldığın da her zaman yazmak istediğiniz işlemin fonksiyonun sistem çağrı numarası EAX registerına yazılır. Yani siz diyelim ki, passwd dosyasının çalıştırma yetkisini değiştirmek istiyorsunuz. Haliyle bu da bir fonksiyon chmod() fonksiyonu bunun sistem çağrısı Linux 32 bit’de 15 yani biz bu fonksiyonu kullanabilmemiz için 15 sistem çağrı numarasını EAX registerına atamamız gerekir.

Fonksiyonumuz birden fazla parametre alabilme ihtimalinden sırasıyla diğer registera atılır.

CHMOD örneğinden yola çıkalım.
chmod fonksiyonu çağrısı -> EAX
chmod fonksiyonu ilk parametresi -> EBX
chmod fonksiyonun ikinci parametresi -> ECX

  • Chmod‘da ilk parametre yetkisini değiştirmek istediğiniz dosyanın path yoludur. passwd değiştirmek isterseniz, /etc/passwd‘un hex halini ilk önce stack‘e esp registerına oradan ebx return edebilirsiniz. ECX register’ına da 777 değerini atabilirsiniz.

Sonrası da int 0x80 ile kernel’i sahneye davet etmek.
Biz execve çalıştırdığımız için 11 sistem çağrısını al registerına atadık. Çalıştırmak istediğimiz programın path halini stack‘e atayıp geri çağırdık.

2.1

  • sh çalıştırdığım için böyle bir resim oldu, siz path adreslerini değiştirerek istediğiniz dosyayı çalıştırabilirsiniz. Belirtmek de fayda var bazı programlar çalışabilmesi için parametre alması gerekebilir bu durum da shellcode patates olur.

3

  • Yazdığımız shellcode‘un opcode‘larını çıkartık. Siz bu haliyle exploitlerinize ekleyebilirsiniz. Ama konu amacı bu değil. Çıkardığımız opcode‘ları XOR edeceğiz.

4

  • Encoded ettik şimdi yeni bir shellcode oluşturalım. Bu shellcode xor edilmiş halini çalışırken decode edip çalıştıracak.

5

  • Oklarla anlatmaya çalıştım ama yazı olarak da devam edeyim. _start ile işleme başlayıp call_decoder‘a atladık ve oraya atladığımız zaman decoder‘ı çağır dedi çağırdı. Decoder: tek tek işleyip decode: atladık sonra o da bir decoded olana kadar döngü işine girip Shellcode: atladı.  Assembly hali ile çalıştıracağınız zaman segmentation fault hatası verebilir. OS‘da bulunan belirli korumlardan dolayı çalıştırmadan opcodeları çekeceğiz tekrardan. Sonrasın da exploitimize ekleyeceğiz.

6

  • Assembly‘i derleyip objdump ile opcode‘ları çektik şimdi yeni oluşturacağımız C dosyasına eklemek olacak. Siz exploitlerinize de ekleyebilirsiniz. Son rutuş.

7
Execute!

8

Analiz ve sonuç.


Assembly non-encode

9

XOR Encode

10

 

About CanYouPwnMe

Hero!

Follow Me