WEB安全(一)
WEB安全涉及的知识面可以说是相当广泛 包括CMS系统 网站中间件 TOP10漏洞等 这一篇文章将从网站基础认识及一些专业术语的知识点 来入手讲解 同时WEB安全文章将做一个持续化更新
网站架构
HTML(网页基本构建模块)
CSS(用于美化网页)
JAVASCRIPT(JS用于添加动态或交互式功能)
也就是大家所俗称的WEB前端三件套
!!!(注意)
F12调试网页
CTRL+U 查看源代码(右键查看源代码)如果遇到都无法打开
可以尝试加上view-source: 例如
view-source:https://www.baidu.com/
一些CTF基础题目可能会拿来做考点
此功能能帮助你快速定位到网页相关功能点的代码
在对网站源代码的审查下不可忽视 部分网站它的一个账号密码可能就存在于源代码中(个别案例)
还有一个就是F12中的网络功能
可以查看你的请求头及Cookie相关信息 Cookie存储不当就可能会造成一个CSRF漏洞
在审查源代码时不要忘记注释的内容 可能一些敏感信息就存在于此
推荐一个扫描注释的浏览器插件吧 ScanAnnotation
js文件如果曝露在前端可以做一个审计 看一看部分功能点是否有漏洞
网站的一个基本情况
HTTP与HTTPS区别点
HTTPS使用了非对称加密和对称加密的混合加密方式,确保通信内容的安全性和完整性
状态码
100 Continue 这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
101 Switching Protocol 该代码是响应客户端的 Upgrade (en-US) 标头发送的,并且指示服务器也正在切换的协议。
102 Processing (WebDAV) 此代码表示服务器已收到并正在处理该请求,但没有响应可用。
103 Early Hints 此状态代码主要用于与Link 链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。
200 OK 请求成功。成功的含义取决于HTTP方法。GET:资源已被提取并在消息正文中传输。HEAD:实体标头位于消息正文中。POST:描述动作结果的资源在消息体中传输。TRACE:消息正文包含服务器收到的请求消息。
201 Created 该请求已成功,并因此创建了一个新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。
202 Accepted 请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。
203 Non-Authoritative Information 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。
204 No Content 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。如果客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即使按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。
205 Reset Content 服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
206 Partial Content 服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。
207 Multi-Status (WebDAV) 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
208 Already Reported (WebDAV) 在 DAV 里面使用: propstat 响应元素以避免重复枚举多个绑定的内部成员到同一个集合。
226 IM Used (HTTP Delta encoding) 服务器已经完成了对资源的 GET 请求,并且响应是对当前实例应用的一个或多个实例操作结果的表示。
300 Multiple Choice 被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。
301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
302 Found 请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
303 See Other 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。
304 Not Modified 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
305 Use Proxy 被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。
306 unused 在最新版的规范中,306 状态码已经不再被使用。
307 Temporary Redirect 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
308 Permanent Redirect 这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI。 这与 301 Moved Permanently HTTP 响应代码具有相同的语义,但用户代理不能更改所使用的 HTTP 方法:如果在第一个请求中使用 POST,则必须在第二个请求中使用 POST。
400 Bad Request 语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求;请求参数有误。
401 Unauthorized 当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。
402 Payment Required 此响应码保留以便将来使用,创造此响应码的最初目的是用于数字支付系统,然而现在并未使用。
403 Forbidden 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个 404 响应,假如它不希望让客户端获得任何信息。
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
406 Not Acceptable 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
407 Proxy Authentication Required 与401响应类似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。
408 Request Timeout 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。
409 Conflict 由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。
410 Gone 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。这样的状况应当被认为是永久性的。如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。如果服务器不知道或者无法确定这个状况是否是永久的,那么就应该使用 404 状态码。除非额外说明,否则这个响应是可缓存的。
411 Length Required 服务器拒绝在没有定义 Content-Length 头的情况下接受请求。在添加了表明请求消息体长度的有效 Content-Length 头之后,客户端可以再次提交该请求。
412 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。
413 Payload Too Large 服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。此种情况下,服务器可以关闭连接以免客户端继续发送此请求。如果这个状况是临时的,服务器应当返回一个 Retry-After 的响应头,以告知客户端可以在多少时间以后重新尝试。
414 URI Too Long 请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。这比较少见,通常的情况包括:本应使用POST方法的表单提交变成了GET方法,导致查询字符串(Query String)过长。
415 Unsupported Media Type 对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。
416 Range Not Satisfiable 如果请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码。
417 Expectation Failed 此响应代码意味着服务器无法满足 Expect 请求标头字段指示的期望值。
418 I'm a teapot 服务器拒绝尝试用 “茶壶冲泡咖啡”。
421 Misdirected Request 该请求针对的是无法产生响应的服务器。 这可以由服务器发送,该服务器未配置为针对包含在请求 URI 中的方案和权限的组合产生响应。
422 Unprocessable Entity (WebDAV) 请求格式良好,但由于语义错误而无法遵循。
423 Locked (WebDAV) 正在访问的资源被锁定。
424 Failed Dependency (WebDAV) 由于先前的请求失败,所以此次请求失败。
425 Too Early 服务器不愿意冒着风险去处理可能重播的请求。
426 Upgrade Required 服务器拒绝使用当前协议执行请求,但可能在客户机升级到其他协议后愿意这样做。 服务器在 426 响应中发送 Upgrade (en-US) 头以指示所需的协议。
428 Precondition Required 原始服务器要求该请求是有条件的。 旨在防止“丢失更新”问题,即客户端获取资源状态,修改该状态并将其返回服务器,同时第三方修改服务器上的状态,从而导致冲突。
429 Too Many Requests 用户在给定的时间内发送了太多请求(“限制请求速率”)。
431 Request Header Fields Too Large 服务器不愿意处理请求,因为它的 请求头字段太大( Request Header Fields Too Large)。 请求可以在减小请求头字段的大小后重新提交。
451 Unavailable For Legal Reasons 用户请求非法资源,例如:由政府审查的网页。
500 Internal Server Error 服务器遇到了不知道如何处理的情况。
501 Not Implemented 此请求方法不被服务器支持且无法被处理。只有GET和HEAD是要求服务器支持的,它们必定不会返回此错误代码。
502 Bad Gateway 此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
503 Service Unavailable 服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机。 请注意,与此响应一起,应发送解释问题的用户友好页面。 这个响应应该用于临时条件和 Retry-After:如果可能的话,HTTP头应该包含恢复服务之前的估计时间。 网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。
504 Gateway Timeout 当服务器作为网关,不能及时得到响应时返回此错误代码。
505 HTTP Version Not Supported 服务器不支持请求中所使用的HTTP协议版本。
506 Variant Also Negotiates 服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。
507 Insufficient Storage 服务器有内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当端点。
508 Loop Detected (WebDAV) 服务器在处理请求时检测到无限循环。
510 Not Extended 客户端需要对请求进一步扩展,服务器才能实现它。服务器会回复客户端发出扩展请求所需的所有信息。
511 Network Authentication Required 该状态码指示客户端需要进行身份验证才能获得网络访问权限。
网站基础知识
常见域名后缀
.com:商业性机构或公司
.net:从事Internet相关的网络服务的机构或公司
.org:非营利组织或团体
.gov:政府部门
.cn:中国国内域名
.com.cn:中国商业域名
.net.cn:中国从事Internet相关的网络服务的机构或公司
.org.cn:中国非盈利组织、团体
.gov.cn:中国政府部门
.edu:广泛用于学校官网
.aero 供航空运输业使用
.biz 供商业使用
.coop 供联合会(cooperatives)使用
.info 供信息性网站使用,但无限制
.museum 供博物馆使用
.name 供家庭及个人使用
.pro 供部分专业使用
.asia 供亚洲社区使用
.tel 供连接电话网络与因特网的服务使用
.post 供邮政服务使用
.mail 供邮件网站使用
商业
政府
学校
域名
一级域名
一级域名也被称之为顶级域名
国家顶级域名:cn(中国大陆)、de(德国)、eu(欧盟)、jp(日本)、hk(中国香港)、tw(中国台湾)、uk(英国)、us(美国)
二级域名
在www.baidu.com中
baidu.com既是二级域名
三级域名
www.baidu.com 三级域名,
四级域名
oa.www.baidu.com 四级域名,更准确的说叫四级域
子域名
mail.baidu.com和oa.baidu.com是baidu.com的两个子域
一级域名需要备案,而二级域名不需要单独备案,只要它所处的一级域名已经备案,就能直接解析
这里说到了域名那就不得不说一下DNS了
DNS域名系统 将域名(网址)解析成IP地址
DNS的主要类型为以下七种:
DNS记录类型
类型 说明
A 地址记录(默认类型)
AAAA 地址记录
AFSDB Andrew 文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录
DNS历史记录查询
https://dnsdumpster.com/
https://censys.io/
https://dnsdb.io/zh-cn
https://hackertarget.com/find-dns-host-records
https://securitytrails.com/
dns服务器的端口是53
如何获取域名的IP地址呢
kali:host www.baidu.com 加 -a 参数可以查询更加详细的记录
dig命令是常用的域名查询工具,用来检测域名系统是否正常 加上any参数显示全部的信息
直接CMDping www.baidu.com
也可以使用nslookup
不仅可以通过域名查IP地址 还可以通过IP地址反查域名
现在的网站都套有CDN
判断是否存在CDN
超级ping 国外ping 多地ping
https://github.com/wwl012345/CDNCheck
IP地址
通常我们所见到或使用的IP地址都是为IPv4
每个IP地址长32bit,位元换算成位元组,就是4个位元组
在攻防演习中存在着部分人对IP地址的生疏 拿着IP地址就直接封禁 这是不可取的
在这么多IP地址中总有一些特殊的IP地址是不能封禁的(如果是企业或相关单位视情况而定)
0.0.0.0它表示的是这样一个集合:所有不清楚的主机和目的网络 意思就是如果你把它封禁 你的一切网络通信就断掉了 0.0.0.0=所有IP地址
255.255.255.255 对本机来说,这个地址指本网段内(同一广播域)的所有主机。
127.0.0.1 本机地址(常说的回环地址 如果封禁了这个IP地址 那你就等于闭关锁国了)
224.0.0.1 组播地址 224.0.0.1特指所有主机,224.0.0.2特指所有路由器
114.114.114.114 是中国电信提供的公共DNS服务器地址
8.8.8.8 是Google提供的免费DNS服务器的IP地址
4.2.2.2 是一个公共DNS服务器的IP地址 由Verizon公司运营
IP查询归属地https://www.ip138.com/
科普一个知识点ASN
https://mxtoolbox.com/asn.aspx
ASN通常指的是"自治系统号"(Autonomous System Number)。
自治系统(Autonomous System,简称AS)是互联网上一个有权自主地决定在本系统中实现路由策略的网络集合。每个自治系统都有一个唯一的数字标识,即自治系统号(ASN),用于BGP(边界网关协议)等路由协议中,以区分不同的网络实体。
自治系统号的主要作用包括:
路由聚合:在BGP中,ASN用于识别不同的自治系统,帮助路由器聚合路由信息,减少路由表的大小。
路由策略:不同的自治系统可以有自己的路由策略,ASN允许网络管理员根据策略过滤或优先选择路由。
网络安全:通过ASN,可以识别路由信息的来源,有助于防止某些类型的网络攻击,如BGP劫持。
网络管理:ASN提供了一种方式来组织和管理大型网络,尤其是在多组织或多地区的网络环境中。
通常,ASN是一个16位或32位的数字,由IANA(互联网号码分配局)或相应的地区性互联网注册机构分配。在查看IP地址的BGP路由信息时,ASN是一个重要的参考数据,有助于了解数据包是如何在网络中路由的。
概念名词
POC 检测漏洞是否存在
EXP 通常是配合POC使用 POC检测到漏洞后 可以利用EXP进行攻击 获取权限进行下一步操作
Payload 有效载荷 执行攻击者指定的操作
Webshell 通常是恶意脚本例如PHP ASP 攻击者可以利用这个脚本去执行命令 获取权限等操作
跳板机 如攻击者从外网进入企业内网 跳板机则是一个"中间人" A(192.168.1.1攻击者)B(2.2.2.1跳板机) c (2.2.1.1.)
A需要先拿下B 接着做转发等操作 才能到达C 不能直接性的A-C
正反向连接
正向连接 就是 攻击者A-受害者B
反向连接 受害者B 通过工具或者特殊方法 去连接攻击者A 这时候攻击者A接受到连接后就成功反向连接了
同源策略和非同源策略
同源策略是浏览器安全特性,限制脚本访问不同源的数据。CORS通过响应头允许跨域访问,复杂请求需预检。
协议、域名、端口一致为同源策略
同源策略是浏览器为了安全访问网页内容而出现的一种措施。 【https协议的默认端口号443,http端口80】 非同源策略就是当使用ajax请求时协议、域名、端口号中有一项不相同时出现的情况。 非同源策略会产生跨域请求
robots.txt
robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。但是,这个robots协议不是防火墙,也没有强制执行力。(可以作为一个敏感目录泄露查看)
请求体
HTTP 请求的基本结构包括请求行、请求头和请求体。以下是一个包含请求体的 HTTP 请求示例
请求行:包含 HTTP 方法、请求路径和 HTTP 版本。
POST /admin/login.php HTTP/1.1
请求头:包含元数据,例如主机名、内容类型和内容长度。
Host: oa.com
Content-Type: application/json
Content-Length: 100
请求体:包含实际的数据。
{ "name": "asg", "age": 100 }
请求体的内容类型
请求体的内容类型由 Content-Type 请求头指定。常见的内容类型包括:
application/json:用于传递 JSON 格式的数据。
application/xml:用于传递 XML 格式的数据。
application/x-www-form-urlencoded:用于传递表单数据,键值对格式。
multipart/form-data:用于上传文件和表单数据的混合内容。
text/plain:用于传递纯文本数据。
GET和POST
GET请求的数据(参数)附在URL后面,以查询字符串的形式出现,通过问号(?)分隔主体URL与查询字符串,参数间用等号(=)赋值,多个参数间用&连接。例如:
GET /admin/users?username=admin&password=123456 HTTP/1.1
Host: oa.com
在这个例子中,客户端请求访问oa.com上的/admin/users资源,并通过查询字符串传递了两个参数:username为,password为123456。
由于GET请求的参数直接包含在URL中,它们对用户可见,且会被浏览器记录在访问历史和地址栏中
所以说POST的安全性比GET高
POST请求的数据(参数)封装在请求体(body)中发送,不体现在URL中。请求体可以承载多种形式的数据,如键值对(form-encoded)、JSON对象、二进制数据(如文件上传)等。例如:
POST /admin/users HTTP/1.1
Host: oa.com
Content-Type: application/x-www-form-urlencoded
username=admin&password=123456
在这个例子中,客户端向oa.com的/admin/users资源发送POST请求,请求体采用application/x-www-form-urlencoded编码,包含两个参数:username为admin,password为123456。
网站的一些基础零零散散也讲完了 如果有什么问题 可以在评论区提出 (相互学习 共同进步)