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

348 lines
13 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="Directories"/>
<xsl:call-template name="TaskingInfo">
<xsl:with-param name="info" select="TaskingInfo"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template match="Directories">
<xsl:apply-templates select="Directory"/>
</xsl:template>
<xsl:template match="Directory">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">DirItem</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">denied</xsl:attribute>
<xsl:choose>
<xsl:when test="@denied">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">path</xsl:attribute>
<xsl:value-of select="@path"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">timestamp</xsl:attribute>
<xsl:value-of select="../@lptimestamp"/>
</xsl:element>
<xsl:apply-templates select="File"/>
</xsl:element>
</xsl:template>
<xsl:template match="File">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileItem</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">altName</xsl:attribute>
<xsl:value-of select="@shortName"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">size</xsl:attribute>
<xsl:value-of select="@size"/>
</xsl:element>
<xsl:apply-templates select="FileTimes" />
<xsl:if test="Reparse">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">ReparseInfo</xsl:attribute>
<xsl:element name="IntValue">
<xsl:attribute name="name">Flags</xsl:attribute>
<xsl:value-of select="Reparse/@flags"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">type</xsl:attribute>
<xsl:value-of select="Reparse/@type"/>
</xsl:element>
<xsl:if test="Reparse/TargetPath">
<xsl:element name="StringValue">
<xsl:attribute name="name">TargetPath</xsl:attribute>
<xsl:value-of select="Reparse/TargetPath"/>
</xsl:element>
</xsl:if>
<xsl:if test="Reparse/AltTargetPath">
<xsl:element name="StringValue">
<xsl:attribute name="name">AltTargetPath</xsl:attribute>
<xsl:value-of select="Reparse/AltTargetPath"/>
</xsl:element>
</xsl:if>
</xsl:element>
</xsl:if>
<xsl:for-each select="Hash">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Hash</xsl:attribute>
<xsl:element name="IntValue">
<xsl:attribute name="name">Size</xsl:attribute>
<xsl:value-of select="@size"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Type</xsl:attribute>
<xsl:value-of select="@type"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Value</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:element>
</xsl:for-each>
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Attributes</xsl:attribute>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeDirectory"/>
<xsl:with-param name="var" select="'directory'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="AccessDenied"/>
<xsl:with-param name="var" select="'accessDenied'"/>
</xsl:call-template>
<!-- all windows stuff -->
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeReparsePoint"/>
<xsl:with-param name="var" select="'reparsePoint'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeCompressed"/>
<xsl:with-param name="var" select="'compressed'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeArchive"/>
<xsl:with-param name="var" select="'archive'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeEncrypted"/>
<xsl:with-param name="var" select="'encrypted'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeHidden"/>
<xsl:with-param name="var" select="'hidden'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeOffline"/>
<xsl:with-param name="var" select="'offline'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeReadonly"/>
<xsl:with-param name="var" select="'read-only'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeSystem"/>
<xsl:with-param name="var" select="'system'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeTemporary"/>
<xsl:with-param name="var" select="'temporary'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeVirtual"/>
<xsl:with-param name="var" select="'virtual'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeNotIndexed"/>
<xsl:with-param name="var" select="'notindexed'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeDevice"/>
<xsl:with-param name="var" select="'device'"/>
</xsl:call-template>
<!-- unix stuff -->
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeAFUnixFamilySocket"/>
<xsl:with-param name="var" select="'afUnixFamilySocket'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeBlockSpecialFile"/>
<xsl:with-param name="var" select="'blockSpecialFile'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeCharacterSpecialFile"/>
<xsl:with-param name="var" select="'characterSpecialFile'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeNamedPipeFile"/>
<xsl:with-param name="var" select="'namedPipe'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeSymbolicLink"/>
<xsl:with-param name="var" select="'symbolicLink'"/>
</xsl:call-template>
</xsl:element>
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Unix-Specific</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">owner</xsl:attribute>
<xsl:value-of select="@owner"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">group</xsl:attribute>
<xsl:value-of select="@group"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">ownerId</xsl:attribute>
<xsl:value-of select="@ownerId"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">groupId</xsl:attribute>
<xsl:value-of select="@groupId"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">hardLinks</xsl:attribute>
<xsl:value-of select="@hardLinks"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">inode</xsl:attribute>
<xsl:value-of select="@inode"/>
</xsl:element>
<xsl:apply-templates select="Permissions"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Permissions">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Permissions</xsl:attribute>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionSetUid"/>
<xsl:with-param name="var" select="'setUid'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionSetGid"/>
<xsl:with-param name="var" select="'setGid'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionSticky"/>
<xsl:with-param name="var" select="'sticky'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionOwnerRead"/>
<xsl:with-param name="var" select="'ownerRead'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionOwnerWrite"/>
<xsl:with-param name="var" select="'ownerWrite'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionOwnerExecute"/>
<xsl:with-param name="var" select="'ownerExecute'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionGroupRead"/>
<xsl:with-param name="var" select="'groupRead'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionGroupWrite"/>
<xsl:with-param name="var" select="'groupWrite'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionGroupExecute"/>
<xsl:with-param name="var" select="'groupExecute'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionWorldRead"/>
<xsl:with-param name="var" select="'worldRead'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionWorldWrite"/>
<xsl:with-param name="var" select="'worldWrite'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FilePermissionWorldExecute"/>
<xsl:with-param name="var" select="'worldExecute'"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="FileAttribute">
<xsl:param name="flag"/>
<xsl:param name="var" />
<xsl:element name="BoolValue">
<xsl:attribute name="name">
<xsl:value-of select="$var"/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="$flag">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template match="FileTimes">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileTimes</xsl:attribute>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Modified"/>
<xsl:with-param name="var" select="'Modified'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Accessed"/>
<xsl:with-param name="var" select="'Accessed'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Created"/>
<xsl:with-param name="var" select="'Created'"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="FileTimeFunction">
<xsl:param name="time"/>
<xsl:param name="var" />
<xsl:element name="ObjectValue">
<xsl:attribute name="name">
<xsl:value-of select="$var"/>
</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">time</xsl:attribute>
<xsl:value-of select="$time"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">type</xsl:attribute>
<xsl:value-of select="$time/@type"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:transform>