前言
逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞,在实际开发中,因为开发者水平不一,没有安全意识,而且业务发展迅速,内部测试没有及时到位,所以常常会出现类似的漏洞,导致攻击者可以修改、绕过或者中断整个程序,让程序按照开发人员的预料之外去执行。
| 身份验证漏洞
一、暴力破解漏洞
漏洞介绍:攻击者可以通过该漏洞获取用户名和对应弱口令密码,并进行登录操作。
漏洞原理:由于没有设置登录失败次数限制,导致攻击者可以通过口令字典进行特定用户的密码爆破或通过用户名字典进行特定弱口令的用户枚举。
漏洞点:系统登录点
漏洞修复:对于固定用户名爆破密码
1.可以针对用户名进行错误次数计算,高于一定阈值账号锁定一段时间,或者添加验证码。
2.但是不能永久锁定,可能被用来进行账户恶意锁定。
对于固定密码枚举用户名、 需要计算IP对URL的请求情况,某个IP短时间大量请求登录应该加入黑名单 进行传输数据加密有一定的防护效果。
二、Session固定攻击
漏洞介绍:会话固定攻击是利用服务器的session不变机制,借他人之手获得认证和授权,然后冒充他人。
漏洞原理:在请求登录过程时候,URL带有一个session,登录成功之后会将登录成功的信息绑定到这个session中,攻击者可以发送带有session的URL给相关工作人员诱导其登录,相当于获取了其身份信息。
漏洞点:在GET方法请求登录时候带有session值
修复思路:
1.只要避免在URL中带入session信息即可比较有效的防御。
2.另外也要注意POST请求中带有sessionid进行session固定攻击,虽然可利用性比较低,但是建议修复。
三、Cookie欺骗漏洞
漏洞介绍:通过伪造cookie信息能够伪造其他用户进行登录。
漏洞原理:开发者为了方便将身份信息/登录信息明文或者只是简单编码、哈希之后存放在cookies中,网站通过获取得到的cookies进行授权或者身份验证。
漏洞点:cookie中有明显或者只是简单编码、哈希的字段时候、修改lsLogin值为1可以判定为用户已经登录、修改cookie为asp163=UserName=admin
漏洞修复:Cookie不应该存储可理解的身份信息和登录信息。
按照规定,cookie对身份信息和登录信息的存储只能通过存储足够长度的随机字符串进行,避免篡改。
四、平行权限跨越
漏洞介绍:即普通用户/管理员能访问其他普通用户/管理员才能够访问的系统信息或者系统功能。
形成原因:在进行方法调用时候未进行请求用户和目标信息拥有者是否匹配一致,直接用userid/email之类的容易遍历的参数进行数据库查询。
漏洞点:在普通用户/管理员登录后的能访问的链接或者功能中都可能存在。
漏洞修复:
1.在权限管理中,平行越权的权限管理颗粒度最小。
2.需要在方法中进行相关的获取请求request,再利用getAttribute(“userid”)获取其userid,直接使用该userid作为参数进行数据增删查改,避免userid参数传输。
五、垂直权限跨越
漏洞介绍:即普通用户能够访问管理员甚至超级管理员才能够访问的系统信息或者系统功能。
形成原因:程序再方法调用时候,缺少角色等级校验。
漏洞点:在任何用户登录后才能访问的链接或者功能中都可能存在。
对每一个传输的参数都要了解参数的目的,尝试将用户名改为admin尝试绕过。
漏洞修复:
1.需要校验用户是否有权限访问这个方法。
2.获取请求request,再利用getAuttribute(“roleid”)获取其角色等级。
3.检查角色等级是否合法,错误则直接返回错误跳转,返回页面必须仍然从Attribute中获取userid再进一步查询相关信息。
4.值得注意的是切勿将错误跳转写到Javascript里面,还返回目标URL页面的相关信息。
六、未经授权访问
漏洞介绍:即游客能够访问普通用户甚至超级管理员才能访问的系统信息或者系统功能。
形成原因:主要是系统设计期间没有进行全局用户身份校验;或者校验存在缺陷。
漏洞点:在任何用户登录后才能访问的链接或者功能中都可能存在。
漏洞修复:
1.J2EE中存在filter,可以获取用户的cookie等信息
2.建立LoginList,值是当前在线用户的id,对所有需要登录访问到URL,获取请求request
3.再利用 getAttribute(“userid”) 获取其userid
4.检查userid是否存在于LoginList中,不存在则直接返回错误跳转
5.值得注意的是切勿将错误跳转写到Javascript里面,还返回目标URL页面的相关信息
| 图形验证码漏洞
图形验证码突破
漏洞介绍:攻击者通过突破图形验证码的验证,可以实现如登录爆破、验证码绕过等攻击。
漏洞原理:
1.图形验证码在错误后未失效
2.返回验证码信息
3.分步校验验证码
漏洞点:任何存在图形验证码的功能中
漏洞修复:
1.一旦验证码使用过了,必须要进行删除,重新生成验证码,可以梵高attribute中
2.验证码需要设置超时,时间一到立即删除旧验证码,用户需要获取新的验证码
3.验证码只需要返回图片,切勿将生成验证码的字符串也一并返回
4.验证码不应该进行分布校验,应该连同请求数据一起发送到目标服务器进行校验,服务器校验通过则返回合法数据,否则返回错误
| 找回密码逻辑漏洞
密码找回漏洞
漏洞介绍:攻击者通过密码找回逻辑漏洞,可以重置他人账号密码,危害他人账号安全。
漏洞原理:其实是验证码漏洞的一种:
1.验证码时间长可爆破
2.返回重置密码凭证
3.若加密的重置密码凭证
漏洞点:任何密码找回处(可延伸至相似具有验证功能) 修改接受校验码目标。
漏洞修复:
1.一旦验证码使用过了,必须要进行删除,重新生成验证码,可以放到attribute中
2.验证码需要设置超时,时间一到立即删除旧验证码,用户需要获取新的验证码
3.校验凭证不能够随着返回包进行返回
4.验证码不应该进行分布校验,应该连同请求数据一起发送到目标服务器进行校验,服务器校验通过则返回合法数据,否则返回错误
5.校验凭证的生成需要进行随机生成,防止凭证破解
6.用户身份凭证和权限类漏洞修复一样,需要从attribute中获取
| 业务数据篡改漏洞
业务数据篡改(赋值反冲)
漏洞介绍:攻击者通过进行数值篡改进行攻击,从而获利
漏洞原理:
1.没有对传输数据添加相关的校验参数
2.后台未对参数值进行校验并直接使用数据包中的参数
漏洞点:抽奖、购买、转账、返现等功能
漏洞修复:
1.对于软件来说,需要保护好内存数据,防止内存数据篡改
2.计算传输数据的哈希,并将哈希附加在传输数据中作为校验值,避免被篡改
3.先校验数值,防止大整数和负数;接着利用传输的商品ID从数据库中获取商品单价重新进行价格计算;最后生成订单(订单号应为随机值)
| 执行顺序逻辑漏洞
执行顺序篡改
漏洞介绍:攻击者通过篡改分步逻辑中的步骤数字,达到绕过支付、校验等效果
漏洞原理:程序逻辑分布进行,但是对步骤、验证信息、支付信息没有做好严格校验,导致修改步骤就直接绕过验证或者支付
漏洞点:任何分布逻辑且带步骤数字,或者在利用JS进行步骤控制的功能中
漏洞修复:
1.在请求最后一步时候需要带入前面的验证信息,服务端再进行一次校验信息的验证,验证正确方能继续执行数据操作
2.也可以及通过getAttributr(“userid”)获取userid进行userid和验证结果绑定,最后一步不带入验证信息,但是仍然要获取userid进行校验
3.在最后一步通过验证之后或者服务器收到支付信息后再生成相应的数据交给用户
| 其他类型逻辑漏洞
一、条件竞争漏洞
漏洞介绍:可以通过同时重放大量数据包进行漏洞利用,通常用于突破限量、限额的问题都有奇效
漏洞原理:由于目标函数中,判断与数据修复两个步骤之间,或者两个数据修改步骤之间存在时间差,且函数未进行同步锁定,则可以造成漏洞
漏洞点:程序中存在限制,可以猜测到后台有判断与修改操作的方法
漏洞修复:
1.使用synchronized关键字,可以限制同一时间内访问方法的只有单一线程.
2.并不是每个条件竞争都必须修复.
二、数据包重放漏洞
漏洞介绍:通过数据包重放,可以造成短信轰炸、邮件轰炸、重复提交订单等
漏洞原理:后台未进行相关操作的技术导致数据包重放
漏洞点:短信验证码、邮件校验、提交订单等功能
修复方案:修复思路(针对短信、邮件)
1.构造一个Hashmap,存放邮箱或电话号码及对应次数.
2.只要某个邮箱或者电话号码次数够了,就不能继续发送了.
3.计算两次发送的时间间隔,时间过短就不继续发送了.
4.需要建立token机制或验证码机制,一次有效.
三、参数绑定漏洞
漏洞介绍:通过添加对象字段相关参数进行数据篡改
漏洞原理:对象自动绑定被许多框架支持,它允许将HTTP请求参数自动的绑定到对象,开发者没有对其进行安全校验则容易导致数据篡改
漏洞点:常见的所有输入的地方都会出现这个漏洞,特别是金融、用户、缓存等
漏洞修复:
Spring MVC中可以使用@InitBinder注释,通过WebDataBinder的方法setAllowedFields、setDisallowedFields设置允许或不允许绑定的参数
| 支付逻辑漏洞
1.边界值问题 : 正常的逻辑是用户购买商品,然后价格累加得到一个总价进行扣款。这个时候就会产生逻辑问题:如果说用户购买的商品是负数了,那么计算的总数就是负数。反过来钱给用户。
2.顺序执行缺陷:正常的逻辑是a-b-c-d 循环渐进的进行流程操作。这个时候就会产生逻辑问题:可以直接从中绕过某一个过程进入到下一步操作。如果说有一项是支付的操作,那么也就会产生支付绕过,如果说有一项是验证机制,就会绕过验证直接进入下一步。
3.金额直接传输导致篡改:直接对下单的金额进行修改值,这里可以使用fd或者burp抓包。
4.确定支付之后还可以加入购物车:把商品放入购物车点击下单支付,会跳转到微信,支付宝等第三方支付平台。这个时候还可以继续在购物车中加入商品,支付结束之后,商家发放的商品是现在的购物车里面的东西。
5.请求重放:购买成功之后,继续重放请求,可以让购买的商品一直增加。购买成功之后,会有一个银行对商户网站跳转的过程,如果反复进行操作,有几率会导致商品反复购买和增加,但是不需要付更多的钱。
6.请求参数干扰:金钱做了签名认证之后,修改后不通过,但是在里面仍然会有一个参数对金额产生影响导致问题产生。
7.订单替换:订单替换发生在支付之后的事件处理,同时向服务器发起二次支付请求一个多一个少,支付金额少的,然后支付之后进行替换,告知服务器订单支付完成,并且过程可以反复的回放。
8.欺诈:需要两个收款人,一个是正常的商家,一个是伪造的商家。
9.单位替换:产生在paypal类似的国际支付的场景。
10.用户替换:在支付过程中发生用户替换现象,首先登陆自己的账户,然后取得另外一个人的账户名等有效信息,在业务流程中用对方的用户名替换自己的用户名,用对方的余额购买完成后,再替换自己的账户名,这样就形成别人的钱买自己的东西。
11.强制攻击:强制攻击发生在暴力破解的情况下,如果一个商家运用一个自己的网店,接入第三方支付接口,由于设计上的不当导致商家与第三方支付约定的密钥Key可以单独被MD5加密,导致可以使用MD5碰撞技术对密钥进行破解,攻击者可以设计简单的密钥加密信息使得MD5加密是可以用MD5碰撞技术进行暴力破解。
12.秘钥泄漏:内置支付功能的app为了设计上的方便有可能会把Md5或者是RSA的私钥泄漏导致攻击者反编译apk之后获取密钥信息使得交易信息可以被篡改。
13.函数修改:apk反编译之后的函数修改,可能导致商家在最后一步向支付方提交订单时未验证信息的准确性,仍然被篡改。
14.heart bleed:SSL(安全套接层)协议是使用最为普遍网站加密技术,而OpenSSL则是开源的 SSL 套件,为全球成千上万的web服务器所使用。Web服务器正是通过它来将密钥发送给访客然后在双方的连接之间对信息进行加密。URL中使用 https打头的连接都采用了SSL加密技术。在线购物、网银等活动均采用SSL技术来防止窃密及避免中间人攻击。
| 总结
1.注册:
a.短信轰炸
b.验证码安全问题
c.密码爆破
d.邮箱轰炸
2.用户任意注册、批量注册
3.用户名枚举
4.XSS(有框的地方就可以尝试插XSS)
5.登录:
a.短信轰炸、验证码安全问题、密码爆破、邮箱轰炸
b.SQL注入
c.撞库
d.抓包把password字段修改为空值发送
e.认证凭证替换、比如返回的数据包中包含账号,修改账号就能登录到其他账号
f.Cookie仿冒
g.修改返回包的相关数据,可能会登陆到其他的用户
6.找回密码:
a.短信邮箱轰炸、短信邮箱劫持
b.重置任意用户账户密码、验证码手机用户未统一验证
c.直接跳过验证步骤
7.购买支付、充值(要利用抓包去仔细查看每一个可用的参数)
a.交易金额、数量修改、更换支付模块(比如更换支付的模块金额)
b.交易信息订单编码/导致信息泄露
c.整数溢出,int最大值为2147483647,超过最大值
d.修改充值账户
e.支付绕过
8.抽奖活动
a.刷奖品、积分
b.并发
9.优惠卷、代金卷
a.并发逻辑漏洞(burp批量获取优惠券)
b.修改优惠券金额、数量
10.订单信息
a.订单信息遍历、泄露
b.订单信息泄露导致用户信息泄露
c.删出他人订单
11.会员系统
a.修改个人信息上传文件,上传带弹窗的html
b.如遇上上传xlsx、docx,可能存在XXE,上传恶意的文档盲测
c.图片上传也可能遇到imagereagick命令执行,上传恶意图片
d.视频上传如果使用ffmpeg<3.2.4(视频按帧分割成图片),上传恶意avi盲测ssrf
e.用户横向越权访问、遍历、导致用户信息泄露
f.SQL注入、个人简历处存储XSS个人信息注册的名称也可以插入XSS
12.传输过程
a.明文传输账户密码
b.修改信息处无session/token导致csrf
c.POST/COOKIE注入
13.评论
a.POST注入
b.存储型XSS
c.无session/token导致CSRF
14.验证码问题
a.万能验证码
b.返回包中存在验证码
c.删除验证码或者cookie中的值可以爆破账号密码
15.短信轰炸
a.一直重放
b删除修改cookie,重放数据包
c.遍历参数发送数据包
d.手机号后面加空格或者前面加其他的比如+86或者逗号分号等,然后重发数据包
e.请求参数修改大小写,或者添加请求参数比如&id=1
f.一个站的登录处可能做了防护,但是再找回密码处可能没有安全防护,或者在注册流程中没有安全防护,所以说多测试接口
g.如果对手机号一天的次数进行了限制,还可以再发一次短信,DO intercept之后修改为成功回显
16.水平越权
a.主要登陆后还是修改参数,主要找到多个接口不断测试
b.关注网页源代码,有时候会有表单,但被bidden(隐藏标签)给隐藏起来了,可以修改返回包然后尝试获取数据检测
c.多个账号,主要分析请求参数
17.数据泄露
a.在找回密码处,填写数据后抓包查看返回信息,有可能存在敏感数据返回
18.任意用户密码重置
a.目前大部分都是在修改密码处参数修改
b.有些是仅做了前端验证
网络安全学习路线
很多小伙伴想要一窥网络安全整个体系,这里我分享一份打磨了4年,已经成功修改到4.0版本的《平均薪资40w的网络安全工程师学习路线图》对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
如果你想要入坑黑客&网络安全工程师,这份282G全网最全的网络安全资料包!
学习资料工具包
压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。
网络安全源码合集+工具包
视频教程
视频配套资料&国内外网安书籍、文档&工具
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
黑客/网安大礼包:CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
好了就写到这了,大家有任何问题也可以随时私信问我!希望大家不要忘记点赞收藏哦!