前言
作者简介:不知名白帽,网络安全学习者。
目录
逻辑漏洞基础
概述
逻辑漏洞,是因为程序员在编写程序的时候,跟随着人的思维逻辑产生的不足,与传统漏洞的不同在于,逻辑漏洞是用过合法的方式来达到破坏的,比如密码找回,用户登录验证等功能由于程序设计的不足会产生很多问题,这一类漏洞一般的防护手段或者设备无法阻止,漏洞扫描器也难以发现。
程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,一般出现在任意密码修改(没有旧密码验证)、越权访问、密码找回、交易支付金额、身份证认证、实名认证......等。
分类
url跳转漏洞
短信轰炸
任意密码修改漏洞
任意用户登录漏洞
越权漏洞
支付逻辑漏洞
条件竞争漏洞
URL跳转漏洞
概述
URL跳转漏洞也叫开放重定向漏洞,就是可以把用户重定向刀攻击者自己构造的页面去,简单的说就是可以跳转到指定的URL。
服务端未对传入的URL变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转恶意网站。
危害
钓鱼
配合xss漏洞
配合csrf漏洞
配合浏览器漏洞(CVE-2018-8174)
漏洞寻找
1.登陆跳转我认为是最常见的跳转类型,认证完后会跳转,所以在登陆的时候建议多观察url参数。
2.用户分享、收藏内容过后,会跳转
3.跨站点认证、授权后,会跳转
4.站内点击其它网址链接时,会跳转
5.在一些用户交互页面也会出现跳转,如请填写对客服评价,评价成功跳转主页,填写问卷,等等业务,注意观察url。
6.业务完成后跳转这可以归结为一类跳转,比如修改密码,修改完成后跳转登陆页面,绑定银行卡,绑定成功后返回银行卡充值等页面,或者说给定一个链接办理VIP,但是你需要认证身份才能访问这个业务,这个时候通常会给定一个链接,认证之后跳转到刚刚要办理VIP的页面。
Bypass
1.利用问号绕过限制
url=https://www.baidu.com?www.xxxx.me
2.利用@绕过限制
url=https://www.baidu.com@www.xxxx.me
3.利用斜杠反斜杠绕过限制
https://www.landgrey.me/redirect.php?url=http://www.evil.com/www.landgrey.me
4.利用#绕过限制
https://www.baidu.com#www.xxxx.me
5.利用子域名绕过
6.利用畸形url绕过
https://landgrey.me/redirect.php?url=http://www.evil.com\\.landgrey.me
7.利用跳转ip绕过
https:// www.ipaddressguide.com/ ip修改ip
8.利用xip.io绕过
http://www.qq.com.127.0.0.1.xip.io/
短信轰炸漏洞
概述
厂商在对信息发送的次数、时间没有做限制,或者只在前端做了限制,导致可以无限制发送信息,简单的说就是发送短信/邮件的包可以无限制的发送。
登录、注册、找回密码、绑定手机/邮箱、修改账号,一切需要验证的位置都可能存在短信轰炸。
Bypass
1.尝试在mobile参数后面加20%,即空格
2.尝试在mobile后面加字母
3.尝试对参数进行多次叠加
4.利用调用接口绕过短信&邮箱轰炸限制
5.修改cookie值绕过短信&邮箱轰炸限制
6.修改IP绕过短信&邮箱轰炸限制
7.利用大小写绕过邮箱轰炸限制
8.修改返回值绕过短信&邮箱轰炸限制
任意密码修改漏洞
参考:
https://www.freebuf.com/articles/web/176211.html
https://www.cnblogs.com/-qing-/p/10849028.html
概述
厂商在对密码修改的时候,卫队修改密码的凭证做严格的限制,导致可以被绕过进行任意的密码修改。
场景
1.验证码可爆破
验证码四位,服务端未对验证时间次数进行限制
验证码六位,但是不过期,并且没有对验证的次数进行限制
验证码可以发送多次,而且每次都不会过期
2.验证码回传
重置密码时,凭证为发送到手机上的验证码,但是通过拦截发送验证码请求对应的Response包时,发现验证码在Response包中。
注意凭证,有时候返回包里面凭证可能在cookie里面或者在其他地方。
3.验证码未绑定用户
输入手机号和验证码进行重置密码的时候,仅对验证码是否正确进行了判断,未对该验证码是否与手机号匹配做验证。
任意账号都能够接收到验证码并能够使用A手机的验证码,B也可以拿来使用。
4.本地验证绕过
客户端在本地进行验证码是否正确的哦按段,而该判断结果也可以在本地修改,最终导致欺骗客户端,误以为我们已经输入了正确的验证码场景:
验证码返回在前台进行对比
验证码在js里面直接进行对比
直接修改返回包
5.跳过验证步骤
对修改密码的步骤,没有做校验,导致可以输入最终修改密码的网址,直接跳转到该页面,然后输入新密码达到重置密码的目的。
首选用自己的账号走一次流程,获取每个步骤的页面链接,然后记录输入新密码的对应链接。重置他人用户时,获取验证码后,直接进入输入新密码对应链接刀新密码的页面,输入密码重置成功。
6.token可预测
使用邮件接收重置密码的链接时,一般都会带有一个token用户判断链接是否被修改过。如果token可预测,那么攻击者可以通过构造链接来重置任意的用户密码
表现:
基于时间戳生成的token
基于递增序号生成的token
基于关键字段生成的token
Token有规律
7.同时向多个用户发送凭证
将发送验证码的包截获,修改字段,添加多个账户,再发包。发现所写的有效字段均发送了凭证。
8.接收端可篡改
重置密码时,凭证会发送到手机上,通过替换手机后,可以使用自己的手机号接受验证码。
9.万能验证码
可遇不可求的奇葩场景,某些开发在未上线钱为了方便测试加了888888、000000这样的万能验证码,但是上线后没去删除测试的内容导致被恶意利用。
任意用户登录漏洞
参考:
https://blog.csdn.net/zhangge3663/article/details/104827700
概述
逻辑错误导致可以登陆任意账户。撞库获取用户名(手机号或邮箱),通过验证码登录,若抓包修改接受验证码的手机号/邮箱,然后使用该类验证码能使撞库的用户登录,即产生漏洞。
场景
1.验证码回显
在手机验证码登录的时候,有一个验证码回显,直接用验证码登录即可。
2修改返回包登录
首先在重置或登录的时候抓登录包,然后再修改返回包,把错误的变成正确的,服务器被欺骗,登陆成功。
3.通过遍历id可以登录/修改
通过修改对应的userid号,利用修改其他的userid。
首先注册一个账号,访问带有uid的地址,修改uid登录任意用户。
4.sql注入万能密码
原理:select id from users where username = 'admin' or 1=1 #' and password = "
利用sql注入语句 admin ' or 1=1 #组合语句。
5.系统默认弱口令
系统在搭建的时候,设置了默认口令,例如123456等这种密码,或者时默认的强口令,qwerasdf1231这种,但是密码是通用的就可以利用这个密码进行登录任意账户。
6.撞库
不同的系统有可能会用一个相同的数据库,例如4A的统一认证,拿到了一个系统的数据库用户即可通用·,或者旧密码未改动,可以通过社工库查到旧密码,进行撞库。
7.cookie混淆
在登录的时候是根据cookie中的某一个字段来进行判断登录的角色,这个cookie的字段可以自己任意修改,最常见的就是userid字段。
越权漏洞
概述
越权访问漏洞,又可以分为横向越权访问漏洞与纵向访问漏洞两类。一般是指一个正常用户A可以操作另外一个用B才能做的事。
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查时对客户端请求的数据过分相信而遗漏了权限的判定。
平行越权
在发送请求时观察请求参数,尝试修改用户id或者其他参数验证是否能查看不属于自己的数据,进行增删改查,若成功则存在平行越权的漏洞。
垂直越权
查看请求中是否有身份标识,比如userid,角色id之类的,有的话尝试修改,重新请求更高权限的操作。
支付逻辑漏洞
概述
开发人员往往为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交。只需要抓包看到有金额的参数修改成任意即可。
场景
1.修改购买数量
在进行支付订单的时候,可以修改物品的数量来进行操作,可以通过支付一件的价格购买多件,或者改成负数进行增加资金。
2.修改支付价格
抓包修改价格参数的内容,在支付当中,购买商品一般分为三个步骤:订购、确认信息、付款,在这三个步骤中都有可能存在漏洞,进而可以尝试修改小额度或者修改负。
3.修改支付对应的商品
通过修改商品对应的id号,可以用低价购买高价格的商品
4.修改支付状态
没有对支付状态的值跟实际订单支付状态进行校验,导致点击支付时,抓包修改决定支付或未支付的参数为支付状态的值,从而达到成功。
5.修改附属优惠/状态
修改优惠券金额
修改积分金额
无限制试用
修改优惠价
6.测试数据包未删除
开发在测试的时候有一些测试数据未删除,导致用户可以购买测试数据,或者领取测试的优惠券
条件竞争漏洞
概述
竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中,开发者在进行代码开发时常常倾向于代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果
场景
1.文件上传
2.领取优惠券
3.抽奖
4.转账
实战
大米cms支付逻辑漏洞
进入首页
注册用户
网站首页
购买手机
提交订单
BP抓包
发现价格price=5400之前有一个参数qyt=1,改为qyt=-1
下单成功
熊海CMS越权后台登录
登录后台
http://localhost//iseaCMS_V1/admin/index.php?r=login
没有密码,无法登录
代码审计
查看inc文件夹下的checklogin.php文件
不难发现, 接收cookie中user的内容,如果user字段为空,则跳到登录页面
如果cookie含有user就会欺骗从而登录成功。
使用cookie editor修改cookie
重新访问后台页面