渗透:找漏洞+模拟入侵的过程的安全测试Web应用架构前端 (HTML)HTML “标记语言”(用来搭页面骨架,比如<div>``<button>)JavaScript 让页面动起来(比如点击按钮弹窗、表单验证)前端编程语言)CSS 让页面好看的是 (样式语言)后端 (PHP)PHP 只是后端语言的一种(其他还有 Java/Node.js/Python/Go 等)核心作用: “承上启下”:接收前端的请求 → 处理逻辑 → 调用数据库 → 把结果返回给前端数据库 (MySQL)Web 应用的 “数据存储层”,负责存放结构化数据(比如用户的账号密码、文章内容、商品价格、订单记录)MySQL : “关系型数据库管理系统”(DBMS),非编程语言SQL:操作数据库的语言(结构化查询语言,比如SELECT * FROM 用户表 WHERE 账号='xxx'),后端(比如 PHP)通过 SQL 指令和 MySQL 交互(查数据、存数据、改数据)服务器 (Linux/Windows)云服务器它是远程物理服务器通过虚拟化技术把内存分出来一小块搞好物理服务器远程服务器,那种比较贵的性能超级好的服务器注:其他的服务器都是基于物理/云服务器又装了一个服务器软件/数据库来用来搞事情的,比如说web服务器用来跑网站,其实就是物理/云服务器又装了web服务器软件(Apache这种),数据库就是装了数据库(比如就是MySQL这种,提供数据用的)网络 (HTTP/IP/ 端口)连接前端(用户浏览器)和后端(服务器)的 “通信层”,规定了数据怎么传、传给谁IP:服务器的 “网络地址”(比如服务器的公网 IP 123.45.67.89),确保前端能找到对应的服务器;端口:服务器上区分不同服务的 “门牌号”(比如 HTTP 默认 80 端口、HTTPS 443 端口、MySQL 3306 端口),确保请求能到对应的服务(比如 80 端口交给 Nginx,3306 端口交给 MySQL);HTTP:前端和后端通信的 “协议”(规则)前端用GET/POST发请求后端用200/404返回状态码数据格式用 JSON/HTML访问网页流程(以访问博客网站为例)前端:你的浏览器加载 HTML/CSS 搭的博客页面,点击 “查看文章” 按钮(JS 触发请求);网络:浏览器通过 HTTP 协议,向服务器的公网 IP(比如 123.45.67.89)的 80 端口发送请求;服务器:Linux 系统上的 Nginx 接收请求,交给 PHP 处理;后端:PHP 写的代码接收到请求,用 SQL 指令向 MySQL 数据库查询这篇文章的内容;数据库:MySQL 返回文章的标题、内容、作者等数据给 PHP;后端:PHP 把数据组装成 HTML 格式;网络:PHP 通过 HTTP 协议,把 HTML 数据返回给你的浏览器;前端:浏览器渲染 HTML/CSS,你看到文章内容其实就是,给前端请求,网络把请求发给服务器,服务器后端php收请求,用sql指令差MySQL数据库,数据库再把相应数据返回后端数据,php把这个数据转换成html格式然后返回浏览器,返回前端渲染证书:CA加密的电子文件,用于证明网站身份和给数据加密eg 用户访问https网站,网站会把证书发给设备,浏览器查一下CA签名是否有效,没问题之后用证书里面的公匙加密数据,避免黑客冒充网站,窃取数据协议相当于网络世界的规则和标准,它是在电脑里面的提前配置好的程序目的让不同系统的设备可以交换数据,减少兼容问题主要的协议DHCP给用户分配ip用的可以节省资源ip,避免ip冲突,而且不用手动设置ipTCP传输重要数据(文件,项目)的,确保数据不丢失不混乱如果占用服务器TCP连接资源,会导致服务器崩溃防护的话主要用的是防火墙限制的UDP传输一些实时数据的(游戏联机)可以有部分数据丢失HTTP(明文)普通网站数据传输(比如就是百度这种的网页访问之类好)HTTPS(密文)加密传输(比如说微信密码,银行网站这种)DNS把你的网站的中文名字转换成ip用的FTP远程传输文件ICMP测试你的装备是否在线的SSH远程登录linux服务器用的内网和公网内网(局域网)小范围的网,蓝牙传文件这种ip地址前三段是一样的(127.0.0.1和127.0.0.10是内网)公网国家的整个网特点:只有一个公网访问网络的完整流程输入www.baidu.comDNS把这个网址对应的ip地址找到子网掩码判断这个ip地址和主机的电脑ip是否相同相同可以直接连接访问不同的话交给网关网关把数据传到公网找到百度服务器百度服务器接受数据并传回数据ip地址具有唯一性,每一个设备ip地址唯一网络设备在互联网中的标识why网络的核心是“数据传输”,但数据是“无差别字节流”,必须解决两个关键问题:「发送方」不知道「接收方在哪」:没有IP,数据就像“无地址的快递”,根本发不出去;「路由器」不知道「该转发给谁」:IP是路由决策的核心依据,没有它,全球设备无法形成互联网络。本质实现精准通信,给每个网络设备分配唯一的“通信标识”有什么用发送数据时,通过目标IP找到对应的设备「路由转发」:路由器通过IP地址判断数据的“下一步该往哪传”(类似快递中转站根据地址分流);「区分网络」:IP的前半部分(网络位)能区分设备属于哪个局域网/公网,避免地址冲突(比如校园网内的 192.168.1.x 和家里的 192.168.1.x 互不冲突)公有ip和私有ip「公有IP」:互联网上唯一的IP(如 220.181.89.147 ,百度服务器IP),由ISP分配,可直接被外网访问「私有IP」:局域网内使用的IP(如 192.168.0.x 、 10.0.0.x ),不能直接访问互联网,需通过NAT转换IP加密:给IP数据包加密一下,防止传输数据是别人截获的时候泄露信息IPv4 vs IPv6——“地址的两种身份证格式4的话地址少,攻击者容易逐个扫描6的地址多,安全性高32位和128位地址的长度,地址转化成二进制之后是32或者128个0/1虚拟机特点和主机相互隔离,数据互不干扰,这也是为什么它中了病毒可以直接毁掉用处练习网安的东西原理虚拟机相当给电脑装了一个环境,这个环境是为了给靶机做准备,靶机就是练习的时候攻击机要打的系统,这个系统是那种在网上找的专门有漏洞的系统,一般来讲安装完虚拟机之后会在虚拟机上面安装靶机,之后再新建一个虚拟机当攻击机,当然也可以用主机当攻击机,用主机的话有一定风险,安全性不太好还会出现版本不兼容的情况虚拟机三种模式:NAT能上网但是外网找不到主机在内网,主机的里面又生成一个内网,而虚拟机在主机生成的内网里面原理虚拟机软件通过模拟形态在主机上开了一个中转站,并且模拟在主机里面开了一个小型的局域网,把主机当做虚拟机的网关虚拟机访问外网需要给主机发送请求,主机代替虚拟机把请求发到公网主机代发所以外网只能看到主机的ip地址,这就是找不到虚拟机的原因主机再作为中转站把外网的数据发回去虚拟机桥接能上网且外人能找到虚拟机和主机属于同一个内网,且都能连接公网主机不能上网,只能和主机通信开这个的话主机和虚拟机都会封闭,会变成局域网用于封闭测试如何使用把那种恶意文件传到虚拟机里面直接拖建一个共享文件夹把文件考到U盘里面,然后用虚拟机挂载U盘再复制文件把文件做成ISO镜像,虚拟机里面“挂载镜像文件”提取镜像文件动态分配与内存保护主要就是操作系统可以把电脑上面的内存拆开,给每一个应用程序分一点,然后让这个程序只能在这个操作系统给分配的内存里面鼓捣,这样子的话每一个程序之间就不会互相影响,即使有一个程序卡死了也不会影响别的程序OS(操作系统)核心组件以及原理场景桌面电脑用的服务器端一个大机房,几乎是没有GUI界面,都是代码,一般是百度那种大的专业的一直要给别人提供服务器用的(比如我在自己电脑上面访问百度网页,给我的电脑返回数据的就是百度的服务器端操作系统)嵌入式监控或者小型设备里面装的移动端手机端,智能手表这种核心运作流程1. 用户点击浏览器图标(GUI操作)→ 操作系统接收请求;2. 用户接口将请求传递给内核→ 内核的进程管理组件创建新进程,分配CPU时间片;3. 内存管理组件为进程分配内存空间,加载浏览器程序代码到内存;4. 若浏览器需要访问网络/硬盘,通过系统调用(System Call) 向内核请求→ 内核调用对应设备驱动(网卡/硬盘驱动)操作硬件;5. 硬件执行后返回结果→ 内核通过系统调用将结果传递给浏览器→ 浏览器显示页面。关键机制:特权态与用户态分离:内核运行在特权态(可操作硬件),普通程序运行在用户态(不能直接操作硬件,需通过系统调用),避免程序破坏系统;中断处理:硬件(如键盘敲击)触发中断→ 内核暂停当前任务,优先处理中断请求,保障响应速度是什么是系统软件,管理硬件和软件资源的目的降低操作复杂程度(早期计算机硬件需要手动操作)管理员权限和普通用户权限的区别大概就是管理员可以改电脑的系统程序和配置,自己创建普通用户权限的话安全一点相关术语内核操作系统最核心的程序,运行在特权态,直接控制硬件资源,负责资源调度、权限校验、中断处理等底层操作(总之就是基本关键决策都是它负责)系统调用就是连接程序和内核用的东西特权态普通程序无法进入,只有内核可以,这个状态可以控制所有硬件用户态普通软件的状态设备驱动把内核的指令翻译为电信号给到硬件文件系统硬盘的整理收纳规则进程正在运行的程序线程进程的工具人,提高效率用的时间片轮转就是开了好多个程序能让这几个程序获得运行机会不卡顿虚拟内存定义:将硬盘的一部分空间当作内存使用,当物理内存不足时,将暂时不用的进程数据“换出”到硬盘,需要时再“换入”物理内存内存(桌面)不够用了,把暂时不用的文件放到硬盘(抽屉)里,需要时再拿出来,扩大“可用桌面空间”例子:你打开10个Chrome标签页+VS Code+虚拟机,物理内存(8GB)不够时,OS会用硬盘的虚拟内存(如4GB),让程序不崩溃;编程时要避免内存泄漏(否则虚拟内存会被占满,电脑卡顿内存模型与限制程序运行时的内存分为栈(局部变量)堆(动态分配)全局区/静态区;需理解虚拟内存的原理(避免内存泄漏、栈溢出)php语言服务器端脚本语言(脚本语言 = 无需编译、直接解释执行的语言)运行位置:在 Web 服务器上执行(而非用户浏览器),执行后生成纯 HTML 代码返回给浏览器;语法大概就和计算机语言差不多,兼容性高PHP 是专门为 Web 开发设计的 “服务器端脚本语言”,能把静态 HTML 变成可交互的动态网页命令行是什么区分:那个打开的黑框框叫“终端”,输入的指令叫“命令行”就是直接和电脑对话的指令,比较灵活,比较快捷方便其实有各种各样的虚拟机,但是用linux就是因为命令行区分大小写,可以严格区分文件路径百分之90以上的web服务器都是用的linux系统,不会有兼容问题命令行不需要配置环境虚拟机之间攻击的时候os可以不一样,没啥兼容问题,只要确保网络联通,就能攻击端口就是电脑的服务小门,有的专门给网页用,有的专门给数据库用的为什么要有端口电脑不可能只处理一个任务,电脑会开很多网页同时进行处理,如果别人给你发了一个请求或者是数据,没有端口的话就分不清是给哪个网页发了,会很乱每个服务只对应唯一一个端口常见端口80HTTP 网页服务普通网页访问(比如 http://xxx)443HTTPS 加密网页服务加密网页(比如 https://xxx)3306MySQL 数据库数据库连接、SQL 注入都走这个22SSH 远程登录连 Ubuntu 虚拟机 / 云服务器用8080备用网页端口本地测试网页常用