SQLMap คือ open source penetration testing tool ที่ได้รับความนิยมตัวหนึ่งที่ใช้ในการ identify ช่องโหว่ SQL Injection รวมถึงสามารถโจมตีได้ถ้าเกิดเว็บที่เราทดสอบนั้นมีช่องโหว่ และยังมีฟีเจอร์มากมายให้เลือกใช้ รวมถึงสามารแก้ไข/เพิ่ม payload ในกรณีที่เราเจอเคสที่ซับซ้อนที่ SQLMap ไม่สามารถโจมตีหรือ identify ช่องโหว่ได้โดย default
คำเตือน การนำ tools ต่างๆไปทดสอบกับระบบ/เว็บที่เราไม่ได้รับอนุญาติ มีความผิดตาม พรบ. คอมพิวเตอร์ มีโทษทั้งจำและปรับ ผมเขียนบทความนี้เพื่อให้ developer, admin ได้นำความรู้ไปทดสอบเว็บของตัวเองว่ามีช่องโหว่หรือไม่และแชร์ความรู้ Information Security
Name: user1 Password: password1 แล้วกด view account details ได้ผลตามรูปด้านล่าง
$ ./sqlmap.py -u “http://10.211.55.4/mutillidae/index.php?page=user-info.php&username=user1&password=password1&user-info-php-submit-button=View+Account+Details” -p username,password –proxy=”http://127.0.0.1:8080”
ความหมายของ option ที่ผมใช้
![7](http://blog.mayaseven.com/wp-content/uploads/2015/02/7.png)
รูปนี้คือ request ที่ผมได้มาจาก Burp Proxy จะเห็นว่าโดย default User-Agent จะเป็นของ SQLMap ซึ่งในบางเคสจะโดน IDS/IPS block หรือเวลา admin มาดู log ก็จะรู้ว่ามีคนใช้ SQLMap ทดลองโจมตีเว็บ เราสามารถใช้ option –random-agent ในการเปลี่ยน User agent เวลา SQLMap scan ได้
ในบางเคสผมต้องการกำหนด User-Agent และ Cookies รวมถึง HTTP Headers อื่นๆ และผมไม่อยากจะให้ input ใน SQLMap ยาวเกินไปเพราะต้องใส่หลาย options และบ่อยครั้งผมใช้ร่วมกับ Burp Suite ผมสามารถ copy HTTP requst จาก Burp Suite มาใช้ได้เลยตามตัวอย่างด้านล่าง
จะเห็นว่า parameter author มีช่องโหว่
ต่อไปนี้เราจะมาดูกันว่าหลังจากที่สามารถ identify ช่องโหว่ SQL Injection ได้แล้ว ผู้โจมตีจะทำอะไรได้บ้าง
ขั้นแรกผมจะเช็คก่อนว่า user ของ databse นั้นเป็นใคร เป็น root หรือ DBA หรือไม่
tables ที่ผมสนใจก็คงจะเป็น accounts เพราะผมอยากจะได้ข้อมูล username, password ของ web nowasp ทั้งหมดผมต้องรู้ก่อนว่ามันมี columns อะไรบ้างจะได้เลือก dump บาง columns พอ
สุดท้ายจะเห็นว่าผู้โจมตีสามารถที่จะขโมย username และ password ทั้งหมดของเว็บ ถ้าเว็บนั้นๆมีช่องโหว่ SQL Injection และ ไม่ได้ทำการ hash password ไว้ นอกจากนี้ถ้าเกิดระบบหลังบ้านขาดการ hardening ผู้โจมตีก็จะพยายามหาทางวาง backdoor และพยายามเพิ่มสิทธิตัวเองจนเป็น admin หรือ root และสามารถควบคุมเครื่อง Server นั้นอย่างสมบูรณ์ต่อไป
จริงๆแล้ว SQLMap ยังมีฟีเจอร์อื่นๆที่มีประโยชน์ต่อ Penetration tester อีกมากมาย รวมถึงสามารถดัดแปลงแก้ไข เช่นในกรณีที่ SQLMap ไม่สามารถ identify ได้ว่า parameter นั้นมีช่องโหว่ แต่ Penetration tester สามารถ identify ได้ เราก็สามารถเพิ่ม payload ของเราเข้าไปได้ที่ไฟล์ “sqlmap/xml/payloads.xml”
รูปแบบการเขียน test มีตัวอย่างอยู่ในไฟล์นั้นแล้ว ถ้าเราต้องการให้ SQLMap ทดสอบเฉพาะ payload ที่เราสร้างหรือ payload ที่เราต้องการก็ใส่ option –test-filter เช่น –test-filter=’AND boolean-based blind – WHERE or HAVING clause (MySQL comment)’
สรุป เราจะเห็นจากในข่าวว่ามีการถูก Hack ด้วย SQL Injection กันมาก สาเหตุก็คือ devloper ไม่สนใจ security ทั้งที่นี้ก็ปี 2015 ช่องโหว่ SQL Injection นั้นมีการพูดถึงกันมาตั้งแต่ 1998 แล้ว *0* และอีกสาเหตุก็คือสมัยนี้มี tools ช่วยให้การ hack ง่ายขึ้น อย่างในบทความนี้ผู้โจมตีไม่จำต้องรู้ด้วยซ้ำว่า SQL Injection ทำงานยังไงหรือแม้กระทั้ง SQL คืออะไรทำงานยังไง lol นี้ก็เป็นโอกาสอันดีที่ dev หรือ admin ได้นำความรุ้ในบทความนี้ไปทดสอบเว็บตัวเองว่ามีช่องโหว่ SQL injection หรือไม่ในเบื้องต้น แน่นอน tools ก็คือ tools มันไม่ได้เก่งกว่าคนแน่นอนในหลายเคส tools ก็ไม่สามารถ identify ช่องโหว่หรือโจมตีได้ ต้องใช้ Penetration tester ที่มีความเชี่ยวชาญ สำหรับท่านที่อยากเรียนรู้มากกว่านี้ก็สามารถอ่านบทความ การแฮกเว็บ THE FUNDAMENTALS OF WEB HACKING [WEB HACKING SERIES PART 1] หรือไม่ก็เจอกันในงานอบรม Hacking & Security Workshop –> http://mayaseven.com ครับ 😀