00:00
喂啊,能录上那个今天呢,咱们来讲一下这个子域名扫描啊,子域名扫描,子域名扫描这个玩意儿呢,嗯,怎么说呢,也是一个在我们这个正常的这个渗透工作中啊,也是很常用的一个东西啊,在你对它主战的一个资产啊,已经没有什么突破的时候,你就可以去寻找一下他这个子鱼名啊,去找一些他其他的这个呃站啊然后呢,去看一下,那什么是这个子域名呢?啊,我们首先啊来这个,比如说我们输入一下这个百度。啊,这个百度,那默认情况下呢,我们百度是一个什么样的一个域名呢,我们直接来给它拷贝出来啊。
01:00
好,那这个呢,就是我们正常情况下看到百度的一个这个域名对不对啊,那我们一会儿呢,会对这个域名所做一个拆解和解析,那现在呢,我们先来看看啊,它这个结构是怎么样的,然后呢,再来了解什么是子域名啊这是我们今天主要来讲的一个东西,那首先呢,这个域名呢,它分为几个部分,部分部分它就代表着你用的是什么协议,那你像它一般情况下啊,有两种啊,就是你如果是访问网页的情况下,就是HTTP和HTTPS啊,那他们的区别是什么呢?如果是一个HTTP,那就证明你用是HTP议,而HTTPS用的不是TS是什么呢?
02:00
T后呢,还有什么呢?就是我们后边这部分啊,后边这部分首先啊,那么3W这部分就是说什么呢?这个其实就是我们所说的这个子域名部分啊,这就是3W部分,但实际上而是什么呢?这实是你的记录。啊解析记录,什么是解析记录呢?就是你比如说你如果说你买了一台服务器啊,买了一台服务器,那么这时候你肯定有了一个什么东西啊,你买的服务器拥拥有的买的。服务器所拥有的是什么呢?是IP啊,一个IP啊,那你家用网啊,通常情况下呢,它是这个给你配动态IP,但是呢,如果你买的是服务器,它肯定会给你一个这个呃,固定的一个公网IP啊,所以说呢,这个啊也叫公网IP,也叫这个广域网IP啊,就是这么一个东西,那么我们有了一个公网IP,它是一个固定的IP,你才能去访问它,对不对啊,不然的话,你就是动态的的话,你今天访问这个网址和明天访问网址,它这个IP这个乱段乱动肯定是不行的,那么这个时候啊,你就干嘛呢?你就要把一个域名啊解析到一个这个啊IP上部分啊,那同样的是什么呢?比如说啊,你这个有这个常用的这个百度点com,你是百度点百度点CN啊,然后这个百度点。
03:43
Top啊,百度点这个什么这个VIP啊,还有什么百度点这个什么GV啊,这这种的才是什么,这种都是域名啊,它后边的不同的这个结尾呢,代表着不同的意义啊,你比如说我们这个点CN啊,这个CN呢,其实呢,代表的就是中国的这个China,这个这个域名啊,就是代表这是中国的顶级域名,那么这个ne和这个com呢,就比较通用啊,当然他们之间的这个最开始的解释是有点这个区别的啊,比如说它是什么商业机构啊,什么还有一些东西啊会用的,但实际上而现在点。com和点ne呢,都用的比较多,最常用的肯定是点。com,大家最多见到的也是这种什么呢?就是这个政府啊政府,那如果他有这个百点edu呢,通常是什么呢?是学校啊,学校,也就是说你通过它的这个后缀呢,你可以大致上分出来到。
04:43
什么样的一个机构啊,但是有些名字不是特别严谨啊,你像是和com啊,它这个东西呢,你也说不好到底是什么,但是你只要是这种GOEDU啊,那肯定是这个相关的啊,你要是GA这种网站呢,这个都是属于政府的啊,你正常是申请不下来的,你像edu这种呢,它只分配给学校啊,你正常你也申请不下来的,所以说你通过它域名的后缀呢,你也可以知道一定的事情,那么你买的域名是这部分,那前面这个3W是什么东西呢?它实际上就是你的一个解析记录啊,解析记录,那么我们通常情况下呢,解析,解析有很多种方式啊,比如说用一个域名解析,像一个域名,一个域名解析,像这个一个IP这等等等,那么这个时候,比如说我要把这个百度点com解析像一个什么呢?解析像一个IP,那么以嘛录I记录。
05:43
啊,被称为A记录啊,那么这种A记录就是一个域名解析到AP一个IP,那么这个时候啊,你可以干嘛呢?你可以提供一个A记录的一个名字啊,比如说我A记录我填一个3W,那么这个时候啊,你就是干嘛呢?你实际上就是把一个3W点百点com指向了你的IP,那么当别人啊去访问这个3W点百度点com的时候,就可以访问到你的IP了,那么也就是说你们常见到的3W万维网啊,这种实际上只是A记录他自己起的一种名字,但是因为它起的比较早,约定熟成了啊,那么你起一些比较奇怪的东西,其实也是可以解析过去的,比如说如果说你解析一个BBS啊,这个如果说这个数比较大的人应该是知道的,BBS是什么东西呢?解析一个BBS,过去通常情况下它就是一个论坛啊,那或者说你什么,你这个搞一个这个blog啊,这个是什么东西啊,这就是博客。
06:43
对不对啊,这个子名呢,通常情况下呢,代表了一定的功能啊,代表了一定的功能,你像是这种3W呢,通常情况下呢,就是首页啊,就是首页啊官网这类东西,那么像其他的呢,就是有一些这个功能性意义的,但是实际上而言,这个子域名真的要遵守这个规范吗?它不是啊,只是说是随来的,比如说你写一个这个AA点啊点com啊也没你是没任问题的啊,这种记录都是属于A记录,也就是说你的子域名是可以随机填的啊,是可以随机填的,那么我们现在呢,就也就知道了它这个这个整个这个域名的一个意义啊,就是说我们这个分几个部分,首先协议,然后子域名,然后域名啊,就是这么一个概念啊,就是这么一个概念,然后呢,我们这个协议部分还有还影响了什么呢?通常情况下啊,比如说我这儿有一个这个111.111.111.111这么一个域名啊,当然这个肯定是不是这个。
07:43
的域啊,我只是随机写一个,那这个域名,你在这个访问一个网站的时候啊,通常情况下,它其实后边还带一个什么呀,带一个端口号啊,带一个端口号,那么这个端口号啊,决定于访问到它的某一些服务啊,因为我们前面写过这个端口号的一个这个扫描啊,等会哎,我看一下我录上没有,我怎么这个啊,录上了吓我一跳,我们端口括号扫描也见过了啊,就是说我们可能开过一些这个常规的一些这个呃端口啊,都可以知道它是什么服务,那比如说我们如果是一个网站的情况下啊,它通常情况下呢,会有两个这个端口啊,会有两个端口什么呢?就是正常情况下,如果我们走的是HTTP协议啊,那么你访问的就是八零端口啊,那如果说你是这个HTPS协议,通常情况下是443端口啊,那就是这两个端口啊,是我们常情经常用到的什么一个网站的一个这个域名啊,域名这个不是网站的这个访问的时候用到的这个协议的端口号,那比如说如果说啊,你这个正常情况。
08:43
他要访问肯定就是什么呢,肯定就是啊,幺幺幺点啊,什么冒号八零啊,111冒号啊,这个443啊这样访问对不对,那么你解析成这种这种这个呃,域名的时候,实际上也应该这样去问啊,应该这样去。
09:01
但是为什么你正常情况下你看不到这样问呢?因为它这个就的一个作用啊,比如说如果你是一个HT,它实际认就会去问你的这个八零端口,你看没我一点开它就进这个正常主页了啊,带不带八零是没有问题的啊,那如果你是一个HTTPS协议啊,那么这个时候就是什么呢?就是默认去访问它的四三端口啊,也就是说呢,它有一个默认值,所以说呢,你在看的时候好像是没有端口号的,但是实际上它是访问了这个口吧。笑死啥呀。下次一定。啥玩意儿说啥呢?来,让我观察一下什么东西。我不知道啊啊,然后我们接着说啊,这个呢,就是我们这个整个的一个域名的一个解析和它的个协议,以及它大致上这个玩意儿,它是一个什么状态的这么一个,呃,这么一个整个的一个解释啊,然后呢,我们今天呢,是要来做什么呢?做一个子域名的一个挖掘嘛,其实就是3W这部分替换成其他东西啊,那么我们比如说我们现在呢,已知啊,它有一些这个名字,那么我们最常用的这个挖掘手段是什么呢?其实它更依赖于什么呢?依赖于字典,比如说啊,你已知啊,就是大量的这个字典啊,它正常情况下呢,比如说他一般情况是网上找的,很少有人自己去拼字典啊,比如说你已知啊,它有一个AA啊子域名bbb啊子域名VV子域名这种它都是常见的这个子域名,那么你就可以直接啊,全都给它拼接上去,然后去访问它,访问它之后呢,来获取它的一个返回的一个状态码,返回的一个状态码啊状态码这个状态码呢是。
10:59
TP协议的一个状态码啊,然后你根据的状态码可以啊,你有没有成功啊,然后呢,就可以得啊这个这个域名,这个子域名它是否存在,那么我们现在呢,就来查一下它常见的一些这个HTTP的一个这个状态码。
11:19
好,然后我们来看一下啊,通常情况下呢,我们用这个HTC访问啊,它有两种这个最常见的啊,最常用的访问方法,一种是盖的方法,一种是的方法啊,但是这两种方法呢,不影响你的一个状态码的一个获取结果啊好,那么我们来看一下啊,这个APP的状态呢,我们来看一下,比如说最常见的它这个一开头的啊,这这是什么,这个呃什么应当继续访问啊,这是100,然后101呢,是这个已经理解的客户端啊,然后什么什么的,然后呢,我们想要的是什么呢?啊,首先我们来看这个,这个是我们最想要的就是什么呢?就是200状态码,他如果返回了一个状态码200就意味着你的请求已经成功了啊,正常表示最正常最正常的一个状态啊,那如果说他有其他的呢,但是就有一些情况了,比如说202,它就是服务器已经接收了,但是没有处理啊,可能会被拒绝啊,这这类的,那你像是这种二零几的呢,通常情况下呢,还是相对正常的一些东西,那你如果是三零几呢,它就是被。
12:19
重定向了,那如果是四零几的情况下呢,就是连接错误,那如果是五零几呢,它通常是内部错误啊,那那这呢,你看内部错误服服务器的啊,内部错误就是五零几,也就是它的这些状态码,那么我们现在呢,就可以知道了啊,我们如果通过这个get方法或者这个的方法进行访问之后,问的是什么,我们是这个能接受的呢,就是我们啊是这个200是能接受的啊,但是这个其实我们也可以接受,就是这个40403其实也可以接受,就是什么呢?就是服务已经理解了请求,但是拒绝执行,他这个东西是什么意思呢?就是他他确实有,但是他拒绝了你啊,那么这种情况下呢,你也大致上可以知道它是有这个域名的啊,那在但是呢,这个不准啊,最好最好的返回结果还是什么呢?还是以200为返回啊,200为返回是这个最好的一个状态啊,其他的呢,我们就不建议了啊,如果说是这个五零几的,那证明他虽然说有这个服务,但是这个服务可能是存在问题的,其实跟没有有没没有什么太大。
13:19
的区别啊,只有这种这种他理解了啊,但是他不理你,或者说直接返回一个成功的情况下啊,才是最理想的。嗯,那我们现在的理解的它这个状态码,那么我们就开始写这个代码啊,然后对它呢,进行一个操作啊,那我们首先打开我们的一个PR charm。啊,我们新建一个项目。那个有需要那个往期视频啊,什么乱七八糟的这个什么源码工具啊什么的,可以联系咱们那个公屏上的小助理,加入这个咱们的这个群啊,也可以直接加小助理助微信啊。
14:11
好,然后咱们创建一个新的项目创建。创建完事之后呢,我们现在啊,直接把它上面这些乱七八糟的东西啊,给它删掉啊,这都没有用。好,然后呢,我现在呢,就是要开始实现我们刚才说的这个功能呢,首先呢,我们这个里边肯定是具有一定的网络访问的功能啊,那我们比如说我直接啊给他写一个这个PRT,然后呢,我就包含一下我的网络操作的一个库。等一下啊,我回头可能再安装一下啊,Re EQ UE。QESTS,对啊,我安装一下这个库啊,点击安装。
15:16
啊,可以看到啊,它底下在安装啊。诶,今天这安装怎么这么慢。哎,好像安上了。成功安装。还没安完,诶安完了啊,已经成功安装上了啊,那这个我这们这个库就有了啊,有这个库之后呢,我们就开始来实现它的一个内容啊,那首先呢,我们一些常见的这个子域名呢,我们可以给它先写成一个列表啊,然后之后再去给它操作成别的啊,我们可以比如说写入文件什么的啊,那现在呢,我们先给它,呃,作为一个这个列表啊,做一个列表,比如说我们写一个这个s list等于。
16:20
3W啊,然后比如说百度有百度翻译,然后还有什么呢?API。萨的这种啊,有的有的有,有的没有啊,我们就是给他都填上。百科。啊,还有知道好就这些啊,就比如说这些就是我们一些我们已知的一个子域名,然后呢,我们现在呢,要来处理它了啊,我们现在就写一个扫描用的这个函数。
17:06
我们参数呢,就有三个啊,首先第一个参数呢,是它用了什么样的通信协议,是HTTP还是HTTPS啊。第二个呢,就是它的一个这个URL。啊,比如说是这个我们百度点com啊,还是VR top.com啊这种URL,然后第三个呢,就是它的一个子域名的一个列表啊,我们给它进去。啊,别给他起一样名了,我们起一个。呃。At least。啊写习惯了啊,写个画框出来啊不是啊没有画框啊Python,然后呢,我们写一个这个for数循环啊,来直接把它的这个URL的一个信息啊,子域名啊,子域名的一个信息啊,就是比如说sub啊,然后因我们的这个s list,然后每次取出来一个子域名,我们对它呢进行一个拼接啊,拼接成一个完整的一个域名啊,啊就是sub URL啊等于我们的协议加上啊加上什么呢?加上我们一个这个冒号,然后杠杠啊这样的一个东西,然后再加上什么呢?再加上我们取出来的这个萨啊就是我们的紫玉名,再加上什么呢?再加上一个点儿,然后再加上什么,再加上我们后边的这个URL,好,这样呢,我们就得到了一个完整的啊,拼接之后的一个完整的这个URL了,拿到这个完整的URL之后呢,现在呢,我们就可以去访问它啊,但是这里边呢,因为可能会出现问题,所以说呢,我们这。
18:49
导呢,给它加一个异常处理,防止它出现问题啊,然后我们这个URL的一个返回,我们用我们刚才的这个网络库啊去访问它啊,两种方法可以用post,也可以用get啊,我们这用get,然后呢,我们把它的这个要访问的这个域名啊,我们给它填进去,填进去之后呢,第二个呢,你可以填也可以不填,就是什么呢?它有一个超时的一个时间,如果你不填这个超时时间呢,它可能会卡住啊,比如说我这儿呢,填了一个五啊,它就这样的啊,就五之后呢,就可以这个中断这本次啊,然后呢,我接下来判断if啊,我这个ul啊,这个res里边,它是这个返回各种各样的状态,那这里头呢,有一个叫做这个状态码的一个东西,我们就可以判断呢,是不是等于200啊,如果等于200就是符合我们要求的,或者说它这个状态码是不是符是不是等于这个403啊,如果是等于403也是符合我们要求的啊,然后呢,如果说是符合这两种我们要求的东西,我就。
19:49
直接啊,对它进行一个打印啊,首先呢,我们打印一下这个URL是多少,然后呢,我们直接一个冒号,然后对它进行格式化,格式化之后呢,我们把它这个返回的这个code啊,也进行一个这个打印啊,一个状态码进行一个打印啊,这个状态码要不写全了得了。
20:08
啊,状态码啊,然后呢,也是格式化啊,接着呢,我们就给它点format.format呢,首先呢,是这个我们的域名啊,那就是它。嗯,等一下啊,完整域名是他好,然后呢,我后边呢,就是它的一个状态码啊,我直接把状态码填进去,好这样就完事了啊,那这个呢,是正常访问的情况下,如果不正常访问呢,我们就做一个异常处理啊,我们就pass啊,不需要任何操作啊,就让他走就完事了,好那现在呢,我们就写完了这个东西,写完这个东西之后呢,我们现在呢,来这个尝试一下。文库啊文库是吧,刚才没看着啊百度文库对啊也可以,然后呢,我们现在呢,来这个直接啊去调用啊,调用它这个东西啊就可以了,但是呢,它前面有三个这个参数,这三个参数呢,我们得自己传一下,比如说啊它的协议那肯定是什么呀,肯定是这个HTPS啊,因为这个是我们的一个百度的,然后呢,URLURLURL呢是什么呢?是这个百度点COM100度点com,然后呢我们。
21:13
Sub list不用啊,List我们直接在这个上面取列表就行了啊,那首先第一个是URL不对,第一个是协议啊,第一个是协议,第二个呢是URL,第三个呢是这个list。好,那么现在呢,我们写完之后呢,我们可以运行尝试一下啊。看到了吗?啊,它就直接出来了啊,比如说3HTPS啊,3W100多点com啊,那状态码是200,然后这个也是200,翻译也是200啊看也是200,百科也是200,知道也200,但是啊,你可以看到没有这个,为什么?因为他的这个百度没有sub.com这个东西啊,所以说呢,就直接干嘛呢,就没显示出来啊,当然你可以把这个错误的也在这显示出来,但是我们这个没有必要嘛,对不对啊,那不对啊,他写个else就给显示出来了啊,不用写这个异常处理里啊,直接写在这儿就行了啊。
22:02
好,然后现在呢,我们这个就已经是这个正常情况下啊,就是去扫描他这个列表列表啊,但是如果说它是一个字典的情况下,你必不可能啊,直接这么写对不对啊,那你这里头得写多少个,比如说我这里头有10万个这个子域名啊,因为我是字典嘛,我是猜的嘛,那么这个时候常见的子域名我都会填进去,那么这个时候你要是一个个从这拼列表拼多长时间啊对不对,那么通常情况下呢,它会怎么样,它会采取一种把它这个东西呢,存在文件里这种形式啊,存在文件里这种形式啊,那比如说我们现在有这么多啊,这么多东西啊,我就可以干嘛呢,我直接啊给它打开。打开一下我的这个路径。打开路径之后呢,我可以在这儿啊,比如说我新建一个这个文件啊,叫什么呢,叫什么都行啊,比如说我叫这个sub点啊,这就属于配置文件啊,然后呢,我们直接右键啊给它打开。
23:01
好,然后呢,我们给他这个换行啊换行。当然了啊,如果是网上找的字典,人家肯定是写好了的啊,不用你这么自己一个一个拼啊,你这么拼也要拼很久啊。好,是这样啊,我们给它存起来啊,对不对啊,存完之后呢,我们就可以给它这个关掉,关掉之后呢,我们回来,回来之后呢,我们新增一个函数啊,这个list我们就不要了,不要之后呢,我们现在怎么写呢?我们现在呢,就要来给它写一个加载文件的这么一个函数啊DeFine load file,实际上就是加载配置文件啊,然后呢,这里边你要传什么呢?要传一个这个文件路径,然后传完文件路径呢之后呢,你现在呢,比如说我现在呢,要有一个这个呃列表嘛,我要返回一个列表嘛。
24:01
我就来一个空列表,然后呢,我用这个上下文管理器啊,把这个open打开,这样呢,我不用close,然后呢,我把这个file啊,我给它传进去,哎,这个提示好烦啊这个东西。啊,然后呢,传进去,传进之后现在我要干什么呢?我肯定是要读啊,对不对啊,我现在只要读我就啊一下,然后呢,我给他起个别名啊,把返回的这个文件句柄啊,给它这个转到这个F里,然后呢,我现在呢就可以用这个for循环啊,然后呢一行一行的啊在我这个F里往外取东西,取完之后呢,我可以用我这个我上面这个列表啊对它呢进行一个增加,增加呢,增加什么呢?增加我这个每一行里的这个文字啊。好,增加完事之后呢,在所有的这个循环都结束之后呢,我就可以干嘛呢,直接return啊,把我的这个列表返回回去啊好,那么现在呢,我就可以用这个load file在这呢进行一个调用啊,然后呢,用这个subli呢接收它返回的一个列表啊然后呢,我在这呢,给它传入我的文件名,那文件名是什么呢?就是我刚才写的那个啊点好,那么现在就可以了啊可以之后呢,我在这啊我下一个断点,然后呢,我以调试模式开始运行啊,我们看一下啊有没有问题,嗯,首先啊,运行起来了啊,运行起来之后到这儿啊,然后我按F8往下走诶。
25:24
等一下啊,我我摁着什么了,怎么直接进来了呢?啊,这怎么有个断点呢,我给他重新来啊。好,然后呢,我这是load file返回,返回之后你可以看到sub list里是不是有了它这个一个一是不是返回了一个列表啊,这就没有问题了,没问题之后呢,我现在呢,直接啊给它运行起来啊,然后运行起来之后呢,你可以看到啊,它就干嘛呢,就是正常的啊正常的啊来这个显示了,但是它这个第一个啊,它这有一个没有换行啊,所以显示的稍微有点歪啊,这个你可以直接加一个换行就行了,你正常运行的时候不会有那个东西的啊,那是Python的有一个调调调试器加载了一下,你看啊,正常情况下它就是这样的啊,那这个东西呢,就可以干嘛呢,我们就可以去网上找一些字典啊来进行做了啊好,那么今天呢就先写到这儿啊,但是这呢,还这个代码呢,还是有一个问题的啊,我们后边呢,这个呃,还会解决这个问题,就是什么呢?就是我们如果说比如说我们的字典啊,因为我们的子域名非常非常多嘛,我们常见的子域名可能也不止这么我们自己写的这么五个十个的,比如说啊,它是一个10万级的子域名字典,那么如果你是一条单线程的啊,你这么去跑它要跑很久对不对,那这个时候要。
26:35
怎么办呢?你可以给他这个切分一下,然后用多线程去访问,然后来去处理它啊,然后往这个,比如说往文件里去追加啊这一种啊,这样处理才是一个正常的处理,但是呢,因为我们的这个Python呢,它这个多线程这个东西呢,比较恶心人啊,它其实是一个伪多线程,所以说处理起来呢,其实也没那么好用啊,后续呢,我们再给他往上写啊,这节课我们先写的是什么,是一个单线程的一个啊子域名扫描,这种情况下呢,基本上处理你一些少量的域名是可以的,但是如果多了的话,它会很慢啊,就这么一个情况,好,然后呢,大家有没有什么问题,如果没有问题的话呢,今天的技术部分啊,就是到这儿了,然后呢,一会儿我要来这个打个小广告什么的,然后呢,没有关注我的点点关注啊,然后呢,这个需要工具的啊,什么课程的这个录播呀什么的啊,领取可以加咱们的这个课程助理。
我来说两句