逻辑漏洞渗透与攻防(一)之身份验证漏洞

news2024/12/24 2:22:45

目录

逻辑漏洞概要

漏洞的根因:

逻辑漏洞的分类:

身份验证漏洞

暴力破解漏洞

1.1 未限制爆破

1.2 爆破-验证码爆破

1.3 暴力破解漏洞-限制IP爆破

1.4 暴力破解漏洞-限制密码错误次数来爆破

1.5 暴力破解漏洞-多字段爆破

1.6 限制登录频率爆破

1.7 Authorization爆破(密文爆破)

1.8 密文传输爆破

1.9 Session固定攻击(未授权)

1.10 Cookie欺骗漏洞

1.11 未进行登陆凭证验证


逻辑漏洞概要

逻辑漏洞就是基于开发人员设计程序的时候,逻辑不严密,导致攻击者可以修改、绕过或者中断整个程序,让程序按照开发人员的预料之外去执行。比如某一网页的登录验证逻辑如下:输入用户名验证--验证成功后输入密码--输入验证码--数据包前端传到后端处理--数据库匹配--匹配成功回包
由于整体网站可能采用前端验证,黑客可以直接篡改或者绕过某些流程,如下:BP抓取用户名,密码、验证码特定格式--发送给后端匹配,由于网站采用前端验证,导致攻击者可以直接抓取数据包,从而绕过用户名验证的过程,直接爆破,简单来讲,只要你能修改、绕过、中断整个开发者运行软件的整体逻辑,这个便是逻辑漏洞,只是绝大部分逻辑漏洞的危害性并不高,比如:开发人员需要你先输入账号,在输入密码;但是你改变了这个逻辑,可以先输入密码,在输入账号,其实这个也是逻辑漏洞,这个漏洞没有任何危害;但是也有可能在某些特定情况下可以结合其他的漏洞可能产生新的风险。

漏洞的根因:

比如SQL注入:
程序的开发者也没有想过你可以拼接他的语言产生他预料之外的危害,他不过是按照程序逻辑完成了整个查询的动作,那么为什么会产生逻辑漏洞就很容易理解了:研发只负责满足客户的需求,大部分的研发并不懂安全,所以并不会带着黑客的思维考虑这个软件的安全,程序的本质就是按照研发设计的逻辑运行,这个过程中出现的所有漏洞,皆可以为逻辑漏洞。


逻辑漏洞的分类:


从漏洞的本质上,我习惯将逻辑漏洞分为两类:

  1. 软件(系统)设计之初便存在的漏洞
  2. 使用者未能安全使用软件所产生的

1、第一点很好理解,比如永恒之蓝,sql注入漏洞、文件上传等等,均为设计的时候未能按照安全设计的方法进行,所产生的,攻击者只需要找到特定的点,执行特性的代码即可产生研发预料之外的现象。
2、第二点的关键在于使用者,比如弱口令,比如匿名用户;程序开发者会设计很多便捷的功能,但是由于使用者使用不当,产生了新的问题。

身份验证漏洞

暴力破解漏洞

渗透测试中最简单也最有效的攻击方式就是弱口令攻击,web 服务中最好用的爆破神器 就是 burpsuite 的 intruder 的模块,如果有验证码的话,如果验证码相对简单,就可以就用 pkav工具来试下,如果 bp 解决不了的话,就需要自己写脚本来爆破。


当然,遇见复杂的但是又需要的爆破的需要自己根据实际的网站,进行脚本的编写,更好的达到爆破的目的:验证码识别可以参照 kuls大佬的文章:

https://mp.weixin.qq.com/s/wUpKG7uifU_aj8oWYEPqqQ


实战中各种稀奇古怪的身份验证漏洞:

1.1 未限制爆破

未限制爆破,即对于用户登录的地方没有做什么限制爆破的策略,因此对于这个地方可以直接使用bp来抓包放进intruder模块爆破,参考dvwalow关卡或者pikachu《基于表单的暴力破解》,不做详述。

1.2 爆破-验证码爆破

以下,我们先来讲解一个pkav的爆破验证码的案列: PKav HTTP Fuzzer 爆破带验证码的网站
字典方面,可以参考自行到github上去收集常见的密码本,最好可以形成自己的密码库。

首先我们打开织梦CMS的网站登录页面,进行爆破:

我们随便输入账号及密码和验证码,然后后台BurpSuite开启代理抓数据包:

然后进入到我们的BurpSuite中找到我们刚刚的数据包:

然后打开我们的 PKav HTTP Fuzzer工具:

将我们的数据包全部选中然后复制到 PKav HTTP Fuzzer中:

然后将我们要爆破的密码添加标记:

再将我们要爆破的验证码添加标记:

然后添加字典:

然后我们进入验证码识别模块:

回到网站,右键验证码,查看验证码的地址:

然后将其复制到url一栏:

识别范围改为不限定:

然后我们来到发包器模块:

 启动开始爆破:

 在有验证码的情况下成功完成爆破:

 1.3 暴力破解漏洞-限制IP爆破

某些具有安全意识的开发人员或运维人员,针对账户爆破问题就会使用限制攻击者IP的方式,当在短时间内有大量来自该IP的尝试登录现象时就会封锁该IP,导致该IP无法使用,针对这种情况,建议自己写脚本,调用git开源的代理API来爆破,当然也可以直接用别人的轮子,自建轮子的方法:首先需要新建一个代理池:现在好用的一般是收费版本,这里可以自行购买,我这里拿一个代理
举例,然后使用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()
 

#实验要求,bp能抓到python发送的报文即可,靶机IP可以选择pikachu的或者sqli的,ip不要写环回地址如127.0.0.1或者locahost

这里关键就是在proxy这里,实战中,我们可以改变这里为你的代理池,让你的每次访问从中抽取一个IP去访问目标网站,这样就能够防止因为一个IP多次爆破而导致该IP被封锁的情况。

我们进行实验,后台BurpSuite在8080端口开启抓包,然后我们运行代码:

然后我们可以看到整个网站的信息被返回来了:

我们可以到后台Burp上看看这些抓到的数据包:

1.4 暴力破解漏洞-限制密码错误次数来爆破

有些网站管理员会限制某个账号的登录次数,如果超过限制次数,账号就会被锁定,除非管理员解锁或者设定一段时间过后自动解锁。

由于他限制了一个账号,比如只允许输入5次,但是不限制你换个账号又可以输错5次,对于这种情况,通常可以采用弱密码反过来爆破账户的方式,即设置任意的不超过爆破次数的弱密码数量来反过来爆破用户名。

如下图:通过12345678弱口令来爆破用户,可以比对长度后发现,test和admin账号存在,如果账号足够多,总会有弱口令的。

1.5 暴力破解漏洞-多字段爆破

多字段爆破即需要爆破多个字段大于等于2,比如说:需要同时爆破:账号密码验证码,当我
们爆破一个网站时返回信息是用户名或密码错误时,大多数时候仍然使用burpsuite的Intruder模块,只是与单个字段爆破选择的模式不同,但是当某几个字段相同的情况下,例如在不仅在post内容中确定,还要在cookie或者session或者token中确定的时候,也可以自己写脚本解决问题,如下为pikachutoken爆破的脚本: 

实验案列为:pikachu的token爆破
我们都知道token是什么,你的客户端向服务器发送了一次登录请求,服务端响应了你,并发给了你一个token,服务器后端会保存着这个token,然后客户端带着账号,密码还有服务端发送给你的token再一次请求服务器,服务器对你的token值进行验证,假如你发送过来的token值和服务器发送给你的token一样时,校验通过,然后token销毁。客户端和服务器每一次请求和响应都会重复这个步骤。
1、BP爆破
我们拿pikaqiu靶场来做实验:
我们通过BP代理获得数据包

将其发送到Repetaer模块:

 我们可以看到这里提示token值不正确:

 因为token值在每一次数据包中都是唯一的,所以用重放模块去爆破带有token验证功能的网站通常都会因为这个token值而无法爆破,那我们该如何使用BP来绕过这种情况呢?

我们可以看到我们重放数据包的token值和服务端响应给我们的token值是不同的,我们要想去爆破,每一次都必须拿着网站返回给我们的token值去爆破,而不是原分不动的一直拿着一个token去爆破。

我们将这个数据包发送给Intruder模块:

然后将我们要爆破的密码和token部分添加上:

然后爆破模式选着交叉:

 然后我们填写有效负载:

因为这里第一个是密码,所以我们在这里添加上字典。

然后我们来到第二个,也就是我们的token:

 这个token是哪来的呢?是服务器每次响应发送给你的,所以我们要重服务器每次返回给你的响应中去获取这个token。

关于这点,BP给我们提供了很好的工具,首先我们到选项里去选则匹配规则:

 在服务端返回给我们的响应中,我们去找到这个token:

 然后双击它,BP为我们提供了一个很好的正则匹配功能,只要双击,他就能够为我们自动添加正则表达式:

然后继续回到我们的有效负荷:

在类型这里选择递归匹配,他会将我们之前设置的正则自动填写:

 因为你通过正则获取到的token是服务器重新响应给你的,在你的所有和服务端的请求中属于是第二次响应,所以我们还要在这里填写上第一次也就是你第一次抓数据包时服务器发送给你的token,否者两个token值是不匹配的,然后会导致你的第一次报文是无效的。

 我们设置线程:

  如下因为我们刚刚没有设置第一次的token,所以导致了第一次的爆破是无效的。

然后我们可以通过长度去分析,那些有问题,这里我们只要去看长度异常的就可以了:

来看我们的token爆破成功了:

 2、脚本爆破

那万一有些网站正则识别不到,或者过滤了正则怎么办呢?,遇到这种情况的话就需要我们自己去编写脚本爆破了,下面给出一个脚本给大家进行参考:

这一张图里的user_token值就是填第一次服务端发给我们的token,不过也可以不填,无非也就导致第一次的报文失效而已,后果并不严重。

我们运行这个脚本试试看:

结果:

 1.6 限制登录频率爆破

限制登录频率爆破即限制在一定的时间内爆破的次数,比如10分钟内只允许爆破10次,对于这种方式,可以采用延时爆破的方式,但是可能需要时间比较久,但总比手工爆破舒服,在bp上如下文设置,该 时间以ms为单位(1000ms=1S)

 1.7 Authorization爆破(密文爆破)

Authorization爆破,狭义上单纯指basicbase64爆破,比如tomcat的密码在传输的时候,是采用
base64编码的,而广义上可以泛指经过编码过后的用户名与密码
下面我们以tomcat的basic爆破举例:
环境可以采用vulhub的tomcat8环境

实验演示:BP爆破

我们打开路劲,输入账号和密码,后台BP抓数据包:

我们将我们抓到的报文发送给Repeater模块:

可以看到这里是密文的部分,我们将其复制下来,到base64网站上进行解码:

我们可以看到他加密的格式如上所示,那我们遇到这种加密的情况的话,该如何进行爆破?

我们将其发送给Intruder模块:

将你需要爆破的密文添加上payload位置:

 我们来到有效载荷,选择自定义迭代器:

 在1这里添加上我们要爆破的用户名:

由于我们之前看到的密文机密后的格式是这样的admin:123456,所以在位置2这里我们要加上:号。 

在位置3这里添加上我们的密码:

 然后我们对我们的payload做一个处理:

 添加规则,对我们刚刚的payload进行一个base64加密:

 

然后开始我们的爆破:

不过我们的网站有一个功能,当我们尝试重复登录时,为了防爆破,限制了我们的登录次数,所以导致我们的响应都401了:

 正常情况下来说,如果网站没有这种功能,一般都是可以密文爆破成功的。

1.8 密文传输爆破

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

我们将我们抓到的数据包发送到Repeater模块:

如图,可以看到我们的账号密码经过了加密处理:

那我们如何知道网站前端的加密方式呢?

我们回到我们的网站,打开F12,到密码一栏里,去找他的name字段:

这里的name字段的值是txt_password,然后我们去搜索和txt_password有关联的代码:

 将其复制出来,放到我们的编辑器中,方便看清,然后继续找txt_password:

然后我们对这里的加密方式做一个分析,然后复现他的加密方式,可以看到这里他先获取密码,然后对密码进行了一个md5加密:

然后他将 tmp_pwd_md5通过toUppreCase()函数进行了全大写,然后加了一个":"号 ,再加上了cookie值,也就是我们报文里的cookie值:

然后再将其进行一次MD5加密赋值给submitStr_md5,然后在进行大写转换,最后用用户名+":"号+submitStr_md5,这就是他的加密流程:

整个加密逻辑如下所示:

 

然后我们就可以通过这串加密逻辑自己设置爆破模式或者写脚本去爆破了。

1.9 Session固定攻击(未授权)

这里之前,我们先来复习一下session,你的客户端跟服务器之间进行通信,你输入账号和密码发送给服务器,服务器验证你的账号和密码,成功后,服务器会发送给你一个seesion。你的客户端会保存着这个seesion,在下一次你的客户端去访问这个服务器时,你的客户端会带着这个seesion去访问服务器,服务器就知道你是谁了,假如没有这个session,那么进同一个网站,你每登录一次这个网站,就得输入一次账号和密码,session为我们解决了这个难题。

漏洞介绍:会话固定攻击是利用服务器的session不变机制,借他人之手获得认证和授权,然后冒充他人
漏洞原理:在请求登录过程时 候,URL带有一个session,登录成功之后会将登录成功的信息绑定到这个session中,攻击者可以发送带有session的URL给相关工作人员诱 导其登录,相当于获取了其身份信息
漏洞点:在GET方法请求登录时候带有session值
修复思路: 只要避免在URL中带入session信息即可比较有效的防御
另外也要注意POST请求中带有sessionid进行session固定攻击,虽然可利用性比较低,但是建议修复 ,如下,测试方法可以直接赋值session 然后更换浏览器打开或者使用无痕模式打开即可,如果直接访问,不需要登录,说明存在该漏洞 。
如下图所示的我们发现了一个有Get请求携带的Session,实战中,我们可以利用这种Session直接去访问目标服务器,服务器会直接显示登录成功,不需要我们输入账号和密码。

1.10 Cookie欺骗漏洞

漏洞介绍:通过伪造cookie信息能够伪造其他用户进行登录。
漏洞原理:开发者为了方便将身份信息/登录信息明文或者只是简单编码、哈希之后存放在cookies中,网站通过获取得到的cookies进行 授权或者身份验证
漏洞点:cookie中有明显或者只是简单编码、哈希的字段时候 修改lsLogin值为1可以判定为用户已经登录
漏洞修复: Cookie不应该存储可理解的身份信息和登录信息 按照规定,cookie对身份信息和登录信息的存储只能通过存储足够长度的随 机字符串进行,避免篡改
如果某网站的cookie:asp163=admin,那我们只需要等待管理员登录成功后,网站存在登录信息后即可进行登录,构造报文进行登录, 安装editthiscookie可以迅速看到cookie值如下
cookie 设计存在缺陷 : Cookie 的效验值过于简单。有些web 对于cookie的生成过于单一或者简单,导致黑客可以对cookie 的效验值进行一个枚举,如下图所示

 

这家网站对于cookie的较验只单纯的采用了一组数字,并且数值为常量,不会改变,这样非常容易遭到黑客的枚举。
甚至有一些网站做的更简单,直接以用户名,邮箱号或者用户ID 等来作为cookie的判断标准。
cookie 设置存在被盗风险 : 有一些厂商为了图方便,没有对用户的cookie 做太多的加密工作,仅仅是单纯的做一个静态加密就完事了。

 1.11 未进行登陆凭证验证

有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作。
后台页面访问 : 某电商后台主页面,直接在管理员web 路径后面输入main.php 之类的即可进入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(小程序)会议OA项目-其它页面

目录 一、tabs组件及会议管理布局 1.自定义tabs组件 2.会议管理 二、投票管理参考图 三、个人中心布局 一、tabs组件及会议管理布局 1.自定义tabs组件 文档参考:自定义组件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framewo…

植物大战僵尸:实现自动收集阳光

植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析&#…

Apache Kafka Spring 集成

Apache Kafka Spring 集成 今天来学习Spring如何集成 Apache kafka,在Spring Boot中如何集成kafka客户端 生产、消费消息。首先介绍下各个组件的版本信息: Apache Kafka_2.13-3.3.1Spring Boot 3.0.0Apache-Maven-3.6.0JDK-17.0.5 启动Kafka # 进入k…

ArcGIS基础实验操作100例--实验38删除冗余节点

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验38 删除冗余节点 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

免费分享在线设计工具,比ps还方便的贺卡设计工具!

元旦贺卡在线制作工具,不用自己设计,只需借助在线工具平台的模板就能轻松搞定的贺卡设计方法!跟着小编下面的设计步骤,使用在线工具乔拓云轻松设计活动贺卡,设计过程简单且一键生成分享链接,不用自己设计工…

推荐四款常见的电子教室软件,大家觉得哪款好用

现在越来越多的教学教室都在使用多媒体教学软件,不仅包括学校,还有一些培训机构和教堂。 那么,多媒体教学软件有哪些? 哪款多媒体教学软件好用? 在今天的文章中,小编挑选了4款流行的多媒体教学软件推荐给大…

【全网最细PAT题解】【PAT乙】1009 说反话(cin、getline、cin.getline三种输入格式)

题目链接 1009 说反话 题目描述 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词…

【Spring 入门教程2】

🌈博客主页:屠一乐的博客 📅 发文时间:2023.1.2 🎈 一定存在只有你才能做成的事 🌹 博主水平有限,如有错误,欢迎指正 欢迎各位👍收藏💎评论✉ Spring_day02 S…

C++ - opencv应用实例之矩形框检测

C++ - opencv应用实例之矩形框检测 现阶段下,目标检测在实际应用场景中的表现颇为重要,工业质检、移动机器人视觉伺服、作业、交通监控、安防领域等均需要通过目标检测来实现对目标的定位、测量或者统计、辅助控制等目前目标检测主要分为两个方向的发展,其一是基于传统图像处…

let、const、var关键字

1、let ES6中新增的用于声明变量的关键字。 (1)let声明的变量只在所处于的块级有效 if (true) { let a 10;} console.log(a) // a is not defined 注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级…

计算机网络(二)Linux网络编程

layout: post title: 计算机网络(二)Linux网络编程 description: 计算机网络(二)Linux网络编程 tag: 计算机网络 文章目录POSIX概念POSIX网络相关APIsocket()bind()网络字节序与主机字节序(大小端设备)list…

TensorFlow之过拟合与欠拟合-2

1 基本概念 过度拟合(overfit) 正则化(regularization) L1正则化(L1 regularization) L2正则化(L2 regularization) 删除正则化(dropout regularization&#xff09…

植物大战僵尸:实现灵魂收割者

植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析&#…

【JavaSE成神之路】聊聊封装这件事

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java的封装。 1. 什么是封装 Java的封装是指,在一个类中把一些重要的信息隐藏起来,使得外部不能直接访问。 Java的封…

Java --- JUC之volatile

目录 一、volatile两大特点 二、volatile的内存语义 三、volatile内存屏障 四、volatile四大屏障 五、volatile的特性 六、volatile使用场景 一、volatile两大特点 1、可见性 2、有序性 二、volatile的内存语义 1、当写一个volatile变量时,JMM会把该线程对…

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型–数组 第七节 C 语…

创建型模式

创建型模式 创建型模式对类的实例化过程进行了抽象,能够将软件中对象的创建和使用分离,使整个系统的设计更加符合单一职责原则。 什么是对象的创建与对象的使用分离? 一个女生想吃苹果,怎么办? 对象的创建和对象的使用…

TC275——04Blinky-LED

项目工程框架 项目驱动文件这个见过,三个main文件真的是开了眼,一个main代表一个核吗? 按照以往对实现LED闪烁的流程,一般是先配置时钟、再配置IO、延时,实现反转效果。 Blinky_LED.c 在驱动文件里: /*…

数据分析 -Hive学习 Day5

HIVE 核心技能之窗口函数 大家好呀,这节课我们学习 Hive 核心技能中最难的部分——窗口函数。窗口函数我们之前在学 MySQL 的时候有学过一些,但是只学了三个排序的窗口函数。这节课我们会学习更多的窗口函数,包括累计计算、分区排序、切片排…

nvm中node包管理器在windows中的使用

你要使用的 1/nuvm 只能在Linux 和 OS X 2/推荐使用nvm-windows,git上,我认为还可以就使用 操作 1/下载的git地址nvm-windows 2/好像要清除掉所有node,是个注意点 3/安装 4/路径上不允许存在空格,否则后面会各种报错 5…