目录
-
逻辑漏洞
-
概述
web应用程序中的逻辑漏洞各不相同,有的很明显,有的很微妙。与SQL注入和跨站不同,逻辑漏洞没有共同的“签名”,定义特性是指应用程序执行的的逻辑存在某种缺陷。大部分逻辑缺陷表现为开发者在思考过程中做出的特殊假设存在明显或隐含的错误,通俗点来说,有的开发者会这样认为,如果发生A,就会出现B,因此我执行C。没有考虑如果发生X会怎么样,这样错误的假设会造成很多安全漏洞。逻辑漏洞是多样性的。
-
类别
越权访问--垂直越权、平行越权
身份认证--回话固定攻击、cookie仿冒
接口调用安全--重放攻击、内容欺骗
数据篡改--手机号、邮箱篡改、订单篡改、金额篡改
密码找回--密码重置
验证码--弱验证码(4位)
流程乱码--密码找回、支付功能
-
特点
普遍存在性:由于功能的实现需要大量的逻辑操作,同时受制于程序员的背景,这类缺陷普遍存在于各类应用程序中。
不固定性:因为每一种逻辑缺陷似乎都是唯一的,它是基于逻辑操作,不同的功能逻辑不同,因此无法用一般的工具发现他们。
隐蔽性:大多数的逻辑漏洞都十分隐蔽,它存在于操作与操作关系当中,甚至是属于应用程序正常的功能。
-
越权漏洞
越权漏洞是web应用程序中一种常见的安全漏洞。
它的威胁在于一个账户即可控制全站用户数据。
当然这些数据仅限于存在漏洞功能对应的数据。
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查时对客户端请求的数据过分相信而遗漏了权限的判定。
- 平行越权
攻击者请求操作(增、删、改、查)某条数据时 ,web应用程序没有判断该数据所有人,或者在判断数据所有人时直接从用户提交的表单参数中获取(如用户ID)导致攻击者可以自行修改参数(用户ID)操作部署于自己的数据。
- 垂直越权
服务器为鉴别客户端浏览器回话及身份认证信息存储在cookie中,并发送至客户端存储。攻击者通过修改cookie中的身份标识为管理员权限,达到垂直 越权的目的。
-
功能点位置
- 个人资料的地址
- 在订单的地址收货地址
- 越权评论商品
- 越权删除收藏等等
- 挖掘办法
- get请求address_id参数
- post请求address_id参数
- cookie中的键值对
- 防范越权访问漏洞的手段
- 对开发者而言,一定要有安全意识,时刻保持警惕。
- 永远不要相信客户端(用户)的输入,对于可控参数进行严格的过滤。
- 执行关键操作前必须验证用户身份,多功能的每一步都要验证用户身份。
- 对于直接对象引用,加密资源ID,以防攻击者对ID进行枚举。
- 在前端实现验证并不可靠,前端可以验证用户的输入是否合规,要在服务端对请求的数据和当前用户身份做校验。检查提交CRUD请求操作者(session)与目标对象的权限所有者(查数据库)是否一致,如果不一致则阻断。
- 在调用功能之前,验证当前用户身份是否有权限调用相关功能。(使用过滤器,进行同意权限验证)
-
身份认证安全
session使用系统浏览器客户端身份的属性标识,在用户退出应用系统时,应将客户端session认证属性标识清空。如果未能清空客户端session标识,在下次登录时,系统会重复利用该session标识进行认证会话。攻击者可利用该漏洞生成固定session会话,从而导致用户会话认证被窃取。
-
Session会话固定挖掘
session会话注销测试:用户注销或者退出应用时,利用登录时的Session是否能再次利用登录。
Session会话超时间测试:用户登录系统后,在固定时间没有与服务器任何交互操作,刷新页面,看是否需要重新登录账户。
修复建议
在客户端登录系统时,应首先判断客户端是否提交浏览器留存Session认证会话标识,客户端提交此信息至服务器时,应及时销毁浏览器留存的Session认证会话,并要求客户端浏览器重新生成Session认证属性标识。
-
Cookie仿冒
服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在cookie中,并发送至客户端存储。攻击者通过修改cookie中的身份标识,从而达到仿冒其他用户身份的目的。
挖掘方法
查看cookie信息中是否存在用户信息,例如ID,用户名等。
修复建议
建议对客户端标识的用户敏感信息数据,使用session会话方式认证,避免被他人仿冒。
-
密码找回安全
-
密码重置凭证与用户关联不严
介绍
有些信息系统在密码找回功能的 校验逻辑上存在缺陷,只校验了密码重置凭证是否在数据库中存在,但未严格校验该重置凭证和用户账号之间的绑定关系。这种密码重置那个证与用户账户关联不严的逻辑漏洞就让攻击者可以通过在数据包中修改用户账号达到重置密码的目的。
使用短信验证码找回密码
步骤一:进入某网站,找到找回密码或密码重置的功能点,首先填写自己的手机号码进行密码找回。
步骤二:收到验证码和新密码提交,这时候使用数据抓包工具进行抓包,将数据包中的账户属性修改为其他账号,然后就可以使用自己设置的密码登录其他账户。
使用邮箱Token找回密码
步骤一:进入某网站,找到找回密码或密码重置的功能点,首先填写自己的邮箱进行密码找回,稍后会发刚给你邮箱一个重设密码地址(准备2个邮箱一起重置,用来对比token)。
步骤二:去邮箱里面去查看找回密码的密码的链接,对比2 个找回密码连接的区别,然后构造连接进行重置。
-
重新绑定用户手机或邮箱
介绍
有些信息系统在绑定用户手机或者邮箱的功能上存在越权访问漏洞。攻击者可以利用该漏洞越权绑定其他用户的手机或者邮箱后,在通过正常的密码找回途径重置他人的密码。
重新绑定用户手机
步骤一:首先注册一个某邮箱的的测试账号,然后会跳转到一个手机绑定页面上。
步骤二:注意此链接中有个参数为 UID ,将 UID 修改为其他人的邮箱账号。填入一个你可控的手机号码,获取验证码。确定后这个目标邮箱已经被越权绑定了密保手机。
步骤三:走正常的密码取回流程,发现这个邮箱多了一个通过手机找回密码的方式,这个手机号就是刚刚绑定的手机号码。
步骤四:获取验证码并填入新密码,最终重置目标账户的密码。
重新绑定用户邮箱
步骤一:首先注册一个某网站的的测试账号。
步骤二:连接尾部的一串数字时用户的ID,通过修改ID可以进入其他用户的页面,该页面提供了更改邮箱的功能,可在此处将邮箱地址修改为自己测试的邮箱。
步骤三:然后使用改邮箱进行密码找回。
-
服务端验证逻辑缺陷
介绍
有些信息系统的服务器验证逻辑存在漏洞。攻击者可以通过删除数据包中的某些参数、修改邮件发送地址或者跳过选择找回方式和身份验证的步骤,直接进入重置密码界面成功重置其他人的密码。
删除参数绕过验证
步骤一:某网站系统可以通过密码提示问题找回密码。
步骤二:首先随机填写密码答案,然后进入下一步,抓包后将问题答案的整个字段都删除,提交。
步骤三:因服务端验证逻辑存在缺陷,无法获取问题答案的情况下直接通过验证,密码重置成功。
身份验证步骤可被绕过
步骤一:进入某网站的密码找回功能,输入账号和密码。
步骤二:确定后,直接访问 抓取数据包将包中参数将step改为4即可。
步骤三:最终成功修改密码并登录进到个人中心。
-
在本地验证服务端返回信息
介绍
有些信息系统在密码找回功能上才能在逻辑漏洞,攻击者只需要抓取服务端返回包并修改其中的部分参数即可跳过步骤,直接进入密码重置界面。
修改返回数据绕过验证
步骤一:进入某电商网站,单击忘记密码,输入用户名 admin 后选择手机找回,单击发送验证码,然后随便填写一个验证码,单击下一步按钮。
步骤二:此时抓包并拦截返回的数据包。经过测试,将返回码改成 200 即可绕过验证逻辑。
步骤三:直接跳转到重置密码页面。