目录
1.渗透测试基础
渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法
2.常见名词解释
- 后门:黑客为了对主机进行长期的控制,在机器上种植一段程序。
- webshell:通过web入侵的一种脚本工具。
- 提权:操作系统低权限的账户提升为管理员权限的方法。
- 肉鸡:被黑客入侵并被长期驻扎的计算机或服务器。
- 抓鸡:利用使用量大的程序漏洞,自动化地获取存在漏洞的行为。
- 撞库:黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。(所以说用户最好不要在不同网站上设置相同的密码)
- 拖库:网站遭受入侵后,黑客窃取其数据库。
- 旁站测试:一个web站点被入侵之后,通过提权,进入控制web目录的网站。(短板效应)
- C段测试:同C段下服务器入侵。
- APT攻击:Advanced Persistent Threat ,高级可持续性攻击。(隐蔽性强,持续性强,目标性强)。
- 渗透测试与入侵:渗透测试是为了找出服务器的安全隐患,而入侵是为了拿到系统权限干坏事。
3.OWASP TOP10
Open Web Application Security Project。开放式 Web 应用程序安全项目( OWASP )是一个非营利组织,不附属于任何企业或财团。
3.1访问控制崩溃
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷
访问未经授权
的功能或数据。(越权漏洞)
如何防范
- 除公有资源外,默认情况下拒绝访问。
- 严格判断权限,用户只能操作自己的内容。
- 记录失败的访问控制。
- 对API和控制器的访问进行速率限制。
- 当用户注销时,服务器上的JWT令牌应失效。
3.2敏感数据暴露
很多Web应用程序和API都无法正确保护敏感数据。
如何防范
- 加强员工意识,禁止上传代码到github等网站。
- 谨慎使用第三方云服务,不要把工作相关的存放到云端。
- 禁止使用工作邮箱注册非工作相关网站。
3.3注入
攻击者在查询语句的结尾加上额外的语句,欺骗数据库服务器执行非授权的任意查询,得到黑客想要的数据信息。
SQL注入
举例:登录页面
- 正常:select * from table where name='XX' and password='YY'
- 黑客:select * from table where name='Admin'or 1=1 #' and password='YY'
- 结果:黑客以管理员身份登录(or右边为真,#后面被注释,不管password的值)
SQL注入的分类
- 基于数据类型的分类
- 字符串类型注入
- 整型注入
- 基于程度和顺序的注入
- 一阶注射
- 二阶注射
- SQL盲注
- 基于布尔SQL盲注
- 基于时间SQL盲注
- 基于报错SQL盲注
SQL注入的产生点(与用户交互的的地方)
- 通过用户输入的表单域的注入。例如:post里面的参数
- 通过cookie注入。
- 通过服务器变量注射(HTTP头部)。
SQL注入的常见检测字符
- ‘(单引号)
- “(双引号)
- --+(注释)
- #(注释)
- and(与)
- Or(或)
- Xor(非)
SQL注入的思路
- 判断是否存在注入,注入是字符型还是数字型
- 猜解SQL查询语句中的字段数
- 确定显示的字段顺序
- 获取当前数据库
- 获取数据库中的表
如何防范SQL注入
- 关闭错误回显
- 使用成熟的waf(Web应用防护系统)
- 前端输入字符白名单验证(长度、类型等)
- SQL服务运行与专门的账号,并且使用最小权限
- 对输入的特殊字符使用转义处理
3.4不安全的设计
漏洞产生原因
在开发软件时,在关键身份验证、访问控制、业务逻辑和关键流部位没有进行安全的设计。
支付逻辑漏洞
所有涉及购买、支付等方面的功能处就有可能存在支付漏洞。
挖掘:寻找网站的支付系统或兑换系统,
抓包
判断有没有敏感信息可以修改。
3.5安全配置不当
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云 存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。
可能存在的风险点
- 应用程序启用或者安装了不必要的安全功能。
- 默认账户名和密码没有修改。
- 应用软件已过期或出了新版未更新。
- 应用程序服务器,应用程序框架等未进行安全配置。
- 错误处理机制披露大量敏感信息。
- 对于更新的系统,禁用或不安全的配置安全功能。
如何防范
- 按照加固手册加固。
- 搭建最小化平台,该平台不包含任何不必要的功能、组件、文档 和示例。移除或不安装不适用的功能和框架。
- 临时文件要及时删除。
3.6使用含有已知漏洞组件
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知
漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知
漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
如何规范
- 移除不使用的依赖、不需要的功能、组件、文件和文档。
- 仅从官方渠道安全的获取组件,并使用签名机制来降低组件被篡 改或加入恶意漏洞的风险。
- 持续监控 如CVE 和 NVD等是否发布已使用组件的漏洞信息,可以使用软件分析工具来自动完成此功能。订阅关于使用组件安全漏洞的警告邮件。
3.7认证崩溃
就密码等重要数据进行交互的时候,程序存在问题,并被利用来冒充其他用户的身份。
可能存在的风险点
- 暴力破解
- 弱口令
- 明文、加密或弱散列函数
- 身份验证缺少或失效
- 暴露URL中的会话ID(例如URL重写)
- 旧密码泄露
- 会话ID使用时间过长
如何防范
- 多因素身份验证。
- 检查弱口令。
- 限制或逐渐延迟失败的登录尝试。
- 使用服务器端安全的内置会话管理器,在登录后生成高度复杂的新随机会话ID。
3.8软件和数据完整性失败
软件和数据完整性故障与不能防止完整性违规的代码和基础设施有关。一个例子是应用
程序依赖来自不受信任的来源、存储库和内容交付网络 (CDN) 的插件、库或模块。
如何防范
- 使用数字签名或类似机制来验证软件或数据来自预期来源且未被更改
- 确保使用安全工具验证组件不包含已知漏洞
- 确保未签名或未加密的序列化数据不会在没有检查或数字签名的情况下发送到不受信任的客户端
3.9不足的日志记录和监控
自己的内部检查能力不足 ,没有办法在别人正在攻击你的时候发现自己被攻击了。
如何防范
- 确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意账户,并为后期取证预留足够时间。
- 确保日志以一种能被集中日志解决方案使用的形式生成。
- 确保高额交易有完整控制的审计信息,以防止篡改或删除。
- 审计信息保存在只能进行记录增加的数据库表中。建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对。
3.10服务端请求伪造
利用一个可以发起网络请求的服务,当做跳板来攻击其它服务。SSRF(Server-Side Request Forgery)攻击的目标是从外网无法访问的内部系统。
可能存在的风险点
- 可以对服务器所在内网、本地进行端口扫描,获取一些服务的信息。
- 目标网站本地敏感数据的获取。
- 内外网主机应用程序漏洞的利用。
- 内外网Web站点漏洞的利用。
如何防范
- 过滤返回信息,验证远程服务器对请求的相应。
- 统一错误信息,避免用户根据错误信息来判断远程服务器端口状态。
- 限制请求的端口为 HTTP 常用端口,比如 80、443、8080、8090 。
- 黑名单内网 IP,避免应用被用来获取内网数据,攻击内网。
- 禁用不需要的协议。仅仅允许HTTP和HTTPS请求。可以防止类似于file://、ftp://等引起的问题。