Home Vulnerability อธิบาย ช่องโหว่ WordPress < 4.1.2 Stored XSS

อธิบาย ช่องโหว่ WordPress < 4.1.2 Stored XSS

SHARE

แบบสั้นๆ;

hacker ใช้ special characters ยัดไปใน mysql
ทำให้สามารถหลบการตรวจสอบค่า input ต่างๆ ใน wordpress ได้

ก็ประมาณว่า ทำให้สามารถยัดพวก script ที่เป็น cross site script เข้าไปได้นั่นเองครับ

แบบยาวๆ;

เกริ่น
เรื่องมันเริ่มจาก วันหนึ่งในปีที่แล้ว อีตา Cedric Van Bockhaven กำลังนั่งอ่าน
เกี่ยวกับการเก็บข้อมูลตัวอักษรที่เป็น utf8 ใน MySQL อยู่
ประมาณว่า utf8 ของ MySQL เนี้ย suport แค่ตัวอักษรขนาด 3byte เท่านั้น
ซึ่งถ้าไปเจอภาษาประหลาดๆ ที่ยาว 4byte การจะเก็บลง MySQL จะต้องเก็บเป็น utf8mb4
ซึ่งปัญหาที่พี่แกเจอก็คือ column ของ WordPress (และหลายๆเจ้า) เก็บเป็น utf8 นี่หว่า
ซึ่งพี่แกก็นั่งลองอ่ะคับ … ว่าถ้าในเมื่อเอ็งให้เก็บได้ 3byte แล้วข้าทะลึ่งใส่ 4byte ลงไปจะเกิดอะไรขึ้นว๊าาา
ผลคือ MySQL มันฉลาดครับ … เวลามันเจอ 4byte มันจะตัดทิ้งให้เพื่อให้มั่นใจว่า
ข้านี้เก็บข้อมูลลง db ได้ถูกรูปแบบนะเฟร้ยยยย (ประมาณว่าท่าน MySQL เขาทำการ truncate ให้คับ)
(MySQL ปกติจะถูกตั้งค่าเป็น strict mode น่ะคับ มันเลยจัดการให้นั่นเอง)
ดังนั้น ซึ่งประมาณว่าถ้าเจอ ตัวอักษร ที่ พิเรนๆ เช่น
(ก่อน insert): ex?tic จะถูก MySQL ตัดให้กลายเป็น
(หลัง insert): ex แล้วเก็บใน database ครับ
(หมายเหตุ ลองไปอ่านเพิ่มตรง Introduction: MySQL strict mode ที่พี่แกเขียนอ่ะ)

หลายคนอ่านถึงตรงนี้แล้วคงคิดในใจ แล้ว(มัน)ยังไง(ล่ะวะ)?

คือตาเล็กก็คิดนะ ว่าอีตานี่ก็คงคิดว่า เหี้ยแล้วไง! เหมือนตาเล็ก

ใช่คับ คิดดูนะครับ ถ้าตรง xss playload เนี้ย
.. ผมใส่ให้เป็นคำสั่ง add user ผมเข้าไปเป็น admin
.. จากนั้นผมก็รอให้ admin กดมาเปิดหน้านั้น .. แล้วจากนั้นผมก็ login user admin ที่ได้มา
.. แล้วก็เข้าไปลง plugins ประเภทที่ทำ reverse tcp กลับมาหาผมได้ ซึ่งผมก็ได้ shell
.. จากนั้นผมก็ จุด จุด จุด
… …​ … ระหว่างที่ผมเขียน ผมแล้วลืมคับ ว่าจะทำอะไรต่อ

คิดซะว่าที่เล่ามามันคือ POC คับ … แต่แนะนำให้อ่านจากลิ้งต้นทางเพิ่มครับผม
ปล. สำหรับผม บัคที่เขาเจออะไรทำนองเนี้ย ผมอ่านแล้วผมรู้สึกสนุกดี เหมือนๆ นั่งดูหนังของ Marvel เลยครับ

อ่านเพิ่มได้ที่
https://cedricvb.be/post/wordpress-stored-xss-vulnerability-4-1-2/