域名的组成
例如一个网站域名:www.xxx.com,xxx是域名的主体,com是顶级域名后缀,那么二级域名又是什么?我们可以理解为N级域名就是在N-1级域名前追加一级,那么二级域名就是在xxx.com前面加一上一级,比如test.xxx.com,比如www.xxx.com。
ip和域名对应的关系
同一个ip地址可以对应多个域名,一个域名只能对应一个ip地址,那么这里出现了web搭建的几种方式。
1.子域名模式;比如一个ip:192.168.85.132 对应test.xxx.com这个域名是使用jsp搭建 这个yy.xxx.com使用asp搭建,那么就相当于访问不同的二级域名就是不同的网站,在渗透测试中就是不同的目标,所以在后期的信息收集中需要收集多级域名
2.端口模式搭建:同样一个网站www.xxx.com,如果访问80端口是一个网站,还可以访问8080端口就是指向的另外一个网站,另外一套源码,那么端口也是信息收集重要目标之一。3.目录搭建:比如在域名后面com/web1或者com/web2对应的就是不同的网站不同的网站源码。
站库分离
站库分离其实就是管理员将网站程序和数据库分别放在了不同的内网服务器上,这样看似提高了数据安全性,但是如果网站存在漏洞,攻击者还是有可能以Web或Data为入口访问到内网数据库服务器中的数据。如何判断一个网站是不是站库分离?
1.网络连接状态
通过Netstat命令查看MSSQL数据库1433端口的网络连接状态或者Mysql数据库的3306端口的网络连接状态。
netstat -ano | findstr "1433"
2.数据库配置文件
通过网站程序数据库配置文件来判断是否站库分离,如果数据库IP地址是localhost、127.0.0.1或当前主机内网IP则说明为同服务器,反之则可能为站库分离,自建公网数据库和RDS云数据库除外。
3.MySQL内置函数和库
通过MySQL的@@hostname内置函数可以查看服务端主机名称,
information_schema内置库的PROCESSLIST可以定位到当前已连接数据库的用户名、主机和端口号等信息,Windows连接格式:主机名:Port,
Linux连接格式:IP:Port,本地连接格式:localhost:Port4.MSSQL内置函数和表通过MSSQL的host_name()、@@servername和serverproperty几个内置函数来判断是否站库分离,如果客户端与服务端返回的主机名不一样则说明为站库分离,返回的主机名一样则说明可能为同服务器。
文件访问解析由什么决定
什么是文件访问解析,比如最简单的例子,当你访问一个网站时后面访问文件www.xxx.com/1.jpg这个时候访问到的是图片文件那么就是显示图片,而当你访问www.xxx.com/1.zip访问这个压缩包的时候就是自动下载到本地,这个就是文件访问解析不同造成的结果,那么文件访问解析由什么决定?在自己的服务器文件配置里面配置MIME类型文件中进行配置: 在里面可以设置各种文件类型,图片、视频、文档、压缩包等等,这样就导致访问zip可以直接下载,访问pdf可以直接显示等等。
以下讲解web由什么搭建,目的就是为了在后面进行信息收集发现具体是由那一类搭建,而此类对于安全测试有什么影响,如何进行测试就可以
1.前后端分离:一个应用的前端代码和后端代码分开写,拿到一个网站如何判断是不是前后端分离?1.1.页面右击选择【检查】或者打开谷歌开发者模式F12。1.2.选择【NetWork】,重新刷新页面。1.3.选择XHR 全称(xmlhttprequest),后,下面会有地址列表;查看页面的数据是从页面渲染的数据还是通过后端api接口获取的。1.4.随便点击一个链接查看请求数据,右侧,点击Preview(预览模式),如果显示页面的数据,说明页面渲染的数据通过后端api接口获取的。1.5.点击【All】查看看html源码,左侧点击访问的域名(一般是第一个),右侧点击Response,都是一些html源码,没有页面上的数据。如何测试前后端分离网站?1.1.找后端页面。1..2.框架漏洞。
2.宝塔加phpstudy搭建:如何判断一个网站是不是宝塔搭建:去触碰waf或者404页面,会出现宝塔页面防火墙。对测试的影响,宝塔有权限后,锁定了目录,命令无法执行。phpstudy:锁定目录,命令无法执行。
3.docker搭建:虚拟化技术独立磁盘空间,非真实物理环境,对测试影响:攻击者虚拟空间磁盘。
4.分站搭建:利用别人域名模板建立,对测试影响:测试网站并非真实测试网站。
5.静态网站:全部由HTML(标准通用标记语言的子集)代码格式页面组成的网站,基本无漏洞,因为没有数据传输。
waf
原理:web应用防火墙,旨在提供保护对我们安全测试的影响:常规的web安全测试手段会受到拦截。对于已知的攻击方式,可以谈识别率,但是对于未知的攻击手段,WAF是检测不到的。如何绕过:遇见分特点情况进行特点尝试绕过。
cdn
cdn:内容分发服务,旨在提高访问速度,通俗的讲解就是利用节点技术,分发多个服务器节点,不同客户端请求时就近访问。带给我们安全测试的影响:隐藏真实ip,导致对目标测试错误。如何判断一个网站是不是带有cdn服务和如何绕过cdn在后续信息收集篇详解。
oss
oss:对象存储服务,云计算技术,具有对象存储更加灵活,稳定和安全,通俗的讲就是存储视频图片等资源的地方,oss只能存储,不能解析脚本。
带给我们安全测试的影响:由于不能解析脚本等功能,所以修复了上传资源漏洞,基本文件上传漏洞就不存在了。
oss存储存在的问题:访问密钥(AccessKey)泄露,可以理解为访问身份验证中用到密钥,泄露后可以进行访问资源管理。
和传统服务器端存储资源区别:在传统的客户端对网站请求资源时会从后端服务器放回到客户端资源进行解析呈现在网页上,通过oss存储,相当于客户端通过访问凭证直接访问到oss然后返回数据,不需要经过服务器端。
如何判断一个网站是不是使用的oss存储模式:1. 查看网站的资源链接:观察网站的资源链接,如图片、视频、音频等文件的链接地址。如果这些资源的链接中包含类似于`oss`、`aliyuncs`、`qiniucdn`等关键词,那么很可能该网站使用了OSS存储。2. 检查网站的HTTP响应头:使用浏览器的开发者工具(如Chrome的开发者工具),在网络请求的Headers中查看响应头信息。如果响应头中包含`x-oss-request-id`、`x-oss-object-type`等与OSS相关的字段,那么可以判断该网站使用了OSS存储。3. 使用在线工具:有一些在线工具可以帮助判断一个网站是否使用了OSS存储。你可以搜索并使用这些工具,输入网站的URL,它们会通过分析网站的资源链接等信息来判断是否使用了OSS存储。
正向代理和反向代理
正向代理:是位于客户端和目标服务器之间的代理服务器,通俗的来讲就是你在自己的电脑上要看到国外的网站,需要翻墙,那么这个梯子就是正向代理。注意:客户端对于目标服务器的存在是不可见的。
正向代理的好处:1.隐藏客户端的真实ip地址,保护隐私。2.绕过访问限制。3.缓存加速请求,减轻目标服务器的负载。
反向代理:反向代理为服务端服务,服务端主动转发数据给访问地址(不主动不可达),官方说法:反向代理是位于目标服务器和客户端之间的代理服务器。当客户端发送请求时,请求首先发送给反向代理服务器,然后由反向代理服务器根据配置的策略和负载均衡算法将请求转发到一个或多个目标服务器上,并将目标服务器的响应返回给客户端。客户端对目标服务器的存在是不可见的。
反向代理的好处:1.负载均衡,将请求分发到多个目标服务器上,平衡服务器负载,提高系统的性能和可靠性;2.缓存和加速,缓存目标服务器的响应,加速客户端的请求处理;3.安全性,保护目标服务器的真实IP地址,提高系统的安全性;4.SSL加密,提供SSL终端加密,保护客户端和目标服务器之间的通信安全。比如上面的cdn技术就是用到了反向代理技术。
如何判断一个网站是不是用到了正向代理技术或者反向代理技术
1.检查网络请求中的代理信息:使用浏览器的开发者工具或网络抓包工具,查看网站的网络请求。在请求头中查找`X-Forwarded-For`、`Via`、`Proxy-Connection`等字段,这些字段可能包含代理服务器的信息。如果这些字段存在且值不为空,则表示网站可能使用了正向代理或反向代理。
2.查看网站的DNS记录:使用工具如`nslookup`或在线的DNS查询工具,查询网站的域名解析记录。如果目标服务器的IP地址与网站的域名解析记录不一致,那么可能存在反向代理。
3.使用工具进行测试:有一些在线工具可以帮助检测网站是否使用了代理,例如`httpbin.org`和`proxycheck.io`等。这些工具可以提供有关代理信息的详细报告。
4.分析网站的响应头信息:使用浏览器的开发者工具或网络抓包工具,观察网站的响应头信息。如果响应头中包含`Server`字段,可以查看该字段的值来判断是否使用了常见的代理服务器软件。
通过命令行模式下载window/Linux文件(列举几条命令)
Linux模式下:1.wget http://xxx.com/文件2. curl URL -o filename --progress
window模式下:1.certutil -urlcache -split -f http://xx.xx.xx.xx/test.zip c:\test.zip
2.curl http://xx.xx.xx.xx/test.zip -o c:\test.zip
识别常见的加密方式
md5:长度为32个字符,只包含0-9和af的字符
例如:5eb63bbbe01eeed093cb22bb8f5acdc3
base64:Base64编码使用64个字符来表示6二进制数,通常使用以下字符集:- 大写字母 A 到 Z - 小写字母 a 到 z - 数字 0 到 9 - 字符 "+" 和 "/" 另外,Base64: 编码位可能会在补加一个或两个填充字符“=”,保证编码后的字符串长度为4的倍数
常见的状态码
状态码200:表示服务器响应成功,也就是服务器找到了客户端请求的内容,并且将内容返回给客户端。
状态码302:代表临时跳转。例如:URL地址A可以向URL地址B上跳转,但这并不是永久性的,在经过一段时间后,URL地址A还可能向URL地址C上跳转。
状态码301 :状态码301往往代表的是永久性的重定向,值得注意的是,这种重定向跳转,从严格意义来讲不是服务器跳转,而是客户端跳转的。这个“跳”的动作是服务器是通过回传状态码301来下达给客户端的,让客户端完成跳转。
状态码403:代表请求的服务器资源权限不够,也就是说,没有权限去访问服务器的资源,或者请求的IP地址被封掉了。
状态码404:代表服务器上没有该资源,或者说服务器找不到客户端请求的资源,是最常见的请求错误码。
常用的http请求头
1.Accept
Accept: text/html 浏览器可以接受服务器回发的类型为 text/html。
Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。
2.Accept-Encoding
Accept-Encoding: gzip, deflate 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码)。
3.Accept-Language
Accept-Language:zh-CN,zh;q=0.9 浏览器申明自己接收的语言。
4.Connection
Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
5.Host(发送请求时,该报头域是必需的)
Host:www.baidu.com 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。
6.Referer
Referer:https://www.baidu.com/?start=1当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
7.User-Agen
User-Aget:Mozilla/...,告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。
8.Cache-Control
Cache-Control:private 默认为private 响应只能够作为私有的缓存,不能再用户间共享
Cache-Control:public 响应会被缓存,并且在多用户间共享。正常情况, 如果要求HTTP认证,响应会自动设置为 private.
Cache-Control:must-revalidate 响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
Cache-Control:no-cache 响应不会被缓存,而是实时向服务器端请求资源。
Cache-Control:max-age=10 设置缓存最大的有效时间,但是这个参数定义的是时间大小(比如:60)而不是确定的时间点。单位是[秒 seconds]。
Cache-Control:no-store 在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。
9.Cookie
Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。
关注微信公众号:0到1渗透测试