
Библиотека Ruby и CLI для генерации и работы со списками слов.
Wordlist — это Ruby-библиотека и CLI для эффективного чтения, комбинирования, мутации и построения списков слов (wordlist).
.txt списков слов, а также сжатых списков в форматах .gz, .bz2, .xz, .zip и .7z..gz, .bz2, .xz, .zip и .7z.wordlist synopsis.Открыть список слов для чтения:
wordlist = Wordlist.open("passwords.txt")
Открыть сжатый список слов для чтения:
wordlist = Wordlist.open("rockyou.txt.gz")
Перебрать список слов:
wordlist.each do |word|
puts word
end
Создать список литеральных слов в памяти:
words = Wordlist::Words["foo", "bar", "baz"]
Объединить два списка слов (конкатенация):
(wordlist1 + wordlist2).each do |word|
puts word
end
Взять объединение двух списков слов:
(wordlist1 | wordlist2).each do |word|
puts word
end
Вычесть один список слов из другого:
(wordlist1 - wordlist2).each do |word|
puts word
end
Скомбинировать каждое слово из wordlist1 со словами из wordlist2:
(wordlist1 * wordlist2).each do |word|
puts word
end
Скомбинировать список слов с самим собой несколько раз:
(wordslist ** 3).each do |word|
puts word
end
Отфильтровать дубликаты из нескольких списков слов:
(wordlist1 + wordlist2 + wordlist3).uniq.each do |word|
puts word
end
Преобразовать каждое слово в списке в нижний регистр:
wordlist.downcase.each do |word|
puts word
end
Преобразовать каждое слово в списке в ВЕРХНИЙ регистр:
wordlist.upcase.each do |word|
puts word
end
Преобразовать каждое слово в списке в заглавный регистр (первая буква — заглавная):
wordlist.capitalize.each do |word|
puts word
end
Применить String#tr к каждому слову в списке:
wordlist.tr('_','-').each do |word|
puts word
end
Применить String#sub к каждому слову в списке:
wordlist.sub("fish","phish").each do |word|
puts word
end
Применить String#gsub к каждому слову в списке:
wordlist.gsub(/\d+/,"").each do |word|
puts word
end
Выполнить все возможные мутации каждого слова в списке:
wordlist.mutate(/[oae]/, {'o' => '0', 'a' => '@', 'e' => '3'}).each do |word|
puts word
end
# dog
# d0g
# firefox
# fir3fox
# firef0x
# fir3f0x
# ...
Перечислить все возможные варианты регистра каждого слова в списке:
wordlist.mutate_case.each do |word|
puts word
end
# cat
# Cat
# cAt
# caT
# CAt
# CaT
# cAT
# CAT
# ...
Wordlist::Builder.open('path/to/file.txt.gz') do |builder|
# ...
end
Добавить отдельные слова:
builder.add(word)
Добавить массив слов:
builder.append(words)
Разбор текста:
builder.parse(text)
Разбор содержимого файла:
builder.parse_file(path)
zcat/gzip (для чтения/записи списков .gz)bzcat/bzip2 (для чтения/записи списков .bz2)xzcat/xz (для чтения/записи списков .xz)unzip/zip (для чтения/записи списков .zip)7za (для чтения/записи списков .7z)$ gem install wordlist
gem.add_dependency 'wordlist', '~> 1.0'
gem 'wordlist', '~> 1.0'
usage: wordlist { [options] WORDLIST ... | --build WORDLIST [FILE ...] }
Wordlist Reading Options:
-f {txt|gzip|bz2|xz|zip|7zip}, Sets the desired wordlist format
--format
--exec COMMAND Runs the command with each word from the wordlist.
The string "{}" will be replaced with each word.
Wordlist Operations:
-U, --union WORDLIST Unions the wordlist with the other WORDLIST
-I, --intersect WORDLIST Intersects the wordlist with the other WORDLIST
-S, --subtract WORDLIST Subtracts the words from the WORDLIST
-p, --product WORDLIST Combines every word with the other words from WORDLIST
-P, --power NUM Combines every word with the other words from WORDLIST
-u, --unique Filters out duplicate words
Wordlist Modifiers:
-C, --capitalize Capitalize each word
--uppercase, --upcase Converts each word to UPPERCASE
--lowercase, --downcase Converts each word to lowercase
-t, --tr CHARS:REPLACE Translates the characters of each word
-s, --sub PATTERN:SUB Replaces PATTERN with SUB in each word
-g, --gsub PATTERN:SUB Replaces all PATTERNs with SUB in each word
-m, --mutate PATTERN:SUB Performs every possible substitution on each word
-M, --mutate-case Switches the case of each letter in each word
Wordlist Building Options:
-b, --build WORDLIST Builds a wordlist
-a, --[no-]append Appends to the new wordlist instead of overwriting it
-L, --lang LANG The language to expect
--stop-words WORDS... Ignores the stop words
--ignore-words WORDS... Ignore the words
--[no-]digits Allow digits in the middle of words
--special-chars CHARS Allows the given special characters inside of words
--[no-]numbers Parses whole numbers in addition to words
--[no-]acronyms Parses acronyms in addition to words
--[no-]normalize-case Converts all words to lowercase
--[no-]normalize-apostrophes Removes "'s" from words
--[no-]normalize-acronyms Removes the dots from acronyms
General Options:
-V, --version Print the version
-h, --help Print the help output
Examples:
wordlist rockyou.txt.gz
wordlist passwords_short.txt passwords_long.txt
wordlist sport_teams.txt -p beers.txt -p digits.txt
cat *.txt | wordlist --build custom.txt
Чтение списка слов:
$ wordlist rockyou.txt.gz
Чтение нескольких списков слов:
$ wordlist sport_teams.txt beers.txt
Комбинирование каждого слова из одного списка со словами из другого:
$ wordlist sport_teams.txt -p beers.txt -p all_four_digits.txt
coors0000
coors0001
coors0002
coors0003
...
Комбинирование каждого слова из списка с самим собой N раз:
$ wordlist words.txt -P 3
Мутация каждого слова в списке:
$ wordlist passwords.txt -m o:0 -m e:3 -m a:@
dog
d0g
firefox
fir3fox
firef0x
fir3f0x
...
Выполнение команды для каждого слова в списке:
$ wordlist directories.txt --exec "curl -X POST -F 'user=joe&password={}' -o /dev/null -w '%{http_code} {}' https://$TARGET/login"
Построение списка слов из каталога .txt файлов:
$ wordlist --build wordlist.txt dir/*.txt
Построение списка слов из STDIN:
$ cat *.txt | wordlist --build wordlist.txt
user system total real
Wordlist::Builder#parse_text (size=5.4M) 1.943605 0.003809 1.947414 ( 1.955960)
Wordlist::File#each (N=1000) 0.000544 0.000000 0.000544 ( 0.000559)
Wordlist::File#concat (N=1000) 0.001143 0.000000 0.001143 ( 0.001153)
Wordlist::File#subtract (N=1000) 0.001360 0.000000 0.001360 ( 0.001375)
Wordlist::File#product (N=1000) 0.536518 0.005959 0.542477 ( 0.545536)
Wordlist::File#power (N=1000) 0.000015 0.000001 0.000016 ( 0.000014)
Wordlist::File#intersect (N=1000) 0.001389 0.000000 0.001389 ( 0.001407)
Wordlist::File#union (N=1000) 0.001310 0.000000 0.001310 ( 0.001317)
Wordlist::File#uniq (N=1000) 0.000941 0.000000 0.000941 ( 0.000948)
Wordlist::File#tr (N=1000) 0.000725 0.000000 0.000725 ( 0.000736)
Wordlist::File#sub (N=1000) 0.000863 0.000000 0.000863 ( 0.000870)
Wordlist::File#gsub (N=1000) 0.001240 0.000000 0.001240 ( 0.001249)
Wordlist::File#capittalize (N=1000) 0.000821 0.000000 0.000821 ( 0.000828)
Wordlist::File#upcase (N=1000) 0.000760 0.000000 0.000760 ( 0.000769)
Wordlist::File#downcase (N=1000) 0.000544 0.000001 0.000545 ( 0.000545)
Wordlist::File#mutate (N=1000) 0.004656 0.000000 0.004656 ( 0.004692)
Wordlist::File#mutate_case (N=1000) 24.178521 0.000000 24.178521 ( 24.294962)
Copyright (c) 2009-2023 Hal Brodigan
Подробности см. в {file:LICENSE.txt}.