ntlm-extract.ntds
次の形式のユーザー名とハッシュを含むラップファイルがあります。domain\username:integer:hash:hash2
たとえば、
somedomain.local\jcricket:5201:0020cfaecd41954fb9c9da8c61ccacd7:0020cfaecd41954fb9c9da8c61ccacd7
LINE[3]/hash2
列のハッシュ値を以下と比較しています。NTLM HIBPデータベース、そして一致するユーザー名を印刷したいのですが、試したすべてがdomain\username
消え続け、読み書き中に失われるかどうかはわかりません。\
これまで私のスクリプトは次のようになります
#!/usr/bin/bash
while read line
do
IFS=':' read -ra "LINE" <<< ${line}
HASH=${LINE[3]}
HASH=${HASH^^}
printf "Checking for %s\n" $HASH
found=(`grep "$HASH" "./pwned-passwords-ntlm-ordered-by-hash-v7.txt"`)
if [ -n $found ]; then
printf "Match on username %s\n" "${LINE[0]}"
fi
done < "ntlm-extract.ntds"
提案に基づいて、最終作業スクリプトは次のとおりです。
#!/usr/bin/bash
numoflines=(`wc -l ntlm-extract.ntds`)
numcomp=0
while IFS= read -r line; do
IFS=: read -ra hashline <<< "${line}"
passhash="${hashline[3]}"
printf "Checking for %s\n" $passhash
printf "Line %d of %d\n" $numcomp $numoflines
numcomp=$((numcomp+1))
found=''
found=(`grep -m 1 -i "$passhash" "./pwned-passwords-ntlm-ordered-by-hash-v7.txt"`)
wait
if [ -z "$found" ]; then
continue
else
printf "found return value is %s\n" "$found"
printf "%s\n" "${hashline[0]}" >> ./hibp-busted.txt
fi
done < "ntlm-extract.ntds"
答え1
あなたは内部だけでなく-r
外部も必要です。先行スペースを明示的に削除したい場合以外は、引用して(おそらく)必要があります。read
read -a
"${line}"
IFS=
while IFS= read -r line; do
IFS=: read -ra LINE <<< "${line}"; printf '%s\n' "${LINE[@]}"
done < ntlm-extract.ntds
somedomain.local\jcricket
5201
0020cfaecd41954fb9c9da8c61ccacd7
0020cfaecd41954fb9c9da8c61ccacd7
LINE
また、変数名をすべて大文字以外の名前に変更することをお勧めします。