2022-渗透测试-OWASP TOP10详细讲解

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
访问控制,不限时长
简介: 2022-渗透测试-OWASP TOP10详细讲解

1.sql注入

原理:

SQL 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过构造恶意的 sql 语句来实现对数据库的任意操作。


分类:

1、报错注入

2、bool 型注入

3、延时注入

4、宽字节注入


防御:

1.使用预编译语句,绑定变量

2.使用存储过程

3.使用安全函数

4.检查数据类型


1.获取数据库名

select SCHEMA_NAME from information_schema.SCHEMATA

2.获取表名

select TABLE_NAME from information_schema.TABLES

3.获取字段名

select * from information_schema.COLUMNS where TABLE_NAME="users" and TABLE_SCHEMA="security"

4.获取数据

select id,username,password from users


2.失效的身份认证和会话管理

原理:

在开发web应用程序时,开发人员往往只关注Web应用程序所需的功能,所以常常会建立自定义的认证和会话方案。但是要正确的实现这些方案却是很难的。结果就在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞。


防御:

1、区分公共区域和受限区域。

2、对最终用户帐户使用帐户锁定策略。

3、支持密码有效期。

4、能够禁用帐户。

5、不要存储用户密码。

6、要求使用强密码。

7、不要在网络上以纯文本形式发送密码。

8、保护身份验证 Cookie。

9、使用 SSL 保护会话身份验证 Cookie。

10、对身份验证 cookie 的内容进行加密。

11、限制会话寿命。

12、避免未经授权访问会话状态。

3.跨站脚本攻击 XSS

XSS是跨站脚本攻击,原理是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。


分类:反射型(非持久型)XSS、存储型(持久型)XSS、DOM型XSS.


区别:

DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。


什么是 HttpOnly?

如果您在 cookie 中设置了 HttpOnly 属性,那么通过 js 脚本将无法读取到cookie 信息,这样能有效的防止 XSS 攻击。


预防:

1.使用XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并过滤可能存在的脚本攻击及恶意的THML或简单的HTML格式错误等。


2.输入过滤

输入是否仅仅包含合法的字符;

输入字符串是否超过最大长度限制;

输入如果为数字,数字是否在指定的范围;

输入是否符合特殊的格式要求,如E-mail地址、IP地址等

3.输出编码

<(小于号) 转成 &lt;

> (大于号)转成 &gt;

& (和号)转成 &amp;

" (双引号)转成 &quot;

' (单引号)转成 &#39;

4.黑名单和白名单

5.内容安全策略(csp):CSP用于限制浏览器查看您的页面,以便它只能使用从受信任来源下载的资源。

4.直接引用不安全的对象

定义:

不安全的直接对象引用(IDOR)允许攻击者绕过网站的身份验证机制,并通过修改指向对象链接中的参数值来直接访问目标对象资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等。


出现的原因:

Web应用往往在生成Web页面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞。

服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。


防御措施:

1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击未授权资源

2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查

3.避免在url或网页中直接引用内部文件名或数据库关键字

4.验证用户输入和url请求,拒绝包含./ …/的请求

5.安全配置错误

定义:

安全配置错误可以发生在一个应用程序堆栈的任何层面,通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。


影响:

攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解。


防御措施:

1、 配置所有的安全机制

2、 最小原则,关掉或限制不使用的服务

3、 更改默认账户信息

4、 使用日志和警报

5、 回显信息不显示任何与实际错误相关的信息

6、 检查和修复安全配置项

6.敏感信息泄露

漏洞描述:

由于管理员或者技术人员等各种原因导致敏感信息泄露。许多web应用程序和app都无法正确保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。


检测方法:

1、手工挖掘,查看web容器或网页源码代码,可能存在敏感信息。比如访问url下的目录,直接列出了目录下的文件列表,错误的报错信息包含了网站的信息。

2、工具挖掘,像爬虫之类的工具可以扫描到敏感文件路径,从而找到敏感数据。


防范措施:

1、 对系统处理、存储或传输的数据进行分类,根据分类进行访问控制。

2、 对用户敏感信息的传输和存储进行加密

3、 强化安全意识

7.缺少功能级的访问控制

原理:

大多数Web应用程序的功能在UI页面显示之前,会验证功能级别的访问权限。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求从而在未经适当授权时访问功能。


测试方法:

1、 保证合法授权用户可以访问成功

2、 限制非法未授权用户的访问


防御措施:

1、 设计严格的权限控制系统,对于每个请求和URL都要进行校验和权限确认,防止非法请求被执行

2、 对于每个功能的访问,都要有明确的角色授权,采用过滤器的方式校验每个请求的合法性

3、 实现Web访问的IP白名单列表,禁止不可信的IP访问Web系统

8.跨站请求伪造 CSRF

CSRF概念:

CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。


攻击原理:

CSRF攻击攻击原理及过程如下:

1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。


分类:

GET型和POST型。


防御手段:

1、验证 HTTP Referer 字段。

   根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。

2、在请求地址中添加 token 并验证

   在HTTP请求中以参数的形式加入一个随机产生的token(随机字符串),并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

3、二次验证

   在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF 攻击。

9.使用含有已知漏洞的组件

原理:

大多数的开发团队并不会把及时更新组件和库当成他们的工作重心,更不关心组件和库的版本,然而应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,可能导致严重的数据丢失或服务器接管。


防御措施:

1.标识正在使用的所有组件和版本,包括所有依赖项。

2.及时关注这些组件的安全信息并保证他们是最新的。

3.建立使用组件的安全策略,禁止使用未经安全评估的组件。

4.在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分。

10.未验证的重定向和转发

重定向:

重定向是服务端根据逻辑,发送一个状态码(通常为3xx),告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)

转发:

转发是在服务器内部将请求转发给另一个资源,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程是在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)


两者的区别:

1、重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址。

2、重定向有两次请求,不共享数据,转发是有一次请求且共享数据。

3、重定向后地址栏会发生变化,转发不会。

4、重定向的地址可以是任意地址,转发的地址只能是当前应用类的某一个地址。


预防措施:

1、重定向外部网站需要验证是否在白名单。

2、转发内部网站要验证是否有权限,有权限才转发。

相关文章
|
网络安全 数据安全/隐私保护
2022-渗透测试-OWASP靶机的安装
2022-渗透测试-OWASP靶机的安装
2022-渗透测试-OWASP靶机的安装
|
XML 安全 测试技术
安全测试----OWASP top 10 简介
安全测试----OWASP top 10 简介
1089 0
|
SQL 数据安全/隐私保护
图解OWASP ZAP录制登录请求,并且进行SQL注入测试
下面几张图请按顺序观看,是作者用OWASP ZAP对某一个网站进行登录的SQL注入测试,网址和登录密码,作者已经打码了,如有侵权或引起其他不适,请联系作者
1442 0
图解OWASP ZAP录制登录请求,并且进行SQL注入测试
|
SQL 安全 Linux
kali linux 网络渗透测试学习笔记(二)OWASP ZAP工具扫描SQL injection漏洞失败
按照惯例,利用OWASP ZAP工具扫描SQL injection漏洞时,应该很快就可以扫描出来,但是在笔者进行扫描的时候,却遇到了以下状况: 这说明了该工具根本就没能够扫描出SQL注入的漏洞,不知道该如何解决。
2303 0
|
安全 数据库 Web App开发
Kali Linux Web 渗透测试秘籍 第十章 OWASP Top 10 的预防
第十章 OWASP Top 10 的预防 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 每个渗透测试的目标都是识别应用、服务器或网络中的可能缺陷,它们能够让攻击者有机会获得敏感系统的信息或访问权限。
1910 0
|
测试技术 网络安全
OWASP 2012中国峰会5吴卓群:应用防火墙(WAF)绕过测试技术
http://v.youku.com/v_show/id_XNDc0MzU5Njc2.html
799 0
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
58 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
73 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
258 7
Jmeter实现WebSocket协议的接口测试方法
|
3月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
271 3
快速上手|HTTP 接口功能自动化测试