当前位置:首页 > 综合

渗透三级模拟实操

拿到“渗透三级”模拟实操的渗透靶机IP时,我第一反应是拟实翻日志。别急着上扫描器,渗透先看目标开了什么服务、拟实跑了多久,渗透比盲目扫端口有用得多。拟实那次靶机是渗透台Linux,SSH版本老得掉牙,拟实HTTP服务挂着一个叫“upload.php”的渗透上传点——这玩意儿在真实环境里十有八九是突破口。

我习惯先手动测几个常见路径。拟实`/admin`、渗透`/backup`、拟实`/phpinfo.php`,渗透全404。拟实但`/upload.php`返回200,渗透页面里有个文件选择框,没做任何前端校验。直接传个普通图片上去,返回路径是`/uploads/1620xxx.jpg`。这说明上传目录可访问,而且文件名没被重命名——典型的低门槛入口。

接下来试传PHP文件。第一次传`test.php`,内容就一行`ok`。服务端返回“只允许图片格式”。抓包看请求,Content-Type是`image/jpeg`,但文件扩展名是`.php`。服务端只检查了MIME类型,没查后缀。把文件名改成`test.php.jpg`,Content-Type保持`image/jpeg`,上传成功。访问`/uploads/test.php.jpg`,浏览器直接下载文件,没解析。说明Apache没把`.jpg`当PHP执行。

换个思路。试传`.phtml`、`.php5`、`.pht`,全被拦。但`.php.`(末尾带点)传上去了,访问时Linux把末尾点忽略了,实际解析为`.php`。返回“ok”。拿到shell了。

这只是第一步。上传的webshell权限是`www-data`,能读`/etc/passwd`,但写不了`/root`。找提权路径:`uname -a`显示内核3.13.0,Ubuntu 14.04。翻`/home`目录,有个用户`deploy`,家目录下有个`.bash_history`,里面记录了一条命令:`mysql -u root -pP@ssw0rd123 -e "select * from users"`。密码直接写在历史里。

用这个密码试`su deploy`,成功。`deploy`在`sudoers`里,可以无密码执行`/usr/bin/find`。经典提权:`sudo find / -exec /bin/sh \; -quit`。直接拿到root。

整个过程没用任何自动化工具。nmap扫端口只花了十秒,剩下的全是手动测。真实渗透里,信息收集比漏洞利用重要得多。那个`.bash_history`里的密码,比任何0day都管用。靶机设计者故意留了这条路径,但很多人一上来就开`sqlmap`扫注入,反而绕远了。

还有个小细节:上传目录的权限是`777`,但`/uploads`的父目录`/var/www`是`755`。这意味着只能往`uploads`里写,不能跨目录。如果当时传了个`.htaccess`上去,把`.jpg`解析成PHP,也能成。但靶机没开`AllowOverride`,这条路堵死了。所以实际渗透里,环境配置比漏洞本身更决定成败。

最后清理痕迹:删掉上传的webshell,清空`.bash_history`,把`/var/log/auth.log`里自己的IP记录抹掉。模拟实操不要求做这步,但真实场景里,留痕等于暴露。我见过有人拿shell后忘了删`/tmp`里的提权脚本,第二天就被运维发现了。

渗透三级考的不是工具熟练度,是观察力和耐心。靶机里每个文件、每条历史命令、每个权限位,都可能是入口。别急着提权,先想想“如果我是运维,我会把密码藏哪”。答案往往就在眼皮底下。

分享到: