实训作业day02
一、DNS解析详细步骤
通过域名获取对应IP地址的过程称为域名解析。DNS域名解析分为以下两种方式:静态域名解析、动态域名解析。
1.静态域名解析
静态域名解析是通过静态域名解析表进行的,即手动建立域名和IP地址之间的对应关系表,该表的作用可以将一些常用的域名放入表中。当DNS客户端需要域名所对应的IP地址时,即到静态域名解析表中去查找指定的域名,从而获得所对应的IP地址,提高域名解析的效率。
2.动态域名解析
动态域名解析需要专用的域名解析服务器(DNS服务器)运行域名解析服务器程序,提供从域名到IP地址的映射关系,负责接收客户提出的域名解析请求。
为提高查询速度,在解析域名时,首先采用静态域名解析的方法,如果静态解析不成功,再采用动态域名解析的方法。
如上图所示,DNS的工作过程如下:
- 用户程序(如ping、telnet等)使用域名访问网络时,首先向DNS客户端的地址解析器发出DNS请求。
- 地址解析器收到DNS请求后,首先查询本地域名缓存。
- 如果本地域名缓存中存在该域名对应的映射表项,地址解析器就直接将域名对应的IP地址返回给用户程序。
- 如果本地域名缓存中不存在所要查找的映射表项,地址解析器就向DNS服务器发送查询请求报文。
- DNS服务器收到查询报文后,首先判断请求的域名是否处于自己被授权管理的子域里,再根据不同的判断结果,向DNS客户端发送相应的响应报文。
- 如果请求的域名在自己被授权管理的子域范围之内,该DNS服务器首先从自己的数据库中查找域名对应的IP地址。
- 如果请求的域名不在自己被授权管理的子域范围之内,该DNS服务器就将请求交给上一级的DNS服务器处理。DNS服务器完成解析后,将解析的结果返回给DNS客户端。
- DNS客户端的地址解析器接收并解析DNS服务器发回来的响应报文,将解析结果返回给用户程序。
每次动态解析成功的域名与IP地址的映射均存放在动态域名缓存区中,当下一次查询相同域名的时候,就可以直接从缓存区中读取,不用再向域名服务器进行请求。缓存区中的映射在一段时间后会被老化删除,以保证及时从域名服务器得到最新的内容。
二、绕过CDN查找主机真实IP的方法
-
查询历史DNS记录
-
查看 IP 与 域名绑定的历史记录,可能会存在使用 CDN 前的记录,相关查询网站有:
https://dnsdb.io/zhcn/ ###DNS查询 https://x.threatbook.cn/ ###微步在线 http://toolbar.netcraft.com/site_report?url= ###在线域名信息查询 http://viewdns.info/ ###DNS、IP等查询 https://tools.ipip.net/cdn.php ###CDN查询IIP
-
利用SecurityTrails平台,攻击者就可以精准的找到真实原始IP。
-
-
查找子域名
很多站长可能只会对主站或者流量大的子站点做了 CDN,而很多小站子站点又跟主站在同一台服务器或者同一个C段内,此时就可以通过查询子域名对应的 IP 来辅助查找网站的真实IP。
-
网络空间引擎搜索
常见的有以前的钟馗之眼,shodan,fofa搜索。以fofa为例,只需输入:title:“网站的title关键字”或者body:“网站的body特征”就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip。
-
利用SSL证书
Web服务器支持SSL并具有证书,但当你在端口443上直接连接到IP时,SSL证书就会被暴露。如果攻击者扫描0.0.0.0/0,即整个互联网,就可以在端口443上获取有效证书,进而获取Web服务器IP。
-
利用HTTP标头
借助SecurityTrails这样的平台,可以通过比较HTTP标头来查找到原始服务器。特别是当用户拥有一个非常特别的服务器名称与软件名称时,找起来就变得更容易。
-
利用网站返回的内容
如果原始服务器IP也返回了网站的内容,那么可以在网上搜索大量的相关数据。浏览网站源代码,寻找独特的代码片段。在JavaScript中使用具有访问或标识符参数的第三方服务(例如Google Analytics,reCAPTCHA)是攻击者经常使用的方法。
-
使用国外主机解析域名
国内很多 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问可能就能获取到真实IP。
-
网站漏洞查找
目标敏感文件泄露或者 使用XSS盲打,命令执行反弹shell,SSRF等。无论是用社工还是其他手段,拿到了目标网站管理员在CDN的账号,从而在从CDN的配置中找到网站的真实IP。
-
网站邮件订阅查找
RSS邮件订阅,很多网站都自带 sendmail,此时查看发送邮件的源码里面就会包含服务器的真实 IP 了。
-
用 Zmap 扫全网
从 apnic 获取 IP 段,然后使用 Zmap 的 bannergrab 扫描出来 80 端口开放的主机进行 banner 抓取,最后在 httpreq 中的 Host 写 入网址。
-
F5 LTM解码法
当服务器使用F5 LTM做负载均衡时,通过对setcookie关键字的解码真实ip也可被获取。
三、子域名信息收集常用手段
子域名收集通常分为两种方式,分别为被动收集和主动收集。
-
被动收集
-
被动收集是指,在不与目标系统进行交互的情况下,通过第三方进行收集。这种方式有着明显的优势,因为不需要和目标系统进行交互,所以不会对目标系统造成任何影响,更不会触发任何安全产品的告警。
-
被动子域名收集的方式
-
信息泄露
-
orssdomain.xml
跨站策略文件,主要是为web客户端(如Adobe Flash Player等)设置跨域处理数据的权限,里面可能包含部分域名信息。
-
Github 、Gitee等代码仓库中,可能有相关子域名的信息
-
抓包分析获取,如一些静态资源的请求、一些APP或者小程序接口、邮件服务器等等
-
-
搜索引擎:常用的搜索引擎有Google、百度等。
-
网络空间测绘引擎:常见的空间测绘引擎有Shodan、Zoomeye、Fofa。
-
证书透明
证书透明(CT)是证书颁发机构(CA)必须将其发布的每个SSL/TLS证书发布到公共日志的项目。SSL/TLS证书通常包含域名,子域名和电子邮件地址等信息。使用方法是直接搜索主域名即可。
-
第三方DNS服务
第三方提供的免费的DNS服务器,可以用于替代默认的ISP提供的DNS服务器。 公共DNS可以更快地解析域名、提供更好的隐私保护和安全性,并且通常能够过滤恶意网站和广告。
-
AS 号码查询
AS 号码帮助识别属于组织的网络块,而该网络块又可能具有有效域。查找AS号码可以基于IP查找或者基于域名查找。
-
SAN 收集:
SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。允许在安全证书中使用 subjectAltName字段将多种值与证书关联,这些值被称为主题备用名称。名称可包括:IP地址、DNS名称等。
-
使用公共数据集:利用已有公开的扫描数据集,对子域名信息进行收集。
-
-
-
主动收集
-
主动收集是指通过与目标系统进行交互,对子域名进行收集。因为需要和目标系统进行交互,很可能出现高频访问等情况,有触犯安全产品告警的风险。
-
主动收集子域名的方式
-
字典枚举
字典枚举即利用常见的子域名字典,进行暴力破击,最终获得有效的子域名。这种方法有比较大的局限,能收集到多少子域,取决于字典的覆盖程度,同时还有比较致命的缺点,即会造成较大的流量,可能会让目标系统的安全产品造成告警。
-
置换扫描:使用已知域/子域名的排列组合来识别新的子域名,使得字典有一定的针对性。
-
域传送漏洞
DNS区域传输是将DNS数据库或DNS记录从主名称服务器复制到辅助名称服务器的过程。如果DNS服务器没有进行严格的配置,只要收到AXFR请求就进行域传送,便造成了该漏洞。域传送过程中,传递的信息除了子域外,还有电子邮件地址、电子邮件服务器等信息,可用于钓鱼攻击。
-
DNSSEC
DNSSEC,即域名系统安全扩展,主要功能是通过建立信任链来保护DNS中数据的完整性和真实性。由于DNSSEC处理不存在域名的方式,可以遍历DNSSEC域并枚举该域中的所有域名。
-
DNS缓存
在企业网络中,DNS服务器提供域名解析服务,并通过递归请求公网DNS服务器来解析第三方域名。为了提高性能,DNS服务器会缓存解析过的域名。域名缓存侦测(DNS Cache Snooping)技术通过发送非递归的解析请求,帮助渗透测试人员识别已缓存的域名和私有域名。
-
-
四、Nmap全端口扫描(使用昨日搭建的pikachu靶场)
-
打开phpstudy_pro.exe,启动Apache和MySQL,就可以打开Pikachu网站。
-
在cmd中找到主机的ip后,打开Nmap Zenmap GUI应用程序,将ip填入target,选择扫描方式为扫描全端口后,开始扫描。
加分项
1.SYN半开扫描的原理
这是Nmap默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。因为该方式仅发送SYN包对目标主机的特定端口,但不建立的完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
2.跳过主机存活检测扫描使用场景
Nmap的探测选项中的-Pn选项可以用来跳过主机存活检测。默认情况下,Nmap会先对目标主机进行存活检测,如果主机未响应,则直接跳过该主机的扫描。该选项可以跳过存活检测,直接对目标主机进行扫描。该选项需要管理员权限才能使用。
五、dirmap目录探测工具实践(使用昨日搭建的pikachu靶场)
-
解压dirmap的压缩包后,在其安装目录打开cmd使用命令 “pip install -r ./requirement.txt”安装依赖并升级到最新版本。
-
使用dirmap对pikachu靶场进行目录探测。
可以观察到两次扫描条数(5667和5652)不一样。
dirmap每次扫描条数不一样
dirmap每次扫描条数不一样可能是因为:
-
Dirmap能够爬取页面并动态生成字典。
扫描过程中,它会根据目标网站的实际情况动态调整请求,从而可能导致扫描条数的变化。 -
目标网站的变化
目标网站可能经常更新其目录结构和文件,导致每次扫描时发现的目录和文件数量不同。网站可能启用了动态内容生成,这意味着每次访问时页面内容都可能有所不同,从而影响到扫描结果。
-
扫描参数和配置
Dirmap支持多种扫描模式和配置选项,如递归扫描、自定义状态码、字典模式等。不同的配置和参数设置可能会导致扫描结果的不同。
-
网络环境和稳定性
网络延迟、丢包或中断可能会影响扫描过程的完整性和准确性,目标网站服务器的响应时间和稳定性也可能影响扫描结果。
-
扫描工具的更新和改进
Dirmap作为一个开源项目,可能会不断更新和改进其功能。新版本可能包含新的扫描算法、优化或修复,这些变化可能会影响扫描结果。
-
扫描策略和效率
Dirmap在扫描过程中可能会根据目标网站的响应速度和资源使用情况动态调整扫描策略。例如,如果目标网站响应缓慢,扫描工具可能会减少请求频率以避免给服务器造成过大压力。扫描工具的效率也可能受到多种因素的影响,如计算机性能、操作系统、并发连接数等。
-
外部干扰
外部因素如防火墙、安全软件或网络策略可能阻止或限制扫描工具的某些操作,从而影响扫描结果。
加分项:dirmap高级应用
自定义dirmap配置,使用dirmap高级功能。暂时采用加载配置文件的方式,编辑项目根目录下的dirmap.conf,进行配置。dirmap.conf配置详解:
#递归扫描处理配置
[RecursiveScan]
#是否开启递归扫描:关闭:0;开启:1
conf.recursive_scan = 0
#遇到这些状态码,开启递归扫描。默认配置[301,403]
conf.recursive_status_code = [301,403]
#URL超过这个长度就退出扫描
conf.recursive_scan_max_url_length = 60
#这些后缀名不递归扫
conf.recursive_blacklist_exts = ["html",'htm','shtml','png','jpg','webp','bmp','js','css','pdf','ini','mp3','mp4']
#设置排除扫描的目录。默认配置空。其他配置:e.g:['/test1','/test2']
#conf.exclude_subdirs = ['/test1','/test2']
conf.exclude_subdirs = ""
#扫描模式处理配置(4个模式,1次只能选择1个)
[ScanModeHandler]
#字典模式:关闭:0;单字典:1;多字典:2
conf.dict_mode = 1
#单字典模式的路径
conf.dict_mode_load_single_dict = "dict_mode_dict.txt"
#多字典模式的路径,默认配置dictmult
conf.dict_mode_load_mult_dict = "dictmult"
#爆破模式:关闭:0;开启:1
conf.blast_mode = 0
#生成字典最小长度。默认配置3
conf.blast_mode_min = 3
#生成字典最大长度。默认配置3
conf.blast_mode_max = 3
#默认字符集:a-z。暂未使用。
conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"
#默认字符集:0-9。暂未使用。
conf.blast_mode_num = "0123456789"
#自定义字符集。默认配置"abc"。使用abc构造字典
conf.blast_mode_custom_charset = "abc"
#自定义继续字符集。默认配置空。
conf.blast_mode_resume_charset = ""
#爬虫模式:关闭:0;开启:1
conf.crawl_mode = 0
#用于生成动态敏感文件payload的后缀字典
conf.crawl_mode_dynamic_fuzz_suffix = "crawl_mode_suffix.txt"
#解析robots.txt文件。暂未实现。
conf.crawl_mode_parse_robots = 0
#解析html页面的xpath表达式
conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"
#是否进行动态爬虫字典生成。默认配置1,开启爬虫动态字典生成。其他配置:e.g:关闭:0;开启:1
conf.crawl_mode_dynamic_fuzz = 1
#Fuzz模式:关闭:0;单字典:1;多字典:2
conf.fuzz_mode = 0
#单字典模式的路径。
conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"
#多字典模式的路径。默认配置:fuzzmult
conf.fuzz_mode_load_mult_dict = "fuzzmult"
#设置fuzz标签。默认配置{dir}。使用{dir}标签当成字典插入点,将http://target.com/{dir}.php替换成http://target.com/字典中的每一行.php。其他配置:e.g:{dir};{ext}
#conf.fuzz_mode_label = "{ext}"
conf.fuzz_mode_label = "{dir}"
#处理payload配置。暂未实现。
[PayloadHandler]
#处理请求配置
[RequestHandler]
#自定义请求头。默认配置空。其他配置:e.g:test1=test1,test2=test2
#conf.request_headers = "test1=test1,test2=test2"
conf.request_headers = ""
#自定义请求User-Agent。默认配置chrome的ua。
conf.request_header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
#自定义请求cookie。默认配置空,不设置cookie。其他配置e.g:cookie1=cookie1; cookie2=cookie2;
#conf.request_header_cookie = "cookie1=cookie1; cookie2=cookie2"
conf.request_header_cookie = ""
#自定义401认证。暂未实现。因为自定义请求头功能可满足该需求(懒XD)
conf.request_header_401_auth = ""
#自定义请求方法。默认配置get方法。其他配置:e.g:get;head
#conf.request_method = "head"
conf.request_method = "get"
#自定义每个请求超时时间。默认配置3秒。
conf.request_timeout = 3
#随机延迟(0-x)秒发送请求。参数必须是整数。默认配置0秒,无延迟。
conf.request_delay = 0
#自定义单个目标,请求协程线程数。默认配置30线程
conf.request_limit = 30
#自定义最大重试次数。暂未实现。
conf.request_max_retries = 1
#设置持久连接。是否使用session()。暂未实现。
conf.request_persistent_connect = 0
#302重定向。默认False,不重定向。其他配置:e.g:True;False
conf.redirection_302 = False
#payload后添加后缀。默认空,扫描时,不添加后缀。其他配置:e.g:txt;php;asp;jsp
#conf.file_extension = "txt"
conf.file_extension = ""
#处理响应配置
[ResponseHandler]
#设置要记录的响应状态。默认配置[200],记录200状态码。其他配置:e.g:[200,403,301]
#conf.response_status_code = [200,403,301]
conf.response_status_code = [200]
#是否记录content-type响应头。默认配置1记录
#conf.response_header_content_type = 0
conf.response_header_content_type = 1
#是否记录页面大小。默认配置1记录
#conf.response_size = 0
conf.response_size = 1
#是否自动检测404页面。默认配置True,开启自动检测404.其他配置参考e.g:True;False
#conf.auto_check_404_page = False
conf.auto_check_404_page = True
#自定义匹配503页面正则。暂未实现。感觉用不着,可能要废弃。
#conf.custom_503_page = "page 503"
conf.custom_503_page = ""
#自定义正则表达式,匹配页面内容
#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"
conf.custom_response_page = ""
#跳过显示页面大小为x的页面,若不设置,请配置成"None",默认配置“None”。其他大小配置参考e.g:None;0b;1k;1m
#conf.skip_size = "0b"
conf.skip_size = "None"
#代理选项
[ProxyHandler]
#代理配置。默认设置“None”,不开启代理。其他配置e.g:{"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
conf.proxy_server = None
#Debug选项
[DebugMode]
#打印payloads并退出
conf.debug = 0
#update选项
[CheckUpdate]
#github获取更新。暂未实现。
conf.update = 0
六、Fscan实践(使用昨日搭建的pikachu靶场)
- 在fscan的安装目录打开cmd使用命令 “fscan.exe -h 10.17.219.209”进行扫描。
七、课上所演示插件安装成功截图
-
dirmap
-
dumpall
-
解压dumpall的压缩包后,在其安装目录打开cmd使用命令 “pip install -r ./requirements.txt”和“pip install -r ./ requirements-dev.txt”安装依赖并升级到最新版本。
-
验证安装成功。
-
-
fscan
-
firfox插件wappalyzer和FindSomething
八、信息泄露分类及利用方式总结
- 目录信息泄露
不受限制的目录列表可以揭示网站目录和文件的结构,可能暴露敏感信息或可利用的文件。Web应用中间件配置错误时,如果用户访问不存在的索引文件(index.html,index.php等)的目录,就会直接显示该目录下所有文件及其子目录。
- 敏感文件泄露
配置不当的服务器可能会暴露配置文件,这些文件包含敏感信息,如数据库凭证、API密钥和系统设置。发布网站时,管理员往往会忘记删除网站开发时留下的包含网站敏感信息的各种文件,如网站源码压缩文件,.git,.bak,.svn等文件。
- 弱口令泄露
弱口令就是容易被黑客猜解或者暴力破解出来的口令,可能是开发时的默认账号或者网站后台的登录口令如果过于简单。
- 敏感路径泄露
Web应用系统的管理后台、编辑器后台等敏感路径设置的过于简单,就会被黑客猜解出来从而造成敏感路径泄露漏洞。
- 服务器标识版本
服务器标识版本能够揭示服务器上运行的特定软件及其版本,这可以被用来寻找已知漏洞。
- 错误信息
详细的错误信息可以提供有关服务器的配置、目录结构甚至使用的技术线索,这些信息都可以被攻击者利用。
- 源代码泄露
直接访问应用程序的源代码,可能暴露代码中的漏洞、硬编码的凭证以及其他敏感信息。 版本控制系统造成的文件泄露
源代码泄露分类:
• git源码泄露
• svn源码泄露
• DS_Store 文件泄露
• 网站备份压缩文件泄露
• Web-INF/Web.xml 泄露
• CVS泄露
• hg源码泄漏
• Bazaar/bzr泄露
• SWP 文件泄露
- 备份文件和旧版本
发现备份文件或网站的旧版本,可以让攻击者获得过时的软件版本或配置,而这些旧版本可能存在已知的漏洞。
- HTML/JavaScript注释
在HTML或JavaScript 文件中留下的注释,可能会无意中泄露敏感信息或调试细节。
- Api响应
Api响应包含不必要的数据,可能会泄露内部服务器细节、数据库结构或其他敏感信息。
- URL中的敏感信息
将会话令牌、用户名或其他敏感数据包含在URL中,这些信息可能会被拦截利用。
- 第三方服务
与第三方服务的集成,如果不进行适当的保护或配置,也可能导致信息泄露。