DVWA 初次尝试(上)

Brute Force(暴力破解)

Low

在这里插入图片描述

分析源码,我们可以看到这里没有做任何防御。
有两种方法可以破解。
第一种,是使用burpsuit直接进行爆破,爆破出密码进行登陆
在这里插入图片描述

长度与其它长度不同,所以password极有可能是正确的密码。
在这里插入图片描述

第二种,我们在源码中看到了sql语句,可以通过构造sql语句来进行破解
SELECT * FROM users WHERE user = ‘$ user’ AND password = ‘$pass’
SELECT * FROM users WHERE user =‘admin’ or ‘1’=‘1’ AND password=’’ //这里用“or”即满足一个永真条件‘1’=‘1‘便可登陆成功。
在这里插入图片描述

Medium

在这里插入图片描述

我们可以发现与之前相比,代码中加入了
在这里插入图片描述

也就是说对用户名和密码的值都进行了转义
mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。要转义的字符串。编码的字符是 NUL(ASCII 0)、\n、\r、\、’、" 和 Control-Z。
因为过滤掉了‘ 所以无法进行SQL注入,但我们还是可以通过使用burpsuit直接进行爆破。

High

在这里插入图片描述

我们可以发现在代码中加入了token机制
在这里插入图片描述

这就会使得每次登录页面都会随机生成token字符串。
我们可以每次先抓取当前页面Token值再随即进行爆破。因为登录的时候,他会先下发一个随机的token,登录的时候,会先校验token参数值,如果与他服务器上的token不匹配,则不进行下一步操作。
在这里插入图片描述

Impossible

在这里插入图片描述

加入了锁定机制,限制登陆次数为3次,如果三次输入错误将会造成账号锁定,这就有效地阻止了暴力破解。
在这里插入图片描述

采用了PDO(PHP Data Object,PHP数据对象)机制,PDO扩展为PHP访问数据库定义了一个轻量级的一致接口,不会在本地对SQL进行拼接。PDO::PARAM_STR表示SQL中的CHAR、VARCHAR或其他字符串类型。当调用prepare()时,将SQL模板传给MySQL Server,传过去的是占位符“?”,不包含用户数据,当调用execute()时,用户的变量值才传递到MySQL Server,分开传递,阻止了SQL语句被破坏而执行恶意代码。

Command Injection(命令行注入)

命令行注入漏洞是指web应用程序中调用了系统可执行命令的函数,而且输入参数是可控的,如果黑客拼接了注入命令,就可以进行非法操作了。例如输入ip,程序调用系统命令ping这个ip,在ip后面加一个&&、&、|、||命令拼接符号再加上我们需要执行的系统命令。

在包含注入命令数据提交后可根据回显结果是否包含执行命令结果特征进行判断是否存在注入命令漏洞,例如在输入命令中包含net user的数据,查看响应结果是否包含administrator。

Low

在这里插入图片描述

stristr() 函数搜索字符串在另一字符串中的第一次出现。该函数是二进制的。stristr(string,search,before_search),其中string是规定被搜索的字符串,search是规定所搜索的字符串。
php_uname()— 返回运行 PHP 的系统的有关信息,原型为php_uname ([ string $mode = “a” ] ) : string。php_uname() 返回了运行 PHP 的操作系统的描述。其中参数的意思分别是
在这里插入图片描述

我们可以看到代码中没有任何防御措施,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤。
我们直接在ip字段后面添加| ls,原始语句变成了ping | ls,直接输出该目录下的文件。

Medium

在这里插入图片描述

与之前代码相比,增加了黑名单,即对输入的字符进行判断若出现‘&&’或‘;’字符则用‘’代替。但是我们可以使用其他例如“&、|、||”,进行连接命令注入。
array_keys() 函数返回包含数组中所有键名的一个新数组。

High

在这里插入图片描述

我们可以看到添加在黑名单里的东西更多了,但是因为是’| ‘替换为’ ’,所以我们可以用‘|‘来进行连接,即10.136.95.72|ls即可。

Impossible

在这里插入图片描述

加入了token机制
stripslashes(string),stripslashes函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。
explode(separator,string,limit),把字符串打散为数组,返回字符串的数组。参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目。在代码中用.分割,把字符串切成数组。
is_numeric(string),检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。
加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有像“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。

CSRF(跨站请求伪造)

CSRF攻击攻击原理及过程如下:

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
    2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  2. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  3. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  4. 浏览器在接收到这些攻击性代码后,根据网站 B 的请求,在用户不知情的情况下携带 Cookie 信息,向网站 A 发出请求。网站 A 并不知道该请求其实是由 B 发起的,所以会根据用户 C 的 Cookie 信息以 C 的权限处理该请求,导致来自网站 B 的恶意代码被执行。

Low

在这里插入图片描述

我们可以看到,这里只验证了用户名和密码是否匹配,没有任何防御措施

我们先创建一个file.html
在这里插入图片描述

再创建一个123.html
在这里插入图片描述

用户直接访问
http://10.136.95.72/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#这个链接,就可以更改密码。但是这个链接很明显地像恶意链接,我们不会点进去看,那么我们就可以对它进行一些“包装“。
在这里插入图片描述

攻击者将该链接写入到img标签的src里,访问网页时自动加载图片,也就会自动访问该网址,但是图片已经被设置为不显示了,所以你看不到,你看到的只是404。
在这里插入图片描述

但实际上,你点击了此链接,自动自动加载了图片地址,访问了更改的网址,密码就已经被修改了。

Medium

在这里插入图片描述

与之前代码相比添加了stripos()函数。
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
也就是说
在这里插入图片描述

这两个地方的地址要一样。过滤规则是http报头的Referer参数的值中必须包含主机名。
我们将攻击页面的名字用主机名命名即可绕过。改为10.136.95.72.html

High

在这里插入图片描述

加入了token机制
我们要绕过反CSRF机制,关键是要获取token,我们需要利用用户的cookie在修改密码的页面获取token。但是因为牵扯到了跨域问题,所以我们通过XSS漏洞协助获取Anti-CSRF token。

在这里插入图片描述

这里的Name存在XSS漏洞,
输入
< iframe
src="…/csrf" οnlοad=alert(frames[0].document.getElementsByName(‘user_token’)[0].value) > ,点击submit,成功弹出token。

Impossible
在这里插入图片描述

在原先的基础上增加了PDO机制,还增加了二次验证。

File Inclusion(文件包含漏洞)

File inclusion(文件包含漏洞)是一种常见的依赖于脚本运行而影响web应用程序的漏洞,许多脚本语言支持使用包含文件(include file),这种功能允许开发者把可使用的代码插入到单个文件中,在需要的时候将他们包含在特殊功能的代码中,然后,包含文件中的代码被解释,就好像它们插入到包含指令的位置一样,当应用程序使用攻击者控制的变量建立一个可执行代码的路径,允许攻击者在运行时执行那个文件时,就会导致文件包含漏洞。

Low

在这里插入图片描述

服务器端对page参数没有做任何的过滤操作。
点击链接,服务器会包含相应的文件,并将结果返回。
特别地,服务器包含文件时,不管文件后缀是否是php,都会尝试当作php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。
本地文件包含
构造url
http://10.136.95.72/DVWA-master/vulnerabilities/fi/?page=F://123.txt
在这里插入图片描述

2.远程文件包含
构造url
http://10.136.95.72/DVWA-master/vulnerabilities/fi/?page= https://www.baidu.com/
在服务器的php配置文件中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有进行检查,就可能会导致任意远程代码执行。

Medium

在这里插入图片描述

增加了str_replace()函数,将"http:// “、“https://”、 " …/”、"…"替换为空字符
我们可以使用双写绕过str_replace()函数,但是经过编码后的url是不能绕过替换规则的。
我们采用的是绝对路径来包含文件,所以替换“…/“和”…\“对这种方式是没有任何影响的。我们依旧可以采用用绝对路径的方式包含文件。

High

在这里插入图片描述

fnmatch(pattern,string,flags),pattern规定要检索的模式,string规定要检查的字符串或文件,flags可选。
要求page参数的开头必须是file,服务器才会去包含相应的文件。
我们可以利用file协议绕过防护策略。
File协议即本地文件传输协议,主要用于访问本地计算机中的文件。
基本格式file:///
构造url:
http://10.136.95.72/DVWA-master/vulnerabilities/fi/?page=file://F:\123.txt
在这里插入图片描述

Impossible

在这里插入图片描述

使用了白名单机制进行防护,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

File Upload(文件上传)

Low
在这里插入图片描述

我们可以看到没有防御措施。直接进行上传即可
我们上传一句话木马。
在这里插入图片描述

在这里插入图片描述

上传成功。

Medium

在这里插入图片描述

增加了限制条件,限制了大小类型,对后缀名称有了限制。我们更改后缀通过burp进行抓包,对后缀名进行修改即可上传成功。具体步骤可参考之前写过的upload-labs博客。

High

在这里插入图片描述

strtolower() 函数把字符串转换为小写。
构造图片一句话木马,两种方法:

  1. 使用notepad++在图片尾部添加一句话木马
  2. 使用命令
    Copy 1.jpg/b+1.php/a 2.jpg
    制作图片马
    在这里插入图片描述

采用%00截断的方式就可以绕过文件名的检查。同样进行抓包改包,具体步骤可参考之前写过的upload-labs博客。
0x00截断原理:系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。
但要注意是应该是文件的16进制内容里的00,而不是文件名中的00 ,就是说系统是按16进制读取文件(或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。

Impossible
在这里插入图片描述

1.$_FILES[字段名][tmp_name]——保存的是文件上传到服务器临时文件夹之后的文件名
2.uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。
3.imagecreatefromjpeg ( filename )函数返回图片文件的图像标识,失败返回false。
4.imagejpeg ( image , filename , quality)从image图像以filename为文件名创建一个JPEG图像,可选参数quality,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。

对上传文件进行了重命名,改为md5值,使得%00截断无法绕过过滤规则,加入了Anti-CSRF token防护CSRF攻击,同时对文件的内容进行了严格的检查,导致攻击者无法上传含有恶意脚本的文件。

Insecure CAPTCHA(不安全验证)

开始可能会有配置问题,出现该问题是因为使用reCAPTCHA没有申请密钥,因此需要手动填入密钥,打开提示的配置文件,找到
$_DVWA[ ‘recaptcha_public_key’ ] = ‘’;
$_DVWA[ ‘recaptcha_private_key’ ] = ‘’;
改为:
$_DVWA[ ‘recaptcha_public_key’ ] = ‘6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg’;
$_DVWA[ ‘recaptcha_private_key’ ] = ‘6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ’;

即可以了。

CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。

Low

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

根据源代码可以看到,服务器将改密操作分成了两步。
第一步检查用户输入的验证码,验证通过后,服务器返回表单;
第二步客户端提交post请求,服务器完成更改密码的操作。
但是这里,服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码。所以我们可以构造参数绕过验证过程。
抓包
在这里插入图片描述

通过更改step参数绕过验证码
在这里插入图片描述

更改成功
在这里插入图片描述

Medium

在这里插入图片描述

相较于之前,再进行第二部验证时,加入了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码的检查。
我们依然可以通过伪造参数绕过验证。
在这里插入图片描述

我们对这两个地方进行修改
在这里插入图片描述

更改成功

在这里插入图片描述

High

在这里插入图片描述

与之前相比,服务器的验证逻辑是当$resp返回结果是false,并且参数g-recaptcha-response不等于hidd3n_valu3或者http报头的HTTP_USER_AGENT参数不等于reCAPTCHA时,就认为验证码输入错误,反之则认为已经通过了验证码的检查。我们更改参数recaptcha_response_field以及http包头的User-Agent进行绕过。
在这里插入图片描述

更改参数g-recaptcha-response以及User-Agent:
在这里插入图片描述

更改成功
在这里插入图片描述

Impossible

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

与之前相比,增加了Anti-CSRF token 机制防御CSRF攻击,利用PDO技术阻止了sql注入,验证过程从两部分变成了整体一部分,验证码无法绕过,同时要求用户输入之前的密码,进一步加强了身份认证,还对新密码进行了重命名,改为了MD5值。

SQL Injection(SQL注入)

Low

在这里插入图片描述

根据源代码,我们可以看到id的值是用’’包裹起来的,并且没有加其他限制条件。
进一步验证
在这里插入图片描述

直接可以看到有两个地方可以进行注入,所以就不需要再次使用order by爆字段了。
再用联合注入语句爆出数据库名
在这里插入图片描述

然后就常规思路爆出数据表名、数据表中的字段名以及想要查询的所有数据。具体操作见之前sqli-labs博客。

Medium

在这里插入图片描述

与之前相比,多了mysqli_real_escape_string()函数。
mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。编码的字符是 NUL(ASCII 0)、\n、\r、\、’、" 和 Control-Z。

因为输入框被取消了,只能选择数字,所以我们通过抓包来进行注入

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

但是发现‘被转义了
在这里插入图片描述

尝试采用整形注入
在这里插入图片描述

回显正常
在这里插入图片描述

接下来就可以进行常规操作了~

High

在这里插入图片描述

用之前相比,加入了LIMIT 1,希望可以只输出一个结果。
虽然添加了LIMIT 1,但是我们可以通过#将其注释掉,直接进行手工注入。
在这里插入图片描述

接下来一样,常规操作~
需要特别提到的是,High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转。这样做的目的是为了防止进行一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也无法进行进一步注入。

Impossible

在这里插入图片描述

采用了PDO机制,有效地防御了SQL注入,同时只有返回的查询结果数量为一时,才会成功输出,并且Anti-CSRFtoken机制的加入了进一步提高了安全性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值