Skip to content
This repository has been archived by the owner on Jan 18, 2022. It is now read-only.

HelpUiDialogsBeanshell

psiinon edited this page Feb 8, 2018 · 1 revision

Dialog Konsol BeanShell

Pengantar/ Apa itu BeanShell

BeanShell adalah shell Java interaktif yang dapat digunakan untuk mengeksekusi skrip BeanShell. Skrip ini adalah bentuk sederhana dari Java yang menggunakan berbagai elemen dari sintaks Java, tapi dalam format skrip yang lebih sederhana. Semua kode Java adalah kode BeanShell yang valid. Integrasi BeanShell dalam OWASP ZAP memungkinkan Anda untuk menulis skrip menggunakan fungsi-fungsi ZAP dan kumpulan data. Ini akan menjadi fitur yang sangat mumpuni untuk menganalisa aplikasi web.

Konsol BeanShell

Konsol dimulai dari menu Perkakas, dan berisi layar belah di mana setengah di atas adalah konsol BeanShell interaktif dan setengah di bawah adalah penyunting teks sederhana. Untuk skrip yang rumit, Anda disarankan untuk menggunakan penyunting Java. Skrip dapat dimuat, disimpan, dan dievaluasi dari penyunting.

Ketika BeanShell mulai maka tersedia sejumlah obyek dari ZAP untuk digunakan, yaitu:

  • singleton Model, melalui obyek bernama model
  • pohon SiteTree dari situs saat ini melalui obyek sites
  • contoh HttpSender melalui obyek sender

Perhatikan bahwa BeanShell adalah jenis loosely typed. Oleh karena itu, tidak perlu untuk menyatakan variabel sebelum menggunakannya - hal ini membuat skrip sedikit lebih ringkas dari Java biasa. Tapi tentu saja, Anda diperbolehkan jika Anda tidak ingin menentukan jenisnya.

Menggunakan Peta Situs

Mari kita mulai dengan sesuatu yang berguna dan khas: Iterate melalui semua node situs dan periksa keberadaan berkas. Skrip yang sudah dibuat yang menyelesaikan skrip ini, pilih Load dan pilih berkas example.tree.bsh.

import org.apache.commons.httpclient.URI;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.model.*;

Pohon () {
	
	find (SiteNode node, String resource) {
		if (node == null) return;
		ref = node.getHistoryReference();
		if ((ref != null) && (!node.isLeaf())) {
			checkExists(ref, resource);    
		}
		for (i=0;i<node.getChildCount();i++) {   
			try {
				find (node.getChildAt(i), resource);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	checkExists(ref, resource) {
		u = ref.getHttpMessage().getRequestHeader().getURI().toString() + "/" + 
sumber;
		msg = ref.getHttpMessage();
		msg.getRequestHeader().setURI(new URI(u));
		sender.sendAndReceive(msg, true);
		if (msg.getResponseHeader().getStatusCode() == 200) {
			print("Found: "+msg.getRequestHeader().getURI().toString());
		}
	}

	kembalikan ini;
}

Sebelum mengeklik Evaluasi, terlebih dahulu ramban ke situs melalui ZAP untuk mengisi pohon:

Sekarang klik pada evaluasi untuk mengeksekusi skrip yang ada di penyunting. Jika tidak ada kesalahan, maka sekarang Anda dapat mulai mengunakan obyek yang ditentukan dalam skrip dengan cara menjalankan perintah-perintah ini:

t = Tree();

Ini akan membuat obyek Pohon baru dan menetapkan referensi ke t.

t.find(sites.getRoot(), "index.html");

Panggil metode find pada t, yang akan mengambil SiteNode sebagai argumen pertama dan sumber sebagai kedua. Dalam hal ini, metode tersebut akan iterate melalui semua node dalam pohon, karena kita mulai dari akar, dan akan menemukan berkas index.html.

Alih-alih iterasi melalui semua node, kita juga bisa memilih untuk memulai suatu node khusus dengan menggunakan metode findChild.

Hal ini akan memberikan Anda gambaran mengenai kemampuan BeanShell dalam ZAP. Tapi untuk memanfaatkan sepenuhnya, Anda perlu mengenal API internal dan fitur-fitur BeanShell. BeanShell telah dibuat sedemikian rupa untuk memungkinkan akses penuh terhadap semua obyek dan metode internal - bahkan yang pribadi sekalipun.

Permintaan HTTP Sederhana

Pada contoh berikut, kita membuat dan mengirim permintaan HTTP langsung di konsol interaktif:

TBD

Untuk menggunakan sepenuhnya kemampuan BeanShell, Anda perlu mengenal fitur-fitur ZAP. Obyek sender adalah contoh yang sama seperti yang digunakan oleh Manual Request Editor dan karenanya akan otomatis menggunakan pengaturan proksi yang ditetapkan dalam konfigurasi ZAP.

TBD

Tips

Gunakan perintah unset(String) untuk menghapus variabel, metode, atau obyek yang dinyatakan. Hal ini berguna jika Anda ingin mengganti metode pernyataan dalam namespace saat ini. Perhatikan bahwa perintah menggunakan argumen String, bukan Obyek, jadi untuk menghapus obyek t yang kita pakai di atas, harusnya: unset("t"); dan bukan unset(t);

Diakses melalui

     Menu Perkakas tingkat atas Menu 'Konsol BeanShell'

Lihat juga

     Ikhtisar UI untuk ikhtisar antarmuka pengguna
     Dialog untuk rincian dialog dan sembulan
Clone this wiki locally