นั่นคือ MHTML vulnerability จาก Ph4t0m
(อ่านที่นี่ http://www.exploit-db.com/exploits/16071/)
พอมีคนพูดกันมากๆ เรื่องดังๆ ก็ค่อยน่าสนใจจะอ่านหน่อย
เริ่มแรกคือ.. อะไรคือ MHTML?
Wikipediaบอกว่า MHTML ย่อมาจาก MIME HTML (Multipurpose Internet Mail Extensions HTML)
ซึ่งเป็นมาตรฐานที่ออกมานานแล้ว เสนอตั้งแต่ปี1999 ดังนั้นbrowserหลายๆตัวก็สามารถอ่านไฟล์ประเภทนี้ได้ (นามสกุล .mht) และที่ใช้หลักๆก็คือในemail ที่เราจะสามารถเขียนHTMLและแทรกรูปลงไปในemailได้ด้วย
MHTML มันเป็นยังไง?
หลักๆก็คือ ฟอร์แมทแบบ MHTML นี้ เราสามารถใส่ข้อมูลได้หลายประเภท หลายๆข้อมูลลงไปในไฟล์ๆเดียวได้
เช่นรวม html(ในรูป text) เข้ากับ jpg(ในรูป base64) หรือข้อมูลประเภทอื่นๆ ลงไปในไฟล์ๆเดียวได้
หน้าตามันก็เป็นราวๆนี้
Content-Type: multipart/related; type="text/html"; boundary="_ASEP" --_ASEP Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: abcde <HTML> <BODY> <IMG src=3D"mhtml:file://C:\Documents and Settings\Anidear\Desktop\abcde.mht!logo"><BR>ABC<BR>DEF </BODY> </HTML> --_ASEP Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: logo /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRo fHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIR whMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/w AARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2J yggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eX qDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2 uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL /8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvA VYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dX Z3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1 dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDG0D4RaDei1bVb3UrSG9z9 mnR4yjEMVKtleDkcf/XGTX/hFoNkLptKvdSu4bLH2md3jCKSwUKuF5OTz/8AWOOl0P4l+AR 4Ug0zWdRmdkDqES1kwm5ycg45PNGufEvwCfCk+maNqMyM4RSj2smH2uDknHB4rm/ecv8AVz 2/9j9vayte3Tltfe++3yv5H//Z --_ASEP--
โอเค ตรงนี้จะเริ่มอธิบาย format ของ MHTML ละ
มาตัดกันเป็นส่วนๆดีกว่า
Content-Type: multipart/related; หมายถึงข้อมูลชุดนี้ทั้งหมด(ทั้งไฟล์)ประกอบด้วยข้อมูลหลายๆส่วนนะ
boundary="_ASEP" หมายถึงว่าข้อมูลแต่ละชุด ใช้คำว่า "ASEP" ในการตัดแบ่งข้อมูล
ดังนั้นข้อมูลชุดแรกเลยจะอยู่ระหว่างเครื่องหมายนี้ "--_ASEP"
พอเรามาดูข้อมูลชุดแรกนี้
จะเห็นว่าเริ่มต้นเราต้องอธิบายก่อนว่า ข้อมูลชุดนี้คืออะไร
ซึ่งนั่นก็คือสองบรรทัดนี้
Content-Type: text/html; charset="utf-8" ตรงนี้บอกถึงชนิดข้อมูลในส่วนนี้ว่าคืออะไร
Content-Transfer-Encoding: quoted-printable หมายถึง ข้อมูลชุดนี้มีการเข้ารหัสแบบไหน ซึ่งคำนี้หมายถึงจะข้อมูลนี้ไม่ได้เข้ารหัสแบะจะถูกนำมาตีความและแสดงผลออกมาทางbrowserได้
Content-Location: abcde หมายถึง ข้อมูลชุดนี้มีชื่อว่า abcde (เอาไว้เรียกใช้ทีหลังได้)
หลังจากบรรยายลักษณะข้อมูลในส่วนนั้นแล้ว
หลังจากนั้นก็คือข้อมูลล่ะ
เนื่องจากข้อมูลส่วนแรก มันเป็นชนิด text/html จึงสามารถอ่านออกได้เลย
แต่ในบางทีเราต้องการแทรกรูปเข้าไป
ก็จะเห็นได้ในข้อมูลส่วนที่สอง จะมีภาษาที่อ่านไม่ออกนั่น เรียกว่า การเข้ารหัสแบบbase64
ซึ่งข้อมูลที่แท้จริงของรูปนั้น (รู้ว่าเป็นรูปเพราะ Content-Type: image/jpeg) มันเป็นbinary
ไม่สามารถเอามาใส่ไฟล์แบบนี้ได้โดยปกติ จึงนิยมทำให้เป็นbase64 ซึ่งก็จะทำให้ binary นั้นอยู่ในรูปที่อ่านได้อย่างที่เห็น
ส่วนวิธีเรียกใช้ข้อมูลที่อยู่คนละส่วนกันนั้น ก็จะเห็นได้จากในข้อมูลส่วนที่เป็น html ตรง img tag
ก็คือจะใช้เป็น
<IMG src=3D"mhtml:file://C:\Documents and Settings\Anidear\Desktop\abcde.mht!logo">
คือใช้
mhtml:
เพื่อบอกว่าข้อมูลที่จะอ้างถึงนี่มันเป็นแบบ mhtml นะ จะได้ให้ browser คิดถึงเรื่องตัดไฟล์ด้วยfile://C:\Documents and Settings\Anidear\Desktop\abcde.mht
นี่คือpath ของไฟล์ๆนี้และสุดท้ายที่สำคัญสุดคือ
!logo
นี่คือการอ้างถึง ข้อมูลรูปของเรา ที่เขียนกำหนดเอาไว้ว่า Content-Location: logo*เนื่องจากบนระบบนี้ การเขียนเครื่องหมายเท่ากับจะโดนมองเป็นตัวอักษรพิเศษ ดังนั้นจึงต้องใช้ "=3D" ซึ่งหมายถึง เครื่องหมาย เท่ากับ "=" ธรรมดา แทน
อีกเทคนิคนึงในการอ้างถึงข้อมูลส่วนต่างๆของMHTML คือการระบุเป็น Content-ID เช่น
Content-ID: logoimg
ใส่ไว้ที่บริเวณเดียวกันกับส่วนอธิบายข้อมูล
ถ้าใช้วิธีนี้ จะทำให้เราสามารถอ้างถึงข้อมูลจากในไฟล์เดียวกันได้เลยโดยไม่ต้อง ระบุpathยืดยาว
ดังนั้น โค้ดส่วนที่เป็น img ก็จะเป็นแบบนี้แทน
<IMG src=3D"cid:logoimg">
ง่ายขึ้นเยอะ
ว่าจะเริ่ม exploit แต่ว่าเอาไว้ทีหลังดีกว่า เริ่มยาวเกินไปละ
แค่นี้ก่อนแล้วกัน