一 DNS
DNS(Domain Name System)是互联网中用于将域名转换为IP地址的系统。
DNS的主要功能包括以下几个方面:
- 域名解析:DNS最主要的功能是将用户输入的域名解析为对应的IP地址。当用户在浏览器中输入一个域名时,操作系统会向DNS服务器发送解析请求,DNS服务器根据该域名查询自身的记录来返回对应的IP地址。
-IP地址反查:DNS也支持将IP地址反查为对应的域名。该功能对于进行安全审计和网络监控非常有用。 - 负载均衡:DNS还可以用于实现负载均衡。通过配置多个具有相同域名但不同IP地址的服务器,DNS可以根据一定的策略(如轮询、随机)将请求分发到不同的服务器上,从而实现负载均衡以提高性能和可靠性。
- 邮件服务器定位:DNS在电子邮件系统中也起着重要的作用。通过MX记录,DNS可以指定用于接收特定域名邮件的邮件服务器。
- 安全性增强:DNS也可用于增强网络安全性。例如,DNS可以实施域名层面的安全策略,如通过DNSSEC(DNS Security Extensions)对域名解析结果进行数字签名,防止域名劫持和欺骗。
DNS主要工作流程
-
发起域名解析请求:当用户在浏览器中输入一个域名时,操作系统会发送一个域名解析请求到本地DNS服务器(通常由ISP提供)。
-
本地DNS服务器查询缓存:本地DNS服务器首先会查询自己的缓存,看是否已经解析过该域名。如果有缓存记录且未过期,那么会直接返回已解析的IP地址。
-
递归查询与迭代查询:如果本地DNS服务器缓存中没有找到对应的解析记录,它就会根据自己的配置进行递归查询或迭代查询。
递归查询:本地DNS服务器会向根DNS服务器发送解析请求,根DNS服务器负责管理顶级域名(如.com、.org)的IP地址。根DNS服务器会返回下一级DNS服务器的IP地址。 迭代查询:本地DNS服务器根据根DNS服务器返回的IP地址,向下一级的DNS服务器发起查询请求,然后继续重复这个过程,直到找到负责该域名的最终DNS服务器。
- 最终DNS服务器解析与缓存:最终DNS服务器收到查询请求后,会查询自己的记录,如果有该域名的解析记录,就返回给本地DNS服务器。本地DNS服务器将得到的IP地址返回给操作系统,并缓存这个解析结果。
- 返回解析结果:最终,本地DNS服务器将解析得到的IP地址返回给用户的计算机操作系统,操作系统将使用这个IP地址来建立网络连接,并完成对该域名的访问。
二 HTTP状态码
HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本的协议。当客户端与服务器之间进行通信时,服务器会返回一个HTTP状态码,用于表示请求的处理结果。以下是一些常见的HTTP状态码及其含义:
1xx(信息性状态码):请求已接收,继续处理。
- 100 Continue:客户端应继续发送请求。
- 101 Switching Protocols:服务器将切换到不同的协议,如HTTP/1.1。
2xx(成功状态码):请求已成功被服务器接收、理解和处理。
- 200 OK:请求成功,服务器返回所请求的数据。
- 201 Created:请求成功,并且服务器创建了新的资源。
- 204 No Content:请求成功,但服务器没有返回内容。
3xx(重定向状态码):需要进一步操作以完成请求。
- 301 Moved Permanently:请求的资源被永久移动到新位置。
- 302 Found:请求的资源被暂时移动到新位置。
- 304 Not Modified:资源未修改,使用缓存的版本。
4xx(客户端错误状态码):请求包含错误或无法完成。
- 400 Bad Request:请求的语法有误,服务器无法理解。
- 401 Unauthorized:请求需要用户身份验证。
- 404 Not Found:服务器无法找到请求的资源。
5xx(服务器错误状态码):服务器在处理请求时发生错误。
- 500 Internal Server Error:服务器内部错误。
- 503 Service Unavailable:服务器当前无法处理请求,通常是因为过载或维护。
三 HTML实体编码,urlcode
html实体编码
HTML实体编码(HTML Entity Encoding)是一种在HTML文档中表示特殊字符的方法。由于HTML使用一些特殊字符作为标签、属性或其他用途,为了在HTML中正确显示这些字符,需要使用实体编码来表示它们。
HTML实体编码使用实体名称或实体编号来替代特殊字符。
实体的写法是&name;
,其中的name
是字符的名字。下面是其中一些特殊字符,及其对应的实体。
<
:<
>
:>
"
:"
'
:'
&
:&
©
:©
#
:#
§
:§
¥
:¥
$
:$
£
:£
¢
:¢
%
:%
*
:$ast;
@
:@
^
:^
±
:±
- 空格:
实体编号:
URLCODE
URL编码(也称为百分号编码或URL转义)是一种将URL中的特殊字符转换为特定格式的编码方式。这是因为URL只允许使用一部分ASCII字符,并且对于非ASCII字符和特殊字符,需要使用特定的编码方式来表示。
URL 的各个组成部分,只能使用以下这些字符。
-
26个英语字母(包括大写和小写)
-
10个阿拉伯数字
-
连词号(
-
) -
句点(
.
) -
下划线(
_
)绕过
URL 字符转义的方法是,在这些字符的十六进制 ASCII 码前面加上百分号(%
)。下面是这18个字符及其转义形式。
!
:%21#
:%23$
:%24&
:%26'
:%27(
:%28)
:%29*
:%2A+
:%2B,
:%2C/
:%2F:
:%3A;
:%3B=
:%3D?
:%3F@
:%40[
:%5B]
:%5D
四 alter弹窗
<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])? $_GET['xss'] : '';
$xss = str_replace(array("(", ")", "&", "\\", "<", ">", "'"), '', $xss);
echo "<img src=\"{$xss}\">";
?>
因为已经过滤了其中的(),&,\,<>,‘’。所以无法正常弹出alert,用aaa“打开一个双引号,在其后输入onerror。因为url会解析%28%29成()。%28%29会被正则过滤掉,%2528%2529会被转移成%28%29,进入程序,但无法被解析成()并执行所以用location=“javascript:
”先将“”闭合,之后输入%25281%2529,会被location引用成变量。javascript伪协议变量内就能正常解析符号,为(),弹出alert弹窗