admin管理员组

文章数量:1562463

目录

资产梳理

只给出了公司名字

给定了指定的域名列表

给定了指定的ip列表

资产信息收集

端口和服务

网站标题和是否可访问

快速进入后台以及Getshell

进入网站后台

其他漏洞挖掘

权限维持 

后渗透阶段(进入目标服务器后)


前言:这里的红蓝对抗不是军队之间的红蓝对抗,而是网络安全之间的红蓝对抗。因为只有知道敌人如何进攻,我们才能更好的防守。红蓝对抗是一个持续性的过程,敌人的攻击手段不断变换,不断进步,我们的防御也要不断的改进,才能保证网络的安全。红蓝对抗的主要目的在于,提高公司安全成熟度及其检测和响应攻击的能力。公安部每年都会牵头举办 “护网行动” ,对大型国企和重要基础设施公司的网络进行检测,以保证国家基础设施的正常运作。所以近些时候,越来越多的甲方公司举办红蓝对抗活动,邀请白帽子黑客或乙方公司渗透测试人员对其网站进行授权测试攻击,以此来发现其中的漏洞。同时甲方人员自己作为防守方,以此提高防守能力。本人有幸参加过红蓝对抗和护网行动,在第一次红蓝对抗和护网行动中,很是疑惑,没有经验,感觉效率比较低,因为一下子需要面对的不只是一个目标,而是很多个目标,与之前的渗透单个网站不一样,所以导致手忙脚乱,不知道现在应该做哪一步。本文是对项目中遇到过的坑和经验做的一个总结!

红蓝对抗思路

       首先,直接怼靶标系统肯定是很难进去的,而且很多靶标系统根本找不到,或者是非常难找到,只能在内网中访问,这就需要我们寻找突破口进入内网。而且目标这么多,一个团队的话,需要进行分工合作。刚开始,每人选择不同的目标进行突破,一旦找到突破口进入内网,则汇集团队之力一起打内网。打入内网之后,进行内网横向渗透,寻找目标靶机。

资产梳理

      由于每次的红蓝对抗或护网行动给出的资产类型都不一样,所以这里我做个总结。资产梳理的最终目的,就是梳理出资产最终的实际ip地址,端口开放情况,使用的CMS,脚本语言等。

只给出了公司名字

只给定了公司的名字,资产信息需要自己从互联网上收集,只要是与这个公司有关的网站都可。对于这种情况,这就考验我们的信息收集能力了。我们如何能从这个公司名字中尽可能多的找出与他相关的网站?

首先,上搜索引擎搜索这个公司的名字,一般前几个页面中肯定有这个公司的官网地址。我们记录下其域名——> www.xx。
然后接着,我们就是要进行子域名信息收集了,该域下的所有子域肯定都是与该公司有关的。传送门——> 子域名查询 。这样,我们就可以比较全的收集该域的子域了。但是还是有一些相关的网站不是该子域,所以我们可以上Google,利用Google Hacking 进行语法查询:intitle: xx公司  ,然后看其域名,是否是其子域。我们还可以去微信小程序和微信公众号搜索该公司的名字,因为很多公司都有相应的小程序和微信公众号。我们还可以借助其他网站进行查询:

  • FOFA-网络空间安全搜索引擎
  • 微步在线
  • 钟馗之眼
  • 工业和信息化部查询
  • BGP查询
  • 天眼查

我们还可以去站长之家利用whois反查功能,查询该联系人(一般联系人为该公司)注册过的所有子域。因为有的公司虽然官网域名是 www.test,但是有可能他注册过其他的比如 test 的域名。

我们还可以查找ICP备案,因为有的公司备案的域名并不是以自己公司的名义注册的。ICP备案查询地址:ICP备案

经过上面的资产信息的收集,我们已经比较全的收集了与该公司有关的域名资产信息了。但是最终我们还是要将域名转换成ip地址,在将域名转换成ip地址的过程中,我们可能会碰到网站存在CDN的情况。那么,我们如何判断该网站是否存在CDN呢?传送门——> 在线网站CDN检测 。但是如果是有很多的网站,一个一个手动检测肯定很麻烦,所以我写了一个脚本批量检测网站是否存在CDN。

# -*- coding: utf-8 -*-
# python2.7环境
"""
Created on Thu May 23 11:48:34 2019
@author: 小谢
"""
#使用方法:将域名文件保存为 url.txt , 运行完后会自动将没有CDN的保存为 nocdn.txt 文件
####################################批量检测给定域名是否有CDN,并且将没有使用CDN的域名输出#################################################
import dns.resolver
import urllib2
import urlparse
 
class CdnCheck(object):
    def __init__(self, url):
        super(CdnCheck, self).__init__()
        self.cdninfo()
        self.url = url
        selfames = []
        self.headers = []
 
    def get_cnames(self): # get all cname
        furl = urlparse.urlparse(self.url)
        url = furlloc
        # print url
 
        rsv = dns.resolver.Resolver()
        # rsv.nameservers = ['114.114.114.114']
        try:
            answer = dns.resolver.query(url,'CNAME')
        except Exception as e:
            selfames = None
            # print "ERROR: %s" % e
        else:
            cname = [_.to_text() for _ in answer][0]
            selfames.append(cname)
            self.get_cname(cname)
 
    def get_cname(self,cname): # get cname
        try:
            answer = dns.resolver.query(cname,'CNAME')
            cname = [_.to_text() for _ in answer][0]
            selfames.append(cname)
            self.get_cname(cname)
        except dns.resolver.NoAnswer:
            pass
 
    def get_headers(self): # get header
        try:
            resp = urllib2.urlopen(self.url)
        except Exception as e:
            self.headers = None
            # print "ERROR: %s" % e
        else:
            headers = str(resp.headers).lower()
            self.headers = headers
 
    def matched(self, context, *args): # Matching string
        if not isinstance(context, basestring):
            context = str(context)
 
        func = lambda x, y: y in x
        for p

本文标签: 小结经验