美文网首页实战系列
一次从ZoomeyeAPI脚本编写到提权的渗透实践

一次从ZoomeyeAPI脚本编写到提权的渗透实践

作者: 池寒 | 来源:发表于2016-08-01 16:09 被阅读662次

    来源:http://bbs.ichunqiu.com/thread-8965-1-1.html?from=ch

    作者:野驴

    首发:i春秋社区

    注明:转载请务必注明i春秋社区(bbs.ichunqiu.com)

    0x01 前言

    又到周末了,野驴的心又骚动了,又想渗透测试了,可是苦于没有目标,殊不知在这个日新月异,技术一日千里的今天,渗透测试在很多方面都已做到工程化,只是大多内部使用,但是互联网的精神就是开放、共享,所以有了zoomeye、censys、shadan等业界搜索神器,为我们确定渗透目标提供了极大的方便,特别是zoomeye,国产自主,方便使用,最近还开放了API,简直就是业界良心(老师,我真的不是在打广告),今天我与大家分享的就是从zoomeyeAPI脚本的编写一直到提权这样一个过程。

    0x02 zoomeyeAPI

    什么?你还不知道什么是zoomeye?你知道吗,你这样容易被老虎拖走,我跟你讲,看这里

    https://www.zoomeye.org/about

    而前期还开放了API,为了节约篇幅,直接给出DOC(点我),zoomeyeAPI流程如下

    下面我们就利用python批量获取目标。(当然,你要先注册账号哦)

    直接上代码,详细说明请看注释。

    [Python]纯文本查看复制代码

    ?

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97# coding: utf-8

    importos

    importrequests

    importjson

    access_token=''

    ip_list=[]

    deflogin():

    """

    输入用户米密码 进行登录操作

    :return: 访问口令 access_token

    """

    user=raw_input('[-] input : username :')

    passwd=raw_input('[-] input : password :')

    data={

    'username': user,

    'password': passwd

    }

    data_encoded=json.dumps(data)# dumps 将 python 对象转换成 json 字符串

    try:

    r=requests.post(url='https://api.zoomeye.org/user/login',data=data_encoded)

    r_decoded=json.loads(r.text)# loads() 将 json 字符串转换成 python 对象

    globalaccess_token

    access_token=r_decoded['access_token']

    exceptException,e:

    print'[-] info : username or password is wrong, please try again '

    exit()

    defsaveStrToFile(file,str):

    """

    将字符串写如文件中

    :return:

    """

    withopen(file,'w') as output:

    output.write(str)

    defsaveListToFile(file,list):

    """

    将列表逐行写如文件中

    :return:

    """

    s='\n'.join(list)

    withopen(file,'w') as output:

    output.write(s)

    defapiTest():

    """

    进行 api 使用测试

    :return:

    """

    page=1

    globalaccess_token

    withopen('access_token.txt','r') asinput:

    access_token=input.read()

    # 将 token 格式化并添加到 HTTP Header 中

    headers={

    'Authorization':'JWT '+access_token,

    }

    # print headers

    while(True):

    try:

    r=requests.get(url='https://api.zoomeye.org/host/search?query="phpmyadmin"&facet=app,os&page='+str(page),

    headers=headers)

    r_decoded=json.loads(r.text)

    # print r_decoded

    # print r_decoded['total']

    forxinr_decoded['matches']:

    printx['ip']

    ip_list.append(x['ip'])

    print'[-] info : count '+str(page*10)

    exceptException,e:

    # 若搜索请求超过 API 允许的最大条目限制 或者 全部搜索结束,则终止请求

    ifstr(e.message)=='matches':

    print'[-] info : account was break, excceeding the max limitations'

    break

    else:

    print'[-] info : '+str(e.message)

    else:

    ifpage==10:

    break

    page+=1

    defmain():

    # 访问口令文件不存在则进行登录操作

    ifnotos.path.isfile('access_token.txt'):

    print'[-] info : access_token file is not exist, please login'

    login()

    saveStrToFile('access_token.txt',access_token)

    apiTest()

    saveListToFile('ip_list.txt',ip_list)

    if__name__=='__main__':

    main()

    这里我重点说一下第65行,因为我们进行的是主机搜索,所以请求的接口为

    [AppleScript]纯文本查看复制代码

    ?

    1

    https://api.zoomeye.org/host/search?query="your sring"&facet=app,os&page=

    如果进行web搜索,请求接口为

    [AppleScript]纯文本查看复制代码

    ?

    1

    https://api.zoomeye.org/web/search?query="port:21"&page=

    Query为要搜索的关键字。

    好了,zoomeeyeAPI工具打造好了,我们来搜索什么目标呢?就搜索个phpmyadmin吧,说不定有弱口令呢,多说无益,行动。在65行query处,把“your string”替换为phpmyadmin。

    [AppleScript]纯文本查看复制代码

    ?

    1

    Python zoomAPI2.py

    运行后,就会不断返回符合要求的主机地址了,搜索完毕后,会在当前目录下生成你的access_token文件access_token.txt,方便下次调用,以及搜索结果文件ip_list.txt。妈妈再也不用担心我没有目标了。哪里不会搜哪里,so easy!

    0x03 渗透目标

    0x031 信息搜集

    有了目标主机后,大家就可以尽情发挥了。这里我找到一个目标,大概是这个样子的

    大家可以看到,有很多信息。我们点backups进去看看,真是意想不到的收获,数据库备份

    表结构、用户名、密码等信息应有尽有,密码还是明文存储。可它用在哪呢?我们再点helpdesk_central,啊哈!登录界面出来了,可这helpdesk_central是个什么东东?问度娘

    原来是控制台,用刚才获得的用户名密码尝试登录,成功了,幸福来得就是这么突然,还是管理员……

    看到后边有个邮箱,看看这个管理系统属于什么组织,搞清楚对手是谁?

    再看看DNS记录,尝试输入域名

    原来是一家南非的一家互联网厂商

    0x032 getshell

    这系统转一圈,没发现可以getshell的地方,停下来,出去喝妹子约会,休息是为了更好的开始。回去以后继续,看看phpinfo吧,中规中矩,win系统,有web绝对路径,为getshell打下了基础。

    再看看phpmyadmin吧,Duang!!!竟然是空口令

    查看权限,我的天哪(岳云鹏表情)!是root权限,幸福来的太突然。那还等什么?绝对路径都有了,写文件吧

    成功getshell,发现了很多敏感资料,还发现了前辈的足迹。

    0x033 提权

    看看PHP是什么权限吧,DuangDuang!!竟然是system,到目前为止,形势一片大好。

    来建个用户吧,成功了

    远程一下,可惜要证书,失败了,也是,总不能太顺利。本来想上MSF的,可没有公网服务器,不太方便,对方还是内网,就此打住吧。有机会再单独写个内网渗透的。

    0x04 后记

    重点在zoomAPI的学习,有了它,大家可以尽情的发挥想象,比如jboss、SSH弱口令等等,后面的渗透大家可能会说,这运气也太好了,各种高权限。我想说,“谁过年不吃顿饺子呢”,呸呸呸,是“运气也是实力的一部分”,重要的还是要思路清晰啦。

    以上

    作者:野驴

    首发:i春秋社区

    注明:转载请务必注明i春秋社区(bbs.ichunqiu.com)

    相关文章

      网友评论

        本文标题:一次从ZoomeyeAPI脚本编写到提权的渗透实践

        本文链接:https://www.haomeiwen.com/subject/uooxsttx.html