DVWA的安装及刷题实战

您所在的位置:网站首页 dvwa的impossible可以破解吗 DVWA的安装及刷题实战

DVWA的安装及刷题实战

2023-05-05 20:50| 来源: 网络整理| 查看: 265

背景

学习渗透测试,特别是 Web 渗透,最头疼的无疑就是寻找靶机环境,通常是不同的漏洞需要找不同的靶机源码。DVWA是最适合的初级环境,几年前有搭建实现过,现在重新复现一下,并记录笔记

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

DVWA

DVWA 一共包含了十四个攻击模块,包含了 OWASP TOP10 的所有攻击漏洞的练习环境,一站式解决所有 Web 渗透的学习环境。分别是:

Brute Force(暴力(破解)) Command Injection(命令行注入) CSRF(跨站请求伪造) File Inclusion(文件包含) File Upload(文件上传) Insecure CAPTCHA (不安全的验证码) SQL Injection(SQL注入) SQL Injection(Blind)(SQL盲注) Weak Session IDs (弱会话IDs) XSS(DOM)(DOM型跨站脚本) XSS(Reflected)(反射型跨站脚本) XSS(Stored)(存储型跨站脚本) CSP Bypass(内容安全策略) JavaScript Attacks 必要环境 phpStudy DVWA官网 实战篇

从这里开始会进行实战,难度从low开始

Brute Force难度:low

DVWA使用burpsuite爆破破解即可

这里提供github开源的字典库:https://github.com/3had0w/Fuzzing-Dicts

并且low难度没有对特殊字符进行转义,可以使用sql注入

输入:admin’ or 1=1#

通过low难度代码审计,可以发现以下问题:

登录验证仅仅只校验账号是否存在数据库,并做任何限制 也没有对字符串转义,存在sql注入 if( isset( $_GET[ 'Login' ] ) ) { // Get username $user = $_GET[ 'username' ]; // Get password $pass = $_GET[ 'password' ]; $pass = md5( $pass ); // Check the database $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful $html .= "

Welcome to the password protected area {$user}

"; $html .= ""; } else { // Login failed $html .= "Username and/or password incorrect."; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } 难度:medium

因此它的爆破过程与Low难度的过程基本一样,可以参考Low难度中的爆破过程,区别是每一次登录失败后会延时2s,别的就没有什么改动了,总体过程影响不大。

另外在这个Medium难度的源码中,它对防止注入做了很多的工作,像比如说,它使用了mysql_real_escape_string 函数,这个函数可以对字符串中的函数进行转义,一定程度上可以防止sql注入

并且通过medium难度的代码审计,可以发现相比于low难度,有以下改进:

使用mysqli_real_escape_string()转义字符串 当登录失败时,会延迟2秒,sleep( 2 );给字典爆破时间上一定的限制


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3