以摘要认证(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客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • 如何使用 Java 使用 Selenium WebDriver 处理 Chrome 中的身份验证弹出窗口

    我正在尝试在我的新 Webdriver 脚本之一中处理身份验证弹出窗口 我有一个适用于 IE 的可行解决方案 但我在 Chrome 上遇到了困难 IE 就像遵循 此页面 上的建议一样简单 如何使用 Java 使用 Selenium WebD
  • HTTP 基本身份验证 + 访问令牌?

    我正在开发一个 REST API 计划将其与 Web 和 IOS 应用程序一起使用 我打算让这个 API 在一段时间内保持私有 私有意味着我只希望我的 Web 应用程序和 ios 应用程序访问该 API 我已经阅读了许多不同的身份验证方法
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 在 Core Api 上自动登录 Dropbox 帐户,无需登录提示

    我是 iOs 开发新手 正在创建一个使用我自己的 Dropbox 帐户的应用程序 我希望我的应用程序自动登录我的帐户 以便能够修改和添加我的应用程序文件夹中的文件 文件说我应该打电话 DBSession sharedSession link
  • 如何检查用户是否使用 FB SDK 4.0 for Android 登录?

    几天前 我在我的应用程序中实现了 FB Login 今天我发现我实现的大部分内容现在都已弃用 之前我用的是Session查看用户是否已登录 但是 这不适用于新的 SDK 根据他们的文档 我们可以使用AccessToken getCurren
  • 如何防止客户修改 firebase 数据(在没有后端的 Web 应用程序中)?

    我最近开始探索 firebase 作为我的 Angular JS 单页网站的身份验证解决方案 它看起来很完美 然而 从安全角度来看 我不太确定是否将逻辑保留在我的应用程序中的客户端 假设我对在我的网站上注册的客户进行了 isProfileC
  • 使用 JWT Laravel 5 进行身份验证,无需密码

    我正在尝试学习 Laravel 我的目标是能够构建一个 RESTful API 不使用视图或刀片 仅使用 JSON 结果 稍后 AngularJS Web 应用程序和 Cordova 混合移动应用程序将使用此 api 经过一番研究 我倾向于
  • IOS - 委托与通知

    想听听您对以下架构的看法 在我的应用程序中 我有一个处理异步登录的静态类 LoginManager 登录阶段完成后 应用程序应该做出响应并转换到另一个状态 我有2条实施建议 使用委托 import Foundation protocol L
  • 将 ActiveAdmin 用户与现有用户模型合并

    我在项目早期就设置了 ActiveAdmin 并使用了默认值admin users认证模型 从那以后 我使用 Devise 建立了一个单独的用户模型 并意识到合并两个表可能会更明智 这样管理员就可以在 Activeadmin 和站点前端中进
  • 使用 ASP.Net 和 Ajax 的登录页面

    我正在尝试使用 html ajax 和 ASP NET 制作登录页面 数据确实传递给 ajax 函数 但是当我调试 asp 页面时 用户名和密码以 NULL 发送 该代码应该获取用户名和密码 然后返回用户 ID html页面 div Use
  • 身份验证在不应该返回“401(未经授权)”时返回

    我第一次设置身份验证功能 在用户登录后得到了一些意外的结果 一位同事给了我一个具有工作身份验证的应用程序 以模仿我的应用程序 看起来我所做的一切都是正确的 我在前端使用 AngularJS 在后端框架使用 SailsJS 并且护照JS ht
  • 带有访问数据库的登录表单

    try OleDbConnection con new OleDbConnection Provider Microsoft Jet OLEDB 4 0 Data Source C Users jay desai Documents Vis
  • JWT在浏览器中存储在哪里?如何防范CSRF?

    我知道基于 cookie 的身份验证 可以应用 SSL 和 HttpOnly 标志来保护基于 cookie 的身份验证免受 MITM 和 XSS 的影响 然而 需要采取更多特殊措施来保护其免受 CSRF 的影响 它们只是有点复杂 参考 ht
  • OpenID 和 OAuth 之间有什么区别?

    我真的想了解 OpenID 和 OAuth 之间的区别 也许它们是两个完全不同的东西 OpenID http openid net 是关于身份验证 即证明您是谁 OAuth http oauth net 是关于授权的 即授予对功能 数据 等
  • CORS 问题从 React 应用程序 > 节点服务器 > 重定向到 Google OAuth2 身份验证发出 AJAX 请求

    大家好 过去两天我一直在绞尽脑汁研究这个问题 但没有运气 这是我在尝试从我的 React 应用程序 localhost 3000 使用 Google Oauth2 Passport 策略进行身份验证时遇到的错误 我正在 localhost
  • Heroku 上的 Google Vision API 身份验证

    在 Heroku 上验证 Vision API 的最佳 简单方法是什么 在开发中我只使用 vision Google Cloud Vision new project instacult keyfile path to keyfile js
  • POST 请求“访问此资源需要完全身份验证”

    是否有人在尝试使用 POST 请求 oauth token 进行身份验证时遇到错误 访问此资源需要完全身份验证 卷曲命令 curl localhost 85 oauth token d grant type password d clien
  • 使用 C# 以编程方式登录网站

    因此 我一直在网上搜索 试图了解有关如何使用 C 以编程方式登录网站的更多信息 我不想使用网络客户端 我想我想使用 HttpWebRequest 和 HttpWebResponse 之类的东西 但我不知道这些类是如何工作的 我想我正在寻找某
  • .Net Core IdentityServer4 获取经过身份验证的用户

    我试图弄清楚如何使用 Net Core 2 从身份服务器 4 检索登录用户 我的身份验证当前正在工作 我只是想弄清楚如何从 HTTP 上下文中检索声明身份 services AddAuthentication options gt opti

随机推荐

  • 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