Oddiy XSS hujumini namoyish qilish

Oddiy XSS (Cross-Site Scripting) ni ko‘rsatish uchun OffSec WordPress instansiyasiga oddiy hujumni amalga oshiramiz. Ushbu WordPress o‘rnatilmasida Visitors nomli plaginni ishlatadigan sayt mavjud va u stored XSS (ya’ni, saqlanadigan XSS) zaifligiga ega.

Plaginning asosiy vazifasi — saytdagi tashrif buyuruvchilar haqida ma’lumotlarni (IP, manba va User-Agent kabi) saqlashdir.

1

Plagin manba kodini uning rasmiy vebsaytidan yuklab olish mumkin.

2

Agar database.php faylini tekshirsak, foydalanuvchi ma’lumotlari WordPress ma’lumotlar bazasida qanday saqlanishini ko‘rishimiz mumkin:

function VST_save_record() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'VST_registros';

	VST_create_table_records();

	return $wpdb->insert(
		$table_name,
		array(
			'patch' => $_SERVER["REQUEST_URI"],
			'datetime' => current_time( 'mysql' ),
			'useragent' => $_SERVER['HTTP_USER_AGENT'],
			'ip' => $_SERVER['HTTP_X_FORWARDED_FOR']
		)
	);
}

Listing 24 – Visitors plagini yozuv saqlash funksiyasini tekshirish

Ushbu PHP funksiyasi HTTP so‘rovlarining turli header’larini, xususan User-Agent ma’lumotini ajratib olib, ularni useragent maydoniga saqlaydi.

Keyingi bosqichda, WordPress administrator har safar plaginni ochganida, start.php faylidagi quyidagi kod bajariladi:

$i=count(VST_get_records($date_start, $date_finish));
foreach(VST_get_records($date_start, $date_finish) as $record) {
    echo '
        <tr class="active" >
            <td scope="row" >'.$i.'</td>
            <td scope="row" >'.date_format(date_create($record->datetime), get_option("links_updated_date_format")).'</td>
            <td scope="row" >'.$record->patch.'</td>
            <td scope="row" ><a href="<https://www.geolocation.com/es?ip='.$record->ip.'#ipresult>">'.$record->ip.'</a></td>
			<td>'.$record->useragent.'</td>
        </tr>';
    $i--;
}

Listing 25 – Visitors plagini yozuvlarni ko‘rsatish funksiyasi

Yuqoridagi koddan ko‘rinib turibdiki, useragent qiymati bazadan olinadi va to‘g‘ridan-to‘g‘ri HTML <td> (table data) tegiga joylashtiriladi, hech qanday tozalash (ya’ni sanitizatsiya) yoki kodlash (encoding) ishlovlarisiz.

Bu juda muhim: User-Agent sarlavhasi foydalanuvchi tomonidan boshqariladi. Demak, biz bu joyga JavaScript kodi yozib, alert() funksiyasi orqali pop-up oynacha chiqishini tashkil qilishimiz mumkin. Ushbu usul oddiy va ko‘rinadigan ta’sirga ega bo‘lgani sababli, XSS zaifligini tekshirishda juda keng qo‘llaniladi.

Garchi bu yerda biz oq-quti (white-box) test o‘tkazgan bo‘lsak ham, xuddi shu zaiflikni qora-quti (black-box) yondashuvi orqali, masalan HTTP header’larni fuzzing qilish orqali ham topishimiz mumkin edi.

XSS hujumini amalga oshirish:

  1. Burp Suite ni proksi sifatida sozlaymiz va Intercept’ni o‘chirib qo‘yamiz.
  2. So‘ng Firefox orqali http://offsecwp/ saytiga tashrif buyuramiz.
  3. Burp’da Proxy > HTTP History ga o‘tamiz, kerakli so‘rovni o‘ng tugma bilan bosamiz va Send to Repeater ni tanlaymiz.