def set_cant_split(self, row):
     tr = row._tr
     trPr = tr.get_or_add_trPr()
     tblHeader = OxmlElement('w:cantSplit')
     tblHeader.set(qn('w:val'), "true")
     trPr.append(tblHeader)
     return row
def set_vert_cell_direction(cell):
    # https://github.com/python-openxml/python-docx/issues/55
    tc = cell._tc
    tcPr = tc.tcPr
    textDirection = OxmlElement('w:textDirection')
    textDirection.set(qn('w:val'), 'btLr')
    tcPr.append(textDirection)
 def cellStyle(self, cells, background):
     self.make_rows_bold(cells)
     for cell in cells:
         tcPr = cell._tc.get_or_add_tcPr()
         tcVAlign = OxmlElement("w:shd")
         tcVAlign.set(qn("w:fill"), background)
         tcPr.append(tcVAlign)
Exemple #4
0
    def set_table_margins(self, tbl, width: dict = None):
        """
        <w:tbl>
            <w:tblPr>
                    <w:tblStyle w:val="LightShading"/>
                    <w:tblW w:type="auto" w:w="0"/>
                    <w:tblCellMar>
                            <w:left w:type="dxa" w:w="63"/>
                            <w:right w:type="dxa" w:w="63"/>
                    </w:tblCellMar>
                    <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="0" w:lastRow="0" w:noHBand="0" w:noVBand="1" w:val="04A0"/>
            </w:tblPr>
        """  # noqa

        # 67 = Cm(0.11) ...?
        if width is None:
            width = dict(left=67, right=67)

        margins = OxmlElement('w:tblCellMar')

        for side, w in width.items():
            margin = OxmlElement(f'w:{side}')
            margin.set(qn('w:w'), str(w))
            margin.set(qn('w:type'), 'dxa')

            margins.append(margin)

        tbl._tbl.tblPr.append(margins)
Exemple #5
0
 def new(cls, text):
     """
     Return a new ``<w:t>`` element.
     """
     t = OxmlElement('w:t')
     t.text = text
     return t
Exemple #6
0
 def new(cls, pic_id, image_filename):
     nvPicPr = OxmlElement('pic:nvPicPr')
     nvPicPr.append(CT_NonVisualDrawingProps.new(
         'pic:cNvPr', pic_id, image_filename
     ))
     nvPicPr.append(CT_NonVisualPictureProperties.new())
     return nvPicPr
Exemple #7
0
 def new(cls, text):
     """
     Return a new ``<w:t>`` element.
     """
     t = OxmlElement('w:t')
     t.text = text
     return t
Exemple #8
0
def set_shade_cell(cell, shade):
    tcpr = cell._tc.get_or_add_tcPr(
    )  # récupération de lélément XML correspondant à la cellule
    tcvalign = OxmlElement(
        "w:shd")  # création d'un élément XML pour le background
    tcvalign.set(qn("w:fill"),
                 shade)  # set de la valeur de la vcouleur de fond
    tcpr.append(tcvalign)  # ajout de l'élement XML à la cellule
Exemple #9
0
 def new(cls):
     """
     Return a new ``<w:tc>`` element, containing an empty paragraph as the
     required EG_BlockLevelElt.
     """
     tc = OxmlElement("w:tc")
     p = CT_P.new()
     tc.append(p)
     return tc
Exemple #10
0
    def add_tbl_border(self, tbl):
        """Add table bottom border with OxmlElement"""
        borders = OxmlElement('w:tblBorders')
        bottom_border = OxmlElement('w:bottom')
        bottom_border.set(qn('w:val'), 'single')
        bottom_border.set(qn('w:sz'), '4')
        borders.append(bottom_border)

        tbl._tbl.tblPr.append(borders)
Exemple #11
0
 def new(cls):
     """
     Return a new ``<w:tc>`` element, containing an empty paragraph as the
     required EG_BlockLevelElt.
     """
     tc = OxmlElement('w:tc')
     p = CT_P.new()
     tc.append(p)
     return tc
Exemple #12
0
 def add_drawing(self, inline_or_anchor):
     """
     Return a newly appended ``CT_Drawing`` (``<w:drawing>``) child
     element having *inline_or_anchor* as its child.
     """
     drawing = OxmlElement('w:drawing')
     self.append(drawing)
     drawing.append(inline_or_anchor)
     return drawing
Exemple #13
0
 def add_drawing(self, inline_or_anchor):
     """
     Return a newly appended ``CT_Drawing`` (``<w:drawing>``) child
     element having *inline_or_anchor* as its child.
     """
     drawing = OxmlElement('w:drawing')
     self.append(drawing)
     drawing.append(inline_or_anchor)
     return drawing
Exemple #14
0
def set_repeat_table_header(row):
    """ set repeat table row on every new page
    """
    tr = row._tr
    trPr = tr.get_or_add_trPr()
    tblHeader = OxmlElement('w:tblHeader')
    tblHeader.set(qn('w:val'), "true")
    trPr.append(tblHeader)
    return row
Exemple #15
0
 def new(cls, num_id, abstractNum_id):
     """
     Return a new ``<w:num>`` element having numId of *num_id* and having
     a ``<w:abstractNumId>`` child with val attribute set to
     *abstractNum_id*.
     """
     abstractNumId = CT_DecimalNumber.new('w:abstractNumId', abstractNum_id)
     num = OxmlElement('w:num', {qn('w:numId'): str(num_id)})
     num.append(abstractNumId)
     return num
Exemple #16
0
 def new(cls):
     """
     Return a new ``<w:tbl>`` element, containing the required
     ``<w:tblPr>`` and ``<w:tblGrid>`` child elements.
     """
     tbl = OxmlElement("w:tbl")
     tblPr = CT_TblPr.new()
     tbl.append(tblPr)
     tblGrid = CT_TblGrid.new()
     tbl.append(tblGrid)
     return tbl
Exemple #17
0
def set_cell_vertical_alignment(cell, align="center"):
    try:
        tc = cell._tc
        tcPr = tc.get_or_add_tcPr()
        tcValign = OxmlElement('w:vAlign')
        tcValign.set(qn('w:val'), align)
        tcPr.append(tcValign)
        return True
    except:
        traceback.print_exc()
        return False
Exemple #18
0
 def new(cls, pic_id, filename, rId, cx, cy):
     """
     Return a new ``<pic:pic>`` element populated with the minimal
     contents required to define a viable picture element, based on the
     values passed as parameters.
     """
     pic = OxmlElement('pic:pic', nsmap=nspfxmap('pic', 'r'))
     pic.append(CT_PictureNonVisual.new(pic_id, filename))
     pic.append(CT_BlipFillProperties.new(rId))
     pic.append(CT_ShapeProperties.new(cx, cy))
     return pic
Exemple #19
0
 def new(cls, num_id, abstractNum_id):
     """
     Return a new ``<w:num>`` element having numId of *num_id* and having
     a ``<w:abstractNumId>`` child with val attribute set to
     *abstractNum_id*.
     """
     abstractNumId = CT_DecimalNumber.new(
         'w:abstractNumId', abstractNum_id
     )
     num = OxmlElement('w:num', {qn('w:numId'): str(num_id)})
     num.append(abstractNumId)
     return num
def shade_cells(cells, shade):
    """Gives background color to the inputted cells of a table in a .docx file.

    :param cells: The cells which you want to be colored. It could be a full row, such as the header row.
    :type cells: list
    :param shade: HEX color code like: "#f3f3f3" (grey)
    :type shade: str
    """
    for cell in cells:
        tcPr = cell._tc.get_or_add_tcPr()
        tcVAlign = OxmlElement("w:shd")
        tcVAlign.set(qn("w:fill"), shade)
        tcPr.append(tcVAlign)
def set_repeat_table_header(row):
    """Sets property 'repeat header row on every new page' of table.

    :param row: Header row
    :type row: [type]
    :return: Row
    :rtype: [type]
    """
    
    tr = row._tr
    trPr = tr.get_or_add_trPr()
    tblHeader = OxmlElement('w:tblHeader')
    tblHeader.set(qn('w:val'), "true")
    trPr.append(tblHeader)
    return row
Exemple #22
0
 def add_emboss(self):
     """
     Return a newly added <w:emboss/> child element.
     """
     emboss = OxmlElement('w:emboss')
     self.insert(0, emboss)
     return emboss
Exemple #23
0
 def add_vanish(self):
     """
     Return a newly added <w:vanish/> child element.
     """
     vanish = OxmlElement('w:vanish')
     self.insert(0, vanish)
     return vanish
Exemple #24
0
 def add_i(self):
     """
     Return a newly added <w:i/> child element.
     """
     i = OxmlElement('w:i')
     self.insert(0, i)
     return i
Exemple #25
0
 def add_webHidden(self):
     """
     Return a newly added <w:webHidden/> child element.
     """
     webHidden = OxmlElement('w:webHidden')
     self.insert(0, webHidden)
     return webHidden
Exemple #26
0
 def add_specVanish(self):
     """
     Return a newly added <w:specVanish/> child element.
     """
     specVanish = OxmlElement('w:specVanish')
     self.insert(0, specVanish)
     return specVanish
Exemple #27
0
 def add_iCs(self):
     """
     Return a newly added <w:iCs/> child element.
     """
     iCs = OxmlElement('w:iCs')
     self.insert(0, iCs)
     return iCs
Exemple #28
0
 def add_strike(self):
     """
     Return a newly added <w:strike/> child element.
     """
     strike = OxmlElement('w:strike')
     self.insert(0, strike)
     return strike
Exemple #29
0
 def add_noProof(self):
     """
     Return a newly added <w:noProof/> child element.
     """
     noProof = OxmlElement('w:noProof')
     self.insert(0, noProof)
     return noProof
Exemple #30
0
 def add_oMath(self):
     """
     Return a newly added <w:oMath/> child element.
     """
     oMath = OxmlElement('w:oMath')
     self.insert(0, oMath)
     return oMath
Exemple #31
0
 def add_cs(self):
     """
     Return a newly added <w:cs/> child element.
     """
     cs = OxmlElement('w:cs')
     self.insert(0, cs)
     return cs
Exemple #32
0
 def add_rtl(self):
     """
     Return a newly added <w:rtl/> child element.
     """
     rtl = OxmlElement('w:rtl')
     self.insert(0, rtl)
     return rtl
Exemple #33
0
 def add_outline(self):
     """
     Return a newly added <w:outline/> child element.
     """
     outline = OxmlElement('w:outline')
     self.insert(0, outline)
     return outline
Exemple #34
0
 def add_shadow(self):
     """
     Return a newly added <w:shadow/> child element.
     """
     shadow = OxmlElement('w:shadow')
     self.insert(0, shadow)
     return shadow
Exemple #35
0
 def add_smallCaps(self):
     """
     Return a newly added <w:smallCaps/> child element.
     """
     smallCaps = OxmlElement('w:smallCaps')
     self.insert(0, smallCaps)
     return smallCaps
Exemple #36
0
 def add_snapToGrid(self):
     """
     Return a newly added <w:snapToGrid/> child element.
     """
     snapToGrid = OxmlElement('w:snapToGrid')
     self.insert(0, snapToGrid)
     return snapToGrid
Exemple #37
0
 def add_imprint(self):
     """
     Return a newly added <w:imprint/> child element.
     """
     imprint = OxmlElement('w:imprint')
     self.insert(0, imprint)
     return imprint
def addMetadata(p, text):
  # colored small text
  r = p.add_run(text)
  rPr = r._r.get_or_add_rPr()
  rStyle = OxmlElement('w:color')
  rStyle.set(qn('w:val'), '888888')
  rPr.insert(0, rStyle)
  rStyle = OxmlElement('w:sz')
  rStyle.set(qn('w:val'), '18')
  rPr.insert(0, rStyle)
  rStyle = OxmlElement('w:szCs')
  rStyle.set(qn('w:val'), '18')
  rPr.insert(1, rStyle)
Exemple #39
0
    def new(cls, cx, cy, shape_id, pic):
        """
        Return a new ``<wp:inline>`` element populated with the values passed
        as parameters.
        """
        name = 'Picture %d' % shape_id
        uri = nsmap['pic']

        inline = OxmlElement('wp:inline', nsmap=nspfxmap('wp', 'r'))
        inline.append(CT_PositiveSize2D.new('wp:extent', cx, cy))
        inline.append(CT_NonVisualDrawingProps.new(
            'wp:docPr', shape_id, name
        ))
        inline.append(CT_GraphicalObject.new(uri, pic))
        return inline
Exemple #40
0
 def new(cls):
     stretch = OxmlElement('a:stretch')
     stretch.append(CT_RelativeRect.new())
     return stretch
Exemple #41
0
 def new(cls, prst):
     prstGeom = OxmlElement('a:prstGeom')
     prstGeom.set('prst', prst)
     return prstGeom
Exemple #42
0
 def new(cls, cx, cy):
     spPr = OxmlElement('pic:spPr')
     spPr.append(CT_Transform2D.new(cx, cy))
     spPr.append(CT_PresetGeometry2D.new('rect'))
     return spPr
Exemple #43
0
 def new(cls, nsptagname_str, shape_id, name):
     elt = OxmlElement(nsptagname_str)
     elt.set('id', str(shape_id))
     elt.set('name', name)
     return elt
Exemple #44
0
 def new(cls, nsptagname_str, cx, cy):
     elm = OxmlElement(nsptagname_str)
     elm.set('cx', str(cx))
     elm.set('cy', str(cy))
     return elm
Exemple #45
0
    def run(self, \
        args, \
        report_directory, \
        lookup, whois_result, \
        dns_result, \
        google_result, \
        shodan_result, \
        paste_scrape_result, \
        theharvester_result, \
        webscrape_result, \
        cred_result, \
        pyfoca_result):

        for l in lookup:

            print('[+] Starting OSINT report for '.format(l))

            self.document = docx.Document()
            #add logo
            self.document.add_picture('./resources/logo.png', height=Inches(1.25))

            #add domain cover info
            paragraph = self.document.add_paragraph()
            run_paragraph = paragraph.add_run('%s' % l)
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(28)
            font.color.rgb = RGBColor(0x00, 0x00, 0x00)

            #add cover info
            paragraph = self.document.add_paragraph()
            run_paragraph = paragraph.add_run('Open Source Intelligence Report\n\n\n\n\n\n\n\n\n\n\n')
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(26)
            font.color.rgb = RGBColor(0xe9, 0x58, 0x23)

            paragraph = self.document.add_paragraph()
            run_paragraph = paragraph.add_run('Generated on: %s' % self.today)
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(16)
            font.color.rgb = RGBColor(0x00, 0x00, 0x00)

            #page break for cover page
            self.document.add_page_break()

            #add intro text on intropage
            heading = self.document.add_heading()
            run_heading = heading.add_run('Executive Summary')
            font = run_heading.font
            font.name = 'Arial'
            font.size = Pt(20)
            font.color.rgb = RGBColor(0xe9, 0x58, 0x23)

            paragraph = self.document.add_paragraph()
            run_paragraph = paragraph.add_run('\nThis document contains information about network, technology, and people associated with the assessment targets. The information was obtained by programatically querying various free or low cost Internet data sources.\n')
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(11)
            run_paragraph = paragraph.add_run('\nThese data include information about the network, technology, and people associated with the targets.\n')
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(11)
            run_paragraph = paragraph.add_run('\nSpecific data sources include: whois, domain name system (DNS) records, Google dork results, and data from recent compromises such as LinkedIn. Other sources include results from Shodan, document metadata from theHarvester and pyFoca, as well as queries to Pastebin, Github, job boards, etc. \n')
            font = run_paragraph.font
            font.name = 'Arial'
            font.size = Pt(11)

            #page break for cover page
            self.document.add_page_break()

            heading = self.document.add_heading()
            run_heading = heading.add_run('Table of Contents')
            font = run_heading.font
            font.bold = True
            font.name = 'Arial'
            font.size = Pt(20)
            font.color.rgb = RGBColor(0x0, 0x0, 0x0)

            #TOC https://github.com/python-openxml/python-docx/issues/36
            paragraph = self.document.add_paragraph()
            run = paragraph.add_run()
            font.name = 'Arial'
            font.size = Pt(11)
            fldChar = OxmlElement('w:fldChar')  # creates a new element
            fldChar.set(qn('w:fldCharType'), 'begin')  # sets attribute on element

            instrText = OxmlElement('w:instrText')
            instrText.set(qn('xml:space'), 'preserve')  # sets attribute on element
            instrText.text = 'TOC \o "1-3" \h \z \u'   # change 1-3 depending on heading levels you need

            fldChar2 = OxmlElement('w:fldChar')
            fldChar2.set(qn('w:fldCharType'), 'separate')
            fldChar3 = OxmlElement('w:t')
            fldChar3.text = "Right-click to update field."
            fldChar2.append(fldChar3)

            fldChar4 = OxmlElement('w:fldChar')
            fldChar4.set(qn('w:fldCharType'), 'end')

            r_element = run._r
            r_element.append(fldChar)
            r_element.append(instrText)
            r_element.append(fldChar2)
            r_element.append(fldChar4)
            p_element = paragraph._p

            #page break for toc
            self.document.add_page_break()

            if cred_result is not None:
                print('[+] Adding credential dump results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Credentials found from recent compromises (LinkedIn, Adobe, etc.) related to: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                paragraph = self.document.add_paragraph()
                for c in cred_result:
                    run_paragraph = paragraph.add_run(''.join(c))
                    font = run_paragraph.font
                    font.name = 'Arial'
                    font.size = Pt(11)
                self.document.add_page_break()

            #add whois data with header and break after end
            if whois_result is not None:
                print('[+] Adding whois results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Whois Data for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                #content
                paragraph = self.document.add_paragraph()
                for line in whois_result:
                    if ':' in line:
                        run_paragraph = paragraph.add_run(''.join(line)+'\n')
                        font = run_paragraph.font
                        font.name = 'Arial'
                        font.size = Pt(10)
                self.document.add_page_break()

            #add dns data with header and break after end
            if dns_result is not None:
                print('[+] Adding DNS results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Domain Name System Data for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                #content
                paragraph = self.document.add_paragraph()
                for d in dns_result:
                    run_paragraph = paragraph.add_run('\n'.join(d))
                    font = run_paragraph.font
                    font.name = 'Arial'
                    font.size = Pt(10)
                self.document.add_page_break()

            #google dork output
            if google_result is not None:
                print('[+] Adding google dork results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Google Dork Results for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                #content
                paragraph = self.document.add_paragraph()
                for r in google_result:
                    run_paragraph = paragraph.add_run(''.join(r+'\n'))
                    font = run_paragraph.font
                    font.name = 'Arial'
                    font.size = Pt(10)
                self.document.add_page_break()

            #harvester output
            if theharvester_result is not None:
                print('[+] Adding theHarvester results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('theHarvester Results for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                #content
                paragraph = self.document.add_paragraph()
                for h in theharvester_result:
                    run_paragraph = paragraph.add_run(''.join(h))
                    #set font stuff
                    font = run_paragraph.font
                    font.name = 'Arial'
                    font.size = Pt(10)
                self.document.add_page_break()

            #pastebin scrape output
            if paste_scrape_result is not None:
                print('[+] Adding pastebin scrape results to report')
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Pastebin URLs for %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)

                paragraph = self.document.add_paragraph()
                self.document.add_paragraph(paste_scrape_result)
                font = run_paragraph.font
                font.name = 'Arial'
                font.size = Pt(10)
                self.document.add_page_break()

            #general scrape output
            if webscrape_result is not None:
                print('[+] Adding website scraping results to report')
                #header
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Website Scraping Results for %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)
                #content
                paragraph = self.document.add_paragraph()
                for sr in webscrape_result:
                    for line in sr:
                        run_paragraph = paragraph.add_run(line)
                        font = run_paragraph.font
                        font.name = 'Arial'
                        font.size = Pt(10)

                self.document.add_page_break()

            #pyfoca results
            if pyfoca_result is not None:
                print('[+] Adding pyfoca results to report')
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('pyFoca Results for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)

                paragraph = self.document.add_paragraph()
                for fr in pyfoca_result:
                    run_paragraph = paragraph.add_run(''.join(str(fr).strip(("\\ba\x00b\n\rc\fd\xc3"))))
                    font = run_paragraph.font
                    font.name = 'Arial'
                    font.size = Pt(10)

                self.document.add_page_break()

            #shodan output
            if shodan_result is not None:
                heading = self.document.add_heading(level=3)
                run_heading = heading.add_run('Shodan Results for: %s' % l)
                font = run_heading.font
                font.name = 'Arial'
                font.color.rgb = RGBColor(0xe9, 0x58, 0x23)

                paragraph = self.document.add_paragraph()
                for shr in shodan_result:
                    try:
                        run_paragraph = paragraph.add_run(str(shr).strip(("\\ba\x00b\n\rc\fd\xc3")))
                        #set font stuff
                        font = run_paragraph.font
                        font.name = 'Arial'
                        font.size = Pt(10)
                    except:
                        print ('probably an encoding error...')
                        continue

            print('[+] Writing file: ./reports/{}/OSINT_{}_.docx'.format(l, l))

            #saves to ./reports/domain.com/OSINT_domain.com_.docx
            self.document.save(report_directory+'{}/OSINT_{}_.docx'.format(l, l))
Exemple #46
0
 def new(cls, nsptagname_str, x, y):
     elm = OxmlElement(nsptagname_str)
     elm.set('x', str(x))
     elm.set('y', str(y))
     return elm
Exemple #47
0
 def new(cls, rId):
     blip = OxmlElement('a:blip')
     blip.set(qn('r:embed'), rId)
     return blip
Exemple #48
0
 def new(cls, uri, pic):
     graphicData = OxmlElement('a:graphicData')
     graphicData.set('uri', uri)
     graphicData.append(pic)
     return graphicData
Exemple #49
0
 def new(cls, cx, cy):
     spPr = OxmlElement('a:xfrm')
     spPr.append(CT_Point2D.new('a:off', 0, 0))
     spPr.append(CT_PositiveSize2D.new('a:ext', cx, cy))
     return spPr
Exemple #50
0
 def new(cls, uri, pic):
     graphic = OxmlElement('a:graphic')
     graphic.append(CT_GraphicalObjectData.new(uri, pic))
     return graphic
Exemple #51
0
 def new(cls, rId):
     blipFill = OxmlElement('pic:blipFill')
     blipFill.append(CT_Blip.new(rId))
     blipFill.append(CT_StretchInfoProperties.new())
     return blipFill