0
点赞
收藏
分享

微信扫一扫

网络安全之信息收集(二)

独兜曲 2022-02-26 阅读 103

信息收集

壹.CDN绕过

1.判断网站是否存在cdn技术

超级ping:如果返回IP不唯一,则说明存在cdn服务器

2.常见的cdn绕过技术

2.1子域名查询

ps:

一般情况下,www.XXX.com和XXX.com指向的是同一个DNS服务器,进入XXX.com会自动跳转到www.XXX.com,所以XXX.com不需要大流量,不用做CDN。如果加www检测不出来,可以试着去掉,或许就可以得到真实IP了

2.2邮件服务查询

邮件服务查询很多公司内部都会有一个邮箱服务器,这种邮箱服务器大部分是不会做CDN的。因为邮箱服务器一般都是公司内部人去访问,所以大部分不做CDN。因此,我们就可以根据对方邮件服务器给我们发送的邮件,来判断对方的IP地址

2.3.国外IP查网址

有些网站为了节省成本,不会把CDN部署在国外。假设现在你自己的网络公司有一个网站,但你的客户群体主要是在国内,因为国外用户不多,所以就不值得在国外搭建CDN,因此这样从国外访问国内的网站就很可能直接访问的就是主站的真实ip地址。

https://tools.ipip.net/cdn.php

2.4.遗留文件,扫描全网

一些站点在搭建之初,会用一些文件测试站点,例如“phpinfo()”文件,此类文件里就有可能包含了真实的IP地址。可以利用Google搜索引擎搜索关键字“site:xxx.com inurl:phpinfo.php”,搜索站点是否有遗留文件

2.5.黑暗引擎搜索文件

google,shodan,zoomeye,fofa等
这里的特定文件,指的是站点的icon文件,也就是网站的图标,一般查看网页源代码可以找到,格式大致“http://www.xx.com/favicon.ico”。在shodan搜索网站icon图标的语法为:http.favicon.hash:hash值,hash是一个未知的随机数,我们可以通过shodan语法来查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。

获取icon的hash值

2.6.dns历史记录

站点在使用CDN服务之前,它的真实IP地址可能被DNS服务器所记录到,此时我们就可以通过DNS历史记录找到目标真实IP。而“以量打量”就是常说的ddos攻击或者说是流量耗尽攻击,在网上开CDN的时候,都会分地区流量,就比如这个节点有100M流量,当这流量用完后,用户再访问就会访问网站真实的ip地址。
情报社区:
https://x.threatbook.cnDNSdb
https://dnsdb.io/zh-cn/


贰.站点搭建及waf

前言

信息收集对于渗透测试前期来说是非常重要的,因为只有我们掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测。在安全测试中,信息收集是非常重要的一个环节,此环节的信息将影响到后续的成功几率,掌握信息的多少将决定发现漏洞机会大小,换言之决定着是否能完成目标的测试任务

img

站点搭建分析

1.目录站点

原则是一个网站,但区别在于目录下的差异

例如:D:\tools\PHPstudy\PHPTutorial\WWW\DVWA-master和 D:\tools\PHPstudy\PHPTutorial\WWW\mantisbt-2.25.0 两者仅仅是目录路径不同

但两个网站是两套程序,一个网站源码出现漏洞,另一个网站也会遭殃,就等于给与了两套漏洞方案

可通过目录扫描工具可以查询到

2.端口类站点

在同一台服务器上,以端口来把网站进行分开,一个网站出现安全问题,也会导致另一个网站出现安全问题

3.子域名站点

如果IP不同,则两个站点可能不在同一个服务器

4.类似于名站点

出自同一公司的网站,基于后缀名的更改

image.png

image.png

5.旁注,c段站点

  • 旁注
  • c段

6.搭建软件特征站点

一体化搭建软件:宝塔、PHPstudy、WMAP、INMAP(Nginx)

常规的搭建软件都有常规的数据库的默认账号密码,如果搭建者不去更改的话,就能成为突破思路。

WAF防护

1.什么是waf

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

分为:硬件形式和软件形式。

在安全公司单位购买的防火墙都是硬件,个人网站和小企业搭建都是软件。

2.如何快速识别waf

Sqlmap是一款检测和利用SQLi漏洞工具,也是基于python编写,业内认同率较高,sqlmap用来探测WAF类型想比较Wafw00f来说还多一些。

Sqlmap用来探测每种WAF设备都是一个python文件,同样是从cookie信息或者返回头信息进行判断。

命令:python sqlmap.py -u “[http://www.XXXXX.org/1.php?id=1]"-identify-waf(貌似必须是或自己修改的类似动态参数才能使用)

3.识别waf对于安全测试的意义

如果发现目标有WAF的话,不要用扫描工具进行扫描


叁.资产监控

POC、EXP、Payload与Shellcode(原链接传送门)

  1. 概念

POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。

EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的动作。

Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。

Shellcode:简单翻译 ’ shell代码 ',是Payload的一种,由于其建立正向/反向shell而得名。

  1. 几点注意

POC是用来证明漏洞存在的,EXP是用来利用漏洞的,两者通常不是一类,或者说,PoC通常是无害的,Exp通常是有害的,有了POC,才有EXP。

Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的EXP,也就是说不存在通用的EXP。

Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。

Shellcode与Shellshcok不是一个,Shellshock特指14年发现的Shellshock漏洞。

  1. Payload模块

在Metasploit Framework 6大模块中有一个Payload模块,在该模块下有Single、Stager、Stages这三种类型,Single是一个all-in-one的Payload,不依赖其他的文件,所以它的体积会比较大,Stager主要用于当目标计算机的内存有限时,可以先传输一个较小的Stager用于建立连接,Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型,适用于不同场景。

  1. 总结

想象自己是一个特工,你的目标是监控一个重要的人,有一天你怀疑目标家里的窗子可能没有关,于是你上前推了推,结果推开了,这是一个POC。之后你回去了,开始准备第二天的渗透计划,第二天你通过同样的漏洞渗透进了它家,仔细查看了所有的重要文件,离开时还安装了一个隐蔽的窃听器,这一天你所做的就是一个EXP,你在他家所做的就是不同的Payload,就把窃听器当作Shellcode吧!

Github 监控

便于收集整理最新 exp 或 poc 便于发现相关测试目标的资产

各种子域名查询

DNS,备案,证书

全球节点请求 cdn

枚举爆破或解析子域名对应

便于发现管理员相关的注册信息

黑暗引擎相关搜索

fofa,shodan,zoomeye

微信公众号接口获取

内部群内部应用内部接口

img

演示案例

监控最新的EXP发布及其他

#Title: wechat push CVE-2020

#Date: 2020-5-9

#Exploit Author: weixiao9188

#Version: 4.0

#Tested on: Linux,windows

#cd /root/sh/git/ && nohup python3 /root/sh/git/git.py &

#coding:UTF-8

import requests

import json

import time

import os

import pandas as pd

time_sleep = 60 #每隔 20 秒爬取一次

while(True):

headers1 = {

“User-Agent”: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}

#判断文件是否存在

datas = []

response1=None

response2=None

if os.path.exists(“olddata.csv”):

#如果文件存在则每次爬取 10 个

df = pd.read_csv(“olddata.csv”, header=None)

datas = df.where(df.notnull(),None).values.tolist()#将提取出来的数据中的 nan 转化为 None

requests.packages.urllib3.disable_warnings()

response1 = requests.get(url=“https://api.github.com/search/repositories?q=CVE2020&sort=updated&per_page=10”,headers=headers1,verify=False)

response2 =

requests.get(url=“https://api.github.com/search/repositories?q=RCE&ssort=updated&per_page=10”,hea

ders=headers1,verify=False)

else:

#不存在爬取全部

datas = []

requests.packages.urllib3.disable_warnings()

response1 = requests.get(url=“https://api.github.com/search/repositories?q=CVE2020&sort=updated&order=desc”,headers=headers1,verify=False)

response2 =

requests.get(url=“https://api.github.com/search/repositories?q=RCE&ssort=updated&order=desc”,heade

rs=headers1,verify=False)

data1 = json.loads(response1.text)

data2 = json.loads(response2.text)

for j in [data1[“items”],data2[“items”]]:

for i in j:

s = {“name”:i[‘name’],“html”:i[‘html_url’],“description”:i[‘description’]}

s1 =[i[‘name’],i[‘html_url’],i[‘description’]]

if s1 not in datas:

data1 = json.loads(response1.text)

data2 = json.loads(response2.text)

for j in [data1[“items”],data2[“items”]]:

for i in j:

s = {“name”:i[‘name’],“html”:i[‘html_url’],“description”:i[‘description’]}

s1 =[i[‘name’],i[‘html_url’],i[‘description’]]

if s1 not in datas:

#print(s1)

举报

相关推荐

0 条评论