single quote แค่ตัวเดียวก็เป็นเรื่องได้
Thursday, May 29th, 2008ขำตัวเองไม่หายเลยครับที่เจ้าตัว ‘ (Single Quote) ตัวเดียวก็ทำให้เกิดเรื่องได้ ที่ขำก็คือ ไม่ได้ดูให้ดีแบบว่ามันหลงหูหลงตาแฮ่ะ (ปกติไม่เคยลืมเลยนะ)
แล้วมันเกิดอะไรขึ้นเหรอ ???
ก็เจ้า Maxsite ที่ผมทำขึ้นมานะสิ ตัว 1.10 ที่มีเว็บบอร์ดเข้ามาด้วย เพราะมีคนทำเว็บบอร์ดส่งมาให้ผมนานมากๆแล้ว ไอ้ผมเองก็ไม่เอะใจแฮ่ะ เพราะลองๆดูใช้ได้ และไล่ๆโค๊ดดูก็โอเค
แต่…คงด้วยความมองไม่ละเอียดมากนักจึงพบว่ามีการคร่อมการรับค่าตัวแปรไม่ได้ใช้ Single Quote คร่อมไป 1 ค่า อ้าวกรรมจริงๆ
นี่เลยเขียนแบบนี้
$res[category] = $db->select_query(”SELECT category_name FROM “.TB_WEBBOARD_CAT.” WHERE id=”.$_GET[category].” “);
มองผ่านๆโค๊ดเยอะๆหลายร้อยบรรทัดคงไม่เห็นก็ได้ เพราะที่อื่นมันใส่หมดนี่หว่า 555 ใครจะคิดว่าคนที่ส่งโค๊ดมาให้จะลืมเขียน
แล้วมันทำอะไรได้บ้างหล่ะ
คำตอบคือ ทำได้หมดครับ หากรู้โครงสร้างของดาต้าเบส นั่นก็คือ หากคนที่ใช้งาน หรือ เล่น maxsite อยู่แล้วก็จะรู้ละว่าตารางมีชื่อไรบเาง ฟิลล์ชื่อไรบ้าง หากไม่รู้ก็คงต้องสุ่มๆเอา แต่หากคนที่เล่นอยู่แล้วก็ทำได้ครับ
หากเป็นผม ผมจะทำไรครับหากผมเป็นแฮกเกอร์ ผมก็คงใส่คำสั่ง SQL ลงไปให้สร้าง user ในตาราง admin โดยกำหนดสิทธิ์ให้เหมือน admin แล้วก็ login ไปแก้เนื้อหาครับ ก็เหมือนๆที่หลายๆคนที่ใช้ maxsite โดนกัน
ส่วนวิธีที่เนียนสุดๆก็คือ ใช้คำสั่ง SQL injection ลงไปเพื่อให้แสดงผล user ของ admin แล้วก็จัดแจงนำ password ที่ได้ไปถอดรหัส md5 ตามเว็บไซต์ที่เทียบรหัสผ่าน (หากรหัสผ่านง่ายๆโดนหมดครับ ดังนั้นควรตั้ง password ยากๆหน่อย)
ไม่พูดถึงเรื่องการแฮกผ่าน SQL injection ละกันเพราะมันเป็นพื้นฐานของ SQL อยู่แล้ว ลองหาอ่านตาม google คงมีเพียบ
แก้ก็ง่ายๆละ
$res[category] = $db->select_query(”SELECT category_name FROM “.TB_WEBBOARD_CAT.” WHERE id=’”.$_GET[category].”‘ “);
แค่นี้ก็หมดปัญหาละครับ
คราวหน้าคงต้องไล่ดูให้ดีๆหน่อยแว้วเรา 555
งานนี้ยกเครดิตให้คุณ Tesz ที่ไปแกะแงะ Maxsite แล้วจึงรู้ว่ามีจุดนั้นที่ทำผิดพลาดไป
ไว้งานหน้าจะขอให้ช่วยกันงัดแงะสคริปอีกครับ



















