WPScan.com から WordPress 脆弱性情報をJSONで取得する

WordPress脆弱性情報を収集してみる

wpscan.com から収集してみる

User-agent: *
Disallow: /api/
Disallow: /users/
Sitemap: https://sitemap.wpscan.com/sitemap.xml.gz

Plugins

  1. すべての脆弱性情報をリストとして取得する(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
  2. 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
  3. 脆弱性情報の詳細をすべて取得する
    • 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'

参考