WPScan.com から WordPress 脆弱性情報をJSONで取得する
WordPress の脆弱性情報を収集してみる
wpscan.com から収集してみる
User-agent: * Disallow: /api/ Disallow: /users/ Sitemap: https://sitemap.wpscan.com/sitemap.xml.gz
Plugins
- すべての脆弱性情報をリストとして取得する(Plugins)
PAGE_COUNT=$(curl -Lso- "https://wpscan.com/plugins" -H 'user-agent: ' | xmllint --xpath '//*[@id="__NEXT_DATA__"]/text()' --html - 2>/dev/null | sed -e 's/^<\!\[CDATA\[//' -e 's/\]\]>$//' | jq -r '.props.pageProps.metadata.pageCount') ; for _PAGE_NUMBER_ in $(seq 1 ${PAGE_COUNT}); do curl -Lso- "https://wpscan.com/plugins?page=${_PAGE_NUMBER_}" -H 'user-agent: ' | xmllint --xpath '//*[@id="__NEXT_DATA__"]/text()' --html - 2>/dev/null | sed -e 's/^<\!\[CDATA\[//' -e 's/\]\]>$//' | jq -c '.props.pageProps.data[]' ; done | tee wpvulndb.vlunlist.plugins.$(date '+%F').json
- Plugin毎にまとめた脆弱性情報の取得
for _PLUGIN_ in $(cat wpvulndb.vlunlist.plugins.$(date +%F).json | jq -r '.name' | sort | uniq); do curl -Lso- "https://wpscan.com/plugin/${_PLUGIN_}" -H 'user-agent: ' | xmllint --xpath '//*[@id="__NEXT_DATA__"]/text()' --html - 2>/dev/null | sed -e 's/^<\!\[CDATA\[//' -e 's/\]\]>$//' | jq -c '.props.pageProps' ; done | tee wpvulndb.vlunlist.plugins.groupByPlugin.$(date +%F).json
- 脆弱性情報の詳細をすべて取得する
for _VULN_ID_ in $(cat wpvulndb.vlunlist.plugins.groupByPlugin.$(date +%F).json | jq -r '.data.vulnerabilities[].id' | sort -n | uniq); do curl -Lso- "https://wpscan.com/vulnerability/${_VULN_ID_}" -H 'user-agent: ' | xmllint --xpath '//*[@id="__NEXT_DATA__"]/text()' --html - 2>/dev/null | sed -e 's/^<\!\[CDATA\[//' -e 's/\]\]>$//' | jq -c '.props.pageProps' ; done | tee wpvulndb.vlundetail.plugins.$(date +%F).json
カテゴリ指定
- 例えば、RCE(remote code execution)脆弱性の一覧
curl -Lso- 'https://wpscan.com/search?vuln_type=7&page=2' -H 'user-agent: ' | xmllint --xpath '//*[@id="__NEXT_DATA__"]/text()' --html - 2>/dev/null | sed -e 's/^<\!\[CDATA\[//' -e 's/\]\]>$//' | jq -c '.props.pageProps'
参考
- qiita.com
- xmllint を使って xpathを使ってDOM要素を指定しています。
- platform.kobot.jp