Sunday, September 24, 2006

Website Security - Code Injection and XSS

ที่มา : zone-it.com, unixwiz.net

# Code injection : เป็นเทคนิคที่สามารถทำให้โค้ด ทำงานอย่างอื่นได้นี่เป็นเทคนิคที่พวกแฮกเกอร์ และแครกเกอร์ใช้เป็นประจำเพื่อที่จะเข้าไปยังระบบโดยไม่ได้อนุญาติ

ตัวอย่างการ Injection

# SQL Injection

# มีเว็บเพจอยู่หน้าหนึ่ง มีช่องสองช่อง ให้ผู้ใช้ใส่ Username และ Password

# เบื้องหลังโปรแกรมนั้น จะรันคำสั่ง SQL เพื่อเช็ครหัสผ่านของผู้ใช้

SELECT Username FROM Users
WHERE username = '$username' AND password = '$password'

# ถ้าเราใส่ข้อมูลว่า username เป็น someone และใส่ password เป็น ' OR 1 = '1 คำสั่ง SQL จะเป็น

SELECT Username FROM Users
WHERE username = 'someone' AND password = ' ' OR 1 ='1'

# จากคำสั่งที่เห็น มันจะส่งค่าที่เป็นจริงมาเสมอครับ

# การป้องกันเบื้องต้น

1. หลีกเลี่ยงตัวเเปรเเบบ Global

2. พยายามใช้หน้าใดหน้านึงเป็นหน้าหลักเเล้วค่อย Include หน้าอื่นเอา

3. หมั่นกรองตัวแปร string ด้วย htmlentities( ) strip_tags( ) utf8_decode( ) htmlspecialchars ( )
add/stripslashes ( ) md5 ( ) escapeshellcmd ( ) ฯลฯ

4. รัดกุม หรือ หลีกเลี่ยง เรื่อง cross-site scripting หรือพวก ระบบ back-end

5. เน้น Define ( ค่าคงที่ ) แต่ ลด Session

6. ใช้การ encrypt / decrypt เข้ามาช่วยในการเก็บข้อมูลใน DB

7. เป็นไปได้ให้ เช็ค ip ของผู้เข้าใช้ ส่วนของ admin เลยยิ่งดี

# PHP Injection
สมมติเรามีโค้ด

<form>
<select name="COLOR"> &ltoption value="red">red &ltoption value="blue">blueการป้องกัน - หรองข้อมูลให้เป็นอย่างใดอย่างนึงเท่านั้น

# Shell Injection : การทำให้โค้ด รับโปรแกรม Unix เอง อย่างเช่น เราเขียนโปรแกรมมาให้มันส่งข้อความจากโปรแกรม funnytext

# โปรแกรมนี้ สามารถ Inject ได้หลายวิธีครับ

`command` จะรันคำสั่งอีกคำสั่งได้

$(command) จะรันคำสั่งอีกคำสั่งได้

;command จะรันคำสั่งอีกคำสั่งได้ และส่งค่ากลับไปยังเซอร์เวอร์

command จะรันคำสั่งอีกคำสั่งได้ และส่งค่ากลับไปยังเซอร์เวอร์

command จะรันคำสั่งอีกคำสั่งได้ และส่งค่ากลับไปยังเซอร์เวอร์

&& command จะรันคำสั่งอีกคำสั่งได้ และส่งค่ากลับไปยังเซอร์เวอร์

> /home/user/phpguru/.bashrc จะเป็นการแก้ไฟล์ /home/user/phpguru/.bashrc ด้วยคำแปลกๆ ที่ผู้ใช้ส่งไป

< /home/user/phpguru/.bashrc จะเป็นการนำไฟล์ /home/user/phpguru/.bashrc มาเป็น command line

# Cross site scripting (XSS) : Cross Site Scripting เป็นการรันข้อมูลอันตรายบนเว็บอีกแบบ มันเคยมีตัวย่อว่า CSS แต่ว่า มันซ้ำกับ , Cascading Style Sheets และก้อ Content-Scrambling System จึงเปลี่ยนชื่อเป็น XSS

# เหตุการจำลอง

XSS แบบที่ 0

1. แมลอรี่ส่งลิ้งค์ไปให้อลิซ ไม่ว่าจะโดย e-mail หรือ msn หรืออะไรก้อตาม ลิ้งค์นั้นเป็นเว็บที่มีโค้ดไม่ดีอยู่

2. อลิซ คลิกที่ลิ้งค์

3. JavaScript ในเพจนั้น รันข้อมูล และลงโปรแกรมต่างๆ ในเครื่อง

4. โปรแกรมสามารถรันในเครื่องได้เลย

5. โปรแกรมสามารถเจาะข้อมูลต่างๆ ได้หมด

XSS แบบที่ 1

1. อลิสเข้าเว็บหนึ่งเป็นประจำ เป็นเว็บของบ๊อบ

2. แมลอรี่รู้ว่าเว็บบองลบ๊อบ มีรูรั่ว XSS

3. แมลอรี่เข้าสู่ระบบผู้ควบคุมแล้วส่งลิ้งค์ไปให้อลิซ โดยที่ให้เหมือนว่าส่งมาจากบ๊อบ

4. อลิซคลิกที่ลิ้งค์

5. หากโปรแกรมอยู่บนโดเมนของบ๊อม โปรแกรมสามารถที่จะส่งข้อมูล เช่น รายการสั่งซื้อ รหัว เครติต หรือข้อมูลในการล๊อกอินได้ หรือไม่ โปรแกรมมาจจะลงข้อมูลต่างๆ ก้อได้

XSS แบบที่ 3

1. บ๊อบโฮสต์เว็บบอร์ดไว้

2. แมลอรี่รู้ว่าเว็บบองลบ๊อบ มีรูรั่ว XSS คือข้อมูลที่พิมพ์ลงไป ไม่ผ่าน HTMLSpecialChars

3. แมลอรี่ส่งลิ้งค์โค้ดไปยังเว็บบอร์ด แล้วตั้งหัวข้อให้คนมาอ่าน

4. พอคนเข้ามาดู โปรแกรมจะ.....

# โค้ดที่สามารถให้ในการ Injection สามารถดูได้ที่เว็บนี้ ha.ckers.org

No comments:

Post a Comment

Popular Posts