安全攻防实战丨如何预防利用中间人攻击进行小程序刷分

这篇具有很好参考价值的文章主要介绍了安全攻防实战丨如何预防利用中间人攻击进行小程序刷分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《【安全攻防】深入浅出实战系列专题-利用中间人攻击进行小程序刷分》,作者: MDKing 。

1. 中间人攻击定义

中间人攻击(Man-in-the-middle attack,简称MITM)是攻击者在进行网络通信的双方中间,分别与两端建立独立的联系,并进行数据嗅探甚至篡改,而通信的双方却对中间人毫不知情,认为自己是直接在与对端通信。

随着计算机通信网技术的不断发展,MITM攻击也越来越多样化。最初,攻击者只要将网卡设为混杂模式,伪装成代理服务器监听特定的流量就可以实现攻击,这是因为很多通信协议都是以明文来进行传输的,如HTTP、FTP、Telnet等。后来,随着交换机代替集线器,简单的嗅探攻击已经不能成功,必须先进行ARP欺骗才行。

2. 常见中间人攻击类型

ARP欺骗:ARP欺骗(ARP Spoofing)是一种局域网攻击方式,攻击者通过伪造虚假的ARP响应包,将自己的MAC地址伪装成网络中其他主机的MAC地址,从而欺骗其他主机发送数据给攻击者,达到中间人攻击的目的。简单讲就是在局域网内篡改ip与MAC地址的映射关系,源主机通过指定ip访问目标主机,这样就在不知情的情况下把消息发到了攻击者的主机上。

DNS欺骗:DNS欺骗(DNS Spoofing)也叫做DNS缓存投毒攻击(DNS Cache Poisoning),攻击者通过入侵DNS服务器、控制路由器等方法把受害者要访问的目标机器域名对应的IP篡改为攻击者所控制机器的ip(篡改域名与ip的映射关系),源主机通过指定域名访问目标主机,这样就在不知情的情况下把消息发到了攻击者的主机上。

WiFi热点攻击:攻击者创建一个与本地免费WiFi同名或相近名称的 WiFi 热点,当受害者连接到该热点时,攻击者可以拦截所有通过该热点传输的数据,包括用户名、密码等敏感信息。本质上是混淆视线,让人误识别wifi。

网站钓鱼:攻击者通过构建一个域名、页面与正常网站很类似的虚构网站,诱导受害者进入虚假网站后,输入敏感信息,攻击者通过截获敏感的信息做进一步的动作。本质上是混淆视线,让人误识别网站。

代理服务器:受害者可能由于多种原始使用了代理服务器,比如突破服务器对某些IP的屏蔽访问一些禁止访问的网站、害怕自己IP暴露被对方入侵而寻找层层代理把自己包裹起来等。如果代理服务器被不怀好意的攻击者做了手脚,就可以非常轻易的实施中间人攻击的各种手段。

3. 中间人攻击的危害类型

信息泄露(流量监控):中间人攻击可以截获分析受害者与服务器之间的所有通信信息,通过流量分析获取到用户的隐私数据或者对于攻击者有用的信息。

身份窃取(会话劫持):攻击者可以通过截获受害者与服务器间的cookie,拥有了cookie,就拥有了合法的会话令牌,可以已合法用户的身份对服务器进行相关操作。

通信篡改:受害者与服务器间的请求、响应报文都经过攻击者,攻击者在一去一回的过程中均能对交互数据进行篡改,即请求报文篡改、响应报文篡改。

网络服务瘫痪:攻击者可以干扰正常通信流量,造成网络服务无法正常使用或系统崩溃。

4. 预防中间人攻击的方法

使用加密通信协议: 通过使用HTTPS等加密通信协议,能够有效防止中间人窃取用户敏感信息。

验证证书可信性: 在进行网上购物、在线银行等操作时,要注意校验网站证书的合法性,确保数据传输的安全性。

防范ARP欺骗: 使用网络工具或防火墙等技术手段,监控网络中的ARP请求和响应,发现异常情况及时处理。

使用虚拟专用网络(VPN): VPN能够在公共网络上建立加密连接,使得通信内容无法被中间人轻易截获和篡改。

保持软件更新: 及时安装操作系统、浏览器和应用程序的安全补丁,以修复潜在的安全漏洞。

5. 中间人攻击的利用实战

中间人攻击,我们除了要当心被攻击者攻击之外,我们自己利用中间人攻击的思想与技术也可以做一些“特殊”的事情。比如小程序游戏的辅助。本章节中我们借助mitmproxy中间人代理工具进行实战演练,实现小程序的客户端与服务器间交互数据的嗅探与篡改。

mitmproxy 是一款 Python 语言开发的开源中间人代理神器,支持 SSL,支持透明代理、反向代理,支持流量录制回放,支持自定义脚本等。功能上同 Windows中的 Fiddler 有些类似。

5.1 window下安装mitmproxy

首先安装python环境,然后用管理员身份在命令行中运行pip3 install mitmproxy

完成后,系统将拥有 mitmproxy、mitmdump、mitmweb 三个命令,我们可以拿 mitmdump 测试一下安装是否成功,执行:mitmdump --version

5.2 安装CA证书

想要截获https请求,就需要将mitmproxy的CA证书添加到受信任的根证书颁发机构。

在初次运行mitmproxy(或者mitmdump、mitmweb)之后,会在C盘当前登录用户的.mitmproxy目录下面生成证书
 
双击mitmproxy-ca-cert.cer -> 安装证书 -> 当前用户 -> 将所有的证书都放入下列存储 -> 受信任的根证书颁发机构

5.3 启动mitmproxy

在完成 mitmproxy 的安装之后,mitm 提供的三个命令。要启动 mitmproxy, 用 mitmproxy、mitmdump、mitmweb 这三个命令中的任意一个即可,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。

 
mitmproxy 会提供一个在终端下的图形界面,具有修改请求和响应,流量重放等功能,具体操作方式有点 vim 的风格
mitmdump 可设定规则保存或重放请求和响应,mitmdump 的特点是支持 inline 脚本,由于拥有可以修改 request 和 response 中每一个细节的能力,批量测试,劫持等都可以轻松实现
mitmweb 提供的一个简单 web 界面,简单实用,初学者或者对终端命令行不熟悉的可以用 mitmweb 界面

我们通过mitmweb为例,如下图会启动8080端口的代理服务器,以及8081端口的web界面。

5.4 设置代理

搜索->代理服务器设置,将127.0.0.1 8080填写进去,打开代理

再访问网站后,在mitmweb界面上就能看到被拦截的请求了

5.5 编写并执行自定义python脚本

接下来我们如果相对拦截的请求响应包做相关处理的话,就可以通过自定义python脚本的方式实现。

脚本编写关键点:

 
HTTP flow流程 一个完整的 HTTP flow 会依次触发 requestheaders、request、responseheaders 和 response,我们可以针对相关事件方法执行自定义逻辑脚本。
Event 事件 事件里面有3个事件是比较重要的
start 启动的时候被调用,会替换当前的插件,可以用此事件注册过滤器
request(flow) 当发送请求时,被调用
response(flow) 当接收到响应时被调用
关键数据结构 mitmproxy.models.http.HTTPRequest
mitmproxy.models.http.HTTPResponse
mitmproxy.models.http.HTTPFlow
API文档参考 https://docs.mitmproxy.org/stable

例如:

addHeader.py脚本为拦截的请求添加了SAYHELLO header
 
def response(flow):
    flow.response.headers["SAYHELLO"] = "Hello everyone!"

执行命令mitmweb -s addHeader.py

查看拦截的请求的response中,多了名为SAYHELLO的header

5.6 实战一:头脑王者即时显示答案

该案例引用自:使用 mitmproxy + python 做拦截代理

#!/usr/bin/env python
#coding=utf-8
import sys
import json
from mitmproxy import flowfilter
from pymongo import MongoClient
reload(sys)
sys.setdefaultencoding('utf-8')
 
'''
头脑王者即时显示答案脚本
'''
 
class TNWZ:
    '''
    从抓包可以看到 问题包的链接最后是 findQuiz
    '''
    def __init__(self):
        #添加一个过滤器,只处理问题包
        self.filter = flowfilter.parse('~u findQuiz')
        #连接答案数据库
        self.conn = MongoClient('localhost', 27017)
        self.db = self.conn.tnwz
        self.answer_set = self.db.quizzes
 
    def request(self, flow):
        '''
        演示request事件效果, 请求的时候输出提示
        :param flow: 
        :return: 
        '''
        if flowfilter.match(self.filter,flow):
            print(u'准备请求答案')
 
    def responseheaders(self, flow):
         '''
        演示responseheaders事件效果, 添加头信息
        :param flow: 
        :return: 
        '''
        if flowfilter.match(self.filter, flow):
            flow.response.headers['Cache-Control'] = 'no-cache'
            flow.response.headers['Pragma'] = 'no-cache'
 
    def response(self, flow):
        '''
        HTTPEvent 下面所有事件参数都是 flow 类型 HTTPFlow
        可以在API下面查到 HTTPFlow, 下面有一个属性response 类型 TTPResponse
        HTTPResponse 有个属性为 content 就是response在内容,更多属性可以查看 文档
        :param flow: 
        :return: 
        '''
        if flowfilter.match(self.filter, flow):
            #匹配上后证明抓到的是问题了, 查答案
            data = flow.response.content
            quiz = json.loads(data)
            #获取问题
            question = quiz['quiz']
            print(question)
 
            #获取答案
            answer = self.answer_set.find_one({"quiz":question})
            if answer is None:
                print('no answer')
            else:
                answerIndex = int(answer['answer'])-1
                options = answer['options']
                print(options[answerIndex])
 
#这里简单演示下start事件
def start():
    return TNWZ()

执行脚本后,打开小程序,看到请求已经被做了相应修改,并且在控制台输出了答案

5.7 实战二:某合成类小游戏篡改数据实现物品复制

def response(self, flow):
        if flow.request.host == 'game.xxx.com' and flow.request.path == '/xxx/reqLogin':
            ctx.log.info("reqLogin response %d flows" % self.num)
            print("content:" + flow.response.text)
            jsonObj = json.loads(flow.response.text)
            dataObj = json.loads(jsonObj['data']['data'])
            print("TodayFirstLaunch:" + str(dataObj["TodayFirstLaunch"]))

            # copy thing
            if (dataObj["GameBoardData"]["itemData"][0][0] is not None and dataObj["GameBoardData"]["itemData"][0][0]["id"] == "F0L7" 
                and dataObj["GameBoardData"]["itemData"][0][6] is not None and dataObj["GameBoardData"]["itemData"][0][6]["id"] == "F0L7"
                and dataObj["GameBoardData"]["itemData"][1][0] is not None and dataObj["GameBoardData"]["itemData"][2][0] is None):
                print("Copy thing")
                dataObj["GameBoardData"]["itemData"][2][0] = dataObj["GameBoardData"]["itemData"][1][0];
                jsonObj['data']['data'] = json.dumps(dataObj)
                flow.response.text = json.dumps(jsonObj)
 
上述关键代码做的事情是,当棋盘上出现某一特征时(左上角、右上角为指定特殊棋子时),将棋盘第二行第一列的棋子复制一份出来。

实现逻辑为,拦截该游戏登录请求的响应消息,将内容按照一定逻辑进行篡改,客户端收到篡改后的数据,将对应游戏物品展示在客户端界面上,下一次触发数据同步到服务器时,就成功将篡改数据归档到云端服务器。

5.8 实战启示

通过头脑王者、某合成类小游戏的中间人攻击,让我们认识到,设计在公网间交互的产品时,在请求、响应报文里不要包含多余的关键信息。关键内容要做签名校验。

启示一:头脑王者的response中把正确问题的序号都一并发给客户端了。可以修改为展示题目、验证答案分成两个请求,避免直接暴露答案序号等关键信息。

启示二:某合成类小游戏的服务器、客户端之间的关键信息交互,比如上传下载游戏进度数据,都要对数据体做签名校验,否则,内容本身可以被轻易的拦截、篡改。该合成类小游戏仅对请求数据做了签名校验,未对响应报文做签名校验。就产生了响应报文可以被利用的漏洞。

点击关注,第一时间了解华为云新鲜技术~文章来源地址https://www.toymoban.com/news/detail-711357.html

到了这里,关于安全攻防实战丨如何预防利用中间人攻击进行小程序刷分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTTPS——HTTPS如何加密数据,“证书“为什么可以应对 “中间人攻击“

    本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下! HTTPS 也是一个应用层协议, 是在 HTTP 协议的基础上引入了一个加

    2024年02月15日
    浏览(43)
  • HTTPS 中间人攻击

    通讯过程 客户端——中间人——服务器 过程如下 服务器向客户端发送公钥 攻击者截获公钥,保留在自己手上 然后攻击者自己生成一个【伪造的】公钥,发给客户端 客户端收到【伪造的】公钥后,利用【伪造的】公钥生成加密 hash 值发给服务器 攻击者截获加密 hash 值,用自

    2024年02月11日
    浏览(28)
  • 中间人攻击

    是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相

    2024年02月04日
    浏览(28)
  • 浅谈HTTP 和 HTTPS (中间人问题)

    前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的 改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了 加密 公钥 + 明文 = 密文 密文 + 公钥 = 明文 举个例子就好比 小区邮箱 提供一把锁(公钥,是给邮递员的) ,和一把钥匙(私钥

    2024年03月20日
    浏览(46)
  • 使用中间人攻击的arp欺骗教程

    中间人攻击是网络路由器上最常尝试的攻击之一。它们主要用于获取登录凭据或个人信息、监视受害者或破坏通信或损坏数据。 中间人攻击是指攻击者拦截双方之间的来回消息流以更改消息或只是读取消息。 在本文中,我们将了解如何在连接到与我们相同的WiFi网络上的设备

    2024年02月14日
    浏览(26)
  • HTTPS连接过程中的中间人攻击

    https协议就是http+ssl/tls协议,如下图所示为其连接过程: HTTPS连接的整个工程如下: https请求:客户端向服务端发送https请求; 生成公钥和私钥:服务端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容; 返回公钥:

    2024年02月15日
    浏览(112)
  • 【每天学习一点新知识】中间人攻击是什么

    目录 中间人攻击介绍  中间人攻击原理 1. ARP欺骗 2. DNS欺骗 防御方法   中间人攻击(man-in-the-middle attack, abbreviated to MITM),顾名思义,就是攻击者躲在通信双方之间,窃听甚至篡改通信信息,而这个攻击是不可见的,通信双方并不知道消息已经被截获甚至篡改了。 这个图片很

    2024年02月09日
    浏览(36)
  • Android 14 rook替代Postern进行中间人抓包

    先来解释下,为什么用Postern而不用fd,fd属于代理抓包。Postern属于是模拟出来一张虚拟网卡抓包。性质不一样,所以害怕大哥问我。我就先放在这里 在Android 14及之前的版本中,常用的中间人抓包方案是使用Charles结合Postern VPN。然而,在Android 14上,直接安装Postern软件可能无法

    2024年02月06日
    浏览(34)
  • 使用Java实现HTTP代理服务器:为你当个“中间人“

    在互联网世界里,代理服务器就像是一个\\\"中间人\\\",帮助客户端和服务器之间传递信息。那么,如果你想用Java实现一个代理服务器,该怎么做呢?下面就带你走进这个有趣的\\\"中间人\\\"世界! 首先,我们需要了解代理服务器的工作原理。简单来说,当一个客户端向代理服务器发

    2024年02月19日
    浏览(46)
  • 实战攻防Demo|如何轻松形成自动响应的安全闭环?

    从威胁阻断角度来说,拦住黑客的第一步攻击尤为重要。 同样,对于攻击者来说,第一步攻击的成本也往往是最高的。日常工作中人们会遇到很多类型的攻击,但暴力破解或者撞库攻击往往被作为黑客的第一步攻击。这主要源于其技术含量低,但自动化程度高,对于攻击者来

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包