本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/109691608
前面说到 Fiddler 的QuickExec、Filters ,本篇分享 说的是用AutoResponder 来模拟HTTP Basic、Digest认证。
个人博客:https://blog.csdn.net/zyooooxie
AutoResponder
这功能启用后,可以将某一请求的响应结果替换成指定的资源,可以是本地文件,也可以是Fidder内置的各种HTTP响应。
模拟Basic认证
HTTP Basic Authentication 认证过程:
1.客户端向服务器请求数据;
2.服务器认为没有通过认证,向客户端发送401 (WWW-Authenticate: Basic realm=“XXXXXX”);
3.客户端将自动弹出一个登录窗口,要求用户输入用户名和密码;
4.用户输入用户名和密码后,客户端将用户名及密码以BASE64编码加密,发请求(Authorization: Basic xxxxxxxxx);
5.服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证;
第一步:test_url替换为401_AuthDigest.dat
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114130012910.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
第二步:浏览器访问test_url,看到弹窗
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114130019890.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
第三步:手动输入“zyooooxie” 、“csdn” 【用户名:‘zyooooxie’,密码:‘csdn’】
第四步:抓包,查看实际请求
先将用户名及密码以BASE64编码,看看结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114213339122.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
再看下 Fiddler抓包 结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214005645.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214015106.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
如何来请求呢?
A. 用Postman来看下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214628478.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214702888.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214741836.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
回头再看下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114214815332.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
B. 用requests来看下:
res = requests.get('https://www.youxi369.com/gonglue/7814.html', verify=False, auth=('zyooooxie', 'csdn'))
print(res.request.headers['Authorization'])
print(res.headers)
print()
res = requests.get('https://www.youxi369.com/gonglue/7814.html', verify=False, auth=HTTPBasicAuth('zyooooxie', 'csdn'))
print(res.request.headers['Authorization'])
print(res.headers)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114215213577.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114215352799.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
C.用JMeter来看下 【简单】
【为了和前面有区分,使用zyoooo、csdn为账号、密码】
1.使用 HTTP Authorization Manager
2.采样器 代理到我本地的Fiddler
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217093809110.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217093826274.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
看下抓包结果
chrome直接输入 请求的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217094004586.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
JMeter请求的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217094011131.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
D.用JMeter来看下 【复杂】
【为了和前面区别,使用csdn、zyoooo为账号、密码】
1.BeanShell PreProcessor 手动来Base64编码,设置变量
2.使用HTTP Header Manager 手动增加Authorization
3.采样器 代理到我本地的Fiddler
![在这里插入图片描述](https://img-blog.csdnimg.cn/202012171023021.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121710233967.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
看下Debug Sampler:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217102349183.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
查看结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217102417852.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
抓包 结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217102525572.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
浏览器直接请求:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217102624119.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
模拟Digest认证
HTTP Digest Authentication 认证过程:
1.客户端先发送请求;
2.服务器端返回401,提示未认证【服务器产生一个随机数nonce,将这个随机数放在WWW-Authenticate响应头,与服务器支持的认证算法列表,认证的域realm一起发送给客户端】;
3.客户端发现是401响应,弹出认证窗口,让用户输入用户名和密码;
4.客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础,产生response进行反馈;
5.服务器重新计算,对客户端反馈的response进行校验,验证是否匹配;
第一步:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114142718723.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
第二步:
手动输入’csdn’, ‘zyooooxie’【用户名:csdn;密码:zyooooxie】
第三步:
抓包,查看实际请求
A. 服务器返回401 “Unauthorized” 响应代码,并提供认证域(realm),以及一个随机生成的、只使用一次的数值(密码随机数)nonce。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114220201306.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
B. 客户端收到服务器的401(Unauthorized)回复后,使用nonce值,加上username,password, http method, http uri利用MD5(或者服务器指定的其他算法)计算出request-digest,作为repsonse的值。
【客户端发送 响应摘要response=MD5(HA1:nonce:HA2),其中HA1=MD5(username:realm:password), HA2=MD5(method:digestURI)】
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114220208535.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
细致些:
对用户名、认证域(realm)以及密码的合并值计算 MD5 哈希值,结果称为 HA1。
对HTTP方法以及URI的摘要的合并值计算 MD5 哈希值,例如,“GET” 和 “/dir/index.html”,结果称为 HA2。
对 HA1、服务器密码随机数(nonce)、请求计数(nc)、客户端密码随机数(cnonce)、保护质量(qop)以及 HA2 的合并值计算 MD5 哈希值。结果即为客户端提供的 response 值
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114224235595.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
如何来请求呢?
A. 用Postman来看下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114224256147.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114224606496.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114224617474.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
回头再看下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114233025430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
B. 用requests来看下:
res = requests.get('https://www.youxi369.com/gonglue/7814.html', verify=False, auth=HTTPDigestAuth('csdn', 'zyooooxie'))
pprint(res.request.headers['Authorization'])
pprint(res.headers)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114225321258.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
仔细一看,response这个值 和之前的不同呀!!!
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111422573222.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
cnonce 值 不同。
【cnonce:客户端产生的随机数,用于客户端对服务器的认证。由于“中间人”与“恶意服务器”等攻击方式的存在,导致一个特意选择而非随机唯一的nonce值传给客户端用于摘要的计算成为可能,使得“选择性明文攻击”可能奏效,最后用户密码泄露。因此与nonce一样,cnonce可用于增加摘要生成的复杂性,从而增加破解密码的难度,也就保证了对服务端的认证】
那 python MD5 能不能算出来这个response?
import hashlib
realm = "realm@example.com"
nonce = "dcd98b7102dd2f0e8b11d0f600bfb0c093"
opaque = "5ccc069c403ebaf9f0171e9517f40e41"
qop = 'auth'
name = 'csdn'
pwd = 'zyooooxie'
nc = '00000001'
cnonce = "0fdb256a7022a4a8"
uri = '/gonglue/7814.html'
m = hashlib.md5()
new = f'{name}:{realm}:{pwd}'
print('_MD5加密前为 :' + new)
m.update(new.encode(encoding='utf-8'))
H_new = m.hexdigest()
print('_MD5加密后为 :' + H_new)
m2 = hashlib.md5()
new = f'GET:{uri}'
print('___MD5加密前为 :' + new)
m2.update(new.encode(encoding='utf-8'))
H2_new = m2.hexdigest()
print('___MD5加密后为 :' + H2_new)
response = hashlib.md5('{}:{}:{}:{}:{}:{}'.format(H_new, nonce, nc, cnonce, qop, H2_new).encode()).hexdigest()
print('response值:', response)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114230224185.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
cnonce=“98501cd980670b7f”,再算下response值: 61cca301298db8ff321c87d5b1ee479f
和 之前的 Digest username=“csdn”, realm=“realm@example.com”, nonce=“dcd98b7102dd2f0e8b11d0f600bfb0c093”, uri="/gonglue/7814.html", response=“61cca301298db8ff321c87d5b1ee479f”, opaque=“5ccc069c403ebaf9f0171e9517f40e41”, qop=“auth”, nc=00000001, cnonce=“98501cd980670b7f” 结果一致;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201114230808567.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
C.用JMeter来看下: 【简单】
【为了和前面有区分,使用csdnzyoooo、csdn为账号、密码】
1.使用 HTTP Authorization Manager
2.采样器 代理到我本地的Fiddler
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217104639321.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
请求头:留意字段cnonce + response
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217105250886.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
实际响应:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217105330908.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
看下 我用浏览器请求的:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217105428459.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
对比:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217105755414.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
如同前面遇到的一样,cnonce值的不同,导致response值不同。
D.用JMeter来看下: 【复杂】 【待更新】
很抱歉,我的Java水平是幼稚园级别,BeanShell PreProcessor 写代码处理 还得等等。
这篇 Basic认证、Digest认证是我用Fiddler来模拟的,所以大概看看就好;实际情况,真遇到的时候 再分享吧。
字段校验:推荐使用Postman,更 ‘高级‘;学习与理解:推荐使用JMeter,整个流程都有;傻瓜式:requests,当之无愧;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217111123237.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5b29vb3hpZQ==,size_16,color_FFFFFF,t_70#pic_center)
zyooooxie
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)