development of web application’s developed with php and ......
TRANSCRIPT
Development of Web Application’s developed with PHP and database MySQL Vulnerability Detecting and Risk Assessment
การพฒนาโปรแกรมคนหาชองโหวและประเมนความเสยงในเวบแอปพลเคชน ทพฒนาดวย PHP และใช ฐานขอมล MySQL
วชระ พงศศร Watchara Pongsri
สารนพนธฉบบนเปนสวนหนงของการศกษา หลกสตรวทยาศาสตรมหาบณฑต สาขาวชาวศวกรรมเครอขาย
คณะวทยาการและเทคโนโลยสารสนเทศ มหาวทยาลยเทคโนโลยมหานคร
ปการศกษา 2555
I
หวขอโครงงาน การพฒนาโปรแกรมคนหาชองโหวและประเมนความเสยงในเวบ
แอปพลเคชนทพฒนาดวยภาษา PHP และใช ฐานขอมล MySQL นกศกษา นายวชระ พงศศร รหสนกศกษา 5417660054 ปรญญา วทยาศาสตรมหาบณฑต สาขา วทยาศาสตรมหาบณฑต สาขาวชาวศวกรรมเครอขาย พ.ศ. 2555 อาจารยควบคมโครงงาน อาจารย พงษสรย ลมมณวจตร
บทคดยอ
สารนพนธฉบบนน าเสนอเกยวกบการพฒนาโปรแกรมคนหาชองโหว และเสยงในเวบแอปพลเคชนทพฒนาดวย PHP และใชฐานขอมล MySQL ในโครงงานนจะพดถงรปแบบการคนหาชองโหวทเปน เอสควแอล อนเจคชน (SQL Injection) และ ครอสไซทสครปปง (Cross-site scripting)เพอใหรถงวธการโจมตในรปแบบตางๆ รวมถงน าไปใชปองกนและเพมประสทธภาพความปลอดภยของเวบแอปพลเคชน ในการศกษาโครงงานน จะใชโปรแกรมวชวลสตดโอ 2012 และภาษา C# ในการพฒนา
II
Project Title Development of Web Application’s developed with PHP and database MySQL Vulnerability Detecting and Risk
Assessment Student Watchara Pongsri Student ID 5417660054 Degree Master of Science Program Network Engineering Year 2012 Thesis Advisor Pongsuree Limmaneewichid
ABSTRACT Thematic this presentation about the development of application vulnerabilities in web application development with PHP and database MySQL. In this project will discuss patterns of vulnerabilities as a SQL injection applications and Cross-site scripting in order to know how to attack in different ways. Fund to protect and enhance the security of web applications. In this project. To use Visual Studio 2012 and C#.NET development language.
III
กตตกรรมประกาศ
การศกษาคนควาในการท าโครงงานครงนสาเรจลลวงไปไดดวยความอนเคราะหและชวยเหลอ
จากบคคลหลายๆทาน โดยเฉพาะอยางยง อาจารยทปรกษาโครงงาน อาจารยพงษสรย ลมมณวจตร ท กรณาใหค าแนะนาและขอเสนอแนะ อนเปนประโยชนตอการน าไปท าโครงงาน จนท าใหโครงงานนเสรจสมบรณ
นอกจากนขอมลจากเวบไซตตางๆ ซงผจดทาไดศกษาคนควาบนอนเตอรเนต ผจดท าตองขอ ขอบพระคณในความกรณาของทกทานดวย
สดทายนขอขอบพระคณอนยงใหญของบดา-มารดา ตลอดจนทกคนทใหการสนบสนน และเปนกาลงใจใหจนงานสาเรจลลวงไปไดดวยด
วชระ พงศศร
พฤษภาคม 2556
IV
สารบญ หนา
บทคดยอภาษาไทย …………............................................................................................................I บทคดยอภาษาองกฤษ………………………………………………………………………………………II กตตกรรมประกาศ………………………………………………………………………………...………..III สารบญ ………................................................................................................................................IV สารบญรป ………………………………………………………………………………………………....VII สารบญตาราง ………………………………………………………………………………………………VI บทท 1 บทน า………………………………………………………………………………………………..1
1.1 กลาวน า………………………………………………………………………………………...1 1.2 ความเปนมาและความส าคญของปญหา………………………………………………………1 1.3 วตถประสงคโครงงาน………………………………………………………………………….1 1.4 ขอบเขตของโครงงาน………………………………………………………………………….2 1.5 ประโยชนทคาดวาจะไดรบ…………………………………………………………………….2
1.6 แผนเวลาโครงงาน……………………………………………………………………………..3 บทท 2 ทฤษฎและเทคโนโลยทเกยวของ…………………………………………………………………..4 2.1 ชองโหว Vulnerability…………………………………………………………………………4
2.2 การประเมนความเสยง (Risk Assessment)..………………………………………………..5 2.2.1 ระดบของความ (Risk Level)………………………………………………………5
2.3 ฐานขอมล (Database)………………………………………………………………………...5 2.3.1 ฐานขอมลมายเอสควแอล (MySQL)………………………………………………5 2.4 เวบเซรฟเวอร…………………………………………………………………………………..7
2.5 ภาษาพเอชพ (PHP Language)……………………………………………………………...8 2.6 ค าสงเอสควแอล………………………………………………………………………………..8 2.7 ชองโหว SQL Injection……………………………………………….…………………….....9 2.7.1 การปองกนการโจมต SQL injection แบบทวไป………………………………….9 2.7.2 การปองกนการโจมตดวย SQL Injection………………………………………..14
2.8 ชองโหวของ Cross-site scripting (XSS)…………………………….……………………..14 2.8.1 การปองกนการโจมตดวย Cross-site scripting (XSS)....................................17
V
สารบญ (ตอ)
หนา บทท 3 การออกแบบโครงงาน…………………………………………………………………………….18
3.1 แนวทางการออกแบบระบบ………………………………………………………………….18 3.2 องคประกอบในการพฒนาโครงงาน…………………………………………………………18
3.3 คณสมบตของโปรแกรม……………………………………………………………………...20 3.4 ขนตอนการท างานของโปรแกรม…………………………………………………………….20
3.5 การออกแบบโปรแกรม……………………………………………………………………….21 3.6 โครงสรางตาราง……………………………………………………………………………...24 บทท 4 การทดลองและผลการทดลอง……………………………………………………………….……26 4.1 เครองมอทใชในการทดลอง……………………………………………………………….…26 4.2 การทดลอง…………………………………………………………………………………...26 4.2.1 คนหา URL ทงหมดของเวบเปาหมาย…………………………………………..27 4.2.2 คนหาฐานขอมลในระบบเวบแอปพลเคชน (Database Scanner)..…….……...27 4.2.3 คนหา Information ของฐานขอมล MySQL……………………………….…….28 4.2.4 คนหารหสผานของฐานขอมล MySQL…………………………………….…….29 4.2.5 คนหาตารางของฐานขอมล (Tables Scanner)…………………..…….……….30 4.2.6 คนหาคอลมน (Column Scanner……………………………………….……….31 4.2.7 คนหาขอมลจากฟวดขอมล (Data Scanner)…………………………………....32 4.2.8 คนหาขอมลจากไฟลทอยบนเวบเชอเวอร (Get Local file)………….………….33 4.2.9 รายงาน (Report)………………………………………………………………....34 บทท 5 สรปผลการด าเนนงาน…………………………………………………………………….………35 5.1 ผลการด าเนนโครงงาน……………………………………………………………….……...35 5.2 ปญหาและแนวทางแกไข…………………………………………………………….………35 5.2.1 ปญหา……………………………………………………………………………..35 5.2.2 แนวทางแกไข……………………………………………………………………..35 5.3 ขอเสนอแนะ…………………………………………………………………………………..35 เอกสารอางอง……………………………………………………………………………………………....36 ภาคผนวก ก. ……………………………………………………………………………………………...37 โครงสรางพนฐานของภาษา SQL ……………………………………………………………….38
VI
สารบญตาราง
ตารางท หนา
1.1 แสดงระยะเวลาการด าเนนโครงงาน…………………………………………………………………...3
3.1 แสดงรายละเอยดผลการคนหาชองโหว (Project)…………………………………………………..24
3.2 แสดงรายละเอยดตารางในการเกบรปแบบการโจมตดวย SQLInjection (Sqlinj_Pattern)……….24
3.3 แสดงรายละเอยดตารางในการเกบคาคอนฟก (Path_configs)………………………………….....24
3.4 แสดงระดบของการประเมนความเสยง……………………………………………………………….25
VII
สารบญรป
รปท หนา 2.1 ฐานขอมล MySQL………………...…………………………………………………………………....7 2.2 โครงสรางของเวบเชรฟเวอร…………………………………………………………………………....7 2.3 แสดงหนาตา Webserver ทรน PHP บน IIS.…………………………………………………………8 2.4 แสดงรปแบบค าสงทน าไปใชในการท า SQL Injection………………………………………………..9 2.5 แสดงตวอยางการสงค าสงเพอเรยกด Information ตางๆ ของ MySQL ผานทาง SQL Injection...12 2.6 แสดงผลลพธจากการใชค าสง SQL “LOAD_FILE” เพอท าการโหลดไฟลจากเครองเปาหมาย...…13 2.7 แสดงผลลพธจากการใชค าสง SQL “LOAD_FILE” เพอท าการโหลดไฟล /etc/password ……….14 2.8 แสดงจากการใชค าสง SQL “LOAD_FILE” เพออานไฟล Configuration บน Server ……………14 2.9 แสดงผลคกกทเรยกผานภาษา JavaScript…………………………………………………………..15 2.10 แสดงระดบของการโจมตผานชองโหว XSS…………………………………………….………….16 2.11 แสดงลกษณะตวอยาง Code ทฝ งไปหนาเวบเพจเพอขโมย Cookie ของผใชงาน……….……...16 3.1 โปรแกรมไมโครซอฟทเวอชวสตดโอ 2012…………………………………………………………..19 3.2 ชดพฒนาโปรแกรมใช .Net Framework 3.5 (Windows Application)……………………………..19 3.3 แสดงขนตอนการใชงานโปรแกรม…………………………………………………………………….20 3.4 แสดงหนาตาโปรแกรมหลก…………………………………………………………………………...21 3.5 โปรแกรมในสวนของ SQL Injection แบบ Manual…………………………………………………22 3.6 หนาออกรายงาน (Report)……………………………………………………………………………22 3.7 หนาตงคา Settings …………………………………………………………………………………..23 3.8 ฐานขอมล SQLite ทใชในโครงงาน…………………………………………………………………..23 3.9 แสดงรปแบบพารามเตอรทเกบในฐานขอมล SQLite………………………………………………..25 4.1 แสดงตวจดการ Webserver ทใชในการรนภาษา PHP……………………………………………...26 4.2 แสดงการคนหา Link ทงหมดทอยบนเวบเพจ……………………………………………………….27 4.3 แสดงการคนหาฐานขอมลทงหมดภายใตสทธของยสเซอร………………………………………….27 4.4 แสดงผลการคนหา Information ของ User ทเวบนนใชงานอย……………………………………..28 4.5 แสดง Headerทโปรแกรมสง Requestไปยงเวบเปาหมายเพอ Get Information…………………..28 4.6 แสดงผลการคนหา User และ Password ของฐานขอมล MySQL………………………………….29 4.7 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอ Get User/Pass ของ MySQL….29 4.8 แสดงผลการคนหา Tables จากฐานขอมลทไดท าการเลอกจากเมนดานชาย………………………30 4.9 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอคนหา Tables……………………30
VIII
สารบญรป (ตอ)
รปท หนา 4.10 แสดงผลการคนหา Columns ทมการเลอก Tables จากเมนรายการดานชาย……………………31 4.11 แสดง Header ทสง Request ไปยงเวบเปาหมายเพอคนหา Columns…………………………..31 4.12 แสดงขอมลในฟวดทงหมดทไดท าการเลอก Columns รายการดานชาย…………………………32 4.13 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอคนหาฟวดขอมล………………..32 4.14 แสดงผลการโหลดไฟลทอยบน Webserver จากชองโหว SQLInjection…………………………33 4.15 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอ Load file บน Server ………...33 4.16 แสดงผลการหนาตาโปรแกรมในการออกรายงานผลการคนหาชองโหว …………………………34
1
บทท 1 บทน ำ
1.1 กลำวน ำ (Overview)
เนองจากปจจบนมหลายๆองคกรนยมน าเวบแอปพลเคชน (Web Application) มาใชงานอยาง
กวางขวาง เพออ านวยความสะดวกส าหรบผทมาตดตอรวมถงธรกจตางๆ ตลอดจนการแลกเปลยนขาว
สารและโฆษณาประชาสมพนธตางๆกนยมใชเวบแอปพลเคชนมาตอบสนองความตองการของผทมาขอ
ใชงาน และบคคลภายนอกกสามารถเขาถงจากทไหนกได แนนอนวาเวบไซตกเปนอกชองทางทจะมผ
ไมหวงดนยมเขามาโจมตโตยอาศยขอผดพลาดทเกดจากการพฒนาโปรแกรมของผพฒนาเวบไซตนนๆ
หรออาจจะเปนชองโหวทตดมากบ Web Service เชน Apache, IIS หรอ Database Server เชน
MySQL, MSSQL, Oracle กมโอกาสเปนไปไดทงสน
1.2 ควำมเปนมำ ปญหำและแรงจงใจ (Problems and Motivation)
โดยจดออนของระบบขางตนทกลาวมานน อาจจะกอใหเกดความเสยหายใหแก Web Serve
ของผใหบรการทงสน ซงผดแลระบบอาจจะไมรตว หรอไมไดค านงถงเรองความปลอดภย (ตวอยางการ
โจมตทเปนทนยมในปจจบน เชน SQL Injection , JavaScript Injection , Remote Code Execution,
XSS ตางๆ) ดงนนทางผจดท าจะสราง Application นขนมาเพอทดสอบความปลอดภยของเวแอปพล
เคชน รวมถงการทดสอบการโจมต เพอใหเหนถงผลกระทบจากการโจมต และท าใหผดแลระบบใหความ
ใสใจในดานความปลอดภยมากขน
1.3 วตถประสงคโครงงำน (Objectives)
ท าการศกษาคนควาและพฒนาซอฟแวรในการคนหาจดออนของเวบแอปพลเคชนเพอใหรถง
วธการโจมตและน าไปปองกนและเพมความแขงแกรงของเวบแอปพลเคชน
2
1.4 ขอบเขตของโครงงำน (Scope of Service)
1.4.1 สามารถคนหาชองโหวของเวบแอปพลเคชนทพฒนาดวยภาษา PHP
1.4.1.1 ตรวจสอบการโจมต SQL Injection
คนหาชองโหวของเวบทพฒนาดวยฐานขอมล MySQL
- Scan Data Base
- Scan Column
- Scan Data
- Load File in local
1.4.1.2 ตรวจสอบการโจมต Cross-site scripting
- คนหาและทดสอบ Cross-site scripting ทพฒนาดวยภาษา PHP
1.4.2 รองรบ HTTP Method : GET และ POST
1.4.3 รองรบการทดสอบรวมกบการใชงาน Cookie
1.4.4 สามารถออกรายงานชองโหวทท าการทดสอบในรปแบบ PDF
1.4.5 บนทกผลการ scan ลงบนฐานขอมล Data Base
1.4.6 สามารถท าการ scan ไดทง auto และ manual (ระบ parameter เอง)
1.4.7 โปรแกรมพฒนาดวยภาษา C# .NET และใช .NET Framework 3.5
1.5 ประโยชนทคำดวำจะไดรบ (Advantage)
1.5.1 ท าใหทราบถงชองโหวตางๆบนเวบแอปพลเคชนซงกอใหเกดความรายแรงตอการบกรก
ของผไมหวงด
1.5.2 ซอฟทแวรสามารถ เรยนร และสะดวกใชงานไดงาย
1.5.2 ลดคาใชจายในการทตองชอ Application Vulnerability Scan ในราคาทแพงมากๆ
1.5.3 สามารถรถงวธการโจมตในรปแบบตางๆ เพอน าไปใชปองกนและเพมประสทธภาพความ
ปลอดภยของเวบแอปพลเคชน
3
1.6 แผนเวลำโครงงำน
ตำรำงท 1.1 แสดงระยะเวลาการด าเนนโครงงาน
กจกรรม ระยะเวลำ
พ.ค. ม.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค. ม.ค. ก.พ. ม.ค. เม.ย. พ.ค.
ศกษาความเปนไปไดของโครงงาน
รวบรวมขอมลตางๆทเกยวของกบโครงงานน
ศกษาชองโหวตางๆทเกดขนจากเวบ และรปแบบการโจมต
ตดตงและจ าลองระบบเพอขนมาทดสอบ
ออกแบบโครงสรางของ Application
ออกแบบ Database , Class, GUI
พฒนา Application ทสามารถใชงานไดจรง
ทดสอบการใขงานและแกไขปรบปรง
จดท าเอกสารของระบบงาน น าเสนอโครงงาน 1 ขนตอนด ำเนนงำโครงงำน 2 ออกแอบโปรแกรมในการออกรายงาน
เขยนเทมเพลตรปแบบรายงาน รวบรวมขอผดพลาดและปรบปรงแกไข
นาเสนอโครงงาน 2
4
บทท 2 ทฤษฎพนฐำนทเกยวของกบกำรท ำโครงงำน
ในการพฒนาโปรแกรมคนหาชองโหวและประเมนความเสยงในเวบแอปพลเคชนทพฒนาดวย
PHP และใชฐานขอมล MySQL นน จะตองรถงเทคโนโลยทเกยวของหลายอยาง เชน ชองโหวขอภาษา
PHP ทน ามาพฒนาเวบแอปพลเคชน , ฐานขอมล (Database) MySQL, และค าสง SQL ซงจะมผไม
หวงดใชในการโจมตชองโหวเวบแอปพลเคชน และรวมถง Parameter ตางๆ ทสามารถ Bypass เขามา
ท าการ query ขอมล และท าใหเกดความเสยหายแกระบบ ซงในโครงงานนนจะใหความส าคญทฤษฏ
หลกๆ ทเกยวของดงน
1. ฐานขอมล (Data Base)
2. เวบเซรฟเวอร (Web Server)
3. ยอารเอล (URL)
4. ภาษาพเอชพ (PHP Language)
5. ค าสงเอสควแอล (SQL Command)
6. ภาษาจาวาสครปต (Java Script)
7. รปแบบการโจมตเอสควแอลอนเจคชน (SQL Injection)
8. วธปองกนการโจมต SQL injection ของ PHP
9. รปแบบการโจมตแบบครอสไซทสครปป (Cross-site scripting : XSS)
10. วธปองกนการโจมด Cross-site scripting
2.1 Vulnerability ชองโหว (Information Security)
Vulnerability (Information Security) หมายถง ชองโหวหรอจดออนตางๆ ทเกดขนในระบบ ใน
มมมองทางดาน Information Security นน ชองโหวเหลานอาจจะเกดจากหลายสาเหต เชน ชองโหวหรอ
ขอบกพรองจากระบบปฏบตการ ซอฟตแวรแอปพลเคชน หรอการตงคา Configuration ของอปกรณทาง
ดานเครอขาย และชองโหวเหลานอาจท าความเสยหายแก ขอมล และทรพยสน
ในการคนหาเพอระบถงจดออน หรอ Vulnerability ของระบบนน อาจจะตองใชเทคนคตางๆเขา
มาชวย เชน การท า Vulnerability Assessment เปนตน ซงในโครงงานนนกจะตระหนกชองโหวของ
Web Application เปนหลก และสามารถทจะน าไปประยคตแกไขใหระบบคอมพวเตอรหรอเครอขายม
ความมนคงและปลอดภยมากยงขน
5
2.2 Risk Assessment (กำรประเมนควำมเสยง)
ความเสยง (Risk) ทางดาน Information Security นนจะหมายถง การประเมนความเสยงและ
วธการจดการดานความเสยง รปแบบตางๆ รวมถงการตรวจสอบขอบเขตของความเสยงทเกดขนและ
ควบคมเพอลดหรอก าจดความเสยทอาจจะกอใหเกดผลกระทบความเสยหายตอขอมล
2.2.1 ระดบของควำมเสยง (Risk Level)
โดยปกตระดบของความเสยงจะพจารณาจาก 2 ปจจย คอ
ควำมนำจะเปน (Probability) ในการทจะเกดภยคกคามใดๆ ขน และกอใหเกดความ
เสยหายตอขอมลและทรพยสน ขององคกร ซงโดยปกตจะค านวณคาโดยพจารณาจากการวเคราะหภย
คกคาม / จดออน (Threat / Vulnerability Assessment) ทมตอขอมลและทรพยสนขององคกร รวมกบ
การพจารณาถงวธการควบคม / แกไขความเสยง ทมอยในปจจบน (Existing Control)
ควำมรนแรง (Severity) ของความเสยหายทอาจเกดขน ซงโดยปกตจะค านวณคาโดย
การพจารณาจาก ระดบความส าคญ ของขอมลหรอทรพยสนนนๆ ทมตอองคกร
2.3 ฐำนขอมล (Data Base)
Database (ฐานขอมล) เปนกลมของขอมล ทมการจดการเพอท าให เขาถง จดการและปรบปรง
ไดงาย ซงปจจบนมการใชงานอยางแพรหลายอยางมาก ไมวาจะเปนในองคกรณ หรอธรกจตางๆ ใน
ฐานขอมลนนจะมการเกบขอมลในรปแบบเรคคอรด หรอไฟล เชน รายการผลตภณฑ รายการการขาย
คลงสนคา หรอรายละเอยดตางๆ เกยวกบลกคา เปนตน และขอมลตายๆ สามารถน ามาวเคราะหและ
จดการไดสะดวกอกดวย
ในระบบฐานขอมลนนจะใชภาษา SQL (Structured Query Language) ซงเปนภาษามาตรฐาน
ส าหรบการสรางควรหรอเรยกดแฟมขอมลนนๆๆ ซงปจจจบนมฐานขอมลอยหลายคาย เชน IBM's,
DB2, Microsoft Access , Sybase , Oracle, Microsoft SQL Server, SQLite, MySQL ในโครงงานนน
จะกลาวถงฐานขอมล MySQL และ SQLite ทท าการรวมกบภาษา PHP เปนหลก
2.3.1 ฐำนขอมล MySQL (มำยเอสควแอล)
เปนระบบจดการฐานขอมลเชงสมพนธ (Relational Database Management System) ทได
ระบบความนยมอยางมากและมการน าไปใชงานแพรหลายในปจจบน อกทงยงเปนซอฟตแวรโอเพน
ซอรส แตแตกตางจากซอฟตแวรโอเพนซอรสทวไป โดยมการพฒนาภายใตบรษท MySQL AB ใน
6
ประเทศสวเดน โดยจดการ MySQL ทงในแบบทใหใชฟร และแบบทใชในเชงธรกจ และปจจบนบรษท
ซนไมโครซสเตมสไดชอกจการของ MySQL AB ไปบรหารตอเปนทเรยบรอย
ชนดของขอมลทสนบสนนของฐานขอมล MySQL
ชนดขอมลท MySQL สนบสนนแบงเปนสามประเภทหลกใหญๆ
ชนดขอมลทเปนตวเลข
- BIT (มใชไดกบ MyISAM, InnoDB, Memory)
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
- Float
ชนดขอมลทเกยวกบวนทและเวลา
- DATETIME
- DATE
- TIMESTAMP
- TIME
- YEAR
ชนดขอมลทเกยวกบตวอกษร
- CHAR
- VARCHAR
- BINARY
- VARBINARY
- BLOB
- TEXT
- ENUM
- SET
7
รปท 2.1 ฐานขอมล MySQL
2.4 เวบเซรฟเวอร (Web Server)
เวบเซรฟเวอร (Web Server) ความหมาย คอ เครองคอมพวเตอรแมขายทใหบรการขอมล และ
ท าหนานประมวลผลและรอรบขอมลจากผใช (Client) เพอเรยกชมผานหนาเวบไซตโดยใชโพรโทคอล
HTTP (Hypertext Transfer Protocol) แลผใชสามารถดผานทางเวบเบราวเซอร หรอให Application มา
เรยกขอใชงาน ซงภาษา PHP จะท าการไดกตองพงพาเวบเซรฟเวอรอกดวย ในโครงงานนจะเนนเฉพาะ
ภาษา PHP เปนหลก
รปท 2.2 โครงสรางของเวบเชรฟเวอร
8
2.5 ภำษำพเอชพ (PHP Language)
พเอชพ (PHP) คอ ภาษาคอมพวเตอรในลกษณะเซรฟเวอร-ไซด สครปต และเปนภาษาทอยใน
ลขสทธของโอเพนซอรส (Open source) ปจจบนนยมน าภาษาพเอชพมาใชในการพฒนาเวบไซต นอก
จากจะงายตอการพฒนาและสามารถโตตอบไดรวดเรว อกทงยงสามารถท างานรวมกบระบบปฏบตการ
ไดเกอบทก Platform เชน Windows , Unix (Linux) , Mac เปนตน และจะท าการแสดงผลออกมาในรป
แบบ HTML เพอใหผใชงานสารถเรยกแสดงผลผานไดเวบบราวเซอร ในภาษา PHP นนจะมรากฐาน
โครงสรางค าสงมาจากภาษา ภาษาซ ภาษาเพรล และ ภาษาจาวา ซงงายตอการเรยนร ซงในโครงงาน
นจะกลาวถงภาษาพเอสพ (PHP)
รปท 2.3 แสดงหนาตา Webserver ทรน PHP บน IIS
2.6 ค ำสงเอสควแอล (SQL Command)
เอสควแอล (SQL) คอ ภาษาในการจดการขอมลอยางมโครงสราง มการพฒนภาษคอมพวเตอร
และโปรแกรมฐานขอมลทรองรบมากมาย เพราะจดการขอมลไดงาย เชน Oracle, MySQL, MSSQL,
PostgreSQL และ MS Access เปนตน ส าหรบโปรแกรมฐานขอมลทไดรบความนยมในการน ามาใชใน
เวบแอบพลเคชน คอ MySQL ซงเปนระบบฐานขอมล Open Source ทใชงานไดทงใน Mac, Unix,
Linux และ Windows และในการจดการขอมลของฐานขอมลนนจะแบงการท างานออกเปน 4 ประเภท
คอ SELECT, UPDATE, INSERT, DELETE
9
2.7 ชองโหว SQL Injection
SQL Injection หมายถงการใสค าสง SQL แฝงเขาไปในสวนของ HTTP Request อาจจะเปนได
ทง GET และ POST กได เพอท าการ Execute ค าสง SQL เชน select, insert, update, delete , drop
หรออนๆ เพอกระท ากบฐานขอมลหรอกระบวนการท างานของ Server
ในการเขยนโปรแกรมทไมไดค านงถงความปลอดภยเปนสาเหตหลกทท าใหการโจมตแบบ SQL
Injection นส าเรจและสรางความเสยหาย ซงสวนใหญแลวชองโหวนจะพบในเวบทไมไดท าการกรองหรอ
ตรวจสอบอนพต (Validate Input)
รปท 2.4 แสดงรปแบบค าสงทน าไปใชในการท า SQL Injection
2.7.1 กำรโจมต SQL Injection แบบทวไป
ตวอยาง สมมตวา เราเขยนโปรแกรมเพอท าการ Login เขาสระบบ ดงน
$sql=”SELECT * FROM users WHERE username= ‘”.$_POST['username'].”‘
AND password= ‘”.$_POST['password'].”‘”;
$result=mysql_query($sql);
10
จากโปรแกรมจะเหนวาการท างานตามปกต โปรแกรมสามารถตรวจสอบการ Login ไดไมมปญ
หา แตหากผใชกรอกขอมลในลกษณะนเขามาจะเกดอะไรขน
เมอสงขอมลใหกบโปรแกรม ผลลพธของ SQL Command จะมลกษณะดงน
จะเหนวา query จะมเงอนไขเปนจรงเสมอ ท าให ผลลพธทไดคอขอมลของ user ทกคนจาก table ชอวา
users และอาจแยกวานนคอโปรแกรมอาจคดวาเปนการ login ทส าเรจท าใหผไมหวงดสามารถเขาใช
งานระบบได จะสงเกตไดวา เมอมการเทยบกบ Record แตละ Recordแลว ไมวา Condition แรกจะเปน
จรงหรอไม แต Condition สดทาย จะเปนจรงเสมอ
ตวอยำงรปแบบกำรโจมตดวย SQL Injection
ตวอยางนจะเปนวธการไดสทธของผใชงาน หรอผดแลระบบในการเขาใชงานระบบ
ดวยวธ SQL Injection แบบ Line comments โดยชดค าสงทใชในการประมวลผลจะเปนดงน
เมอท าการใสขอมล user และ pass ลงไป ชดค าสงนจะ query ขอมลตาม condition ท match ไวคอ
ตองม record ทม username และ password ตามทเราระบไวทงค และวธการ bypass password
สามารถท าไดโดยการใสเปน ชอ user‘-- (ตามดวยเวนวรรค) หรอ ชอ user‘# ชดค าสงจะเปลยนเปน
ดงน
ซงค าสงนจะไปหาขอมลทม username เปน admin แตถาไมทราบ user กสามารถสงให match
condition เปนจรงเสมอไดดวยการใสขอมลลงในชอง user วา ‘ or ’x’ = ’x’-- (ตามดวยเวนวรรค) หรอ
‘ or ’x’ = ’x’# ซงผลของรปแบบค าสงกจะไดเปนดงน
username = xʼ OR ʻxʼ=ʼx
password = xʼ OR ʻxʼ=ʼx
SELECT * FROM users WHERE username=’x’ OR ‘x’='x’ AND password=’x’ OR ‘x’='x’;
SELECT * FROM `users` WHERE username='$user' AND password='$pass'
SELECT * FROM `users` WHERE username='admin’-- ' AND password=''
SELECT * FROM `users` WHERE username=’’ or ‘x’=’x’-- ' AND password=''
11
จากค าสงดานบนจะท าใหเงอนไขเปนจรง จงท าใหสามารถทจะ Bypass เขาสระบบได
กำรใชงำนค ำสง Union Injections
เปนลกษณะการใชงานค าสง Union เพอใชในการประมวลผลขามตาราง ผลลพธของขอมลแถว
ทไดจะรวมตารางทเราใช Union เขาไปดวย เชน
ผลลพธของการ query ค าสงนจะเปนการ น าขอมลจากตาราง news และตาราง members มา
เปนผลลพธของการ query และหากตองการท าใหเกด Error Based เพอทจะคนหาชอคอลมน สามารถ
ใชค าสง HAVING เขามาชวยกไดเชนเดยวกน
จากค าสงนจะใชการคนหาคอลมนไปตามล าดบ โดยเปนล าดบดงน และจะท าการ Request ไป
เรอยๆ จนกระทง หากไมขน error หมายความวาคอลมนมเทานโดย columnfromerror1 หมายถงชอ
column แรกทปรากฏใน error เมอใชค าสงแรก และหมายเลขถดไปเรอยๆ นอกจากนหากตองการท าให
เกด Error Base เพอท าการคนหาจ านวนคอลมน (Number of Columns) กสามารถใชค าสง ORDER
BY เขามาชวยดงค าสง SQL ดานลาง
หากตองการทจะทราบถง Information ตางๆ ของฐานขอมล MySQL ผานทางชองโหว SQL
Injection เชน อยากจะทราบวาฐานขอมลในเวบนนใช Version ไหน ใช User อะไรในการเชอมตอ และ
ชอฐานขอมลอะไร กอาจจะใชค าสงเบองตนดงนเชน
SELECT title, picture FROM news UNION ALL SELECT name, pass FROM members
' HAVING 1=1 --
' GROUP BY table.columnfromerror1 HAVING 1=1 --
' GROUP BY table.columnfromerror1, columnfromerror2 HAVING 1=1 --
' GROUP BY table.columnfromerror1, columnfromerror2, columnfromerror(n) HAVING 1=1 --
ORDER BY 1--
ORDER BY 2--
ORDER BY N--
12
- version() เปนค าสงในการเรยกด Version ของฐานขอมล MySQL
- user() เปนค าสงในการเรยกด user ทใชงานอยเปนฐานขอมลนน
- database() ค าสงในการเรยกดชอฐานขอมล
- @@hostname เปนค าสงในการเรยกดชอเครอง Computer Name
- @@datadir เปนค าสงในการเรยกด path ทเกบขอมลทตดตงใน MySQL
- @@version_compile_os เปนค าสงในการเรยกด version ของ MySQL ทตดตงบนระบบ
ปฏบตการนนๆ
รปท 2.5 แสดงตวอยางการสงค าสงเพอเรยกด Information ตางๆ ของ MySQL ผานทาง SQL
Injection
นอกจากนหากตองการทจะอานไฟลบนเวบเปาหมาย กสามารถใชค าสง LOAD_FILE ได ค าสง
นจะเปนค าสงในการอานไฟลบน Server แตมขอจ ากดเรองสทธการเขาถงขอมล (Permission) หรอไฟล
ทจะอาน และรวมไปถงสทธของฐานขอมล MySQL ทจะเปนตวก าหนดวา user ไหนท าอะไรไดบาง แต
ถาหากผพฒนาโปรแกรม หรอผดแลระบบน า user ทมสทธดงกลาวมาใชงาน กอาจจะท าใหเกดความ
เสยงนดวย และ user ของ MySQL ทมสทธดงกลาวนกคอ user ชอ root นนเอง ซงสทธการอานไฟลน
จะก าหนดใน tables “user” ทอยในฐานขอมล MySQL และถาหากตองการตรวจสอบสทธดงกลาวก
สามารถ Query ขอมลดได
13
รปท 2.6 แสดงผลลพธจากการใชค าสง SQL “LOAD_FILE” เพอท าการโหลดไฟลจากเครองเปาหมาย
เมอ Privilege File เปน Y กแสดงวา user ทใชในการเชอมตอนน สามารถอานไฟลบน Server
ได และผไมหวงดจะใชค าสง load_file ได
จากค าสงน ถาหากน าเขามารวมกบค าสง union แลว กจะสามารถผานไฟลบน server แลว
แสดงผลผานทางหนาจอได
รปท 2.7 แสดงผลลพธจากการใชค าสง SQL “LOAD_FILE” เพอท าการโหลดไฟล /etc/password
' union select s1,load_file('/etc/passwd'),3,4 -- -
14
รปท 2.8 แสดงจากการใชค าสง SQL “LOAD_FILE” เพออานไฟล Configuration บน Server
2.7.2 กำรปองกนกำรโจมตดวย SQLInjection
1. เขยนโปรแกรมใหรดกมมากขน โดยเลอกใชเครองมอตางๆ ทแตละภาษามไวใหเพอ
ชวยในการคดกรองความผดปกต เชน ค าสง mysql_real_escape_string() สามารถใชกบภาษา PHP ท
ท างานรวมกบ MySQL Database จะชวยเราคดกรองอกขระตางๆ ทสอเคาการละเมดได ฉะนนกอนน า
คาทสงมาจากผใชไปใชงาน ควรน ามาผานขนตอนนกอน เปนตน
$username=mysql_real_escape_string($_POST['username']);
$password=mysql_real_escape_string($_POST['password']);
2. การกรองขอมลจะตองท าทกครงกอนน าไปใชงาน ตวอยางตนทางทควรตองกรอง
เชน Form Input ,users, parameters URL, Values from Cookie
3. กรณขอมลทเปนตวเลข ควรท าการตรวจสอบโดยการแปลงคาใหเปนตวเลข หรอใช
ฟงกชน ISNUMERIC เพอตรวจสอบการเปนตวเลขจรงๆ
4. ดแลเกยวกบสทธของผใช ทสามารถ Login เขาส Database ใหอยในวงจ ากด ไม
เปดมากเกนไป และไมความเอา user ทมสทธเปน root มาใชงาน เพราะถาหากเกดชองโหวแลวผไม
หวงดสามารถใชสทธของ user นนท าความเสยหายตอระบบมากขน
5. กรองตวอกขระทเขาขายการละเมดออกจากขอมล input เชน double quote, single
15
quote, slash, back slash, semi colon, extended character like NULL, carry return, new line และ
อนๆ ทไมควรจะเปนขอมลทใชในระบบ
6. ควรก าหนดและตรวจสอบความยาวของขอมลทสงมาทกครง เพอปองกนการแฝง
ค าสงอนๆ เขามาในฟลดขอมลปกต
7. ใชเครองมอชวยตรวจจบและกรองขอมล เชน โปรแกรมประเภท Web Application
Firewall หรอระบบ IPS (Intrusion Prevention System) วธการนอาจตองแลกดวย Performance ท
ลดลงเนองมาจากการดกจบขอมลและการตรวจสอบ
2.8 ชองโหวของ Cross-site scripting (XSS)
Cross-site Scripting (XSS) เปนชองโหวของเวบแอปพลเคชนอกชองทางหนง โดยผไมหวงด
จะฝงโคดหรอสคปตเขาไปกบหนาเวบเพจทมชองโหว โดยสวนใหญผไมหวงดจะใชภาษาทเปน Client
Script เชน JavaScript/jQuery และเมอเหยอหรอผใชงานเขามาเยยมชมหนาเวบนน กอาจจะถกขโมย
ขอมลตางๆไปได เชน cookie, username, password หรอ redirect ไปยงเวบประสงครายได
รปท 2.9 แสดงผลคกกทเรยกผานภาษา JavaScript
16
วธกำรโจมตแบบ XSS อำจจะแบงไดเปน 2 ประเภทคอ
O Stored XSS เปนการโจมต ทผไมหวงดจะฝง JavaScript code เขาไปในเวบแอป
พลเคชน ผานทางชองกรอกอนพตตางๆ เชน คอมเมนต, กระทเวบบอรด ฯลฯ เมอมการเปดเขาใชงาน
กจะถกโจมตดวย XSS ไดทนท
O Reflected XSS: เปนการโจมตทผไมหวงดมกจะฝง script ไวใน CGI Parameters
ของ URL แลวท าการสง link ดงกลาวไปใหเหยอ ซงเมอเหยอหลงเปดลงกกอาจจะถกโจมตดวย XSS
ไดเชนกน
Hacker VictimYour
webpagewww
Infect with script
Visit
Inject Script
Do somethings bed
รปท 2.10 แสดงระดบของการโจมตผานชองโหว XSS
รปท 2.11 แสดงลกษณะตวอยาง Code ทฝ งไปหนาเวบเพจเพอขโมย Cookie ของผใชงาน
ในปจจบนมรปแบบการโจมตผานทาง XSS อยหลากหลายรปแบบ ซงในโครงงานนนจะยกตว
อยางรปแบบการโจมตทนยมใชในปจจบน และในบางครงการโจมตดวย XSS อาจจะไมจ าเปนตองใส
<script></script> กสามารถใส script ไดโดยการแนบลงไปใน attribute ได เชน
<body onload=alert(document.cookie)>
17
2.8.1 กำรปองกนกำรโจมตดวย Cross-site scripting (XSS)
การปองกนปญหาความปลอดภยทเกดจากชองโหวของ XSS อาศยการกรอง
อนพตพารามเตอรจากผใชงานเปนหลก โดยอนพตพารามเตอรตางๆ ไมควรถกน ามาใชงานในทนทและ
ควรจะตองการกรองกอนทกครง เพอไมใหผใชไมสามารถวางสครปตใดๆ ลงในเวบได ซงคาความ
ปลอดภยเรมตนของ CMS หรอเวบส าเรจรปหลายๆ ตวมกตงคาความปลอดภยส าหรบ XSS ไวเปน
อยางดอยแลว และฝ ง Client หรอผใชงานสามารถปองกนเบองตนไดโดยใชเครองมอในการทองเวบ
ไซดอยางเชน Firefox ซงในตว Browser Firefox นนจะม Add-on ตวนงทชอ No-Script ซงท าหนาท
ปองกน Script ทเกดจากชองโหว XSS ไดเชนเดยวกน
ปจจบนมระบบปองกนจ าพวก Intrusion Detection System (IDS) หลายตวมความสามารถใน
การตรวจจบวาผใชพยายามโพสสครปตเขามายงเวบหรอไม ท าใหสามารถแจงเตอนไดแตเนนๆ วาม
ความพยายามทดสอบวาเวบมการรกษาความปลอดภยทด
18
บทท 3 กำรออกแบบโครงงำน
การออกแบบพฒนาโปรแกรมคนหาชองโหวและประเมนความเสยงในเวบแอปพลเคชนทพฒนาดวย PHP และใช ฐานขอมล MySQL นนจะใชหลกการของ HTTP Request/Response เพอ Scan หาจดบกพรองของเวบ รวมถงสงค าสงหรอสครปบางอยางเขาไปทดสอบเพอใหเวบเกดขอผดพลาดแลวแสดงผลออกมาทางหนาจอโปรแกรม ซง Application ทจะพฒนาขนมานนจะใชภาษา C# .NET และใชเครองมอคอ Visual Studio 2012 ในการพฒนาโปรแกรม 3.1 แนวทำงกำรออกแบบระบบ ในโครงงานนน จะมการเขยนโปรแกรมในสวนของฟงกชนในการคนหาชองโหวผานทาง SQL Injection ซงจะสามารถคนหาชองโหว ตางๆ 3.1.1 คนหาและรวบรวมขอมลเปาหมาย (Information Gathering) 3.1.1.1 Detect IP (แสดง IP จาก URL ทท าการคนหาชองโหว) 3.1.1.2 Detect OS (ตรวจสอบระบบประฏบตการ) 3.1.1.3 Detect MySQL Information - Current User (แสดง User ของ MySQL ทใชในการดงขอมลมาแสดงผล) - Count Data Base (แสดงจ านวนฐานขอมล) - Installation path & Data path (Path ทตดตงและ Path ทอย Data Base) - Privilege Read/Write MySQL (สทธในการอาน/เขยนไฟล) - Database version (เวอรชนของ MySQL ทใชงาน) - คนหาชองโหวทอาจกอใหเกดการโจมตแบบ Cross-site scripting 3.1.2 คนหาฐานขอมล (Find Database Schemata) 3.1.3 คนหาเทเบล (Find Tables Schemata) 3.1.4 คนหาคอลมน (Find Columns) 3.1.5 แสดงขอมล (Show Data) 3.1.5.1 สามารถกรองขอมลได (Filter Data) 3.1.5 ตงคา Configurations ตางๆ 3.1.6 ออกรายงานเพอประเมนความเสยงของชองโหวทตรวจพบ 3.2 องคประกอบในกำรพฒนำโครงงำน สามารถแยกออกไดเปน 2 สวน คอ ชดพฒนาโปรแกรม และดานโปรโตคอล ดงน 3.2.1 องคประกอบดานชดพฒนาโปรแกรม
19
3.2.1.1 โครงงานการพฒนาโปรแกรมคนหาชองโหวและประเมนความเสยงในเวบแอปพลเคชนทพฒนาดวย PHP และใช ฐานขอมล MySQL จะใชชดพฒนาโปรแกรมไมโครซอฟทเวอชวสตดโอ 2012 (Microsoft Visual Studio 2012) โดยเลอกใชภาษา C# .NET Framework 3.5 ซงเปน Windows Application เปนเครองมอในการพฒนาโครงงาน ดงแสดงในรปท 3.1และ 3.2
รปท 3.1 โปรแกรมไมโครซอฟทเวอชวสตดโอ 2012
รปท 3.2 ชดพฒนาโปรแกรมใช .Net Framework 3.5 (Windows Application)
20
3.3 คณสมบตของโปรแกรม 3.3.1 สามารถคนหาชองโหวของเวบแอปพลเคชนทพฒนาดวยภาษา PHP
3.3.1.1 ตรวจสอบการโจมต SQL Injection
คนหาชองโหวของเวบทพฒนาดวยฐานขอมล MySQL
Scan Data Base (คนหาฐานขอมลจากชองโหว)
Scan Column (คนหาคอลมนฐานขอมลจากชองโหว)
Scan Data (คนหาขอมลทอยในฐานขอมล MySQL)
Load File in local (โหลดไฟลคอนฟกบน Server)
3.3.1.2 ตรวจสอบคนหาชองโหวทอาจกอใหเกดการโจมตแบบ Cross-site scripting
3.4 ขนตอนกำรท ำงำนของโปรแกรม โครงงานนเปนโปรแกรมซงสามารถแสดงเปนแผนภมโครงสรางขนตอน การท างานไดดงน
Scan for attack patterns
Attack Pattern
Found?
Store attack information
into database
Process Normally
Start
End
Get Content URL (link)
Yes
No
Check authen
information gathering
YesLoad Cookie Bypass authen
No
รปท 3.3 แสดงขนตอนการใชงานโปรแกรม
21
3.5 กำรออกแบบโปรแกรม ในการออกแบบโปแกรมจะท าการจดวางหนาตาใหสะดวกตอการใชงาน โดยในสวนของ หนาแรกของโปรแกรมมการแบง Function การใชงานอย 4 สวนดวยกน คอ 3.5.1 SQL Injection Scan คอการ Scan Link ทงหมดในเวบ เพอคนหาชองโหวทเกดขนในหนาตางนจะแสดงผลการ Scan รวมถงชองโหวทตรวจพบ โดยหลกท าการท างานคอจะเขยนโปรแกรมเพอรองขอ HTTP Request (GET) แลวน าผลทไดมาท าการ Filter เอาเฉพาะ URL โดยใช Regular Expression ในหนาตางน หากกรณตอง Login กอน เพอทจะใหโปรแกรมเขาถงกสามารถท าการ Load Cookie แลวท าการ Login เพอใหได Cookie มาท าการ Bypass เขาไป Scan ขางในอกท
รปท 3.4 แสดงหนาตาโปรแกรมหลก
จากรปท 3.4 นนจะเปนหนาหลกในการคนหา link ทงหมดทเพอท าการวน loop เพอคนหาขอผดพลาดของเวบแอปพลเคชน
22
รปท 3.5 โปรแกรมในสวนของ SQL Injection แบบ Manual จากรปท 3.5 หนาตางนเจาของโครงงานไดออกแบบเพอทดสอบ SQL Injection เจาะจงเพอทดสอบชองโหว ซงสามารถท าการคนหา Information ตางๆ รวมถงคนหา Data Base, Tables, Column, Data รวมถงสามาถอานไฟลจาก Server ได กรณท User ของ MySQL ม Privilege ในการอานไฟล
รปท 3.6 หนาออกรายงาน (Report)
23
จากรปท 3.6 เมอไดท าการคนหาชองโหวเรยบรอย สามารถทจะออกรายงานเพอประเมนความผดพลาดทงหมดได และสามารถทจะเลอกเงอนไขในการคนหารายงานชองโหวไดตามวนทและประเภท
รปท 3.7 หนาตงคา Settings
จากรปท 3.10 หนาตางนจะเปนหนาในสวนของการตงคาทงหมดของโปรแกรมและคาท Config จะถกเกบลงใน Database และ Database ทใชในโครงงานนจะใช SQLite เนองจากใชงาย ไมตองตด ตงและสามารถน า Library API Connector for .NET ของ SQLite มาเรยกใชงานไดเลย
รปท 3.8 ฐานขอมล SQLite ทใชในโครงงาน
จากรปท 3.11 หนาตางนจะเปนในสวนฐานขอมลทน ามาเกบคา Configuration ตางๆ รวมไปถง
เกบรายงาน และสามารถเขยนโปรแกรมไปเรยกใชงานตามเงอนไขทตองการไดงายและรวดเรว
24
3.6 โครงสรำงตำรำง
ตำรำงท 3.1 แสดงรายละเอยดผลการคนหาชองโหว (Project) ชอฟวด ชนดขอมล ควำมยำว คย ควำมหมำย
proj_id INTERGER PK หมาเลขล าดบของผลการคนหาชองโหว proj_url VARCHAR 1000 ลงคของเวบเปาหมายจากผลการแสกน proj_risk VARCHAR 2 ประเภทของความเสยงทเขาถง proj_create DATETIME วนทท าการคนหาชองโหวจากโปรแกรม pro_found VARCHAR 500 คาทไดจากการคนหา (Request) proj_status VARCHAR 1 สถานะของชองโหวทพบ proj_name VARCHAR 200 ชอ Project ทจะท าการคนหาชองโหว
ตำรำงท 3.2 แสดงรายละเอยดตารางในการเกบรปแบบการโจมตดวย SQLInjection (Sqlinj_Pattern)
ชอฟวด ชนดขอมล ควำมยำว คย ควำมหมำย pattern_id INTERGER PK หมาเลขล าดบของรปแบบเอสควเอล pattern_type INTERGER 1 ประเภทของการคนหาชองโหว pattern_create DATETIME วนทท าการเพม/แกไข รปแบบ pattern_cfg VARCHAR 1000 พารามเตอรรปแบบตางๆในการโจมต pattern_active INTERGER 1 สถาณะใชงาน
ตำรำงท 3.3 แสดงรายละเอยดตารางในการเกบคาคอนฟก (Path_configs)
ชอฟวด ชนดขอมล ควำมยำว คย ควำมหมำย path_id INTERGER PK หมาเลขล าดบของคาคอนฟก path_os_type INTERGER 1 ประเภทของพารามเตอรในการคอนฟก path_url VARCHAR 1000 พาทของคาคอนฟก pattern_active INTERGER 1 สถาณะใชงาน
25
รปท 3.9 แสดงรปแบบพารามเตอรทเกบในฐานขอมล SQLite
ตำรำงท 3.4 แสดงระดบของการประเมนความเสยง
ประเภทของกำรคนหำชองโหว ระดบควำมเสยง ควำมหมำย
Cross-site scripting (XSS) 3 ความเสยงทสามารถเขาถงขอมลของผใชงานผานชองโหว XSS
SQL INJECTION Information gathering 1 ความเสยงทท าใหผไมหวงดสามารถ
เขาถงคาคอนฟกบางอยางบนฐานขอมล Database Attack 2 ความเสยงทท าใหผไมหวงดสามารถด
ลสตรายชอฐานขอมล Tables Attack 3 ความเสยงทท าใหผไมหวงดสามารถอาน
ขอมลเทเบลในฐานขอมล Columns Attack 3 ความเสยงทท าใหผไมหวงดสามารถอาน
ขอมลคอลมนในฐานขอมล Data Attack 4 ความเสยงทท าใหผไมหวงดสามารถอาน
เรคคอรขอมลในฐานขอมล Read/Write File Attack 5 ความเสยงทท าใหผไมหวงดสามารถ
เขาถงไฟลบนเซฟเวอร
26
บทท 4 กำรทดลองและผลกำรทดลอง
4.1 เครองมอทใชในกำรทดลอง
ในการทดลองนน จ าเปนตองสรางสภาพแวดลอมขนมาเพอท าการ ทดสอบการคนหาชองโหว
ของเวบแอปพลเคชนทพฒนาดวยภาษา PHP และใชฐานขอมล MySQL โดยจะมรายละเอยดดงน
4.1.1 ท าการตดตง Webserver ทสามารถรน PHP ซงจะใช Apache, XAMPP, IIS กได ในการ
ทดลองน จดท าโครงงานจะใช IIS เปน Webserver ในการรน PHP
4.1.2 ชดโปรแกรมทออกแบบและพฒนาโดยใชภาษา C# .NET ซงเปน Windows Application
4.1.3 เวบทใชในการทดสอบ ในการทดลองน ผจดท าโครงงานจะใช เวบส าเรจรปทเปนทนยม
ใชงานหรอเรยกสนๆ วา “CMS” ในการทดสอบคนหาชองโหวของ SQL Injection ทพฒนาดวยภาษา
PHP และใชฐานขอมล MySQL
4.2 กำรทดลอง
หลงจากทท าการตดตง PHP แลวท าการตงคา Config Webserver (IIS) ใหสามารถใชงาน
ภาษา PHP เรยบรอยแลว ในการทดลองท าการเปดโปรแกรมขนมา จากนนระบเปาหมายทจะท าการ
คนหาชองโหว ตรงน ถาหากตองการเกบขอมลผลการคนหาเพอท ารายงานดวย กจะตองสราง New
Project แลวตงชอ Project Name กอน จากนนคอยด าเนนการสแกนคนหาชองโหวขนตอน
ถดไป
รปท 4.1 แสดงตวจดการ Webserver ทใชในการรนภาษา PHP
27
4.2.1 คนหำ URL ทงหมดบนเวบเปำหมำย
ในการทดลองน ใหท าการกรอก URL เขาไปในชอง Victim จากนนกดปมสเขยว เพอ
ท าการคนหา Link ทงหมดอยอยในหนาเวบ จากภาพจะท าการการคนหา Information gathering เพอ
ใหรวาเวบททดสอบใชระบบปฏบตการ หมายเลขไอพแอดเดรส และจ านวน Link ทจะเอาน ามาเขาส
กระบวนการตรวจสอบ
รปท 4.2 แสดงการคนหา Link ทงหมดทอยบนเวบเพจ
4.2.2 คนหำฐำนขอมลในระบบเวบแอพลเคชน (Database Scan)
ในสวนนเปนขนตอนการคนหาฐานขอมลทงหมดภายภายใตสทธของยสเซอร MySQL
รปท 4.3 แสดงการคนหาฐานขอมลทงหมดภายใตสทธของยสเซอร
28
4.2.3 คนหำ Information ของฐำนขอมล MySQL
โปรแกรมจะท าการคนหาขอมลทตางๆ เชน Database Version, Current’s User, Path
Install (ทอยทตดตง), Path Data (ทอยของไฟลฐานขอมล) และ Version Compile ของฐานขอมล
รปท 4.4 แสดงผลการคนหา Information ของ User ทเวบนนใชงานอย
รปท 4.5 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอ Get Information
29
4.2.4 คนหำรหสผำนของฐำนขอมล MySQL (กรณสทธของ User นนเปน root)
โปรแกรมจะท าการทดสอบ SQL Injection เพอทจะดงเอา Username และ Password
ของฐานขอมลออกมา แตโปรแกรมจะดง Username และ Password ออกมาได User ของฐานขอมล
ของเวบเปาหมายนนตองมสทธเทยบเทา root นนกคอ Admin ของฐานขอมล MySQL นนเอง
รปท 4.6 แสดงผลการคนหา User และ Password ของฐานขอมล MySQL
รปท 4.7 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอ Get User/Pass ของ MySQL
30
4.2.5 คนหำตำรำงของฐำนขอมล (Tables Scanner)
ในขนตอนนโปรแกรมจะท าการยง SQL Injection เพอท าการคนหาตารางจากฐานขอ
มลทเลอก Checkbox ระบบจะคนหาและท าการ Highlight สแดง ถาหากชอ Tables เปนทนาสนใจดงท
ตงคาไวในขนตอนการ Config โปรแกรม
รปท 4.8 แสดงผลการคนหา Tables จากฐานขอมลทไดท าการเลอกจากเมนดานชาย
รปท 4.9 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอคนหา Tables
31
4.2.6 คนหำคอลมน (Column Scanner)
ในขนตอนนโปรแกรมจะท าการยงค าสง SQL Injection เพอทการคนหา Column ทง
หมดจากการเลอก Table และถาหากชอ Column เปน key word ทไดท าการตงคาไว โปรแกรมกจะท า
การ Highlight สแดงใหดวย
รปท 4.10 แสดงผลการคนหา Columns ทมการเลอก Tables จากเมนรายการดานชาย
รปท 4.11 แสดง Header ทสง Request ไปยงเวบเปาหมายเพอคนหา Columns
32
4.2.7 คนหำขอมลจำกฟวดขอมล (Data Scanner)
ในขนตอนนโปรแกรมจะท าการคนหาขอมลภายในฟวดขอมลอยไดท าการเลอกคอลมน
ไว โดยการเลอกชอคอลมนทตองการดทโปรแกรมฝ งชาย จากนนกดปม Get Data
รปท 4.12 แสดงขอมลในฟวดทงหมดทไดท าการเลอก Columns รายการดานชาย
รปท 4.13 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอคนหาฟวดขอมล
33
4.2.8 คนหำขอมลจำกไฟลทอยบนเวบเชอเวอร (Get Local file)
ถาหากเวบเปาหมายมการตงคาโดยใช User ของฐานขอมล MySQL ทมสทธในการ
อานไฟล โปรแกรมกสามารถยงค าสง SQL Injection เพอท าการ Load file ตางๆ ทอยบน Webserver
ออกมาอานได เชนไฟล Seting.php, Config.php เปนตน ท าใหผไมหวงดรถง User และ Password
ของฐานขอมลและผไมหวงดสามารถทจะน า User และ Password ดงกลาวเขาไปกระท ากบฐานขอมล
ใน Server ผาน phpMyAdmin หรอชองทางอนๆ โดยตรงได ซงชองโหวนถอวารายแรงอยางมาก
รปท 4.14 แสดงผลการโหลดไฟลทอยบน Webserver จากชองโหว SQLInjection
รปท 4.15 แสดง Header ทโปรแกรมสง Request ไปยงเวบเปาหมายเพอ Load file บน Server
34
4.2.9 รำยงำน (Reports)
หลงจากทโปรแกรมไดท าการคนหาชองโหวเรยบรอยแลว หากตองการทจะแสดงผล
รายงาน กสามารถ Search หาชอ Project หรอถาหากรวนทกสามารถระบเงอนไข และอาจจะเพมเงอน
ไขประเภทของการโจมต (Type Inject) กสามารถเลอกทจะคนหาผลการแสกนซองโหวทผานมาได โดย
เมอท าการเลอกเงอนไขเสรจ คลกทปม Export Report เพอทจะดผลรายงาน รวมถงรายละเอยดในราย
งานกจะมคาระบผลการของประเมนใหทราบอกดวย
รปท 4.16 แสดงผลการหนาตาโปรแกรมในการออกรายงานผลการคนหาชองโหว
35
บทท 5
สรปผลกำรด ำเนนงำน
5.1 ผลกำรด ำเนนโครงงำน
จากการศกษาและพฒนาโปรแกรมในการคนหาชองโหวของเวบแอปพลเคชนทพฒนาดวย
ภาษา PHP และใชฐานขอมล MySQL นน ท าใหสามารถน าผลทได ไปตรวจสอบ ปองกนและแกไขให
เวบแอปพลเคชนมความปลอดภยยงขน และยงเปนโปรแกรมทใชงานสะดวกและงายตอการใชงาน
สามารถน าไปพฒนาตอไดในอนาคต
5.2 ปญหำและแนวทำงแกไข
5.2.1 ปญหำ
5.2.1.1 ดานการพฒนาโปรแกรมนน ขบวนการท างานจะไปท าการ Request ขอมลท
อยบน Webserver และท าการคนหา URL ทงหมดทอยในพาทของ Webserver ท าใหใชเวลานานเพราะ
ในบางทเวบเปาหมายทจะท าการ Scan เพอคนหาชองโหวนนเปนเวบทเนอหา (Content) คอนขางเยอะ
กอาจจะท าใหมความลาชาในการทดสอบ
5.2.1.2 เนองจากโปรแกรมทพฒนาขนนน ในขนตอนการสรางรายงานจะใช Library
ของ iTextSharp ชงเปน Open source ฟร และใชงานคอนขางล าบาก เพราะไมมเครองมอในการออก
แบบหนาตารายงานเลย จงจ าเปนตองเขยนฟงกชนในการออกรายงานคอนขางมาก
5.2.2 แนวทำงแกไข
5.2.2.1 ในการแกไขปญหา HTTP Request Content เยอะๆ นน ท าใหโปรแกรมทได
พฒนาขนมาคอนขางชาและเกดการคางบอย จงไดท าการแกไขปญหานโดยการพฒนาโปรแกรมใหรอง
รบ Multithread และใช Background Worker มาชวยจดการเรอง Thread ท าใหการแสดงผลรวดเรว
ยงขน
5.3 ขอเสนอแนะ
ควรพฒนาโปรแกรมใหรองรบรปแบบการโจมตหลายๆ แบบ และรวมไปถงความสามารถในการ
คนหาชองโหวควรจะครอบคลมภาษาอนๆ นอกเหนอจากภาษาพเอสพ (PHP) ดวย
36
เอกสำรอำงอง
[1] Vulnerability, [Online]. Available: http://en.wikipedia.org/wiki/Vulnerability
[2] SQL Injection (OWSAP), [Online]. Available: https://www.owasp.org/index.php/SQL_Injection
[3] SQL Injection Attacks, [Online]. Available: http://www.unixwiz.net/techtips/sql-injection.html
[4] Cross-site Scripting (XSS), [Online]. Available: http://www.yannarak.com/node/2
[5] SQL Injection Tutorial, [Online]. Available: http://hackertarget.com/sql-injection/
[6] สภชย สมพานช, “คมอ ASP.NET 2.0 ฉบบสมบรณ”, Infopress Developer Book
[7] Google XSS Flaw in Website Optimizer Scripts explained, [Online]. Available:
http://www.acunetix.com/blog/web-security-zone/articles/google-xss-website-optimizer-scripts/
[8] INJECTION IN SQL - PHP BY REVEAL CODES, [Online]. Available:
http://alokrajmca.blogspot.com/2009/06/injection-in-sql-php-by-reveal-codes.html
[9] .NET Framework, [Online]. Available: http://en.wikipedia.org/wiki/.NET_Framework
[10] Justin Clarke, SQL Injection - Attacks and Defense, Syngress Publishing, Inc.
[11] Detecting Persistent Cross-site Scripting, @2010 eEye Digital Security.
[12] Varian Luong, Intrusion Detection And Prevention System: SQL Injection Attacks
[13] ดร.บรรจง หะรงษ, “Plan-Do-Check-Act ตามมาตรฐาน ISO/IEC 27001”, [Online]. Available:
http://www.tnetsecurity.com/content_audit/pdca_qa.php
[14] Cross-site scripting,[Online]. Available: https://en.wikipedia.org/wiki/Cross-site_scripting
[15] XSS Filter Evasion Cheat Sheet, [Online]. Available :
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
[16] SQL Injection Cheat Sheet : http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
[17] OWASP Cross-site Scripting (XSS) : https://www.owasp.org/index.php/Cross-
site_Scripting_%28XSS%29
[18] SQL Injection Using MySQL LOAD_FILE() : http://blog.rootcon.org/2012/03/sql-injection-
using-mysql-loadfile-and.html
ก-1
ภาคผนวก ก.
โครงสรางพนฐานของภาษา SQL
ก-2
1. โครงสรางพนฐานของภาษา SQL แบงออกเปน 3 กลมใหญๆ คอ
SQL = Structured Query Language ภาษากลางทใชในการเรยกคนและจดการฐานขอมลโดย
เฉพาะอยางยงฐานขอมลประเภท RDBMS (Relational Database Management System)
- กลม Data Definition Language (DLL) ใชจดการโครงสรางของฐานขอมล เชนการ
สรางตาราง, ปรบปรงโครงสรางฐานขอมล, เพมหรอลบตารางในฐานขอมล
- กลม Data Manipulation Language (DML) ใชจดการขอมล การแสดงขอมล, เพม,
ลบ, แกไข
- กลม Aggregate Functions หรอ Built-in-Function ใชในการหาผลรวมของเรคคอรด,
การหาคาสงสด, คาต าสด, การก าหนดจ านวนเรกคอรดทตองการแสดง (เปนประโยชนอยางยงทชวยไม
ใหเขยนจดการ Code เอง)
- Primary Key คอ คาไมซ า
- Foreign Key คอ Column หรอชดของ Column ทใชในการเชอมโยงขอมลหรอแสดง
ถงความสมพนธระหวางขอมล (ตารางอน)
1.1 ตวด าเนนการ Operators ในภาษา SQL
= เทากบ (Equal)
<> ไมเทากบ (Not Equal)
< นอยกวา (Less Than)
> มากกวา (Greater Than)
<= นอยกวาหรอเทากบ (Less Than or Equal To)
>= มากกวาหรอเทากบ (Greater than or Equal To),
LIKE เปนการเปรยบเทยบโดยใชอกษรพเศษ (Wild Card Character) เชน * ? %
* ตวด าเนนการดานตรรกะ (Logical Operator) ทนยมใชจะมอย 3 ตวคอ AND, OR, NOT
1.2 ล าดบเครองหมายของภาษา SQL
1. *
2. /
3. +
ก-3
4. -
ขอมลเรยงตามล าดบ ตามน และจะค านวน จาก ชาย ไป ขวาเสมอ
1.3 กลมฟงกชน Aggregate ในภาษา SQL เปนกลมฟงกชนทใชค านวณดาน
คณตศาสตร
AVG() หาคาเฉลยของฟวลจากเรคคอรดทงหมด
COUNT() นบจ านวนเรคคอรด
FIRST() หาคาของขอมลทอยในล าดบแรก
LAST() หาคาของขอมลทอยในล าดบสดทาย
MAX() หาคาสงสดของขอมล
MIN() หาคาต าสดของขอมล
SUM() ค านวนผลรวมทงหมดของฟลด
STDDEV() หาคาสวนเบยงเบนมาตฐาน ของ Column ทระบ
1.4 พนฐานการใชงานกลมค าสง DDL (Data Definition Language)
- CREATE สราง Database Object
- ALTER เปลยนแปลง Database Object
- DROP ลบ Database Object
1.5 พนฐานการใชงานกลมค าสง DCL (Data Control Language)
เปนค าสงส าหรบก าหนดหรอถอนสทธ
- GRANT ใหสทธแกผใช
- REVOKE ถอนสทธของผใช
1.6 พนฐานการใชงานกลมค าสง Transaction Command
COMMIT ยนยนการท ารายการ
ROLLBACK ยกเลกการท ารายการ
ก-4
1.7 พนฐานการใชงานกลมค าสง DML ทง 4
1.7.1 ค าสง DELETE เปนค าสงในการลบขอมลหรอลบเรคคอรดใดๆ ออกจากตาราง
เชน DELETE * FROM ชอตาราง
DELETE FROM ชอตาราง WHERE ชอฟวล < 100 ตองการลบขอมลในตาราง โดย
ชอฟวสใดๆ มคานอยกวา 100 ออก
DELETE FROM ชอตาราง WHERE GPA < 1.5 OR Point < 10 ลบเรกคอรดทม
GPA ต ากวา 1.5 หรอ Point ต ากวา 10
เราสามารถใส () ในเงอนไขได เชน DELETE FROM ชอตาราง WHERE (GPA < 1.5) OR
(Point <10 ) เพองายตอการเขาใจและเรายงสามารถใชตวด าเนนการดานตรรกะเชน AND หรอ OR
มาระบเงอนไขไดอกดวย
1.7.2 ค าสง INSERT เปนค าสงเพมขอมลหรอเพมเรคคอรดเขาไปในตาราง เชน
INSERT INTO ชอตาราง ( ฟลด1, ฟลด2 ....) VALUES (ฟลด1, ฟลด....)
หมายเหต ถาเปนขอมลประเภทตวอกษรตาง (Text) อาจจะเปนขอความธรรมดาหรอตวเลขท
อยในลกษณะตวเลข (Nvarchar) จะใชเครองหมาย ' ' ก ากบไวดวย และถาเปนตวเลขสามารถใสคาเขา
ไปไดเลย ถาเปนขอมลประเภทวนท (Date/Time) ถาเปน Access จะใช # ถาเปน SQL Server จะใช ' '
1.7.3 ค าสง UPDATE เปนค าสงทใชส าหรบแกไขหรอเปลยนแปลงขดชอมลในเรก
คอรดทมอยในตาราง
UPDATE ชอตาราง SET ชอฟลด = คาทก าหนด, ชอฟลด2 = คาทก าหนด WHERE
ตามดวยเงอนไข
หมายเหต เปนขอมลประเภทตวอกษรตาง (Text) อาจจะเปนขอความธรรมดาหรอตวเลขทอย
ในลกษณะตวเลข (Nvarchar) จะใชเครองหมาย ' ' ก ากบไวดวย และถาเปนตวเลขสามารถใสคาเขาไป
ไดเลย และถาเปนขอมลประเภทวนท (Date/Time) ถาเปน Access จะใช # ถาเปน SQL Server จะใช
เครองหมาย ' '
UPDATE Test SET ID=6, Name='Malee' GPA=0.9, Point=90 WHERE ID = 1
เปนการแกไข Name =Malee และ GPA = 0.9 Point = 90 โดยเงอนไขแกเฉพาะเรคคอรท ID =1
UPDATE Test SET Point=40 WHERE Point < 20
ก-5
เปนการแกไขขอมลทอยในฟลด Point โดยมเงอนไขวา Point ตองนอยกวา 10 เทานน
1.7.4 ค าสง SELECT เปนค าสงทท าหนาทเลอกหรอดงขอมล (Retrieve Data)
SELECT * FROM ชอตาราง
ถาในกรณทชอฟลดมชองวางจะตองใช [ ] ก ากบไวดวย เชน First Name จะเปน select [First
Name] From .
หมายเหต ถาตองการเรยงล าดบขอมลใหใช ORDER BY ถาเราไมระบ มนจะเรยงจาก นอย
ไปมาก แตถาตองการเรยงจาก มากไปนอยใหใช DESC
เชน SELECT Name from test ORDER by Name DESC
SELECT * from test where Point < 50
SELECT * from test where Point BETWEEN 30 AND 90
เปนค าสงในการดงขอมลในชวงทตองการ