DVWA 靶场(含代码审计)

news/2025/2/22 11:28:54

DVWA 靶场的通关

刚建立和使用

输入

http://dvwa:8898/setup.php  //进入

用户名 密码

dvwa
你自己设计的

想要进入数据库

点击creat

用户名 密码

admin
password

Attack type

Sniper模式

在Sniper模式下,Payload字典用于逐个替换请求中标记的位置。例如,如果一个表单需要用户名和密码,Sniper会依次尝试不同的用户名和密码组合,直到找到有效的登录凭证或确定该字段不存在漏洞1。

Battering Ram模式

Battering Ram模式则是在所有标记位置插入相同的Payload。这种模式适用于需要在多个地方输入相同数据的场景,如验证码或会话令牌验证1。

Pitchfork模式

Pitchfork模式通过多个Payload字典组合使用,每个字典针对不同的输入位置。这种方式适用于需要关联输入的场景,例如,用户名列表和对应的密码列表需要一一匹配1。

Cluster Bomb模式

Cluster Bomb模式生成所有可能的组合,适用于完全独立的多参数组合爆破。这种模式可以有效地测试各种复杂的输入组合,帮助发现潜在的漏洞1。

payload字典是一些预设的参数集合 用于构造和发送攻击请求 这些参数可以是用户名 密码 url参数等 至于这些参数那里来的可以从一些现有的字典获取(github)

token值

  • 服务器随机生成的随机字符串 用于验证请求的合法性 每次用户访问页面时 服务器会生成一个新的token (他是有期限的 过期了需重新获得)
  • 登录场景:用户提交用户名和密码时,还需附带服务器返回的Token值。

  • 防御机制

    • 防止CSRF攻击:攻击者无法伪造包含有效Token的请求。
    • 阻断自动化爆破:每次爆破需携带最新Token,而Token需从服务器动态获取,导致传统字典爆破失效。

+++

shell_exec函数

  • Php 中的一个内置函数 作用是通过shell环境执行命令
  • 它允许PHP代码在服务器的操作层面执行外部命令

+++

Low Mudium High

Brute Force

low

这里直接在登录框中随便输入一些提交 并用bp拦截

在顶部看到了username = password = 这里直接发送到intruder 中 攻击模式选择cluster bomb ->分别在username = password = 后面用add 载荷将你写的东西包住 之后payload set 中 在1 和 2 中分别导入字典 之后直接开始攻击 这里是否攻击成功主要取决于你的字典中东西的组合是否可以匹配到正确的用户名和密码

medium

这里于low的区别在于这里增加了sleep ,也就是用户每一次输入失败都会导致暂停两秒之后才可以登录 所以这只是延长了我们的爆破时间而已 步骤和上述没有什么区别

+++

Command Injection

**原理 **:

命令注入(Command Injection)是一种严重的安全漏洞,通常发生在应用程序未能正确验证、过滤或转义用户输入的情况下。攻击者可以通过构造特殊的命令字符串如8.8.8.8 && net user,利用这一漏洞执行外部程序或系统命令,从而达到非法获取数据或控制服务器的目的1。

low
它让我们输入ip 地址 我们输入127.0.0.1 它这里出现了ping 也就是和我们的cmd有类似的效果 但是我们尝试输入ipoconfig发现不可以

这是因为ipconfig 不是一个ip地址 所以不给 但是 我们输入127.0.0.1|ipconfig 就可以了

  • 这里我们要说一下命令连接符
    & :前面一个命令无论是否执行,后面的命令都能执行,两个命令都执行
    &&:前面一个命令执行成功后,才能执行后面一个命令,两个命令都执行
    |:前面一个命令无论是否执行,后面的命令都能执行且只执行后面一个
    ||:前面一个命令不能正常执行后,才能执行后面一个命令

medium

代码审计

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {       //检查是否通过Post提交submit
	// Get input
	$target = $_REQUEST[ 'ip' ];      //用request 超全局变量将ip地址交给target

	// Set blacklist
	$substitutions = array(  //建立黑名单过滤
		'&&' => '',       
		';'  => '',
	);

	// Remove any of the characters in the array (blacklist).
	$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

	// 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>";  //这是html中的一个标签 全程为preformation 叫预格式化处理 使文本按照原始输入的格式在网页显示
}

?>

这里发现黑名单禁止了&& 但是没有禁止| 或者 || 所以还是可以执行的

原理:利用未被过滤的符号拼接额外的命令 后端直接拼接用户输入到系统命令中

+++

CSRF跨站请求伪造

原理:

  • 它利用的使网站对用户浏览器的信任 攻击者通过伪造用户端的浏览器请求 向访问一个用户曾经访问过的网站发送出去恶意命令 使目标网站接收并误认为是用户的真实操作而执行命令

  • 如A为存在CSRF漏洞的网站 B为攻击者恶意搭建的网站 C为A网站的合法用户 用户A登录A网站之后 网站A就产生了cookie 并且返回到浏览器 这时用户A要是没有推出网站 并在同一浏览器中访问网站B 浏览器接受到恶意代码之后根据网站B的请求在用户不知情的情况下向A发出请求 这时候网站A并不知道这个请求是B发起的 所以就以C的权限出路请求 造成了 恶意代码被执行

low

这里显示要修改密码 我们先输入两个一致的密码在之后提交 发现Password changed 我们发现url框中出现了疑似我们更改密码的

password_new=1234&password_conf=1234&Change=Change#
//这里new 是指我们第一次输入的密码 conf 是第二次输入的密码

那么我们考虑输入两次不一样的密码 之后提交 发现提交失败 但是我们尝试在url中将conf=后面的密码修改并提交 发现提交成功了!

漏洞 在于我们可以不通过它给的修改密码的地方而直接在url中修改 意味着我们可以通过控制url 传参在网站之外执行更改密码的操作

源码分析

<?php

if( isset( $_GET[ 'Change' ] ) ) {
	// Get input
	$pass_new  = $_GET[ 'password_new' ];    //通过get传参获得两个变量的值
	$pass_conf = $_GET[ 'password_conf' ];

	// Do the passwords match?
	if( $pass_new == $pass_conf ) {
		// They do!           //从数据库中查询
		$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
		$pass_new = md5( $pass_new );

		// Update the database
		$current_user = dvwaCurrentUser();         //修改密码
		$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . $current_user . "';";
		$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

		// Feedback for the user       //返回
		$html .= "<pre>Password Changed.</pre>";
	}
	else {
		// Issue with passwords matching
		$html .= "<pre>Passwords did not match.</pre>";
	}

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

?>

Medium

源码分析

if (stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== false) {
    // 通过验证,允许请求 
} else {
    // 拒绝请求(可能是CSRF攻击)
}

//这里通过$_SERVER['HTTP_REFERER']检查http refer 头是否包含当前的服务器域名 是一种常见的CSRF防御手段

漏洞在于我们可以直接通过bp增加或者修改refer 头啊

这里我们先输入new 和 conf 一致的密码 之后change 并用bp 拦截 , 发现里面有Refer 字段

我们再输入new 和 conf不一样的密码 之后提交显示did’t match 之后在url框中继续回车 然后bp拦截 发现里面没有Refer 字段 我们手动加入如(这里面是我们想要修改的密码)

Referer:dvwa:8898/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

之后forword 发现change 成功!!

High

这里我们用bp拦截 发现里面的第一行Get那里面有token 那么我们在拦截之后在上两关的基础上在Referer后面加上&user_token=c018e2889915ff0d2f1b754685469fba# (get那里获得的token) 就change 成功了!

+++

File Inclusion 文件包含

原理

  • 是指当服务器开启特定配置选项时 攻击者可以通过用户输入来包含并执行服务器上的任意文件 分为 本地文件包含lfi 远程文件包含rfi

  • LFI(Local File Inclusion)

    • 定义:使用文件包含函数包含执行本地(Web应用所在主机)文件。
    • 危害:可以查看系统任意文件内容,如果具备一些条件,也可以执行命令1。

    RFI(Remote File Inclusion)

    • 定义:当服务器开启 allow_url_include 选项时,可以通过 PHP 的某些特性函数(如 include(), require())利用 URL 去动态包含远程文件。
    • 危害:可以直接执行任意命令

low

+++

快马加鞭更新ing …


http://www.niftyadmin.cn/n/5862188.html

相关文章

如何在 Mac 上安装并配置 JDK 环境变量

如何在Mac上安装并配置JDK环境变量 在开发过程中&#xff0c;许多应用和框架都需要使用Java&#xff0c;尤其是使用Java开发的应用程序。如果你是Mac用户&#xff0c;以下是安装并配置JDK环境变量的步骤&#xff0c;确保你能顺利运行Java程序。 步骤 1&#xff1a;下载JDK 访…

智能硬件-01智能停车场

行业背景 随着现代人们生活水平的提高&#xff0c;私家车辆在不断增加&#xff0c;小区将面临着临时车用户要多于固定车用户的窘境&#xff0c;尤其是在早晚高峰时段车辆出入拥堵&#xff0c;对小区的车辆管理难度越来越大&#xff0c;对停车场收费员的岗位要求越来越高&#…

Minio集群模式报错解决:Unable to use the drive XXX: drive not found, will be retried

Minio集群模式报错解决&#xff1a;Unable to use the drive XXX: drive not found, will be retried 部署环境说明问题描述问题分析验证数据目录无数据启动&#xff1a;验证数据目录有数据启动&#xff1a; 问题总结 部署环境说明 节点共规划出四个节点&#xff0c;并且已经进…

西门子plcs7 200 smart中Modbus RTU Slave详解

在西门子 S7-200 SMART PLC 中使用 Modbus RTU 协议进行从站通信时&#xff0c;使用 MBUS_INIT 和 MBUS_SLAVE 两个块来实现。 1. MBUS_INIT&#xff08;Modbus 初始化块&#xff09; MBUS_INIT 用于初始化 Modbus 通信设置&#xff0c;它会配置通信的基本参数。以下是各个输…

gitlab 解决双重认证无法登录remote: HTTP Basic: Access denied.

问题&#xff1a;gitlab开启了双因素认证 如进行了 OAuth configuration 在进行git操作时如下提示 remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead o…

详解分布式ID实践

引言 分布式ID&#xff0c;所谓的分布式ID&#xff0c;就是针对整个系统而言&#xff0c;任何时刻获取一个ID&#xff0c;无论系统处于何种情况&#xff0c;该值不会与之前产生的值重复&#xff0c;之后获取分布式ID时&#xff0c;也不会再获取到与其相同的值&#xff0c;它是…

基于Flask的租房信息可视化系统的设计与实现

【Flask】基于Flask的租房信息可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展&#xff0c;租房市场日益繁荣&#xff0c;信息量急剧增加&#xff…

物联网与大数据:揭秘万物互联的新纪元

物联网与大数据&#xff1a;揭秘万物互联的新纪元 在当今高速发展的科技时代&#xff0c;物联网&#xff08;IoT&#xff09;和大数据无疑是推动各行各业转型和创新的重要力量。通过将日常生活中的各种设备连接至互联网&#xff0c;并利用大数据技术进行实时分析&#xff0c;我…