6.5 小结
恶意输入攻击的目标是程序中没有充分解析的参数值。不充分的解析可能由以下几方面导致:不加选择地接受用户的输入,依赖客户端的验证过滤,或者认为非表单的数据不会被篡改。一旦攻击者找到了攻击载体,就可能进行更严重的攻击。基于不完善的输入验证攻击包括缓冲区溢出攻击、任意文件访问、社会工程攻击、SQL注入和命令攻击。所以,输入验证流程绝不是小问题,其对应用程序的威胁也绝对不能忽视。
下面是一些可能会寻找到不完善输入验证的地方:
GET请求的每个参数
POST请求的每个参数
表单(电子邮件地址,家庭地址,姓名,注释)
搜索字段
Cookie的值
浏览器环境变量(用户代理,IP地址,操作系统等)
另外,表6-2列出了一些字符和对应的URL编码,这些编码常常代表恶意内容,或者代表着产生错误信息或执行命令的企图,虽然单独使用这些字符并不一定就能攻击应用程序,而且它们并非总是非法的,但是,如果它们不是应用程序所需的数据,不费多少气力就可以把它们转化为一次攻击。
表6-2 常见的输入验证测试字符
|
字 符 |
URL编码 |
注 释 |
|
' |
%27 |
一个在SQL注入中绝对需要的字符,会产生错误信息 |
|
; |
%3b |
命令分隔符,脚本终止符号 |
|
[NULL] |
%00 |
文件访问中的字符串终止符号,命令分隔符 |
|
[回车] |
%0a |
命令分隔符 |
|
+ |
%2b |
在URL中表示空格,用于SQL注入攻击 |
|
< |
%3c |
HTML开始标记 |
|
> |
%3e |
HTML结束标记 |
|
% |
%25 |
在两次解码,搜索字段攻击中经常使用,表示ASP,PHP标记 |
|
? |
%3f |
表示PHP标记 |
|
= |
%3d |
在一个URL参数中放置多个等号 |
|
( |
%28 |
用于SQL注入攻击 |
|
) |
%29 |
用于SQL注入攻击 |
|
[空格] |
%20 |
长脚本中必须使用的字符 |
|
. |
%2e |
用于目录遍历攻击,文件访问 |
|
/ |
%2f |
用于目录遍历攻击 |
| 回书目 上一节 下一节 |