身份认证种类及攻击
身份认证
认证类型
http认证机制
http协议支持两种认证方式:基本认证和摘要认证。
基本认证
客户端发起请求服务端认证会让客户端在弹框中输入用户名密码,然后用户名密码会在请求头中以下面这种格式发送给服务端
Authorization: Basic (username:passwd)经过bese64加密
下面以ctfhub的一道题为例
点击click弹出登录窗口
输入密码后burpsuit抓包观察请求与响应
虽然使用的是base64编码 但是很容易解码几乎跟裸奔一样
摘要认证
Digest认证是为了修复基本认证协议的严重缺陷而设计的,秉承“绝不通过明文在网络发送密码”的原则,通过“密码摘要”进行认证,大大提高了安全性。
key | value | 解释 |
---|---|---|
WWW-Authenticate | Digest、Basic | 用来定义使用何种方式去进行认证以获取受保护的资源 |
nonce | 服务端随机数 | 服务端向客户端发送质询时附带的一个随机数,这个数会经常发生变化。客户端计算密码摘要时将其附加上去,使得多次生成同一用户的密码摘要各不相同,用来防止重放攻击 |
response | Request-Digest | 经过运算后的密码 |
基于会话的认证
cookie、session那种
扩展:
用户登录一次就可以访问所有相互信任的应用的系统(用户登录了百度首页 进入百度文库不用再次登录),这种系统我们就管它叫多web应用单点登录(sso,Single Sign On)。相比传统的模式(进一个系统登录一次)这种技术引入了特定的鉴权、授权体系
基于令牌的身份认证 OAuth2
github、gitee、钟馗之眼
一次性密码
身份认证攻击
暴力破解
-
可暴力破解的条件
- 弱口令
- 未限制访问次数
-
如果存在验证码 可以使用python+selenium(模拟浏览器)+超级鹰打码平台(获取验证码的内容) 破解
from PIL import Image
from selenium import webdriver
def create_driver(cookies):
# 实例化一个浏览器的对象(传入浏览器的驱动)
driver = webdriver.Chrome()
# 让浏览器对该url发起请求
for cookie in cookies:
driver.add_cookie(cookie)
return driver
def get_code():
# 超级鹰接口
return 1
def get_pic(driver):
driver.save_screenshot("original.png")
ran = Image.open("original.png")
box = (1, 1, 1, 1) # 图片定位
ran.crop(box).save("code.png")
def main(url, cookies):
driver = create_driver(cookies)
driver.get(url)
passwd = []
for p in passwd:
driver.find_element_by_xpath('//*[@id="u"]').send_keys('username') #填充用户名密码
driver.find_element_by_xpath('//*[@id="p"]').send_keys(p)
# 获取图片
get_pic(driver)
# 获取验证码
code = get_code()
driver.find_element_by_xpath('//*[@id="code"]').send_keys(code)# 填充验证码
driver.find_element_by_xpath('//*[@id="code"]').click()# 点击提交
# 根据目标设置不同的判断条件
# xxxxxxx
if __name__ == '__main__':
url = '' # 目标url
cookies = [{'name': 'tmp', 'value': 'tmp'}, {'name': 'tmp', 'value': 'tmp'}, ]# 可能需要的cookies,一般不需要 因为压根还没登录
main(url, cookies)
Cookie伪造
burp抓包 伪造请求头cookie尝试攻击
重放攻击
主机A给主机B发送的报文被攻击者C截获了,然后C伪装成A给B发送其截获来的报文,而B会误以为C就是A,就把回应报文发送给了C。
重放攻击也可以绕过验证码机制攻击。