- 探索
渗透竞赛
时间:2010-12-5 17:23:32 作者:探索 来源:娱乐 查看: 评论:0
内容摘要:凌晨两点,靶机上的flag文件还是红的。我盯着屏幕上那一串base64编码,咖啡杯沿沾着干涸的奶渍——这是第七次尝试了。渗透竞赛不像CTF里那些花哨的web题,它更接近真实的攻防对抗:你面对的是一台配
凌晨两点,渗透竞赛靶机上的渗透竞赛flag文件还是红的。我盯着屏幕上那一串base64编码,渗透竞赛咖啡杯沿沾着干涸的渗透竞赛奶渍——这是第七次尝试了。渗透竞赛不像CTF里那些花哨的渗透竞赛web题,它更接近真实的渗透竞赛攻防对抗:你面对的是一台配置了完整防护体系的机器,从WAF到主机加固,渗透竞赛从日志审计到流量监控,渗透竞赛每一步都像在雷区里跳舞。渗透竞赛 第一关是渗透竞赛信息收集。nmap扫了全端口,渗透竞赛只开了80和443。渗透竞赛常规目录爆破没结果,渗透竞赛wappalyzer显示前端是渗透竞赛React,后端接口藏在/api/v3/后面。渗透竞赛我试着改了改User-Agent,加了X-Forwarded-For头,居然在响应头里看到个奇怪的Set-Cookie字段——`session=eyJhbGciOiJSUzI1NiJ9`。JWT?但RS256的密钥哪那么容易搞到。我盯着那串字符看了半天,突然意识到这是旧版的jwt库,alg参数没做白名单校验。改成none试试?服务器居然回了200,里面藏着个管理后台的入口。 这算是个小突破,但真正的坑在后台。管理页面有个文件上传功能,过滤了.php、.jsp,连.htaccess都拦了。我试着传了个.jpg,发现它把图片内容原样存进了一个叫uploads的目录。然后我注意到URL里有个`?page=view`的参数,后面跟着文件名。报错时暴露了物理路径,还提示`file_get_contents()`函数没做过滤——典型的本地文件包含。我上传了一张带PHP代码的图片,用`page=uploads/shell.jpg%00.php`去截断,居然成功了。那种感觉就像在锁着的门上找到个没上胶的合页。 拿到webshell之后,真正的较量才开始。服务器是Linux,权限是www-data,内核版本老得可以进博物馆。我翻了半天/etc/passwd,发现有个叫backup的用户,家目录里躺着个数据库备份脚本,crontab每五分钟跑一次。脚本用root权限执行,里面调用了mysqldump,但路径写的是相对路径。我往/tmp里放了个假的mysqldump,改成可执行,然后等着cron触发。三分钟后,我的shell收到了一个root反弹。 比赛结束的哨声响起时,我瘫在椅子上。这个flag其实藏在数据库的某个表里,但我根本没去翻——因为拿到root的那一刻,整个系统的权限都归我了。渗透竞赛的魅力不在于你用了多少炫技的0day,而在于你能不能把那些看似不起眼的配置错误、版本漏洞、逻辑缺陷串成一条链子。有时候,最笨的方法反而最有效,比如那个JWT的alg篡改,官方文档里都写了要禁用none,但总有人懒得改。