逻辑漏洞
1. 原理
1.1 概要
逻辑漏洞就是基于开发人员设计程序的时候,逻辑不严密,导致攻击者可以修改、绕过或者中断整个程序,让程序
按照开发人员的预料之外去执行。
比如某一网页的登录验证逻辑如下:
输入用户名验证--验证成功后输入密码--输入验证码--数据包前端传到后端处理--数据库匹配--匹配成功回包
由于整体网站可能采用前端验证,黑客可以直接篡改或者绕过某些流程,如下:
BP抓取用户名,密码、验证码特定格式--发送给后端匹配
由于网站采用前端验证,导致攻击者可以直接抓取数据包,从而绕过用户名验证的过程,直接爆破,简单来讲,只
要你能修改、绕过、中断整个开发者运行软件的整体逻辑,这个便是逻辑漏洞,只是绝大部分逻辑漏洞的危害性并
不高,比如:开发人员需要你先输入账号,在输入密码;但是你改变了这个逻辑,可以先输入密码,在输入账号,
其实这个也是逻辑漏洞,这个漏洞没有任何危害;但是也有可能在某些特定情况下可以结合其他的漏洞可能产生新
的风险
1.2 根因
比如SQL注入:
程序的开发者也没有想过你可以拼接他的语言产生他预料之外的危害,他不过是按照程序逻辑完成了整个查询的动作
那么为什么会产生逻辑漏洞就很容易理解了:研发只负责满足客户的需求,大部分的研发并不懂安全,所以并不会带着黑客的思维考虑这个软件的安全
程序的本质就是按照研发设计的逻辑运行,这个过程中出现的所有漏洞,皆可以为逻辑漏洞
逻辑漏洞的分类:
从漏洞的本质上,习惯将逻辑漏洞分为两类:
软件(系统)设计之初便存在的漏洞
使用者未能安全使用软件所产生的
1、第一点很好理解,比如永恒之蓝,sql注入漏洞、文件上传等等,均为设计的时候未能按照安全设计的方法进行,所产生的,攻击者只需要找到特定的点,执行特性的代码即可产生研发预料之外的现象
2、第二点的关键在于使用者,比如弱口令,比如匿名用户;程序开发者会设计很多便捷的功能,但是由于使用者使用不当,产生了新的问题
2. 身份验证漏洞.
渗透测试中最简单也最有效的攻击方式就是弱口令攻击,web 服务中最好用的爆破神器 就是 burpsuite 的 intruder 的模块,如果有验证码的话,如果验证码相对简单,就可以就用 pkav工具来试下,如果 bp 解决不了的话,就需要自己写脚本来爆破
未限制爆破:对于用户登录的地方没有做什么限制爆破的策略,因此对于这个地方可以直接使用bp来抓包放进intruder模块爆破
限制IP爆破:当在短时间内有大量来自该 IP 的尝试登录现象时就会封锁该 IP,导致该 IP 无法使用,针对这种情况,建议自己写脚本,调用 git 开源的代理 API 来爆破,当然也可以直接用别人的轮子
自建轮子的方法:首先需要新建一个代理池:现在好用的一般是收费版本,这里可以自行购买,拿一个代理举例
import requests
import re
def post():
curl = "你网站靶机的IP"
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 #请求报文
print(post) #打印网站
if __name__ == '__main__':
post()
#实验要求,bp能抓到python发送的报文即可,靶机IP可以选择pikachu的或者sqli的,ip不要写环回地址如127.0.0.1或者locahost
限制密码错误次数来爆破:限制某个账号的登录次数,如果超过限制次数,账号就会被锁定, 除非管理员解锁或者设定一段时间过后自动解锁,由于他限制了一个账号,比如只允许输入5次,但是不限制你换个账号又可以输错5次,对于这种情况,通常可以采用弱密码反过来爆破账户的方式,即设置任意的不超过爆破次数的弱密码数量来反过来爆破用户名
通过12345678弱口令来爆破用户,可以比对长度后发现,test和admin账号存在,如果账号足够多,总会有弱口令的
多字段爆破;即需要爆破多个字段大于等于 2,
当我们爆破一个网站时返回信息是用户名或密码错误时,大多数时候仍然使用 burpsuite 的 Intruder 模块,只是与单个字段爆破选择的模式不同,但是当某几个字段相同的情况下,例如
不仅在 post 内容中确定还要在cookie或者session或者token中确定的时候,也可以自己写脚本解决问题,如下如为pikachu token爆破的脚本
import requests
i