以摘要认证(Digest Authentication)方式伪登录某摄像头

2023-05-16

本文部分摘自ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

密码已知。
分析发现,该摄像头Web登录采用了Digest Authentication的方式。流程如下:
这里写图片描述
下面大致看一下这部分的验证流程:
1. 客户端请求 /api/employees;
2. 服务端返回401未验证的状态,并且在返回的信息中包含了验证方式Digest,realm的值,QOP(quality of protection)只设置成auth,nonce为一串随机值,在下面的请求中会一直使用到,当过了存活期后服务端将刷新生成一个新的nonce值;
3. 客户端接受到请求返回后,将username:realm:password进行HASH运算,假设运算后的值为HA1。又将请求方法和请求的路径/api/employees进行HASH运算,假设运算后的值为HA2。再将HA1:nonce:nc:cnonce:qop:HA2进行HASH运算,得到的值放在response中。这里的cnonce为客户端生成的nonce值,而nc用于统计,假设开始时为00000001,下次请求后就变成了00000002,不一定每次都加1,但是后面请求中的nc值肯定大于前一次请求中的nc值。
4. 服务端收到请求后将验证nonce是否过期,如果过期,那么直接返回401,即第二步的状态。如果没有过期,那么比较nc值,如果比前一次nc值小或者前一次根本没有存储的nc值,那么也将直接返回401状态。如果前面的验证都通过,那么服务端也将按照步骤3中计算最终HASH值的步骤计算出HASH值与客户端的进行比较,然后比较客户端提交过来的HASH值与服务端计算出来的HASH进行比较,不匹配返回401,匹配获取请求的数据并返回状态200。

总结一下:

HA1=MD5(username:realm:password)
HA2=MD5(method:digestURI)
response=MD5(HA1:nonce:nc:cnonce:qop:HA2)

注意:不是所有的摘要认证方式都按上述进行计算,具体可阅读Digest access authentication

伪登录代码:

#!/usr/bin/python

import hashlib
import httplib
import re

ip="the camera 's ip"
port="the camera 's port"
username="your username"
pwd="your password"

conn = httplib.HTTPConnection(ip, port,timeout=10)

# step 1: get nonce from 401 unauthorized response sent by the server
conn.connect()
headers={
"Host": ip+":"+port,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1"
}
conn.request("GET", "http://"+ip+":"+port+"/", "",headers)
res = conn.getresponse().getheader('WWW-Authenticate')
conn.close()
nonce =re.findall(r'nonce="(.*?)"',res)[0]
realm=re.findall(r'realm="(.*?)"',res)[0]
qop=re.findall(r'qop="(.*?)"',res)[0]
opaque=re.findall(r'opaque="(.*?)"',res)[0]

print "login successfully..."

# step 2: GET http://ip:port/upgrade.htm
urI="/upgrade.htm"
method="GET"
nc="00000001"
cnonce="12234dce7db449b5"
# cal HA1
m = hashlib.md5()
m.update(username+":"+realm+":"+pwd)
HA1 = m.hexdigest()
# cal HA2
m = hashlib.md5()
m.update(method+":"+urI)
HA2 = m.hexdigest()
# cal client response
m = hashlib.md5()
m.update(HA1+":"+nonce+":"+nc+":"+cnonce+":"+qop+":"+HA2)
response= m.hexdigest()
# GET http://ip:port/upgrade.htm
headers={
"Host": ip+":"+port,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Authorization": 'Digest username="'+username+'", realm="'+realm+'", nonce="'+nonce+'", uri="'+urI+'", algorithm=MD5, response="'+response+'", opaque="'+opaque+'", qop='+qop+', nc='+nc+', cnonce="'+cnonce+'"'
}
conn.connect()
conn.request(method, "http://"+ip+":"+port+urI, "", headers)
res = conn.getresponse()
print res.read()
conn.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以摘要认证(Digest Authentication)方式伪登录某摄像头 的相关文章

  • Android 设备上的 Facebook 分享问题

    我使用了来自的样本AndroidFacebook示例 https github com ddewaele AndroidFacebookSample它在模拟器上运行良好 但在设备上它被转移到内置的 Facebook 意图 设备上不会出现身份
  • 使用带有十六进制字符串的 CryptoJS

    我想连接到蓝牙设备 仅通过十六进制字符串进行通信 我需要编码一个 16 字节值 因此我也期望一个 16 字节的值 在我的实现中 CryptoJS 总是返回更长的结果 根据文档 不需要 IV 所有 16 字节数据必须使用当前存储在设备中的客户
  • 删除 cookie php

    我正在尝试创建一个带有登录系统的平台 并将用户名和密码存储在cookie中 以使用户即使关闭浏览器然后再次输入也能保持登录状态 我设法保存了cookie 但我不知道如何制作注销按钮 这是代码 function logout body app
  • Next.JS 中止获取路由组件:“/login”

    我正在开发一个用于每页身份验证的 useUser Hook 我已经正常实现了 useUser 挂钩 因此重定向工作正常 但我收到上述错误 中止获取路由组件 login 我该如何修复 useUserHook 来解 决它 useUser tsx
  • System.Security.Claims 命名空间的成员不可用?

    我正在学习 NET 4 5 中新的基于声明的身份验证方法 并使用控制台应用程序来执行此操作 根据 MSDNhere http msdn microsoft com en us library system security claims c
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali
  • JWT 中的注销不起作用

    我是 Laravel 的新手 我安装了 JWT 并登录 所以它工作并生成了一个令牌 当我在邮递员中注销时它返回 true 但一次又一次它返回 true 和 auth gt 用户 注销后始终返回用户 这是我的代码 public functio
  • Magento 外部登录不会创建会话 cookie

    我正在尝试从外部站点替换 Magento 的相当笨拙的 ajax 登录 该网站使用 Magento 作为商店 站点和 magento 商店都有自己的登录信息 因此当用户登录时 两者同步非常重要 这是通过每次页面重新加载时进行 ajax 调用
  • Rails:RSpec - nil:NilClass 的未定义方法“cookie_jar”

    铁轨新手 尝试遵循迈克尔 哈特尔的教程 尝试添加辅助方法来模拟 RSpec 测试中的日志时陷入困境 describe when the a user has logged in and attempts to visit the page
  • “git push heroku master”仍然要求身份验证

    我已经执行了 heroku login 但是当我尝试推送时 仍然要求我进行身份验证 git push heroku master Username for https git heroku com
  • 在 Django Admin 中隐藏 Auth 部分 [重复]

    这个问题在这里已经有答案了 在 Django 管理中 有什么方法可以隐藏 Auth 部分吗 假设这是 Django 和准系统项目的全新安装 没有应用程序 只有管理员 您可以使用admin site unregister from djang
  • 在 keycloak 令牌中使用“sub”声明作为内部数据库中的用户 ID 是否安全

    我正在开发一个将来可能支持社交登录的应用程序 除了我们自己的 keycloak 用户名 电子邮件注册之外 我正在尝试确定使用 keycloak ID 令牌中的 sub 声明作为我们内部 mongo 数据库中用户的主键 id 字段 是否安全
  • 用户注册错误:没有这样的表:auth_user

    我正在尝试使用 Django 的默认身份验证来处理注册和登录 setting py INSTALLED APPS django contrib admin django contrib auth django contrib content
  • 如何在 GWT 中实现登录屏幕?

    我正在为后端应用程序编写一个小型 GWT 前端 我想知道 GWT 应用程序的最佳安全模型是什么 我正在考虑实现一种 RPC 方法 该方法从客户端网页接收用户密码的 MD5 然后将会话 ID 传回客户端页面 或失败代码 所有后续调用都将简单地
  • SmartGIT 不要求 ssh 密钥

    切换到新计算机后 我必须再次安装 Windows 版 SmartGIT 现在尝试克隆我的 fedorahosted org repository 密钥存储在 C User myusername ssh SmartGIT 附带了全新安装 并且
  • Polymer 1.0:用户身份验证 UX(建议、教程和示例)?

    是否有推荐的 聚合物方式 来进行用户身份验证 这个问题包括技术部分和用户体验 用于进行用户身份验证的用户体验的全面示例 和 或教程 将非常棒 注意 Polymer 入门套件不包含任何身份验证 UX 示例 在这个问题中 用户体验 的意思是 完
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • Asp.net Identity 注销其他用户

    我正在使用 Asp net Identity 来验证用户身份 并尝试从管理端锁定任何用户 但是当我锁定任何在线用户时 它并没有注销 我读过很多关于我的问题的评论 但它们都不起作用 我尝试使用 UserManager UpdateSecuri
  • Spring Security从数据库获取用户ID

    我正在使用 spring security 进行身份验证并成功获得User目的 org springframework security core userdetails User 任何我需要的地方 但我想要UserId还有 春天里没有的U
  • 在 GraphQL 服务器中实现访问控制的好模式是什么?

    背景 我有一组模型 包括用户和各种其他模型 其中一些模型包含对用户的引用 我公开这些模型 以便通过 GraphQL API 生成的查询Graffiti https github com RisingStack graffiti 由 Mong

随机推荐

  • Matlab-数字图像处理-获取图片rgb颜色分量及截取子图

    Matlab 数字图像处理基础实验 获取图片rgb颜色分量及截取子图 Problem Statement 问题描述 1 Proficient in Matlab tools and complete two Matlab functions
  • ICRA2020论文整理(SLAM + Deep Learning)

    参考 https github com PaoPaoRobot ICRA2020 paper list 目录 1 SLAM 2 Deep Learning in Robotics and Automation 3 Localization
  • win10+ubuntu16.04双系统下完全删除并重装ubuntu16.04

    参考文章 xff1a 1 彻底删除Ubuntu EFI分区及启动项 xff1a https blog csdn net mtllyb article details 78635757 2 Create a bootable USB stic
  • Ubuntu18.04开机挂载硬盘

    Linux与Windows的文件资源管理在加载上有所区别 xff0c Windows自动加载主板上连接的所有磁盘 xff0c 而Linux默认只挂载系统所在的分区 xff0c 使用其他分区则需要使用mount命令手动挂载 若需系统启动时自动
  • [Docker] 删除所有httpd镜像创建的容器 - 详细解释

    故意 一不小心创建了很多httpd容器 或者包含 httpd 关键字 xff0c 有的在运行 xff0c 有的已经停止了 xff0c 有的已经退出 xff0c 如果我想强制一键删除 xff0c 该怎么办呢 xff1f 其实很简单 xff0c
  • 直流调速器(有刷电调)的工作原理

    以前测试过无刷电调 xff0c 它是把锂电池的直流电转化为三相交流波形 xff0c 最近买了有刷电调 xff0c 也研究一下它的调速原理 调速器如下 xff1a 飞马 30A单向有刷电调 固定翼飞机专用 带动力启动开关 测试平台 连接示波器
  • 百度开发测试工程师在线笔试

    时间 xff1a 2020 9 3 19 xff1a 00 21 xff1a 00 笔试内容 xff1a 选择题 编程题 1 选择题 xff08 30个 xff09 50分钟 xff0c 60分 xff0c 涵盖内容较广 xff0c 包含计
  • ROS1重温:自定义头文件、源文件

    ROS1重温 xff1a 自定义头文件 源文件 自定义头文件 源文件的意义自定义头文件创建自定义头文件使用头文件 xff0c 并在程序中直接实现函数功能修改 CMakeLists txt 文件 自定义头文件中实现函数功能的源文件创建自定义头
  • spring cloud bus 消息总线 原理总结

    1 spring cloud bus spring cloud bus整合java的事件处理机制和消息中间件的发送和接收 xff0c 主要是由发送端 接收端和事件组成 目前spring cloud bus只实现了RabbitMq和Kafka
  • NGUI扩展:为面板(Panel)添加自定义图片遮罩

    前一阵使用NGUI开发时遇到一个实现圆形小地图的需求 小地图上除了地图背景外还有一大堆的零零碎碎的角色提示信息啥的 xff0c 因此创建了一个panel进行绘制 xff0c 剩下的就是如何让这个panel只在一个圆形的区域内进行显示 NGU
  • Unity3D使用RenderCommand渲染外轮廓

    外轮廓渲染方式原来的做法使用CommandBuffer 外轮廓渲染方式 我这里所要介绍的外轮廓是使用模糊后处理实现的 xff0c 不涉及到边缘查找或是顶点扩展这些 xff0c 简单的说这种方式渲染外轮廓总共分三步 1 用单色渲染目标物体到R
  • Matlab-计算直方图+直方图均衡

    数字图像处理基础实验 计算直方图 43 直方图均衡 Problem Statement xff08 问题描述 xff09 1 Histograms are the basis for numerous spatial domain proc
  • Unity 5 全局光照GI与新的烘焙系统初探

    GI是啥 Realtime GI xff0c 实时全局光照 xff0c 听上去就是一个非常高大上的词 xff0c 但是越高大上就越令人心生敬畏 xff0c 因为世上没有免费的午餐 xff0c 越好的效果意味着越多的消耗 xff0c 对于移动
  • Unity5 (5.0-5.2) Shader编译机制初探 - 小心,Shader在吞噬你的内存

    又被Unity坑了一把 xff0c 简单说下吧 xff0c 下面都是流水账 xff0c 结论就写在最后了 xff0c 就是Unity5 5 2的shader编译机制真是不咋地 1 Why Always me 问题是这样的 xff0c 我照着
  • Unity3D Android使用Bugly定位崩溃问题总结

    看着bugly干了1个多月的crash问题处理 xff0c 可以说是心力憔悴 xff0c 整天对着一堆莫名其妙的崩溃堆栈和一大把日志发愁 xff0c 背锅的滋味可是真不好受 xff0c 得空写一篇总结与各位背锅侠共勉 一般来说游戏的Cras
  • 在Unity3D中控制动画播放

    用Unity3D也算是好久了 xff0c 但是每次做项目总还是能学到新的东西 这次做一个TPS的项目就遇到了这样一个问题 xff0c 如何同时在上下半身播放不同的动画 xff1f 解决方法其实是很简单 xff0c 但由于对于动画资源的了解不
  • 如何使用ROS的service读取Kinect图像

    如何使用ROS的service读取Kinect图像 我们经常会使用各种ROS包 xff0c 而如何在ROS程序中导入Kinect图像呢 xff1f 1 先写一个service文件 学了挺久了 xff0c 这个还没有好好整理过 其实步骤很简单
  • bladeRF:自己调制无线门控钥匙信号

    无线门控钥匙是如何编码的 xff1f 上一篇博客bladeRF无线门控钥匙信号重放小记已经录制了钥匙信号 xff0c 在inpectrum里对一帧信号进行分析后可看到 xff1a 嗯 xff0c 好吧 xff0c 这信号具体不知是个啥意思
  • Running OpenBTS with the Nuand bladeRF on Ubuntu (The Definitive and Step by Step Guide)

    From xff1a https blog strcpy info 2016 11 16 running openbts with the nuand bladerf on ubuntu the definitive guide I hav
  • 以摘要认证(Digest Authentication)方式伪登录某摄像头

    本文部分摘自ASP NET Web API xff08 三 xff09 xff1a 安全验证之使用摘要认证 digest authentication 密码已知 分析发现 xff0c 该摄像头Web登录采用了Digest Authentic