逻辑漏洞及防御

       逻辑漏洞就是基于开发人员设计程序的时候,逻辑不严密,导致攻击者可以修改、绕过或者中断整个程序,让程序按照开发人员的预料之外去执行。

       相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题。之所以称为逻辑漏洞,是因为代码之后是人的逻辑,人更容易犯错,是编写完程序后随着人的思维逻辑产生的不足。sql注入、xss等漏洞可以通过安全框架等避免,这种攻击流量,非法对原始程序进行了破坏,防火墙可以检测,而逻辑漏洞是通过合法合理的方式达到破坏,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微。

对于逻辑漏洞的分类:

1,软件(系统)设置之初便存在的漏洞;如:永恒之蓝等

2,使用者使用不当;如:弱口令等

一,身份验证漏洞

1,暴力破解

(1),未限制的破解

未限制的破解:对用户登录的地方未做限制爆破的策略;

使用burp即可;

(2),限制IP爆破

在短时间内来自大量的该IP的尝试登录,就会封锁该IP;

使用开源代理池(或付费版本)+python脚本;

python脚本:

import requests
import re

def post():
    curl = "你网站靶机的IP"
    proxy = {'http':'127.0.0.1:8080'}   #代理地址以及端口
    post = requests.get(curl,headers=header,proxies=proxy).text   #请求报文
    print(post)  #打印网站

if __name__ == '__main__':
    post()

(3),限制密码错误次数

超过登录的次数,账号就会被锁定(限制时间/或者管理员);

反向------>根据密码来爆破账号;

通过给定的密码,更换账号,来实现爆破;

(4),多字段爆破

例如需要同时爆破账号,密码和验证码的时候;

案例:pikachu靶场暴力破解token;

使用burp爆破;

采用单线程的爆破方式;

使用python脚本爆破;

import requests
import re

purl = "http://127.0.0.1/pikachu/vul/burteforce/bf_token.php"  #这里需要修改
user_token = "27536628ca8f3b0818871451285"
proxy = {'http':'127.0.0.1:8080'}     #可以集合bp看看发送的报文
header = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0',
     'Cookie': 'PHPSESSID=17u0i2fakm84eq9oc24boc8715'}

def token(response):
    user_token = re.findall('value=".*."', response)[0][7:-1]  #取出token
    return user_token

def uandp(user_token):
    f = open('result.csv', 'w')     #把爆破结果储存到文件里,这里为csv格式
    f.write('用户名' + ',' + '密码' + ',' + '包长度' + '\n') #给文件设置标题
    sum = len(open("p.txt").readlines())*len(open("u.txt").readlines()) #密码本的总数量,最后得出进度
    dan = 0
    for u in open("u.txt") :
        for p in open("p.txt") :
            u = u.replace("\n","")   #过滤掉回车符
            p = p.replace("\n","")
            session = requests.session()    #会话保持
            data= {'username':u,'password':p,'token':user_token,'submit':'Login'} #初始数据
            response = session.post(purl,data=data,headers=header).text
            user_token = token(response)
            result = u + ',' + p + ',' + str(len(response))    #用户名密码以及响应包长度
            f.write(result + '\n')  #输出到文件
            dan = dan + 1
            print("进度:"+str(dan)+'/'+str(sum))           #输出到终端
            # print(response)
    f.close()

if __name__ == '__main__':

(5),限制登录频率;

使用burp的延时爆破,使用的时间将会更长;

(6),Authorization爆破;

      有些密码在传输过程中可能会使用编码技术,如:tomcat在传输密码的过程中会使用base64编码等;

重点在于破解加密(编码)的方式;

然后使用burp破解;

(7),密文传输爆破;

密码由客户端转向服务器端的时候使用前端的js代码加密(如MD5等),

在前端的页面中搜索看是否对于输入的密码经过处理;

2,session固定攻击

"session" 是一个术语,通常用于描述在网络通信中维护的用户会话状态。在Web开发中,会话(session)是指一系列相关的交互活动,通常涉及用户与服务器之间的通信。会话可以用来跟踪用户的操作、存储用户的状态信息,并确保用户在多个页面之间保持一致的状态。

在Web开发中,服务器会为每个用户创建一个唯一的会话标识符,通常是一个会话ID。这个标识符通常存储在用户的浏览器中,可以通过cookie或URL参数传递。在会话期间,服务器会根据这个会话标识符来识别用户,并在会话中存储和检索用户的状态信息。

会话固定攻击是利用服务器的session不变机制,借他人之手获得认证和授权,然后冒充他人;

漏洞点:在登录时候带有(以get的方式在url中)已经登录成功的session;

3,cookie欺骗漏洞

cookie相当于是"令牌"

保存在客户端;

可以通过伪造或者获取cookie来进行其他用户的登录;

4,未进行登录的凭证验证

有些业务的接口,缺少对于用户登录凭证的校验,或者是验证存在缺陷,导致黑客可以未经授权可以访问这些敏感文件甚至是越权操作;

二,登录验证安全

1,图形验证码

若验证码可以爆破;

验证码过于简单(4位或者说仅仅只有数字)

验证码的复用;

登录失败之后验证码不刷新,仍然可以使用上次的验证码并且有效;

验证码的绕过;

(1),验证码的验证会返回一个状态值,交由前端验证,我们可以使用burp来修改这个状态值;

(2),在点击获取验证码时,在返回包里面会包含正确的验证码;

客户端验证;

验证码的生成,校验全部在前端完成(未经过后端服务器);

依赖于前端的js代码;可以选择禁用js或者删除相应的js代码;

2,短信验证码

无效验证码;

常发生于测试阶段

短信轰炸;

有时间间隔,通常为60s

可以使用python代码,计算间隔时间,实现短信轰炸;

三,登录前端验证漏洞

1,忘记密码

忘记密码--->发送验证信息(手机号或者邮箱)--->进行下一步操作;

如果验证码只有4位,并且没有其他的防御措施;直接爆破即可;

前端的验证其实并不可靠;可能会导致任意账号注册,登录,重置等一些列的问题;

(1),在源代码中直接返回验证码

(2),返回加密后的密码

在修改密码的时候修改参数(手机号/邮箱)从而达到修改其他用户密码的目的;

忘记密码以链接的形式出现;

通过邮箱找回密码时,在邮箱的内部出现一个包含token的url,通过用户的点击,来完成验证;

在登录的状态下;修改自己的密码时,通过抓包,改包从而修改其他用户的密码;

2,重置密码

重置之后改为默认密码;如手机号,身份证号后六位,123456等;

这时可以使用默认密码尝试爆破;

四,任意账号密码

1,未验证邮箱/手机号

开发人员未去验证手机号/邮箱是否有效而直接允许用户注册;

导致账号任意注册;

2,批量注册

使用脚本批量的注册,形成应用层的dos攻击,导致服务器瘫痪;

3,个人信息伪造

对真实身份进行任意填写

4,前端验证审核绕过

对于服务器端返回状态信息交由前端验证;

可以通过抓包,改包实现;

5,用户名覆盖

通过抓包注册admin用户,来覆盖原有的管理员用户;

五,权限(越权)

越权分为水平越权,垂直越权和交叉越权;

水平越权:权限类型不变,权限ID改变

垂直越权:权限ID不变,权限类型改变

交叉越权:权限类型和ID都改变

如下图:

1,水平越权

攻击者可以访问和他具有相同权限的用户的资源;

  • 在使用某个功能时,通过用户的唯一标识(ID,用户名等)来访问或者操作对应的数据;
  • 通过修改这个唯一的标识,来通过此标识的用户来进行对应的操作;
  • 在使用某个功能的时候,通过文件名直接访问文件;

2,垂直越权(提权)

一个低级别的用户尝试访问高级别用户的资源;

比如说由普通用户------>管理员用户

  • 由前端的js代码控制,可以禁用某些语句;
  • 修改cookie的信息,将usename改为'admin';造成提权;

六,其他类型

1,数据包的重放

通过数据包的重放,造成短信轰炸,邮件轰炸,重复提交订单;

可以使用burp,python脚本自动化生成;

2,条件竞争

条件竞争是指一个系统的运行要依赖于不受事件的先后顺序;

对于这些不受控制的事件,如果没有按照开发人员预定的思路运行,可能就会造成意料之外的结果;

通俗来讲;当一个程序的运行要依赖于线程的顺序时,就会产生条件竞争;

修复:限制同一时间的访问方法只有单一线程;

3,订单金额任意修改

在提交订单时,抓取前端页面,修改金额;

4,接口的无限枚举

有些关键性的接口没有做防御和其他的预防机制;易被爆破;

5,支付漏洞

支付漏洞属于高风险漏洞

通过修改价钱,数量,状态等参数;

网站接入支付结果有两种方式:

  1. 浏览器进行跳转通知;(浏览器端的数据更容易被篡改)
  2. 服务端异步通知;

支付漏洞:

  • 首先要抓到关键的数据包;
  • 分析数据包;
  • pc端,app端,web端都进行尝试;

支付漏洞的防御措施:

  1. 在后端检查订单的每一个值,包括支付状态;
  2. 校验价格、数量参数,比如产品数量只能为整数,并限制最大购买数量;
  3. 与第三方支付平台检查,实际支付的金额是否与订单金额一致;
  4. 如果给用户退款,要使用原路、原订单退回。比如:退押金,按用户原支付订单原路退回;
  5. MD5加密、解密、数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题;
  6. 金额超过指定值,进行人工审核等;
  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕舟舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值