Для цикла в 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
Другие вопросы по тегам