Для цикла в BASH, чтобы получить имя пользователя и пароль кортежа
Я пишу простой скрипт на Bash 4.4.23 для демонстрационной атаки по словарю на различные веб-серверы, использующие пароли по умолчанию.
Массивы, содержащие имена пользователей и пароли, объявляются над циклами "for", а именно:
for i in $usernames
do for j in $passwords
do printf '%s ' "${usernames[*]}:${passwords[*]}"
done
done
Код должен возвращать что-то вроде:
root:root root:admin admin:admin admin:root
Но вместо этого он возвращается
root admin:root admin
Какие значения объявлены в массивах (имена пользователей и пароли).
Как я могу достичь того, что я пытаюсь сделать? Кортежи затем должны быть переданы в curl для выполнения атаки по словарю.
2 ответа
У вас есть массивы и элементы, над которыми вы зациклились. Вы перебираете массив. Вы используете переменную цикла внутри цикла.
for i in "${usernames[@]}"
do for j in "${passwords[@]}"
do printf '%s:%s ' "$i" "$j"
done
done
Симптом, который вы видите, потому что $usernames
один относится к первому элементу массива и аналогично для другой переменной массива.
Подстановочный знак не будет работать здесь. Пытаться
for i in $usernames
do for j in $passwords
do printf '%s:%s ' "$i:$j"
done
done