Created
November 16, 2014 15:29
-
-
Save windows98SE/91c3e36590e9b8bcb194 to your computer and use it in GitHub Desktop.
[chatlog] irc 2600thailand
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Xelenonz> xellos: พี่เอว่างปะ ผมถาม ms14-64 โหน่ย | |
* Longcat ([email protected]) has joined | |
* ChanServ gives channel operator status to Longcat | |
<xellos> คำถามคือ | |
<Xelenonz> https://docs.google.com/a/e-cq.net/document/d/1SQsnKdLDOBQdbhJmIQ167WZhFLOaz3b2uTlkHNKtNSg/edit?pli=1 ไล่ตาม code ในนี้อะครับ | |
<Xelenonz> มันเป็นบัค interger ที่ทำให้เกิด type confusion ปะหว่า | |
<Xelenonz> - -" ไม่รู้ผมเข้าใจถูกป่าว | |
<xellos> integer overflow ก็ใช่นะ | |
<xellos> แต่ type confusion นั้น มันแค่เป็นวิธี exploit | |
<xellos> blog ของ coverity มันอธิบายปัญหาหมดแล้วนิ | |
<Xelenonz> ตอนแรก ผมอ่านผ่านๆก่อนอะครับ ยาวเกินเลย note ไว้ก่อน แล้วลองอ่านโค้ดแล้วมั่วเอาแทน - -" | |
<Xelenonz> เหลือ exploit variant type ._." | |
<Xelenonz> <xellos> Pwniez: ขอ ms14-064 ฉบับภาษาไทย << เสร็จแล้ว :P | |
<xellos> ไหน | |
<Xelenonz> ลิ้งที่ให้ดูไงครับ ฮ่าๆ | |
<xellos> มีแต่อังกฤษ | |
<Xelenonz> หน้า 2 มีแค่หน้าเดียวนั้นเลย :P | |
<xellos> แล้วรู้มั้ยว่ามันผิด | |
<xellos> อธิบายผิด | |
<Xelenonz> ไม่รู้นี่แหละ เลยถามพี่เอก่อน - -" | |
<xellos> ไล่ตาม http://rop.sh/ida.html ละกัน | |
<xellos> ตัวแปรตั้งได้ปวดหัวมาก | |
<Xelenonz> อันนั้นอันเก่านะครับ ชื่อตัวแปรบางตัวผมยังมั่วอยู่ | |
<Xelenonz> ตอนแรกไม่รู้ตัวแปรใช้ทำอะไรเลยตั้งแก้ขัดไปก่อน แล้วค่อยแก้ทีหลัง | |
<xellos> มีอันใหม่มะ | |
<xellos> จะได้ไล่ง่ายๆหน่อย | |
<Xelenonz> ผมว่าไม่น่าต่าง แต่ลองดูก็ได้ ฮ่าๆ | |
<xellos> ไล่ได้แหละ | |
<xellos> oldSafeArraySize = SafeArraySize(_psa); // คำนวณหา จำนวน byte ที่ใช้ | |
<Xelenonz> เพิ่งอัพเส็จตะกี้ - - | |
<xellos> หลังจากนั้น | |
<xellos> v6 = _psa->rgsabound[0].cElements; v21 = _psa->rgsabound[0].lLbound; _psa->rgsabound[0].cElements = _psaboundNew->cElements; _psa->rgsabound[0].lLbound = _psaboundNew->lLbound; | |
<xellos> copy & paste ไม่มีบรรทัดใหม่แหะ | |
<xellos> ตรง v20 มันคือ SAFEARRAYBOUND | |
<xellos> เขียนข้างบนใหม่ง่ายๆ เป็น | |
<xellos> originalBound = psa->rgsabound[0]; | |
<xellos> psa->rgsabound[0] = *psaboundNew; | |
<xellos> คือ เก็บ bound เก่าไว้ แล้วใส่ bound ใหม่ที่ต้องการเข้าไป | |
<xellos> newSafeArraySize = SafeArraySize(_psa); // คำนวณหา จำนวน byte ที่ต้องการจะให้เป็น | |
<xellos> diffSize = newSafeArraySize - oldSafeArraySize; // แล้วลบกัน | |
<xellos> ถ้าเป็น 0 คือเท่าเดิม ไม่ต้องทำอะไร | |
<xellos> ถ้า > 0 คือขยาย | |
<xellos> ถ้า < 0 คือหด | |
<xellos> ปัญหาหนึ่งคือจุดนี้ ถ้าเราใส่ให้มันขยาย แต่ผลลัพธ์มันออกมาเป็นลบ | |
<xellos> โปรแกรมก็จะคิดว่าเราต้องการจะหด | |
<icheernoom> *0* | |
<xellos> แล้วก็ invertDiffSize = -(newSafeArraySize - oldSafeArraySize); // คำนวณ size ที่หด เพื่อที่จะ allocate memory มาใส่ในนี้ชั่วคราวก่อน | |
<xellos> หลังจากนั้นก็ newArray = (void *)(*(int (__stdcall **)(SAFEAR... // อันนี้คือ alloc | |
<xellos> ถ้า alloc fail ไป E_OUTOFMEMORY | |
<xellos> เห็นปัญหามะ | |
<xellos> ถ้า fail ตรงนี้ rgsabound มันโดนกำหนดเป็นค่าใหม่แล้ว | |
<xellos> แต่ไม่ได้ restore ค่ามันกลับเป็นค่าเดิม | |
* Longcat ลงชื่อเข้ามาดูใน log ของนัก cap ในตำนาน | |
<Xelenonz> อ่อ จริงด้วยแหะ | |
<Xelenonz> ไม่ได้คิดถึงตรงนั้นเลย | |
<Xelenonz> lol | |
* Xelenonz ลงชื่อด้วย *0* | |
* xellos ลงชื่อด้วย | |
* icheernoom ลงชื่อออ | |
* Xelenonz is now known as noob | |
<whoami> เดี๋ยวๆ .. พวกลงชื่อมันอยุ่ตั้งแต่แรกแล้วทั้งนั้น | |
<noob> เปลี่ยนชื่อแพ่บ | |
<xellos> bug มันอยู่ 2 ที่ | |
<xellos> integer overflow ที่หนึ่ง | |
<xellos> ลืม restore ค่ากลับอีกที่หนึ่ง | |
<Pwniez> ใครเอา nick Xelenonz ไปใช้เนี่ย โดนแอบอ้างอีกละ - -" | |
<noob> Pwniez: โทดครับพี่ ผมเปลี่ยนชื่อละ | |
<noob> ต่อเลยครับ :D | |
<xellos> - -' | |
<xellos> exploit ก็แค่ redim ให้มันใหญ่ ใส่ค่าให้มัน overflow แล้ว diff จะได้เป็นลบ | |
<xellos> ถ้า size เป็นประมาณ 0x80000000 | |
<xellos> ยังไงก็ alloc fail | |
<xellos> ผลลัพธ์ที่ได้คือ array นั้น ขนาดใน memory เท่าเดิม แต่โปรแกรมจะคิดว่ามีขนาดใหญ่มาก | |
<xellos> ทำให้สามารถ access ได้เกินกว่าที่ allocate ไว้ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment