DVWA靶场writeup

Brute Force(爆破)

Security Level: low

  1. 便在登录框输入:
    尝试一下admin 密码123456

    出现incorrect
  2. 打开burpsuite 拦截包 进行爆破
  3. 找到包 发送到Intruder
  4. send to intruderIntruderpositions选择中,先点击clear$清除所有的变量。添加变量并将attack type的值设置为cluster bomb(集束炸弹)

攻击类型有四种:

  • Sniper: 单参数爆破,多参数时使用同一个字典按顺序替换各参数,只有一个数据会被替换
  • Battering ram: 多参数同时爆破,但用的是同一个字典,每个参数数据都是一致的
  • Pichfork: 多参数同时爆破,但用的是不同的字典,不同字典间数据逐行匹配
  • Cluster bamb: 多参数做笛卡尔乘积模式爆破
  1. 可以看到左侧的payload,只要把包中的变量添加好之后,即可进行设置参数字典,分别给用户名变量和password变量导入字典(本地)

    payload类型选简单列表即可,因为是导入字典进行爆破,如果有其他需求也可按照所示进行配置。
  2. 配置好字典之后 start attack(开始爆破)
  3. 会弹出枚举框,按照length降序排列 等待爆破完成
  4. length的长度与其他的不同的即是破解成功的用户名和密码

    可以看到admin password组合的回显长度明显不同,包响应也可以看出破解成功。

Security Level: Medium

相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义,把其中的字符串给过滤掉了,基本上能够抵御sql注入攻击,那低等级时候用到的注入就失效了,需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。所以我们直接用爆破方法即可,和low级的一样。

Medium部分原文链接:https://blog.csdn.net/qq_40216188/article/details/129417395

Security Level: High(暂时预留一下)

Command Injection(命令注入)

Security Level: low

  1. 输入IP地址,发现跟正常ping相同,可以ping通且回显正常,所以考虑在执行ping命令同时执行其他命令,也就是命令注入。

命令连接符:

  • & :前面一个命令无论是否执行,后面的命令都能执行,两个命令都执行

  • &&:前面一个命令执行成功后,才能执行后面一个命令,两个命令都执行

  • |:前面一个命令无论是否执行,后面的命令都能执行且只执行后面一个

  • ||:前面一个命令不能正常执行后,才能执行后面一个命令
    1. 这里用|连接我们的命令
    2. 显然我们可以执行系统命令,注入成功

    Security Level: medium

    1. 这里查看源码 发现只是增加了对&&;的过滤,所以我们仍然可以使用&或者|进行其他命令的执行(比如系统命令)。
    2. 比如执行dir命令查看当前目录下的文件

    Security Level: High

    1. 发现之前的注入没法用了 原因是其添加了更多的过滤:
      alt text
    2. 但是仔细观察源码发现对于|的过滤有一点漏洞,这里是仅仅过滤了| ,也就是|+一个空格,所以只要|后紧跟命令,不添加空格即可成功注入。

    Cross Site Request Forgery (CSRF)(跨站请求伪造)

    CSRF(跨站请求伪造)是一种恶意的网络攻击,它利用用户在当前已登录的Web应用中的身份凭证,诱骗用户执行他们本不打算执行的操作。

    一个成功的CSRF攻击依赖于以下几个条件:

    • 用户已登录目标网站: 用户在浏览器中有目标网站的有效会话Cookie。
    • 目标网站完全依赖Cookie等凭证进行身份验证: 服务器收到请求后,只验证Cookie,不验证请求的来源。
    • 用户被诱骗访问恶意页面: 攻击者通过邮件、聊天工具、论坛等渠道发送链接,诱使用户点击。

    防御CSRF的核心思想是:增加一个攻击者无法伪造的“暗号”。

    以下是几种主流的防御方法:

    1. CSRF Token(最常用、最有效)

    原理: 服务器在返回给用户的表单中,嵌入一个随机生成的、不可预测的字符串(Token)。当用户提交表单时,必须将这个Token一并送回服务器。服务器会验证这个Token是否有效。

    为什么有效: 恶意网站B无法知道这个Token的值是什么,因为它无法读取来自网站A的响应内容(受同源策略限制),因此它构造的请求中无法包含正确的Token。

    1. SameSite Cookie 属性

    原理: 这是一种浏览器端的防御机制。在设置Cookie时,可以指定 SameSite 属性。

    • Strict:最严格,浏览器完全禁止在跨站请求中发送此Cookie。

    • Lax:宽松一些,允许在安全的HTTP方法(如GET)且是顶级导航(如点击链接)的跨站请求中发送Cookie,但POST请求等不行。

    • None:允许跨站发送,但必须同时设置 Secure 属性(仅限HTTPS)。

    为什么有效: 它直接从源头(浏览器)阻止了Cookie在跨站场景下被发送,使得攻击者无法利用用户的登录凭证。

    1. 验证请求来源(Referer / Origin Header)

    原理: 服务器检查HTTP请求头中的 OriginReferer 字段,判断请求是否来自合法的源(即自己的网站域名)。

    缺点: 有些用户出于隐私考虑会禁用Referer头,因此这种方法可以作为辅助手段,但不建议作为唯一防御。

    Security Level: low

    1. 这里尝试输入密码改为1234,发现浏览器的url栏显示了一些参数(包括我们的输入),这意味着 我们完全可以直接构造这个url请求,而不是登录当前这个网站,来达到修改密码的目的,换言之,我们完全可以构造一个自己想要的url请求,让其他用户在其不知道的情况下点击,进而达到修改他人账户密码的目的。
    1. 这里对源码进行分析:
      发现其仅仅对”password_new”和”password_conf”进行一致性验证,并没有经过任何过滤之类的操作,完全可以执行CSRF攻击。

    Security Level: medium

    1. 这里查看源码,发现其对请求的来源进行了验证,这里是通过Referer字段进行验证
    2. 当我们通过直接构造url进行直接的请求时,回显”That request didn’t look correct”,这时就不能直接通过单纯的让其他用户点击我们构造的url请求的链接了, 在此基础上,我们应该抓包下来这个请求,并修改其Referer字段,让服务器认为是由用户本人做出的行为。
    3. 这里我们将在网站上的修改请求和直接构造的url请求抓包:

    网站上的:

    伪造的:

    4. 这里可以看出伪造的请求没有Referer字段,然后构造其Referer与我们在网站上的Referer字段一致,可以看到修改成功

    Security Level: High

    1. 这次修改密码,发现url栏有回显token
    2. 查看源码发现有Anti-CSRF token的验证

      由于Anti-CSRF Token机制的加入,攻击者通常无法直接获取到Token值,因为Token是随会话变化且与用户会话关联的,并且受到同源策略的保护。但是,在某些情况下,如果应用存在其他安全漏洞或设计缺陷,仍然可能被利用。

    以下是几种可能的方法:

    方法一:利用Token生成或验证的漏洞

    这是最直接的攻击思路,针对Token机制本身的弱点

    • Token可预测

    场景:如果Token不是真正的随机数(例如,基于时间、用户ID等可预测因素生成)。

    攻击:攻击者可以注册一个账户,分析自己账户Token的生成规律,然后推算目标用户的Token。

    实验复现:编写一个生成算法有缺陷的Token(如md5(username + timestamp)),然后尝试预测。

    • Token与会话未绑定

    场景:Token只验证值是否正确,但不验证这个Token是否属于当前会话的用户。

    攻击:攻击者可以先登录自己的账户,获取一个有效的Token,然后将这个Token用于构造给目标用户的恶意请求。如果服务器接受了,说明存在漏洞。

    实验复现:用两个浏览器(用户A和用户B),用A的Token替换到B的请求中,看是否成功。

    • Token在GET请求中

    场景:Token通过URL参数传递(例如/change-password?token=abc123)。

    攻击:如果Token通过URL泄露(例如被浏览器历史、Referer头、日志记录),攻击者就能直接获取并使用它。

    实验复现:故意将Token放在GET请求的URL中,然后观察浏览器的网络日志或Referer,看是否能被第三方网站捕获。

    方法三:利用用户会话的固有风险

    会话固定攻击

    场景:攻击者能迫使受害者使用一个由攻击者已知的会话ID(和对应的CSRF Token)。

    攻击:攻击者先获取一个有效的{Session ID, CSRF Token}对,然后通过某种方式(如XSS或链接注入)让受害者使用这个会话。之后,攻击者就可以用他知道的Token来构造请求了。

    同源策略: 同源策略是浏览器实施的一种核心安全机制,它阻止一个”源”的文档或脚本与另一个”源”的资源进行交互。它的目的是隔离潜在的恶意文档,保护用户数据免受未经授权的访问。 同源就是协议 域名 端口相同。

    1. 这里的场景是token已经通过url泄露,所以就可以通过一些捕获手段获取到,再进行url的构造,将token拼接到表单中,就可以完成攻击了。

    SQL Injection(SQl 注入)

    SQL注入基本步骤

    SQL注入的基本步骤通常包括以下几个阶段:

    1. 判断注入类型:首先需要判断注入点是数字型还是字符型。数字型注入不需要闭合字符,而字符型注入需要通过单引号或双引号来闭合。

    2. 确定可控列数:通过ORDER BY语句判断SQL查询中可控制的列数。

    3. 获取数据库信息:利用UNION SELECT语句结合information_schema数据库获取目标数据库的信息,包括数据库名、表名和列名。

    4. 提取数据:通过构造合适的SQL查询语句提取目标数据,如用户名和密码等。

    Security Level: low

    1. 使用常规的SQL注入方式:
      输入1 查看返回数据:

      1'查看返回数据,显示报错:

      继续输入1' and '1' ='1,查看返回数据:

      根据id=1'报错和id=1'and '1'='1正确,判断需要闭合字符,所以是字符型注入

    2. 接下来通过order by语句判断可控列数:

      #是注释掉后面的语句



    3. 说明字段只有两列,然后来利用sql语句获取信息:
      输入1' union select database(),user()#

    查看当前数据库名称和执行当前查询的用户名


    1. 然后就可以通过构造合适的SQL查询语句提取目标数据:
      输入1' union select table_name,table_schema from information_schema.tables where table_schema= database()#


    2. 可以看到当前数据库下的表名为guestbookusers

    3. 继续查询users表下的数据:
      输入1' union select version(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#

    4. 继续查询users 表中的user、password字段数据
      输入1' union select user,password from users#


    5. 可以看到成功爆出用户名、密码,密码采用 md5 进行加密,可以用一些md5的破解手段获取密码。

    防御SQL注入

    防御SQL注入的有效方法包括:

    • 过滤危险字符:使用正则表达式匹配和过滤SQL关键字,如SELECT、UNION、WHERE等。

    • 使用预编译语句:使用PDO或其他数据库抽象层,通过占位符进行数据库操作,而不是直接将变量拼接到SQL语句中。

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇