Thursday, March 10, 2016

Panduan Dasar Hal-Hal Yang Perlu diperhatikan Dalam Membuat Payload #1

Pengertian dan Penjelasan Request, Respone , dan Authentication Key

1. Request Header (execute with delphi)
2. Respone Header (outbounddata with delphi)
3. Authentication Key (input with vpn or ssh key)

1. Request Header (execute with delphi)
- Request Header adalah Sebuah Permintaan Data Client Ke Server Yang melalui gerbang Relay atau syn stream Yang nantinya setiap fram data yang dikirim client akan diproses oleh server apakah cocok dengan dengan Rpc 200 atau tidak karena fram data akan mengacu kepada flag fin yang dihasilkan oleh pesan body web? dan berikut adalah beberapa hal yang mungkin bisa saya bagikan buat rekan-rekan semuanya yang masih sama-sama belajar seperti saya ini :
- Method : method adalah sebuah hal yang wajib dan harus ada pada setiap permintaan data, contoh: GET, HEAD, POST, DELETE ; misalkan untuk HEAD, method HEAD ditujukan untuk Header dan method HEAD ini tidak mengambil data dari pesan tubuh karena memang ditujukan untuk header saja, POST pada dasarnya ini ditujukan untuk sebuah basis halaman, GET bisa dikatakan adalah gabungan antara HEAD + POST, Method DELETE untuk menghapus cacahe atau karakter EOL setelah fram data diminta client.
- ASCII Karakteristik : karakter ascii yang saya maksudkan adalah karaktek eol yang mengandung data CRLF yang sudah umum dikenal dengan kode #13#10 atau \r\n atau bisa ditulis CR= Carriage Return dan LF= Line Feed, nilai CR dalam setiap membuat 1 baris dia tidak akan membuat baris untuk yang keduanya tetapi dia akan mengulanginya terus menerus pada baris tersebut, dan untuk karakter LF dia kebalikan dari CR yaitu dia akan membuat baris baru tanpa mengulanginya lagi dari atas, dan karakter CRLF hanya ditujukan untuk bash berbasis windows, untuk linux sendiri dia menggunakan LF dll, contohnya mungkin anda pernah melihat atau menggunakan string yang sama misal #10#10#10#10 tanpa ada nilai CR=#13 berarti linenya dia menggunakan bash linux, bukan berarti harus digunakan pada OS Linux tetapi bash programnya dia akan menggunakan bash linux, semoga anda paham maksud tersebut :)
- PATCH URL: patch url ini hal yang harus ada dalam setiap uri, patch disini ditulis dengan tanda "/" misalkan http://www.payload.com/asal-jadi.html berarti patchnya adalah /asal-jadi.html atau http://www.payload.com/ patchnya adalah / (lihat belakangnya).
- HTTP Version: http permintaan ini wajib ada dalam setiap request apapun bentuk layernya, tetapi http permintaan ini tergantung http server yang digunakan contohnya HTTP/1.1.
- CONNECT String: method ini ditujukan untuk HTTP PROXY karena method ini memang ditujukan untuk jalur proxy pada versi http/1.0 misal untuk menghubungan ke server vpn, ssh dan layer-layer persamaannya.
- HOST : host disini misalkan www.payload.com berarti dia adalah host utama dalam domain .com, nama domain di dunia ini sangat banyak ada yang lokal ada yang internasional, contoh untuk domain internasional; .com , .org , .net , .edu dll. contoh untuk lokal indo; co.id , or.id, web.id dll. atau misalkan www.payload.com:80 berarti nilai tersebut adalah Header HTTP Host yang dimana server mengijinkan untuk membuka jalur port pada nilai numeric 80, dan setiap nilai port tersebut ada fungsi dan penjelasannya contohnya untuk port 22, berarti itu buat port ssh. dll.
- Skema Protokol: skema yang dimaksud disini adalah setipa uri yang ada memang wajib harus ada skema protokolnya misalkan http (non ssl) dan https (ssl) untuk markup lengkapnya silahkan bisa dilihat pada rpc document lengkapnnya.
- Header Name : ya untuk nama header tidak boleh ada satu katapun yang berhuruf atau teks bertuliskan kafital atau hurup besar kecuali untuk setelah patch memang itu diijinkan.
- Request Non Valid: maksud dari request non valid adalah ada beberapa permintaan yang tidak harus selalu dikirimkan secara wajib contohnya: Proxy-Connection, Connection, Host, Keep-Alive, and Transfer-Encoding serta untuk mengirimkan user agent juga server harus mendukung kompresi gzip dan hal ini yang akan memberikan konten dikodekan oleh server dan pada pengkodean konten disinilah salah satu bagian sebuah bug terbuka.
- Content Length : Content Length atau panjang konten yang dimiliki oleh server header yang bersangkutan, perhitungan panjang konten dihitung per 1 huruf dan per 1 spasi, jika misal anda mengirimkan payload dengan panjang konten yang tidak sesuai dengan yang ada di server maka server akan mengembalikan jawaban 400 Bad Request , kesalahan dalam sebuah replace nilai 400 Bad Request tersebut kebanyakan akan langsung di replace sebenarnya cara terbaiknya adalah menyesuaikan length content dengan length content yang ada diserver bug host, serta ini juga nantinya akan berpengaruh kepada spesifikasi konten sebagai meteran untuk upload progrees pada project anda.

2. Respone Header (outbounddata with delphi)
- Respone Header : adalah sebuah jawaban atau tanggapan yang datangnya dari server setelah klient melakukan permintaan atau request dan jika data yang diminta sesuai dan sama dengan permintaan klien maka server akan memberikan jawaban 200 tetapi kalau tidak sama maka server akan memeberikan jawaban diluar 200 misal 403, 301, 301 dan tergantung pesan kesalahannya apa yang tidak sesuai.
- Content Length : lagi -lagi masalah panjang kontent yang akan diterima klient, karena konsep payload yang kita buat memang mengacu pada bagian ini, karena walaupun misal anda menggunakan koneksi premium tetap saja kode CRLF itu akan anda terima tetapi pengembaliannya memang secara hide atau tidak terlihat, karena konsep CRLF Injection itu adalah memang arahnya kesana seperti halnya XSS Injection, dan untuk respone header ini tidak akan terlau banyak dibahas karena memang banyak faktor yang sudah dijelaskan pada bagian requestnya, karena kunci keberhasil suatu payload ada pada pengiriman data pada seorang kliennya.

3. Authentication Key (input with vpn or ssh key)
- Authentication Key : Pada Authentication Key disini setidaknya ada 4 Authentication Key yang bisa anda ketahui yang dimana yang ke 4 Authentication Key ini memiliki cabangnya masing-masing diantaranya NTLM, Negociation, Basic, Digest dan Proxy Otentication, untuk key ssh sendiri dia berada pada jalur proxy otentication, jika otentication klien tidak tepat maka server akan memberikan jawaban 401 atau yang umumnya adalah Connection established , key disini adalah key atau kunci yang anda gunakan untuk server pihak ketiga yaitu server ssh karena yang kita bicarakan adalah sebuah konsep membuat payload.
- Key MD5 dan Sha : ini adalah beberapa kunci yang mungkin pernah anda temukan pada beberapa protokol HTTP Proxy, kunci disini harus memiliki otentikasi proxy yang sama dengan bit yang sudah ditentukan pada masing masing relaynya baik untuk ssh key maupun untuk bug host key, oleh karena itu kenapa banyak port 22 sekarang ini jarang bisa digunakan karena otentikasi key yang digunakan ssh port 22 beberapa encode atau bilangan binernya banyak yang sudah tidak sama karena seiring perbaikan key pada server server apache, karena operator selluar saat ini servernya banyak yang melakukan perbaikan pada databasenya untuk melihat key setiap suatu bug atau situs silahkan anda cari di robtex.

Praktik Dasar Dalam Implementasi Sebuah Request, Respone , dan Authentication Key

1. Pengenalan Target , dan menganalisa sebuah header kita membutuhkan beberapa trik atau konsep dasar, jadi yang akan saya coba bahas disini adalah hanya seputar dasar-dasarnya saja, karena ada beberapa hal yang memang tidak boleh di publikasikan secara publik dan fullgar, ada beberapa langkah yang bisa anda pelajari, contohnya misal kita akan mencoba menganalisa situs www.google.com , kita akan praktek pakai situs www.google.com tetapi anda jangan berharap bisa tembus kesitu langsung karena itu hanya sample saja buat prakteknya.
2. Mencari Target, dalam mencari target sebuah bug itu sangat mudah jika anda sudah pernah belajar tentang google dork, tekhnik tersebut yang umumnya digunakan oleh para hacker dalam mencari dork dork atau celah celah dalam suatu website, salah satu dork sederhana akan saya berikan contohnya, jadi logikanya anda tidak perlu mencari kesana kemari untuk hanya menemukan listing atau kumpulan sebuah situs yang ingin anda capai dan target, kita akan mencari dan mencoba menggunakan mesin pencari google langsung.

3. Memulai Menyususn Payload: pada point ini kita akan belajar dalam langkah pertama dalam menyusun sebuah payload, yang perlu kita pahami adalah bentuk dasar atau payload yang paling dasar banget itu dari mana, berikut adalah contohnya:
Ini Untuk Bug Server.
Data: 'GET http://www.google.com/ HTTP/2.0';
atau
Data: 'GET http://www.facebook.com/ HTTP/1.1';

Ini Untuk SSH Server.
if (Pos ('CONNECT', Data) <>0) then
atau
if Pos ('CONNECT', Data) <>0 then

Lalu kita coba satukan.
if (Pos ('CONNECT', Data) <>0) then
Data: 'GET http://www.google.com/ HTTP/2.0';
atau
Data: 'GET http://www.google.com/ HTTP/2.0';
if (Pos ('CONNECT', Data) <>0) then
atau
if Pos ('CONNECT', Data) <>0 then
Data: 'GET http://www.facebook.com/ HTTP/1.1';
atau
Data: 'GET http://www.facebook.com/ HTTP/1.1';
if Pos ('CONNECT', Data) <>0 then
Kalau sudah begitu apakah sudah beres, itu masih sangat jauh banget, nah kalau misal sudah begitu lanjut ke point ke 4.

4. Memulai Test Bug Server ,Kita sekarang akan menggunakan www.google.com sebagai bug andalah kita, ini contohnya ye. silahkan buka situs https://urivalet.com/ lalu test situs www.google.com dan berikut adalah contoh hasilnya:
REQUESTING: http://www.google.com
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Host: www.google.com
Connection: Keep-Alive
SERVER RESPONSE: 200 OK
Date: Wed, 27 May 2015 00:42:12 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset="UTF-8"
Content-Encoding: gzip
Server: gws
Content-Length: 17138
X-XSS-Protection: ; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic,p=0 
Diatas adalah contoh sederhananya karena beberapa hasil responenya telah saya hapus, lalu silahkan scrool ke paling bawah lalu pilih model HTML berikut saya ambil bagian potongannya dari atas:
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"><meta content="/logos/doodles/2015/sally-rides-64th-birthday-4870670991228928.2-5710096743006208-ror.gif" itemprop="image"><meta content="Astronaut Sally Ride was born 64 years ago today! #GoogleDoodle" property="og:description"><meta content="http://www.google.com/logos/doodles/2015/sally-rides-64th-birthday-4870670991228928.2-5710096743006208-ror.gif" property="og:image"><meta content="500" property="og:image:width"><meta content="200" property="og:image:height"><title>Google</title><script>(function(){window.google=
Perhatikan baris kode HTML diatas, lalu lihat kembali diatas responenya yang sudah didapat, kita akan fokus dulu ke panjang konten, Content-Length: 17138 jika konten diambil dari nilai patch maka, pengiriman atau request tidak boleh melebihi 17138 baik untuk header tunggal ataupun untuk multi header. contoh header tunggal adalah tidak ada fungsi yang nantinya akan dihubungkan ke bagian execute atau request , contoh multi header adalah dimana fungsi digunakan, umumnya yang saya temui di delphi di tulis addheader dengan result:=header dimana penambahan fungsi tersebut harus anda pasang atau gunakan jika fungsi tersebut anda panggil di bagian execute contohnya:
Contoh Penambahan fungsi header baru yang bisa dipanggil dan perhatikan resultnya:
if (Pos ('CONNECT', Data) <>0) then
Data:=Addheader(Data,'');
Data: 'GET http://www.google.com/ HTTP/2.0';
atau
Data:=Addheader(Data,'');
if (Pos ('CONNECT', Data) <>0) then
Data: 'GET http://www.google.com/ HTTP/2.0';
atau
if (Pos ('CONNECT', Data) <>0) then
Data: 'GET http://www.google.com/ HTTP/2.0';
Data:=Addheader(Data,'');
Nilai Data adalah sebuah Data payload bisa juga data asli bisa juga variablenya karena kita hanya baru menambahkan konsep dasarnya saja, dan urutannya belum kita tentukan, karena masih panjang. kita tadi sudah mengetahui situs google tersebut memiliki panjang konten 17138, sebagai panduan dasarnya 1 CRLF dalam bahas unix atau dalam kode EOL diberikan nilai 78 Karakter atau 78 Huruf untuk nilainnya, karena panjang kontennya mencapai 17138 sekarang anda bagi berapa 17138:78? kalau sudah nemu jawabnnya silahkan simpan dulu hasilnya, sekarang kita kan belum tahu berapa nilai CR, dan LF dari 17138 panjang konten tersebut, dari hasil analisa tools buatan saya sendiri situs google ini panjang kontennya mencapai 18000 dan tidak terdeteksi CRLF Injection dengan Kode Char #13 dan hanya terdeteksi kode Char #10 saja alias LF, Nilai LF,nya berjumlah 6 Biji jadi LF x 6 = 6 Line Feed,code contoh html diatas karena kepanjangan berikut saya ringkaskan untuk nilai 6 LF tersebut:
<!doctype·html>.....bla..bla..bla....delete·h[g]):(window.google&&window.google.vel&&(LF)
bla...bla..bla.......return·0;d=c}_gjwl.href="/search?"+a+"&cad=h";return·1}return·0}(LF)
bla..bla.function(){window.n·&&·window.n();if·(document.images){new·Image().src=src;}(LF)
bla..bla...bla......bla..............focus();document.gbqf&&document.gbqf.q.focus();}(LF)}(LF)
bla...bla...bla...bla.........bla..............xi){window.setTimeout(google.j.xi,0);}(LF)
</script></div></body></html>
Setiap nilai LF dihitung setelah kode } atau setelah nilai nilai N nilai N disini adalah nilai yang 17138 atau 18000 karena pergeserannya hanya sedikit, ini hanya sebagai pebanding saja, nilai N adalah 17138:78= 219 sekitar ituan jumlahnya,,, nah syarat agar payload bisa konek adalah tidak boleh lebih dari 219 huruf, didelphi yang kosong atau tidak ada tulisannya jangan anggap anda itung, jadi yang diitung itu yang ada tulisannya saja tapi hanya yang memang difungsikan saja yah,, sekarang kan dah dapat tuh nilai 219 tinggal dikurangi 1 nilai CRLF yaitu 78, jadi 219-78= 141.. jadi payload yang akan sangat mudah konek adalah di excute harus berada diantara 141 hingga 219 karakteristik, dan itu hanya sebagai acuan utamanya saja, sebenarnya cara nentuinnya sangat banyak ragamnnya, ini hanya sebagai pedoman dasar saja dan lumayan agak agak ribetan dikit. he he,, udah ada 2 petunjuk kan, next..

5. Bagian Menyusun kerangka dari Hasil analisa Char dan Nilai Jumlah karakter. Karena Pengujian ini saya contohkanlah menggunakan Proxy ori jadi jenis payload yag saya pilih pertama adalah ini:
if (Pos ('CONNECT', Data) <>0) then
Data:=Addheader(Data,'');
Data: 'GET http://www.google.com/ HTTP/2.0';
Karena saya memilih tersebut karena jalurnya adalah if (Pos ('CONNECT', Data) <>0) then (PROXY ORI) > Data:=Addheader(Data,''); (NEW HEADER) > Data: 'GET http://www.google.com/ HTTP/2.0'; (HEADER) Dan kita coba implementasikan.
Karena dari hasilnya ada 3 kondisi LF atau #10 jadi itu ada 3 peluang yang bisa saya terapkan.
var
Data ;string;
Begin
if (Pos ('CONNECT', Data) <>0) then
Data:=Addheader(Data,''+#10);
Data: 'GET http://www.google.com/ HTTP/2.0'+#10#10#10#10;
end else
end;
Contoh diatas baru 5 LF perhatikan dengan seksama tulisan dibawah ini, yang diambil dari atas.
&&(LF)
}(LF)
}(LF)
}(LF)}(LF)
}(LF)
Nah 1 kondisi lagi atau 1 CRLF lagi kita tidak boleh ditambahkan lagi ke yang sudah ada diatas, berarti kita harus tambahkan variable baru apa gitu, teks apa gitu? karena jika ditambahkan 1 LF lagi ke payload yang sudah dimasukin LF Tersebut nilainya kurang dari 141 karakter,, silahkan lihat lagi hasil nilai 141 didapat dari mana? karena situs google ini tidak debug atau log level atau log server gitu jadi kita tidak bisa menambahkan opsi write pada payload tersebut, jadi kita akan tambahkan sebuah request yang memiliki karakter agak panjangan dikit misalkan user agent... jadi hasilanya:
var
Data ;string;
Begin
if (Pos ('CONNECT', Data) <>0) then
Data:=Addheader(Data,''+#10);
Data: 'GET http://www.google.com/ HTTP/2.0'+#10#10#10#10'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'+#10;
end else
end;

(Guide Yang Banyak Membantu Thanks For Someone)



No comments:

Post a Comment