DVWA 靶场(含代码审计)

embedded/2025/2/24 15:48:31/

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

代码审计

<?phpif( 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 传参在网站之外执行更改密码的操作

源码分析

<?phpif( 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.ppmy.cn/embedded/164855.html

相关文章

【Linux】UDP协议

文章目录 &#x1f449;传输层&#x1f448;再谈端口号端口号范围划分认识知名端口号netstatpidof &#x1f449;UDP协议&#x1f448;UDP协议端格式UDP的特点UDP的缓冲区 UDP的缓冲区UDP使用注意事项基于UDP的应用层协议 &#x1f449;总结&#x1f448; &#x1f449;传输层&…

第1章大型互联网公司的基础架构——1.9 LSM Tree

**LSM Tree&#xff08;Log-Structured Merge Tree&#xff09;是一种对高并发写数据非常友好的键值存储模型&#xff0c;同时兼顾了查询效率。**LSMTree是我们下面将要介绍的NoSQL数据库所依赖的核心数据结构&#xff0c;例如BigTable.、HBase、 Cassandra、TiDB 等。 1.9.1 …

如何把图片或者图片地址存到 MySQL 数据库中以及如何将这些图片数据通过 JSP 显示在网页中

如何优雅地管理图片&#xff1a;从MySQL数据库存储到JSP展示的全流程解析 在互联网时代&#xff0c;一张引人入胜的图片往往能为网站带来巨大的流量。而作为开发者的我们&#xff0c;如何高效地管理和展示这些图片资源则成为了一项重要的技术挑战。今天&#xff0c;我们就一起…

计算机专业知识【数据库读操作:不可重复读、脏读及其他现象解析】

在数据库的并发操作场景中&#xff0c;不同的读操作方式会引发不同的数据读取问题。理解这些问题对于确保数据库数据的一致性和准确性至关重要。下面我们将详细介绍数据库中常见的几种读问题&#xff0c;包括不可重复读、脏读等。 一、基本概念&#xff1a;事务与并发控制 在…

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…

第1章:LangChain4j的聊天与语言模型

LangChain4J官方文档翻译与解析 目标文档路径: https://docs.langchain4j.dev/tutorials/chat-and-language-models/ 语言模型的两种API类型 LangChain4j支持两种语言模型&#xff08;LLM&#xff09;的API&#xff1a; LanguageModel&#xff1a;这种API非常简单&#xff0c;…

k2路由器登录校园网

教程1刷入Breed&#xff0c;并手动刷入Padavan固件&#xff1a;斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址&#xff1a; 我用的是&#xff1a; Padavan 登录的网址是 192.168.123.1 Padavan配置教程&#xff1a; 先用网线连上校园网&#…

SQL ①-数据库 || MySQL

这里是Themberfue 数据库 ✨进入到目前的学习阶段中&#xff0c;数据库相信大家并不陌生&#xff0c;但是如果要说出概念的话那可能还是有点困难的&#xff0c;这里我就简单罗列出数据的一些相关概念&#xff0c;虽然这部分内容只是理论知识&#xff0c;但是非常重要。 &…