shadowbrokers-exploits/windows/Resources/ScRe/Commands/Storage/sql_storage.xsl
2017-04-14 11:45:07 +02:00

345 lines
No EOL
11 KiB
XML

<?xml version='1.0' ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="include/StorageFunctions.xsl"/>
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:element name="StorageObjects">
<xsl:apply-templates select="Sql"/>
<xsl:apply-templates select="Drivers"/>
<xsl:apply-templates select="Sources"/>
<xsl:apply-templates select="Servers"/>
<xsl:apply-templates select="Tables"/>
<xsl:apply-templates select="Columns"/>
<xsl:apply-templates select="Query"/>
<xsl:apply-templates select="Error"/>
<xsl:apply-templates select="CommandInfo"/>
<xsl:apply-templates select="UncompressedData"/>
<xsl:apply-templates select="Connect"/>
<xsl:apply-templates select="Handles"/>
</xsl:element>
</xsl:template>
<xsl:template match="Error">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">SqlErrorItem</xsl:attribute>
<xsl:element name="IntValue">
<xsl:attribute name="name">ErrorCode</xsl:attribute>
<xsl:value-of select="ErrorCode"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">SqlState</xsl:attribute>
<xsl:value-of select="SqlState"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Message</xsl:attribute>
<xsl:value-of select="Message"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="CommandInfo">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">CommandInfo</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Action</xsl:attribute>
<xsl:value-of select="Action"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">TableName</xsl:attribute>
<xsl:value-of select="TableName"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">QueryString</xsl:attribute>
<xsl:value-of select="QueryString"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">File</xsl:attribute>
<xsl:value-of select="File"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">ConnectionString</xsl:attribute>
<xsl:value-of select="ConnectionString"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">AccessString</xsl:attribute>
<xsl:value-of select="AccessType"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">HandleId</xsl:attribute>
<xsl:value-of select="HandleId"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">MaxColumnSize</xsl:attribute>
<xsl:value-of select="MaxColumnSize"/>
</xsl:element>
<xsl:element name="BoolValue">
<xsl:attribute name="name">ConsoleOutput</xsl:attribute>
<xsl:text>true</xsl:text>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Sql">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Drivers">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">DriversItem</xsl:attribute>
<xsl:apply-templates select="Driver"/>
</xsl:element>
</xsl:template>
<xsl:template match="Driver">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">DriverItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="Name"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Attributes</xsl:attribute>
<xsl:value-of select="Attributes"/>
</xsl:element>
<xsl:apply-templates select="Warning"/>
</xsl:element>
</xsl:template>
<xsl:template match="Warning">
<xsl:element name="StringValue">
<xsl:attribute name="name">Warning</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="Sources">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">SourcesItem</xsl:attribute>
<xsl:apply-templates select="DataSource"/>
</xsl:element>
</xsl:template>
<xsl:template match="DataSource">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">SourceItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="Name"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Description</xsl:attribute>
<xsl:value-of select="Description"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Servers">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">ServersItem</xsl:attribute>
<xsl:apply-templates select="Server"/>
</xsl:element>
</xsl:template>
<xsl:template match="Server">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">ServerItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="ColumnInfo">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">ColumnInfoItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">TotalColumns</xsl:attribute>
<xsl:value-of select="TotalColumns"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">StartRow</xsl:attribute>
<xsl:value-of select="StartRow"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">EndRow</xsl:attribute>
<xsl:value-of select="EndRow"/>
</xsl:element>
<xsl:apply-templates select="Column"/>
</xsl:element>
</xsl:template>
<xsl:template match="Column">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">ColumnItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="Name"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">ColumnWidth</xsl:attribute>
<xsl:value-of select="ColumnWidth"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">DataType</xsl:attribute>
<xsl:value-of select="DataType"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">IsNullable</xsl:attribute>
<xsl:value-of select="IsNullable"/>
</xsl:element>
<xsl:element name="BoolValue">
<xsl:attribute name="name">IsBinary</xsl:attribute>
<xsl:value-of select="IsBinary"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Connection">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Connection</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">ConnectionString</xsl:attribute>
<xsl:value-of select="ConnectString"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">HandleId</xsl:attribute>
<xsl:value-of select="HandleId"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">ConnectionType</xsl:attribute>
<xsl:value-of select="ConnectType"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Status</xsl:attribute>
<xsl:value-of select="Status"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">AccessType</xsl:attribute>
<xsl:value-of select="AccessType"/>
</xsl:element>
<xsl:element name="BoolValue">
<xsl:attribute name="name">AutoCommit</xsl:attribute>
<xsl:value-of select="AutoCommit"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">CreateTime</xsl:attribute>
<xsl:value-of select="CreateTime"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">LastUseTime</xsl:attribute>
<xsl:value-of select="LastUseTime"/>
</xsl:element>
<xsl:call-template name="TimeStorage">
<xsl:with-param name="name" select="'MaxIdleDuration'"/>
<xsl:with-param name="time" select="MaxIdleDuration"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template match="Handles">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">HandlesItem</xsl:attribute>
<xsl:for-each select="Connection">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">HandleItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">ConnectionString</xsl:attribute>
<xsl:value-of select="ConnectString"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">HandleId</xsl:attribute>
<xsl:value-of select="HandleId"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">ConnectionType</xsl:attribute>
<xsl:value-of select="ConnectType"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">AccessType</xsl:attribute>
<xsl:value-of select="AccessType"/>
</xsl:element>
<xsl:element name="BoolValue">
<xsl:attribute name="name">AutoCommit</xsl:attribute>
<xsl:value-of select="AutoCommit"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">CreateTime</xsl:attribute>
<xsl:value-of select="CreateTime"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">LastUseTime</xsl:attribute>
<xsl:value-of select="LastUseTime"/>
</xsl:element>
<xsl:call-template name="TimeStorage">
<xsl:with-param name="name" select="'MaxIdleDuration'"/>
<xsl:with-param name="time" select="MaxIdleDuration"/>
</xsl:call-template>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="UncompressedData">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">UncompressedDataItem</xsl:attribute>
<!--All data is currently stored as strings-->
<!--We *could* store with column names and attempt correct types but it's going to be hard-->
<xsl:for-each select="TableRow">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">TableRow</xsl:attribute>
<xsl:for-each select="TableData">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">TableData</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">Data</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:transform>