类型: 安全缺陷
使用用户输入控制资源标识符,借此攻击者可以访问或修改其他受保护的系统资源。当满足以下两个条件时,就会发生资源注入:
攻击者可以指定已使用的标识符来访问系统资源。例如:攻击者能够指定用来连接到网络资源的端口号。
攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。例如:程序可能会允许攻击者把敏感信息传输到第三方服务器。
例1:下面的代码片段从HTTP请求获取端口号,并使用此端口号创建一个套接字,而不进行任何验证。使用代理的用户可以修改此端口并获得与服务器的直接连接。
String port = request.getParameter("port");
...
ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
这种利用用户输入影响的资源可能存在风险。
例2:下面的代码利用WebView的File域协议读取任意可读文件或受害应用的私有文件。
WebView webView=(WebView) findViewById(R.id.webView);
String url= getIntent().getData().toString();
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