类型: 安全缺陷

    使用用户输入控制资源标识符,借此攻击者可以访问或修改其他受保护的系统资源。当满足以下两个条件时,就会发生资源注入:

    攻击者可以指定已使用的标识符来访问系统资源。例如:攻击者能够指定用来连接到网络资源的端口号。
    攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。例如:程序可能会允许攻击者把敏感信息传输到第三方服务器。
    例1:下面的代码片段从HTTP请求获取端口号,并使用此端口号创建一个套接字,而不进行任何验证。使用代理的用户可以修改此端口并获得与服务器的直接连接。

    1. String port = request.getParameter("port");
    2. ...
    3. ServerSocket serverSocket = new ServerSocket(port);
    4. Socket socket = serverSocket.accept();

    这种利用用户输入影响的资源可能存在风险。
    例2:下面的代码利用WebView的File域协议读取任意可读文件或受害应用的私有文件。

    1. WebView webView=(WebView) findViewById(R.id.webView);
    2. String url= getIntent().getData().toString();
    3. webView.loadUrl(url);

    查看hosts文件:adb shell am start -n com.mytest/.MainActivity -d file:///system/etc/hosts
    查看应用私有文件:adb shell am start -n /data/data/com.cn.test/databases/user.db