0.前述
最近项目进行了第三方测试和等保测试。意料之中,问题比较多。
虽然我已经慢慢从项目中退出,但是遇到问题,还死活要帮忙解决下的。
这次采用的IBM APPScan 进行web扫描检测,只需输入一个网址,便自动测试出网站存在的诸多问题。我猜测是根据域名,通过爬虫来爬取网站上的连接,一层层的往下测试。当然,其中的测试过程,测试软件中需预先设定默认输入参数,尽量多的测试可能性。由此保障测试的可信度、完整度。
本次测试也是我做的项目第一次接受第三方检测,原来都是一些管理系统,没必要。这次是面向外部互联网的,以后还是需要多往互联网项目靠。
测试报告用中英文显示了高中低三档的危险漏洞。其中高危主要是两个问题,SQL注入和XSS跨站脚本编写攻击。以下列出这两个问题的简单解决方式。做个记录吧,以后的工程里默认都要加入。
传统项目真的没有搞头。知识面亟待拓宽。
1.SQL 注入
1.1测试报告
严重性: 高
CVSS 分数: 9.7
实体: id (Parameter)
风险: 可能会查看、修改或删除数据库条目和表
原因: 未对用户输入正确执行危险字符清理
固定值: 查看危险字符注入的可能解决方案
推理: 测试结果似乎指示存在脆弱性,因为响应包含 SQL Server 错误。这表明测试设法通过注入危险字
符穿透了应用程序并到达 SQL 查询本身未经处理的测试响应:
1 | ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00911: invalid |
- 部分sql注入,nosql注入可能是在==发送参数==,后台报错引起的,只要在后台捕获异常,不让它抛出,appscan可能就不会推理这是个漏洞。
- 解决办法:通过建立过滤器方法,对所有用户输入信息进行清理过滤。通过清理过滤用户输入所包含的危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令等。
- 降低 SQL 注入攻击风险的一般方式,是禁止详细的 SQL 错误消息,攻击者通常便利用这些消息(如上述示例所说明),轻易找出容易遭受“SQL 注入”的脚本。
这个(以遮盖获取安全)解决方案可以利用称为“盲目 SQL 注入”的技术来略过,黑客不需要依赖返回 SQL 错误消息,便能找出容易遭受“SQL 注入”的脚本。
1.2现象
1.2.1测试单引号
出错,页面显示sql语句.
1 | ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-01756: quoted string not properly terminated |
1.2.2其他符号 ^&$之类,400
有的页面显示400
1 | This page isn’t workingIf the problem continues, contact the site owner. |
1.3修改
1.3.1过滤特殊字符
- 前端: 虽然意义不大
- 后端: 过滤特殊字符
1 | /** |
1.3.2使用预编译,不要拼接sql
1.3.3对sql执行部分异常进行捕获,不要抛出不同的异常,以免被推测有漏洞
尤其是 SQL 错误信息,不要在前端显示具体的信息,留给黑客猜测的空间
1 | //原输出信息 |
1.3.4同时处理sql注入和xss跨站脚本编制攻击
1 | /** |
1.3.4可能appscan误报
1.3.5误报解决
(1)、把错误的页面单独反复测试
(2)、把AppScan扫描的线程数改成1(默认10)
1.4参考
2.XSS 跨站脚本编制
2.1测试报告
- 严重性: 高
- CVSS 分数: 7.5
- URL:: https://domain/path/to/list
- 实体: list (Page)
- 风险: 可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查
看或变更用户记录以及执行事务 - 原因: 未对用户输入正确执行危险字符清理
- 固定值: 查看危险字符注入的可能解决方案
- 推理: 测试结果似乎指示存在脆弱性,因为 Appscan 在响应中成功嵌入了脚本,在用户浏览器中装入页
面时将执行该脚本。 - 测试响应: alert 弹框
情况:
- sql查询的参数插入js脚本
1 | ... |
- input 输入框
1 | <input type="text" name="keyWord" id="keyWord" class="input-search" |
2.2现象
点击链接,查询参数带了脚本,会弹出alert信息,页面同时报sql错误.
- input 搜索框输入带js脚本的信息,同样弹框,报错,页面格式错误
1 | /><iframe src=javascript:alert(2976) |
2.3修改
后端Java代码加入XssFilter过滤掉非法脚本.见参考链接.
2.4参考
- https://blog.csdn.net/weixin_43881309/article/details/84862452
- github - tools
- 解决AppScan扫描的问题SQL注入/XSS攻击
3.最终解决代码
同时过滤 sql注入和XSS脚本编制
3.1XssAndSqlFilter.java
1 | package com.package.name.filter; |
3.2XssAndSqlHttpServletRequestWrapper.java
1 | package com.package.name.filter; |
3.3web.xml
1 | <!--sql注入&xss脚本编制攻击过滤--> |
- 本文作者: Linking
- 本文链接: https://linking.fun/2020/03/08/APPScan-SQL盲注与xss跨站点脚本编织问题记录/
- 版权声明: 版权所有,转载请注明出处!