Welcome to The Forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to

existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile

and so much more. This message will be removed once you have signed in.

Active Hackers

The best community of active hackers. This community has been working in hacking for more than 10 years.

 

Hacker Forum

Hacker from all countries join this community to share their knowledge and their hacking tools

    Hacking Tools

    You can find thousands of tools shared by hackers. RAT's, Bot's, Crypters FUD, Stealers, Binders, Ransomware, Mallware, Virus, Cracked Accounts, Configs, Guides, Videos and many other things.

      PRIV8

      Become a Priv8 user and access all parts of the forum without restrictions and without limit of download. It only costs 100 dollars, and it will last you for a lifetime.

      Read Rules

      In this community we follow and respect rules, and they are the same for everyone, regardless of the user's rank. Read the rules well not to be prohibited.

      Sign in to follow this  
      dEEpEst

      "Dream Formula" Second Generation | The First Office 0day Vulnerability (CVE-2018-0802) Analysis Revoked by Microsoft in (data Exploit 2018-01-10)

      Recommended Posts

      Staff

      Introduction

      The Microsoft Security Patch of January 2018 fixes the Office 0day vulnerability (CVE-2018-0802) captured by the 360 Core Security Advanced Threat Response Team. This vulnerability affects almost all versions of Office that Microsoft currently supports.This is the second outbreak of high-level threats using zero-day loopholes since 360's first global interception of the Office 0day vulnerability (CVE-2017-11826).The 360 core security team has been actively communicating with Microsoft and working together to promote the repair of the 0day loophole so that the vulnerability can be properly resolved before disclosure of vulnerability information.The technical principle of the vulnerability is similar to the 17-year-old "Dream Formula" loophole (CVE-2017-11882). It is a re-initiated attack by the hacker using the EQNEDT32.EXE embedded in the office's embedded equation editor. We call it "Nightmare". Formula II (CVE-2018-0802).

      Attack process analysis

      We captured several in-field attacks of "Dream Formula II". The on-the-spot samples were embedded with two formulae objects using Nday and 0day loopholes. At the same time, Nday loopholes can attack unpatched systems, and 0day loopholes attack all patches. The system bypasses the ASLR (Address Randomization) security measures of the CVE-2017-11882 patch, and the attack will eventually implant a malicious remote control program on the user's computer.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure: "Dream Formula II" in the wild sample attack process

      Vulnerability analysis

      "Dream Formula II" is a patch bypass vulnerability of CVE-2017-11882. The type is stack overflow. The root cause is Microsoft's stack overflow in the "Dream Formula Generation" patch that does not fix the copy of the font FaceName.This vulnerability will only cause a crash on an unpatched version, but it can be perfectly utilized on a patched version.Below we analyze the CVE-2018-0802 vulnerability by poc samples.

      Static analysis

      As with CVE-2017-11882, the trigger data for this vulnerability is within the "Equation Native" stream of the extracted OLE object.The red coiled portion in Figure 1 is core data with a total of 0x99 = 153 bytes.0×08 represents the font tag, followed by 00 01 respectively represents the typeface and style of the font, and the area from 33 to 25 00 is the name of the Font, which is the data copied when the stack overflows.This part of the data contains shellcode, bypass ASLR tricks, process command lines, and related data for padding. We will analyze them later.

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      figure 1

      Equation Native data structure

      According to information published online, the entire "EquationNative" data structure is:

      EquationNative Stream Data = EQNOLEFILEHDR + MTEFData

      MTEFData = MTEF header + MTEF Byte Stream.

      The structure of QNOLEFILEHDR is shown in Figure 2:

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      figure 2

      The structure of the MTEF header is shown in Table 1. Regarding this structure, there are differences between the actual data and the format specifications that we observed. The following table shows the actual observations:

      Offset Instructions value
      0 MTEF version number 0×03
      1 The data generation platform 0x00 is generated on Macintosh platform, 0x01 is generated on Windows platform
      2 Generated product of this data 0×00 is generated by MathType, 0×01 is generated by Equation Editor
      3 Product major version number 0×03
      4 Product minor version number 0x0A

      Table 1 

      In the attack sample, the MTEF ByteStream structure is shown in Table 2:

      Initial SIZE record
      FONT records
      FONT content
      Remaining data

      Table 2

      The FONT record and FONT content structure are shown in Table 3:

      member Instructions Note
      Tag 0×08 1 byte
      Tface Typeface number 1 byte
      Style Font style 1 byte
      Name Font name NULL-terminated ASCII string

      table 3

      Patch bypass analysis

      CVE-2018-0802 vulnerability trigger point is located in sub_21E39 (module address is set to 0 in the IDA), as shown in Figure 3, it can be seen that the function of the function is to initialize a LOGFONT structure according to the font data in the formula :

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      image 3 

      Let's take a look at Microsoft's description of the LOGFONT structure (Figure 4).You can see that the last member of this structure is lfFaceName,

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      Figure 4: LOGFONT Structure

      Let's take another look at Microsoft's description of the lfFaceName member (Figure 5).You can see that lfFaceName represents the typeface name of the font. On the version being analyzed, it is a null-terminated char string with a maximum length of 32, which contains the terminator NULL.

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      Figure 5 

      The problem is obvious: the code in the red box in Figure 3 does not limit the copy length when copying the font FaceName, and the source data for the copy is the user-supplied font name, and the destination address is a LOGFONT structure body address passed in from the parent function.We look back to the parent function of sub_21E39 (Figure 6), you can see this address is located on the stack opened by the parent function, is a local variable of the parent function.The attacker constructs malicious data, overwrites the last two bytes of the return address of the parent function (sub_21774), and then directs the control flow to the shellcode on the stack.

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      Figure 6

      During the analysis, we found a place of suspected recursion. Figure 7 shows the disassembly code of sub_21774. We can see that sub_21774 first calls the vulnerability function sub_21E39 to initialize a LOGFONT structure, and then calls the relevant API to pass in the structure. The system gets a font name saved to Name.Then, it compares the obtained Name with the user-supplied lpLogFont. If it is inconsistent (and the sub_115A7 function needs to return False), it will continue to call or not call itself according to the condition specified by a3, while a3 is the third of sub_21E39 function. Parameters.

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      Figure 7

      Let's take a look at the third parameters of the parameters, otherwise there may be multiple recursive, can not effectively use this overflow.According to the previous CVE-2017-11882 debugging results (Figure 8), we can see that when parsing the user-supplied font data, the function calling sub_21774 is sub_214C6.Let's look back at sub_214C6 (Figure 9). Sub_214C6 calls sub_21774 to pass a value of 1 to the third parameter, so if(a3) in Figure 7 is true.Let's look at Figure 7, when sub_21774 recursively calls itself, the value passed to the 3rd parameter is 0, which means that sub_21774 will not call itself again, and the recursion level will only have 1 level.Analyzed here, recursive doubts have been solved.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 8: CVE-2017-11882 Triggered Execution Flow

       

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 9 

      One problem that has been analyzed here is that if _strcmpi(lpLogfont, &Name) is not true (if the font data is forged by the user, it certainly does not hold here), sub_115A7 will be called, which means that it will go to CVE-2017. -11882 overflow point.In the version without the November patch, if you want to successfully use CVE-2017-11882, CVE-2018-0802 points will not overflow because the former needs to have a much smaller overflow size than the latter, and the copy last has a NULL truncation (we know that the controllable eip that overflows to CVE-2017-11882 requires only 0x2C bytes, and through the analysis below (Figure 11) we can see that the controllable eip overflowing to CVE-2018-0802 requires 0x 94 bytes).On the other hand, if you want to trigger CVE-2018-0802 on a version that does not have an November patch, CVE-2017-11882 will be triggered first.In short, CVE-2018-0802 is not available on the pre-11 patch.

      However, as can be seen from Figure 10, in the November patch, before the copy of CVE-2017-11882 overflow point, Microsoft performed a length limit of 0x20 on the copy length, and after the copy was completed, it was manually copied at the end of the copy. A NULL was added to invalidate CVE-2017-11882.This directly leads to CVE-2018-0802 being unusable before patching!Now, as long as sub_115A7 returns False, the exploit can be perfectly exploited, and actual debugging finds that sub_115A7 returns False.

       

      Hidden Content

        Give reaction to this post to see the hidden content.

      Figure 10

      Dynamic Analysis

      Spillover data copy

      With the above analysis, dynamic analysis becomes very simple.Since this overflow point will copy the data, let's monitor the source string and the corresponding stack traceback for each copy. We first enter the OLE data-related Load function (sub_6881), and then break the point before copying the data and proceed. Output, the result is shown in the code:

      Hidden Content

        Give reaction to this post to see the hidden content.

      Hidden Content

        Give reaction to this post to see the hidden content.

      Hidden Content

        Give reaction to this post to see the hidden content.

      Hidden Content

        Give reaction to this post to see the hidden content.

      Hidden Content

        Give reaction to this post to see the hidden content.
       

      It can be seen from the log that there are two copies, and we can know from the stack trace back that these two copies are the two calls to sub_21174 in the static analysis.The first time is the sub_214c6 call to sub_21174, and the second is the sub_21174 call to itself.It can be seen that the stack overflow obviously occurs on the first copy.Here to mention a little bit, cb ce cc e5 stands for Songs.

      Let us calculate in detail how much length we need to overflow to control the return address of the parent function (sub_21174). (The conclusion of this question has been mentioned in the “Patch bypass analysis” section). From Figure 11 we can see from lfFaceName(-0× 90) Overflow to ret_addr (+0x4), a total of 0x94 bytes are required. Exceeding the 0x94 portion of the byte will cover the return address one by one from the low address.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 11

      We look at the data in the POC. As shown in Figure 12, the blue part is the first 0x94 bytes of the overflow, the 2500 is the last two bytes of the overflow, and 00 is the terminator. When the copy encounters 00 Stop.According to the little end address layout, when the poc is running, the EIP will only cover the lower 2 bytes.Why did you do this?The answer is to bypass ASLR.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 12

      Bypass ASLR

      Let's take a look at why two bytes of a district can bypass ASLR.

      First of all, we must be clear that the patch file is opened ASLR, as shown in Figure 13.As a result, the base address for loading EQNEDT32.EXE is random each time, so the first problem to be considered when overflowing is how to bypass ASLR.(As for DEP, you can see from Figure 14 that DEQ is not enabled in EQNEDT32.EXE in the patch file, so it is not necessary to consider DEP under normal circumstances)

      Unfortunately, attackers clearly understand the Windows system mechanisms and defenses.Because on the Windows platform, the ASLR of a 32-bit process only randomizes the upper 2 bytes of the address each time, while the lower 2 bytes remain unchanged.If a ret instruction can be found in the same low 0xFFFF space of the covered address, and the address is 0xABCD00XY (where ABCD and XY are 6 arbitrary hexadecimal numbers, the second to last byte in the address Must be 0x00, because after the copy needs to be accurately truncated, you can directly use this ret to jump to the stack.Since there is no need to bypass DEP, shellcode can be executed directly on the stack.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 13: ASLR Status of EQNEDT32.EXE is Enabled and DEP is Non-Permanent DEP

       

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 14: DEP Status of EQNEDT32.EXE is Disabled

      More unfortunately, within the EQNEDT32.EXE module, Microsoft really gave and gave only one such address (Figure 15). There are only one address that satisfies the condition, namely, 20025, two bytes that are covered in the eip. 25 00 is unique, there is no second ret that satisfies the condition.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 15

      Let's consider what the original return address of sub_21174 is.Of course, sub_214C6 calls the address of the next instruction of sub_21174. It can be seen from Fig. 16 that the offset of this address is 214E2. According to the overlay of Fig. 12, the offset after the overlay becomes 20025, which consists of the above analysis and Fig. 17 As you can see, this address is a ret instruction.This instruction will pop up sub_214C6 to the first parameter of sub_21174 and switch the control flow to this value to execute.To make matters worse, this first parameter happens to be lpLogFont, which is the FontName provided by the user.So after ret is executed, the control flow will be transferred to the stack and it will just start executing the first byte of the user-supplied FontName.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 16

       

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 17

      Sample A Shellcode Analysis

      In poc for sample A transformation, control flow hijacking and execution of the shellcode section are shown in Figure 18:

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 18: Due to the existence of recursion, we need to return twice from the sub_21774 function, which explains the first two rets

               Immediately after the jmpeax instruction, WinExec is called, and the command line parameter happens to be calc.exe, as shown in Figure 19:

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 19

      Sample B Shellcode Analysis

      Sample B bypasses ASLR in the same way as Sample A, but the shellcode portion is not the same as Sample A.Sample B's shellcode finds the kernel32.dll export table (Figures 20 and 21) through the PEB, and then searches through the export table for a hash of the desired function through a specific hash algorithm (Figure 21). The hash value is given in shellcode.The shellcode then saves the searched function address to where the hash value was previously stored (Figure 22).

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 20: Hash value and copy path name given in sample B's shellcode

       

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 21: Finding the required function in the export table of kernel32.dll with the hash value

      Hidden Content

        Give reaction to this post to see the hidden content.
       

       

      Figure 22: Comparison of data on the stack before and after finding the function address

       After successfully finding the function and saving the address on the stack, first call the ExpandEnvironmentStringsA function to expand the short path (the short path is saved in the shellcode), and then call CopyFileA to copy the payload to the word plugin directory so that the payload will follow the word next time. Start automatically loaded into memory.Finally call ExitProcess to exit the Equation Editor process (Figure 23).The entire process does not affect the normal opening of the document.

      Hidden Content

        Give reaction to this post to see the hidden content.

       

      Figure 23: Expand the short path, copy the file, and exit the process

      to sum up

      The 0day vulnerabilities used by "CVE-2018-0802" are called CVE-2017-11882's twin vulnerabilities. One vulnerability in the attack sample is for unpatched systems, and the other is for vulnerabilities. The system uses two OLEs to attack at the same time. The hackers' well-constructed attacks are perfectly compatible with the different circumstances of the system vulnerability patch environment.The use of this loophole and the Bypass ASLR approach have a certain degree of coincidence, if there is no ret instruction in the EQNEDT32.EXE module can be used to bypass the ASLR, if lpLogFont is not the first parameter of sub_21774, if CVE - 2017-11882 patch repair method forced DEP protection, "Dream Formula II" will not have the opportunity.

      The latest 360 security products have been able to detect and prevent this zero-day vulnerability, and we recommend that users update the Microsoft Security Patch for January 2018.

      reference

      Hidden Content

        Give reaction to this post to see the hidden content.

      Code .py

      Hidden Content

        Give reaction to this post to see the hidden content.
       

      Share this post


      Link to post
      Share on other sites

      hello subject looks great let see if its really works 

      Share this post


      Link to post
      Share on other sites
      Guest
      This topic is now closed to further replies.
      Sign in to follow this  

      • Similar Content

        • By itsMe

          Hidden Content
          Give reaction to this post to see the hidden content. Advanced Search / Dork / Mass Exploitation Scanner
          Description
          Search engine Google / Bing / Ask / Yandex / Sogou
          ● Mass Dork Search
          ● Multiple instant scans.
          ● Mass Exploitation
          ● Use proxy.
          ● Random user agent.
          ● Random engine.
          ● Extern commands execution.
          ● XSS / SQLI / LFI / AFD scanner.
          ● Filter wordpress and Joomla sites on the server.
          ● Find Admin page.
          ● Decode / Encode Base64 / MD5
          ● Ports scan.
          ● Extract IPs
          ● Extract E-mails.
          ● Auto-detect errors.
          ● Auto-detect Cms.
          ● Post data.
          ● Auto sequence repeater.
          ● Validation.
          ● Post and Get method
          ● And more…
          CHANGES: v17.0.1
              – Fix bug extern process.


          Hidden Content
          Give reaction to this post to see the hidden content.
        • By itsMe

          Hidden Content
          Give reaction to this post to see the hidden content. This tool gives information about the phone number that you entered.
          What IS Moriarty?
              Advanced Information Gathering And Osint Tool
              Moriarty is a tool that tries to find good information about the phone number that you provieded;
          ->Tries To Find Owner Of The Number
          ->Tries To Find Risk Level Of The Number
          ->Tries To Find Location,Time Zone Of The Number,Carrier
          ->Tries To Find Social Media Platforms That The Number Is Registered
          ->Tries To Find Links About Phone Number
          ->Tries To Find Comments About Phone Number
          ->Sends Sms To Phone Number With Amazon Aws

          Hidden Content
          Give reaction to this post to see the hidden content.
        • By itsMe

          Hidden Content
          Give reaction to this post to see the hidden content. replica
          Ghidra Analysis Enhancer
          ✨Features
              ⚡ Disassemble missed instructions – Define code that Ghidra’s auto analysis missed
              ⚡ Detect and fix missed functions – Define functions that Ghidra’s auto analysis missed
              ⚡ Fix ‘undefinedN’ datatypes – Enhance Disassembly and Decompilation by fixing ‘undefinedN’ DataTypes
              ⚡ Set MSDN API info as comments – Integrate information about functions, arguments and return values into Ghidra’s disassembly listing in the form of comments
              ⚡ Tag Functions based on API calls – rename functions that call one or more APIs with the API name and API type family if available
              ⚡ Detect and mark wrapper functions – Rename wrapper functions with the wrapping level and wrapped function name
              ⚡ Fix undefined data and strings – Defines ASCII strings that Ghidra’s auto analysis missed and Converts undefined bytes in the data segment into DWORDs/QWORDs
              ⚡ Detect and label crypto constants – Search and label constants known to be associated with the cryptographic algorithm in the code
              ⚡ Detect and comment stack strings – Find and post-comment stack strings
              ⚡ Rename Functions Based on string references – rename functions that reference one or more strings with the function name followed by the string name.
              ⚡ Bookmark String Hints – Bookmark interesting strings (file extensions, browser agents, registry keys, etc..)


          Hidden Content
          Give reaction to this post to see the hidden content.
        • By itsMe

          Hidden Content
          Give reaction to this post to see the hidden content. A fast tool to scan CRLF vulnerability written in Go
          Changelog v1.2
          Bump to 1.2.0
          Update default concurrency to 25 (depends on escape lists)
          Trim double-quoted string safely escaped URLs
          Add escape lists

          Hidden Content
          Give reaction to this post to see the hidden content.
        • By itsMe

          Hidden Content
          Give reaction to this post to see the hidden content. 2020 | English | ISBN: 9389423759 | PDF | 387 Pages | 15 MB
          This book is intended for the professional programmer who wants to learn Python for their place of business, or simply to extend their knowledge. You will learn the basics of the language–from how to define variables and implement looping and conditional constructs, to working with existing code. Once we have established the baseline for writing code in Python, you’ll learn how to create your own functions and classes, how to extend existing code, and how to work with Python-specific things like comprehensions and generators. With a solid foundation, you will then move on to learn about the existing Python libraries, called packages, and how to use them, as well as discovering little tips and tricks that will make you a hit with all the programmers at work, and really aid you in nailing that programming interview.
          What will you learn
          By the time you have finished this book, you will know enough to write complex Python programs and work with existing Python code. You will find out about the packages that make Python one of the most popular programming languages and will understand the “Pythonic” way of thinking and programming.
          Who this book is for
          This book is designed for programmers who have experience in at least one programming language. No prior Python experience is necessary, but it is assumed that you understand the basics of loops, conditionals and object-oriented constructs, such as classes. You should have or have access to a system that runs Python 3 (any version).
          Hidden Content
          Give reaction to this post to see the hidden content.

          Hidden Content
          Give reaction to this post to see the hidden content.