THT DUYURU

chat
Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

ugursuz reklam
takipci
Seçenekler

Command Injection - Python Django Örneği

b0mb - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
18
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
220
Ticaret:
(0) %
12
29094
10-09-2017 13:03
#1
Merhabalar,

Kısa bir süre önce Django’ya başladım. Kendimi geliştirmek adına ufak bir kaç uygulama yazdım. Bu yazı, Command Injection açığı ve Django’da örneğini içeriyor olacak. Tüm dosyalara GitHub üzerinden ulaşabilirsiniz.

Command Injection Nedir?

Command injection, uygulamadan kaynaklı bir hata sayesinde uygulamanın bulunduğu sistem üzerinde keyfi komut çalıştırma saldırısıdır. Command injection saldırıları, alınan verinin herhangi bir kontrolden geçirilmeden direk sistemde çalıştırılması ile oluşur.

Command injection, Code injection ile karıştırılmamalıdır. Code injection saldırılarında, uygulamanın yazıldığı dilde komutlar ile çalışırsınız fakat command injection saldırılarında direk sistem komutları ile çalışırsınız.

Python ile örneği
Kod:
import os

def ping(host):
os.system(’ping -w 3 ’ + host)

Gördüğünüz üzere, hiçbir önlem alınmadan host parametresinin aldığı değer sistemde ping komutu ile çalıştırılmış. Hemen nasıl istismar edebileceğimize bakalım bu kodu,


İşte! Gördünüz mü? Biz, host parametresine sadece google.com yazmak yerine, google.com && uname -a yazdık ve bu sayede ping işlemine ek olarak uname -a komutunu da sistemde çalıştırmış olduk

Django Uygulaması

Hemen template klasörümüze formun yer alacağı dosyayı oluşturalım.


Şimdi forms dosyamıza ihtiyacımızı görecek bir form ekleyelim.


Şimdi views dosyamıza, ping fonksiyonunu ekleyeceğiz. Yani arkada işleri halledecek fonksiyonu yazacağız şimdi.


Resimde görüldüğü gibi, ping fonksiyonu, request adında bir parametre alıyor. Eğer gelen istek POST ise formdan gelen değeri ipaddress değişkenine atıyor. Şimdi fark ettim de for döngüsü ile liste oluşturmaktansa direk list() fonksiyonunu kullanabilirdim. Hatta elimdeki veri sözlük türünde olduğu için request.POST[’ipaddress’] şeklinde de istediğim veriye ulaşabilirdim. Neden öyle yaptığımı hatırlamıyorum :P

İstediğimiz değeri aldıktan sonra, alınan değeri ping -w 5 ile birleştirip hiçbir sorgu olmadan sistemde çalıştırıp çıktıyı result değişkenine atamışım. Ardından çıktıyı <pre> tagı içine alıp HttpResponse objesi içinde döndürmüşüm. Herhangi bir template kullanmaya gerek duymadım.

Çalıştırmadan yapmamız gereken bir şey daha var, urls dosyasına ekleme yapmak.


Evet, artık yazdığımız uygulamayı çalıştırıp deneyebiliriz. Hemen çalıştıralım.


Uygulamamızı başlattık, bağlanıp kontrol edelim.

Evet! Uygulamamız çalışıyor. Hemen istismar etmeye çalışalım uygulamayı. Ping işlemi ve bizim çalıştıracağımız komut arasında bir satır boşluk olsun diye araya echo ekledim.


Tam da istediğimiz gibi... Ping işleminin yanında verdiğimiz uname -r komutu başarılı bir şekilde çalıştı. Bundan sonra sistemi istediğiniz gibi kontrol edebilirsiniz.

Alınabilecek Önlemler

Alınabilecek en basit önlem, gelen verinin önceden izin verilen karakterler içinde olup olmadığını kontrol etmek. İzin verilen karakterler şunlar olacak:
"abcdefghijklmnopqrstuvwxyz0123456789.". Hemen örneğini gösterelim.


Eğer ipaddress içerisinde yer alan herhangi bir harf izin verilen harflerin bulunduğu chars değişkeninde yoksa, sistemde herhangi bir şey çalıştırmıyor ve ekrana Neyin peşindesin bro!? yazdırıyor :P


Veee...


Eğer uslu uslu istenilen gibi bir değer girersek, program düzgün çalışacaktır.

Biraz basit bir konu oldu ama belki birileri Django’ya meraklanıp öğrenmeye başlayabilir

Yararlanılan kaynaklar:
blackvkng.github.io
Konu 16player16 tarafından (23-05-2020 13:24 Saat 13:24 ) değiştirilmiştir.
Pentester - ait Kullanıcı Resmi (Avatar)
Researcher
Üyelik tarihi:
09/2016
Mesajlar:
1.249
Konular:
94
Teşekkür (Etti):
652
Teşekkür (Aldı):
528
Ticaret:
(0) %
10-09-2017 13:05
#2
Komut çalıştırma derdindeyim bro, eline sağlık.
---------------------
"Benim naçiz vücudum, bir gün elbet toprak olacaktır. Fakat Türkiye Cumhuriyeti, ilelebet payidar kalacaktır."
Mustafa Kemal ATATÜRK
b0mb Teşekkür etti.
b0mb - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
18
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
220
Ticaret:
(0) %
10-09-2017 13:31
#3
Alıntı:
Pentester´isimli üyeden Alıntı Mesajı göster
Komut çalıştırma derdindeyim bro, eline sağlık.
Teşekkür ederim
steelien - ait Kullanıcı Resmi (Avatar)
Yeni Üye
Üyelik tarihi:
08/2017
Nereden:
Tor Network
Mesajlar:
378
Konular:
55
Teşekkür (Etti):
72
Teşekkür (Aldı):
52
Ticaret:
(0) %
10-09-2017 13:32
#4
Eline sağlık hocam
---------------------
┏╋━━━━━━━━━━━━◥◣◆◢◤━━━━━━━━━━━╋┓
"Today is a revulation is starting. AEO Was Here "
┗╋━━━━━━━━━━━━◥◣◆◢◤━━━━━━━━━━━╋┛
Zeref - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
04/2014
Nereden:
el psy congr
Yaş:
23
Mesajlar:
1.961
Konular:
80
Teşekkür (Etti):
193
Teşekkür (Aldı):
317
Ticaret:
(0) %
10-09-2017 15:03
#5
tespit etmek için 8cin pratik bir yolda öğreteydin keske
--------------------- asdasdasdasrtewter
TiginBey - ait Kullanıcı Resmi (Avatar)
Yeni Üye
Üyelik tarihi:
03/2017
Nereden:
TURAN
Mesajlar:
287
Konular:
8
Teşekkür (Etti):
24
Teşekkür (Aldı):
47
Ticaret:
(0) %
10-09-2017 15:04
#6
Eline sağlık.
---------------------
GAZİ MUSTAFA KEMAL ATATÜRK
Hacknology - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
10/2015
Nereden:
rm -rf /
Mesajlar:
2.702
Konular:
151
Teşekkür (Etti):
930
Teşekkür (Aldı):
1246
Ticaret:
(0) %
10-09-2017 15:09
#7
//Sabit, ellerine sağlık
---------------------
I surrender my soul
Odin hear my call

flag{Bur4si_b1r_0yun_park1}

hacknology@hacknologyroot:~/
b0mb - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
18
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
220
Ticaret:
(0) %
10-09-2017 19:28
#8
Teşekkür ederim
Phoique 7 - ait Kullanıcı Resmi (Avatar)
Yeni Üye
Üyelik tarihi:
03/2017
Nereden:
Manisa
Mesajlar:
493
Konular:
23
Teşekkür (Etti):
49
Teşekkür (Aldı):
149
Ticaret:
(0) %
11-09-2017 00:29
#9
Sanırım django ile ilgili ilk defa bir konu gördüm. Eline sağlık. Önemli bir açık
---------------------
JavaScript Developer
b0mb - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
18
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
220
Ticaret:
(0) %
12-09-2017 15:51
#10
Alıntı:
Phoique 7´isimli üyeden Alıntı Mesajı göster
Sanırım django ile ilgili ilk defa bir konu gördüm. Eline sağlık. Önemli bir açık
Teşekkür ederim. Ciddi bir açık olsa da, böyle bir açık bırakan programcı, kendine programcı demesin :P

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler