MENU

NFS在内网渗透中的妙用

April 14, 2016 • Security

在云的时代,内网只要日下一台重要的就掌握了所有,

NFS是 一个非常流行的网络操作系统,现在大多数的UNIX用的是其第三版,NFS会经常用到,用于在网络上共享存储。它依赖与RPC服务。允许客户 主机远程访问其文件系统的服务器都要小心,因为NFS的配置不当也会导致被攻击。

搞下一台内网机之后由于内网经常开启nfs服务,我们可以根据IP来遍历C段,然判断NFS端口是否开启,最后就是探测目录,检测NFS共享的目录

咱们先写一个py小脚本来遍历C段

import socket
 
#获取本机的IP
getip = socket.gethostbyname(socket.gethostname())
#得到192.168.1.1这样的192.168.1
ip_prefix = '.'.join(getip.split('.')[:-1])
#然后从1-255中随机选取
for i in range(1,256):
    ip = '%s.%s'%(ip_prefix,i)
    print ip

111306i9284j26up9w82jj.png

得到IP之后,下一步就是探测端口,我们可以利用socket模块

>>> import socket
>>> port = '2049'
>>> ip_str = '192.xxx.xxx.xx'
>>> address=(str(ip_str),int(port))
>>> cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> status = cs.connect_ex((address))
>>> print status
0
>>>

111434r4azlc58vck5xnc9.png

然后利用os模块去调用系统命令执行命令来扫描NFS的共享目录

也就是showmount -e ip

Python 2.7 (r27:82500, Aug 19 2012, 13:02:30)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> ip_str = '10.xxx.xx.xxx'
>>> cmd = ["showmount", "-e",ip_str]
>>> output = os.popen(" ".join(cmd)).readlines()
>>> print output
['Export list for 10.xxx.xxx.xxx:\n', '/home/data/news/content 10.10.10.27,10.10.10.25,10.10.10.24,10.10.10.23\n']

3111617gkx0kt0h0i0yysio.png

组合成自动化脚本,也就是这样:

#-*- coding: utf-8 -*-
#python2.7.x  ip_scaner.py
  
'''
内网经常开启nfs服务,检测NSF是否开启
并且检测NFS共享的目录并列出来
'''
 
import socket
import sys
import os
import time
import thread
  
def scan(ip_str):
    '''
    检测扫描端口是否开启
    如果有开启,尝试使用showmount -e去检测
    '''
    port = '2049'
    cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    address=(str(ip_str),int(port))
    status = cs.connect_ex((address))
    #若返回的结果为0表示端口开启
    if(status == 0):
        print "%s may have nfs service" %(ip_str)
        cmd = ["showmount", "-e",ip_str]
        output = os.popen(" ".join(cmd)).readlines()
        print output
    cs.close()
     
def find_ip(ip_prefix):
    '''
    给出当前的192.168.1 ,然后扫描整个段所有地址
    '''
    for i in range(1,256):
        ip = '%s.%s'%(ip_prefix,i)
        thread.start_new_thread(scan, (ip,))
        time.sleep(0.1)
      
if __name__ == "__main__":
    commandargs = sys.argv[1:]
    args = "".join(commandargs)    
    
    ip_prefix = '.'.join(args.split('.')[:-1])
    find_ip(ip_prefix)

效果如下:

4111816tb5o1oz5o7g98wi8.png

搞定共享...

手上没有案例演示给大家,只是提供一种思路、后面如果遇到的话会分享的

Archives QR Code
QR Code for this page
Tipping QR Code