代码审计之XML解析注入

0x00:介绍

渗透过程中的XML注入原因在于程序没有对接受的XML内容进行过滤和验证,而用户又可控,导致任意加载文件、实体注入、甚至命令执行等问题。代码审计方面只要查看代码有无过滤机制即可。

0x01:示例

简单示例如下,例如拿Java的XMLDecoder解析XML为例,示例代码如下。
 

package shuruyanzheng;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.beans.XMLDecoder;

public class Xmldecoder {

	public static void XMLDecode_test(String path) throws Exception {
		File file = new File(path);
		FileInputStream fis = new FileInputStream(file);
		BufferedInputStream bis = new BufferedInputStream(fis);
		XMLDecoder xd = new XMLDecoder(bis);
		xd.readObject();
		xd.close();
	}

	public static void main(String[] args) {
		String path = "test.xml";
		try {
			XMLDecode_test(path);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Main函数引入了test.xml文件,然后把test.xml的内容给到了XMLDecode_test函数进行处理。

在XMLDecode_test函数中,使用File类新建的一个文件,内容是test.xml,随后使用了FileInputStream字节流来读取文件,然后又给到了BufferedInputStream缓冲流,这里字节流和缓冲流结合使用作用在于以缓冲的方式来读取文件,最后XMLDecoder使用readObject读取。

在这个示例代码中没有对xml的内容进行过滤和验证,如果用户可控则会造成解析问题,例如test.xml的内容如下。


  
    
      
        C:\\windows\\system32\\calc.exe
      
    
    
  

以上xml内容是根据xml规则写的一个简单示例,使用了java.lang.ProcessBuilder来创建一个系统进程,进行调用的是calc计算器程序,以此来证明存在命令执行问题,结果如下图。

 

代码审计之XML解析注入_第1张图片

 

0x02:总结

XML解析问题属于我们的大规则:不验证可控的来源输入。代码层面比较简单,理解其原理即可。

左边是个人公众号<发哥微课堂>,不定期发表干货,从未间断,欢迎关注。

右边是微信也可以加我交流讨论,朋友圈也会不定期发表相关的内容。

代码审计之XML解析注入_第2张图片

你可能感兴趣的:(代码审计)