跳转至内容
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门
折叠

GitHub中文论坛

  1. 主页
  2. 版块
  3. 技术交流
  4. 服务器端的漏洞(相关学习)

服务器端的漏洞(相关学习)

已定时 已固定 已锁定 已移动 技术交流
24 帖子 1 发布者 30.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    changuang
    写于 最后由 编辑
    #4

    什么是访问控制?

    访问控制是对有权执行操作或访问资源的人员或内容施加约束。在 Web 应用程序的上下文中,访问控制依赖于身份验证和会话管理:

    • 身份验证确认用户是他们所说的人。
    • 会话管理可识别同一用户正在发出哪些后续 HTTP 请求。
    • 访问控制确定是否允许用户执行他们尝试执行的操作。

    访问控制被破坏很常见,并且通常存在严重的安全漏洞。访问控制的设计和管理是一个复杂而动态的问题,它将业务、组织和法律约束应用于技术实现。访问控制设计决策必须由人工做出,因此出错的可能性很高。

    微信图片_20240713213609.png

    垂直权限提升

    如果用户可以访问不允许他们访问的功能,则这是垂直权限提升。例如,如果非管理用户可以访问管理页面,他们可以在其中删除用户帐户,则这是垂直权限提升。

    未受保护的功能

    最基本的是,当应用程序不对敏感功能强制实施任何保护时,就会出现垂直权限提升。例如,管理功能可能从管理员的欢迎页面链接,但不能从用户的欢迎页面链接。但是,用户可以通过浏览到相关的管理 URL 来访问管理功能。

    例如,网站可能在以下 URL 上托管敏感功能:

    https://insecure-website.com/admin
    

    任何用户都可以访问它,而不仅仅是在其用户界面中具有功能链接的管理用户。在某些情况下,管理 URL 可能会在其他位置公开,例如文件: robots.txt

    https://insecure-website.com/robots.txt
    

    即使 URL 未在任何地方公开,攻击者也可能能够使用单词列表来暴力破解敏感功能的位置。

    在某些情况下,通过为其提供不太可预测的 URL 来隐藏敏感功能。这就是所谓的“隐蔽安全”的一个例子。但是,隐藏敏感功能并不能提供有效的访问控制,因为用户可能会以多种方式发现混淆的 URL。

    假设一个应用程序在以下 URL 上托管管理功能:

    https://insecure-website.com/administrator-panel-yb556
    

    攻击者可能无法直接猜到这一点。但是,应用程序可能仍会将 URL 泄露给用户。URL 可能会在 JavaScript 中披露,该 JavaScript 根据用户的角色构建用户界面:

    <script>
    	var isAdmin = false;
    	if (isAdmin) {
    		...
    		var adminPanelTag = document.createElement('a');
    		adminPanelTag.setAttribute('https://insecure-website.com/administrator-panel-yb556');
    		adminPanelTag.innerText = 'Admin panel';
    		...
    	}
    </script>
    

    如果用户是管理员用户,则此脚本会添加指向用户 UI 的链接。但是,包含 URL 的脚本对所有用户都是可见的,无论其角色如何。

    基于参数的访问控制方法

    某些应用程序在登录时确定用户的访问权限或角色,然后将此信息存储在用户可控制的位置。这可能是:

    • 一个隐藏的字段。
    • Cookie。
    • 预设查询字符串参数。

    应用程序根据提交的值做出访问控制决策。例如:

    https://insecure-website.com/login/home.jsp?admin=true
    https://insecure-website.com/login/home.jsp?role=1
    

    这种方法是不安全的,因为用户可以修改他们无权访问的值和访问功能,例如管理功能。

    水平权限提升

    如果用户能够访问属于其他用户的资源,而不是他们自己的该类型的资源,则会发生水平权限提升。例如,如果员工可以访问其他员工以及他们自己的记录,则这是横向权限提升。

    水平权限提升攻击可能使用与垂直权限提升类似的攻击方法。例如,用户可以使用以下 URL 访问自己的帐户页面:

    https://insecure-website.com/myaccount?id=123
    

    如果攻击者将参数值修改为其他用户的参数值,则可能会访问其他用户的帐户页面以及相关的数据和功能。id

    注意
    这是不安全的直接对象引用 (IDOR) 漏洞的一个示例。当用户控制器参数值用于直接访问资源或功能时,就会出现此类漏洞。
    

    在某些应用程序中,可利用的参数没有可预测的值。例如,应用程序可能使用全局唯一标识符 (GUID) 来标识用户,而不是递增数字。这可以防止攻击者猜测或预测其他用户的标识符。但是,属于其他用户的 GUID 可能会在引用用户的应用程序中的其他位置(例如用户消息或评论)中公开。

    水平到垂直权限提升

    通常,通过损害特权更高的用户,可以将水平权限提升攻击转变为垂直权限提升。例如,水平升级可能允许攻击者重置或捕获属于其他用户的密码。如果攻击者以管理用户为目标并破坏其帐户,则他们可以获得管理访问权限,从而执行垂直权限提升。

    攻击者或许能够使用已针对水平权限提升描述的参数篡改技术访问其他用户的帐户页面:

    https://insecure-website.com/myaccount?id=456
    

    如果目标用户是应用程序管理员,则攻击者将获得对管理帐户页面的访问权限。此页面可能会泄露管理员的密码或提供更改密码的方法,或者可能提供对特权功能的直接访问。

    1 条回复 最后回复
    0
    • C 离线
      C 离线
      changuang
      写于 最后由 编辑
      #5

      实验室:未受保护的管理功能

      此实验室有一个未受保护的管理面板。

      通过删除用户来解决实验室问题。carlos

      • 转到实验室,并通过追加到实验室 URL 进行查看。
      • 请注意,该行会显示管理面板的路径。
      robots.txt/robots.txtDisallow
      
      • 在 URL 栏中,替换为 以加载管理面板。
      /robots.txt/administrator-panel
      
      • 删除。carlos

      实验步骤

      打开实验室,在url后面输入

      robots.txt
      

      可以看到有disallow显示出来
      微信图片_20240713235617.png

      接着在URL后缀后面加入

      administrator-panel
      

      可以看到进入这个画面,然后删除carlos,本次实验完成
      微信图片_20240713235622.png

      1 条回复 最后回复
      0
      • C 离线
        C 离线
        changuang
        写于 最后由 changuang 编辑
        #6

        实验室:URL 不受保护的管理功能

        此实验室有一个未受保护的管理面板。它位于不可预测的位置,但该位置在应用程序中的某个位置公开。

        通过访问管理面板并使用它来删除用户来解决实验室。carlos

        • 使用 Burp Suite 或 Web 浏览器的开发人员工具查看实验室主页的源代码。
        • 请注意,它包含一些 JavaScript,这些 JavaScript 会泄露管理面板的 URL。
        • 加载管理面板并删除 。carlos

        实验步骤

        首先按F12进入到开发者界面,查看主页的源代码

        微信图片_20240714001831.png

        在索引处我们发现了这样的标志,很像URL

        /admin-kj984v
        

        微信图片_20240714001630.png

        随后加再主页后面得到如图所示

        微信图片_20240714001636.png

        1 条回复 最后回复
        0
        • C 离线
          C 离线
          changuang
          写于 最后由 编辑
          #7

          实验室:由请求参数控制的用户角色

          本实验在 中有一个管理面板,用于识别使用可伪造 Cookie 的管理员。/admin

          通过访问管理面板并使用它来删除用户来解决实验室问题。carlos

          您可以使用以下凭据登录自己的帐户:wiener:peter

          • 浏览并观察您无法访问管理面板。/admin
          • 浏览到登录页面。
          • 在 Burp Proxy 中,打开拦截并启用响应拦截。
          • 完成并提交登录页面,并在 Burp 中转发生成的请求。
          • 观察响应设置了 cookie 。将其更改为 .Admin=falseAdmin=true
          • 加载管理面板并删除 。carlos

          实验过程

          进入靶场再URL后输入

          /admin
          

          发现出现了如下图所示界面,由此我们可以伪造cookie管理员来实现渗透

          微信图片_20240714002823.png

          随后我们输入我们注册好的账号,然后打开拦截,随后单击登录
          微信图片_20240714003647.png
          我们把cookie里的所有(后面所有操作同样要进行,不做演示)

          Admin=false
          

          改成

          Admin=true
          

          微信图片_20240714003651.png
          改完后页面多出了管理员的功能

          Admin panel
          

          单击它
          微信图片_20240714003655.png

          随后进入如下页面,删除渗透结束
          微信图片_20240714003659.png

          1 条回复 最后回复
          0
          • C changuang

            什么是路径遍历?

            路径遍历也称为目录遍历。这些漏洞使攻击者能够读取运行应用程序的服务器上的任意文件。这可能包括:

            • 应用程序代码和数据。
            • 后端系统的凭据。
            • 敏感的操作系统文件。

            在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器。

            通过路径遍历读取任意文件

            想象一下,一个显示待售商品图像的购物应用程序。这可能会使用以下 HTML 加载图像:

            <img src="/loadImage?filename=218.png">
            

            URL 采用参数并返回指定文件的内容。映像文件存储在磁盘上的位置。为了返回图像,应用程序将请求的文件名追加到此基目录,并使用文件系统 API 读取文件的内容。换句话说,应用程序从以下文件路径读取:loadImagefilename/var/www/images/

            /var/www/images/218.png
            

            此应用程序不实施针对路径遍历攻击的防御。因此,攻击者可以请求以下 URL 以从服务器的文件系统中检索文件:/etc/passwd

            https://insecure-website.com/loadImage?filename=../../../etc/passwd
            

            这会导致应用程序从以下文件路径读取:

            /var/www/images/../../../etc/passwd
            

            该序列在文件路径中有效,意味着在目录结构中提升一个级别。三个连续的序列从文件系统根级递增,因此实际读取的文件是:../..//var/www/images/

            /etc/passwd
            

            在基于 Unix 的操作系统上,这是一个标准文件,其中包含在服务器上注册的用户的详细信息,但攻击者可以使用相同的技术检索其他任意文件。

            在 Windows 上,和 都是有效的目录遍历序列。以下是针对基于 Windows 的服务器的等效攻击示例:../ *..*

            https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
            
            C 离线
            C 离线
            changuang
            写于 最后由 编辑
            #8
            此主題已被删除!
            1 条回复 最后回复
            0
            • C 离线
              C 离线
              changuang
              写于 最后由 changuang 编辑
              #9

              实验室:用户 ID 由请求参数控制,用户 ID 不可预测

              此实验室在用户帐户页面上存在一个水平权限提升漏洞,但使用 GUID 标识用户。

              若要求解实验室,请找到 的 GUID,然后提交其 API 密钥作为解决方案。carlos

              您可以使用以下凭据登录自己的帐户:wiener:peter

              • 查找 的博客文章。carlos
              • 单击并观察 URL 是否包含他的用户 ID。 记下此 ID。carlos
              • 使用提供的凭据登录并访问您的帐户页面。
              • 将“id”参数更改为保存的用户 ID。
              • 检索并提交 API 密钥。

              实验步骤
              通过登录我们发现,这里涉及到API的消息,然后发给重放器

              微信图片_20240714011753.png

              我们把calor的ID输入到这里,修改掉原有的请求的id

              微信图片_20240714011757.png
              然后我们就获取了calor的API kay

              1 条回复 最后回复
              0
              • C 离线
                C 离线
                changuang
                写于 最后由 编辑
                #10

                * 实验室:用户 ID 由请求参数控制,并带有密码泄露功能

                此实验室具有用户帐户页面,其中包含当前用户的现有密码,并预填充了屏蔽输入。

                若要解决实验室问题,请检索管理员的密码,然后使用它删除用户。carlos

                您可以使用以下凭据登录自己的帐户:wiener:peter

                • 使用提供的凭据登录并访问用户帐户页面。
                • 将 URL 中的“id”参数更改为 。administrator
                • 查看 Burp 中的响应,并观察它是否包含管理员的密码。
                • 登录管理员帐户并删除 。carlos

                实验步骤
                首先我们先正常登录账号,然后审计自己登录的代码,发现在响应的时候,我们找到了自己的密码,说明会泄漏密码,我们修改id为administrator,就可以在响应中得到它的密码
                微信图片_20240714014059.png
                如图所示,我们修改后id后,从右边的响应中获取到了密码,完成了渗透
                微信图片_20240714014103.png

                1 条回复 最后回复
                0
                • C 离线
                  C 离线
                  changuang
                  写于 最后由 编辑
                  #11

                  身份验证漏洞

                  从概念上讲,身份验证漏洞很容易理解。但是,由于身份验证和安全性之间的明确关系,它们通常至关重要。

                  身份验证漏洞可允许攻击者访问敏感数据和功能。它们还会暴露额外的攻击面,以便进一步利用。因此,了解如何识别和利用身份验证漏洞以及如何绕过常见保护措施非常重要。

                  在本次中,我们将解释:

                  • 网站最常用的身份验证机制。
                  • 这些机制中的潜在漏洞。
                  • 不同身份验证机制中的固有漏洞。
                  • 由于实施不当而引入的典型漏洞。
                  • 如何使自己的身份验证机制尽可能健壮。

                  00cfa563-b2dd-4d11-a523-34499fb30871-image.png

                  身份验证和授权之间有什么区别?

                  身份验证是验证用户是否是他们声称的身份的过程。授权涉及验证是否允许用户执行某些操作。

                  例如,身份验证可确定尝试使用用户名访问网站的人是否真的是创建帐户的同一人。Carlos123

                  通过身份验证后,他们的权限将决定他们有权执行的操作。例如,他们可能被授权访问有关其他用户的个人信息,或执行删除其他用户帐户等操作。Carlos123

                  暴力攻击

                  暴力攻击是指攻击者使用试错系统来猜测有效的用户凭据。这些攻击通常使用用户名和密码的单词列表自动进行。自动执行此过程,尤其是使用专用工具,可能会使攻击者能够高速进行大量登录尝试。

                  暴力破解并不总是只是对用户名和密码进行完全随机猜测的情况。通过使用基本逻辑或公开可用的知识,攻击者可以微调暴力攻击,以做出更有根据的猜测。这大大提高了此类攻击的效率。依赖基于密码的登录作为其身份验证用户的唯一方法的网站如果未实施足够的暴力保护,则可能非常容易受到攻击。

                  暴力破解用户名

                  用户名是否符合可识别的模式(例如电子邮件地址)特别容易猜测。例如,通常可以看到格式为 的业务登录。但是,即使没有明显的模式,有时甚至使用可预测的用户名(如.firstname.lastname@somecompany.com或者adminadministrator)

                  在审核过程中,检查网站是否公开披露了潜在的用户名。例如,您是否能够在不登录的情况下访问用户配置文件?即使配置文件的实际内容是隐藏的,配置文件中使用的名称有时也与登录用户名相同。您还应该检查 HTTP 响应,看看是否有任何电子邮件地址被泄露。有时,响应包含高特权用户(如管理员或 IT 支持人员)的电子邮件地址。

                  暴力破解密码

                  密码同样可以是暴力破解的,难度根据密码的强度而有所不同。许多网站采用某种形式的密码策略,迫使用户创建高熵密码,至少从理论上讲,仅使用蛮力更难破解。这通常涉及使用以下方式强制执行密码:

                  • 最小字符数
                  • 小写字母和大写字母的混合
                  • 至少一个特殊字符

                  然而,虽然仅靠计算机很难破解高熵密码,但我们可以使用人类行为的基本知识来利用用户无意中引入该系统的漏洞。用户通常不会使用随机的字符组合创建强密码,而是使用他们可以记住的密码,并尝试将其撬动以适应密码策略。例如,如果不允许,用户可以尝试类似 or 之类的方法。
                  例如:

                  • mypassword
                  • Mypassword1!
                  • Myp4$$w0rd

                  如果策略要求用户定期更改其密码,则用户通常只对其首选密码进行微小的、可预测的更改。
                  例如,

                  • Mypassword1!
                  • Mypassword1?
                  • Mypassword2!.

                  这种对可能的凭据和可预测模式的了解意味着暴力攻击通常比简单地遍历每个可能的字符组合要复杂得多,因此也更有效。

                  用户名枚举

                  用户名枚举是指攻击者能够观察网站行为的变化,以确定给定的用户名是否有效。

                  用户名枚举通常发生在登录页面上,例如,当您输入有效的用户名但密码不正确时,或者当您输入已使用的用户名时,则发生在注册表单上。这大大减少了暴力破解登录所需的时间和精力,因为攻击者能够快速生成有效用户名的候选列表。

                  绕过双因素身份验证

                  有时,双因素身份验证的实现存在缺陷,以至于可以完全绕过它。

                  如果系统首先提示用户输入密码,然后提示用户在单独的页面上输入验证码,则用户在输入验证码之前实际上处于“登录”状态。在这种情况下,值得测试一下,看看你是否可以在完成第一个身份验证步骤后直接跳到“仅限登录”的页面。有时,您会发现网站实际上并没有检查您在加载页面之前是否完成了第二步。

                  1 条回复 最后回复
                  0
                  • C 离线
                    C 离线
                    changuang
                    写于 最后由 编辑
                    #12

                    实验室:通过不同响应枚举用户名

                    此实验室容易受到用户名枚举和密码暴力攻击。它有一个具有可预测用户名和密码的帐户,可以在以下单词列表中找到:

                    候选人用户名

                    • carlos
                    • root
                    • admin
                    • test
                    • guest
                    • info
                    • adm
                    • mysql
                    • user
                    • administrator
                    • oracle
                    • ftp
                    • pi
                    • puppet
                    • ansible
                    • ec2-user
                    • vagrant
                    • azureuser
                    • academico
                    • acceso
                    • access
                    • accounting
                    • accounts
                    • acid
                    • activestat
                    • ad
                    • adam
                    • adkit
                    • admin
                    • administracion
                    • administrador
                    • administrator
                    • administrators
                    • admins
                    • ads
                    • adserver
                    • adsl
                    • ae
                    • af
                    • affiliate
                    • affiliates
                    • afiliados
                    • ag
                    • agenda
                    • agent
                    • ai
                    • aix
                    • ajax
                    • ak
                    • akamai
                    • al
                    • alabama
                    • alaska
                    • albuquerque
                    • alerts
                    • alpha
                    • alterwind
                    • am
                    • amarillo
                    • americas
                    • an
                    • anaheim
                    • analyzer
                    • announce
                    • announcements
                    • antivirus
                    • ao
                    • ap
                    • apache
                    • apollo
                    • app
                    • app01
                    • app1
                    • apple
                    • application
                    • applications
                    • apps
                    • appserver
                    • aq
                    • ar
                    • archie
                    • arcsight
                    • argentina
                    • arizona
                    • arkansas
                    • arlington
                    • as
                    • as400
                    • asia
                    • asterix
                    • at
                    • athena
                    • atlanta
                    • atlas
                    • att
                    • au
                    • auction
                    • austin
                    • auth
                    • auto
                    • autodiscover

                    候选密码

                    • 123456
                    • password
                    • 12345678
                    • qwerty
                    • 123456789
                    • 12345
                    • 1234
                    • 111111
                    • 1234567
                    • dragon
                    • 123123
                    • baseball
                    • abc123
                    • football
                    • monkey
                    • letmein
                    • shadow
                    • master
                    • 666666
                    • qwertyuiop
                    • 123321
                    • mustang
                    • 1234567890
                    • michael
                    • 654321
                    • superman
                    • 1qaz2wsx
                    • 7777777
                    • 121212
                    • 000000
                    • qazwsx
                    • 123qwe
                    • killer
                    • trustno1
                    • jordan
                    • jennifer
                    • zxcvbnm
                    • asdfgh
                    • hunter
                    • buster
                    • soccer
                    • harley
                    • batman
                    • andrew
                    • tigger
                    • sunshine
                    • iloveyou
                    • 2000
                    • charlie
                    • robert
                    • thomas
                    • hockey
                    • ranger
                    • daniel
                    • starwars
                    • klaster
                    • 112233
                    • george
                    • computer
                    • michelle
                    • jessica
                    • pepper
                    • 1111
                    • zxcvbn
                    • 555555
                    • 11111111
                    • 131313
                    • freedom
                    • 777777
                    • pass
                    • maggie
                    • 159753
                    • aaaaaa
                    • ginger
                    • princess
                    • joshua
                    • cheese
                    • amanda
                    • summer
                    • love
                    • ashley
                    • nicole
                    • chelsea
                    • biteme
                    • matthew
                    • access
                    • yankees
                    • 987654321
                    • dallas
                    • austin
                    • thunder
                    • taylor
                    • matrix
                    • mobilemail
                    • mom
                    • monitor
                    • monitoring
                    • montana
                    • moon
                    • moscow

                    要解决实验室问题,请枚举一个有效的用户名,暴力破解此用户的密码,然后访问其帐户页面。

                    • 1.在运行 Burp 的情况下,调查登录页面并提交无效的用户名和密码。
                    • 2.在 Burp 中,转到 HTTP 历史记录>代理并找到请求。突出显示请求中参数的值,并将其发送给 Burp Intruder。POST /loginusername
                    • 3.在 Burp Intruder 中,转到 Positions 选项卡。请注意,该参数会自动设置为有效负载位置。此位置由两个符号表示,例如:。暂时将密码保留为任何静态值。username§username=§invalid-username§
                    • 4.确保选择狙击手攻击类型。
                    • 5.在“有效负载”选项卡上,确保选择了“简单列表”有效负载类型。
                    • 6.在“有效负载设置”下,粘贴候选用户名列表。最后,单击开始攻击。攻击将在新窗口中开始。
                    • 7.攻击完成后,在“结果”选项卡上,检查“长度”列。您可以单击列标题对结果进行排序。请注意,其中一个条目比其他条目长。将对此有效负载的响应与其他响应进行比较。请注意,其他响应包含消息 ,但此响应显示 。记下“有效负载”列中的用户名。Invalid usernameIncorrect password
                    • 8.关闭攻击并返回“位置”选项卡。点按“清除”,然后将参数更改为刚刚标识的用户名。向参数添加有效负载位置。结果应如下所示:usernamepassword
                    username=identified-user&password=§invalid-password§
                    
                    • 9.在“有效负载”选项卡上,清除用户名列表并将其替换为候选密码列表。单击开始攻击。
                    • 10.攻击完成后,查看“状态”列。请注意,每个请求都收到一个带有状态代码的响应,但一个请求除外,该请求获得了响应。这表明登录尝试成功 - 在“有效负载”列中记下密码。200302
                    • 11.使用您标识的用户名和密码登录并访问用户帐户页面以解决实验问题。
                    注意
                    也可以使用单个集束炸弹攻击暴力破解登录。但是,如果可能,首先枚举有效的用户名通常效率更高。
                    

                    实验步骤

                    首先先登录抓到数据包,然后利用bp找到username先进行爆破,后面以爆破密码为核心,做演示(爆破账号的过程没有保存就先算了,过程和爆破密码一样)

                    92f46dc8-8a6a-49e8-9981-5a473dc067a3-image.png

                    把这个数据包发给攻击者,然后添加payload(翻译过来是有效负载),然后点位置,把我们的字典导入。

                    d6470585-91ab-410b-83aa-42f6fce5ff97-1720939062510.png

                    在我们payload中设置简单列表,粘贴我们的密码表,然后但开始攻击

                    d372d9d2-32ab-487f-ad91-476fe5f31ff4-image.png

                    我们主要筛选状态码和长度,明显发现不一样,然后拿这个来试一下密码,尝试登陆一下。

                    6719caff-3c04-465a-88b7-f40f4079e372-716778e1ff81920dcb043ce986b74dd.png

                    最终成功登录,爆破成功!

                    77296873-ab00-4b1b-baa1-e3bab21c1ee1-image.png

                    1 条回复 最后回复
                    0
                    • C 离线
                      C 离线
                      changuang
                      写于 最后由 编辑
                      #13

                      实验室:2FA 简单旁路

                      可以绕过此实验室的双因素身份验证。您已经获得了有效的用户名和密码,但无权访问用户的 2FA 验证码。要解决实验室问题,请访问 Carlos 的帐户页面。

                      您的凭据:wiener:peter
                      受害者的凭据carlos:montoya

                      • 登录您自己的帐户。您的 2FA 验证码将通过电子邮件发送给您。单击“电子邮件客户端”按钮以访问您的电子邮件。
                      • 转到您的帐户页面并记下 URL。
                      • 注销您的帐户。
                      • 使用受害者的凭据登录。
                      • 当系统提示输入验证码时,请手动更改 URL 以导航到 。当页面加载时,实验室就解决了。/my-account

                      实验步骤:

                      首先我们正常登录我们的账户如图所示

                      d4574087-7286-48bb-8aef-5fd040e43982-4bbf674810f65086fb6433fbf2e53e2.png

                      登陆后我们发现我们的URL后面的后缀为

                      my-account?id=???
                      

                      由此可以推断,本次登录,它采用方式为先登录,然后我们如果已知其他的账号密码,即可跳过验证直接登录

                      95733a47-7e0b-4c76-aa1d-b4b1689cb9d7-ace84cf4f1e14db54f2a19740063370.png

                      如图所示,我们登录carlos的账号密码,但是我们没有他的邮箱,所以我们修改URL后缀为

                      my-account?id=carlos
                      

                      就完成了渗透测试
                      c4afa320-a667-4262-897c-cdfc710b71b0-bbbbbb46f40848ae8c338f325ee817a.png

                      1 条回复 最后回复
                      0
                      • C 离线
                        C 离线
                        changuang
                        写于 最后由 编辑
                        #14

                        什么是 SSRF?

                        SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

                        一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

                        在典型的 SSRF 攻击中,攻击者可能会使服务器连接到组织基础结构中的仅限内部的服务。在其他情况下,它们可能能够强制服务器连接到任意外部系统。这可能会泄露敏感数据,例如授权凭据。

                        d0810feb-ad02-450c-b067-f1d5a59627cb-image.png

                        针对服务器的 SSRF 攻击

                        在针对服务器的 SSRF 攻击中,攻击者使应用程序通过其环回网络接口向托管应用程序的服务器发出 HTTP 请求。这通常涉及提供具有主机名的 URL,例如(指向环回适配器的保留 IP 地址)或(同一适配器的常用名称)。

                        127.0.0.1 localhost
                        

                        例如,假设一个购物应用程序允许用户查看特定商店中是否有商品库存。若要提供股票信息,应用程序必须查询各种后端 REST API。它通过前端 HTTP 请求将 URL 传递到相关的后端 API 终结点来实现此目的。当用户查看物料的库存状态时,其浏览器会发出以下请求:

                        POST /product/stock HTTP/1.0
                        Content-Type: application/x-www-form-urlencoded
                        Content-Length: 118
                        
                        stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
                        

                        这会导致服务器向指定的 URL 发出请求,检索库存状态,并将其返回给用户。

                        在此示例中,攻击者可以修改请求以指定服务器本地的 URL:

                        POST /product/stock HTTP/1.0
                        Content-Type: application/x-www-form-urlencoded
                        Content-Length: 118
                        
                        
                        stockApi=http://localhost/admin
                        

                        服务器获取 URL 的内容并将其返回给用户。/admin

                        攻击者可以访问该 URL,但管理功能通常只有经过身份验证的用户才能访问。这意味着攻击者不会看到任何感兴趣的内容。但是,如果对 URL 的请求来自本地计算机,则会绕过正常的访问控制。应用程序授予对管理功能的完全访问权限,因为请求似乎来自受信任的位置。/admin/admin

                        为什么应用程序以这种方式运行,并且隐式信任来自本地计算机的请求?这可能是由于各种原因造成的:

                        • 访问控制检查可以在位于应用程序服务器前面的其他组件中实现。当与服务器建立连接时,将绕过检查。
                        • 出于灾难恢复目的,应用程序可能允许对来自本地计算机的任何用户进行管理访问,而无需登录。这为管理员提供了一种在丢失凭据时恢复系统的方法。这假定只有完全受信任的用户才会直接来自服务器。
                        • 管理接口可能会侦听主应用程序的不同端口号,并且用户可能无法直接访问。

                        这种信任关系,其中来自本地计算机的请求的处理方式与普通请求不同,通常会使 SSRF 成为严重漏洞。

                        针对其他后端系统的 SSRF 攻击

                        在某些情况下,应用程序服务器能够与用户无法直接访问的后端系统进行交互。这些系统通常具有不可路由的专用 IP 地址。后端系统通常受网络拓扑保护,因此它们通常具有较弱的安全态势。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以在不进行身份验证的情况下访问这些功能。

                        在前面的示例中,假设后端 URL 上有一个管理界面。攻击者可以提交以下请求来利用 SSRF 漏洞,并访问管理界面:

                        https://192.168.0.68/admin
                        
                        POST /product/stock HTTP/1.0
                        Content-Type: application/x-www-form-urlencoded
                        Content-Length: 118
                        
                        stockApi=http://192.168.0.68/admin
                        
                        1 条回复 最后回复
                        0
                        • C 离线
                          C 离线
                          changuang
                          写于 最后由 编辑
                          #15

                          实验室:针对本地服务器的基本 SSRF

                          该实验室具有库存检查功能,可从内部系统获取数据。

                          要解决实验室问题,请更改库存检查 URL 以访问管理界面并删除用户。

                          http://localhost/admincarlos
                          

                          浏览并观察您无法直接访问管理页面。/admin
                          访问产品,单击“检查库存”,在 Burp Suite 中拦截请求,并将其发送到 Burp Repeater。
                          将参数中的 URL 更改为 。这应该显示管理界面。

                          stockApihttp://localhost/admin
                          

                          阅读 HTML 以标识要删除目标用户的 URL,即:

                          http://localhost/admin/delete?username=carlos
                          

                          在参数中提交此 URL,以传递 SSRF 攻击。stockApi

                          实验步骤

                          首先我们打开网址,随便点一个产品点数量。

                          db16fd16-bb74-412b-893f-4ef995747c2e-a80bcc2b42bfee1eb6d95b690a16fe4.png

                          随后我们查看bp里的http历史记录,找到POST的请求消息

                          ebfae153-52b5-4004-8099-731c5075e3c0-image.png

                          如图所示,这个就是整体报文和请求消息,这里暴露了socket API接口,我们可以进行SSRF入侵

                          4930dcb4-bb73-492d-9e61-d9b3cd37627c-image.png

                          我们将这段报文发给重发器,然后修改socket API接口,换为http://localhost/admin,这样我们就成功收到了系统管理员的响应报文

                          58fe87cd-2f21-45fd-a705-c3b39f9c6168-7419c589cc6fbb65530d68c089df7ec.png

                          阅读响应报文,找到了对应的删除carlos的路径

                          8822abd4-3a5d-49ed-b9ba-aaf38374ae32-c26b00e23c9e254bd0fac58e4f9177a.png

                          修改socket API,换为删除carlos的路径

                          f5fbb004-3a67-4339-801c-9fe2da1a9c5b-d04722a4bffe62766af8b8a980274b2.png

                          1 条回复 最后回复
                          0
                          • C 离线
                            C 离线
                            changuang
                            写于 最后由 编辑
                            #16

                            实验室:针对另一个后端系统的基本 SSRF

                            该实验室具有库存检查功能,可从内部系统获取数据。

                            要解决实验室问题,请使用库存检查功能扫描内部范围以查找端口 8080 上的管理界面,然后使用它删除用户。192.168.0.Xcarlos

                            • 1.访问一个产品,点击“检查库存”,在 Burp Suite 中拦截请求,并将其发送给 Burp Intruder。
                            • 2.单击“清除§”,更改参数以然后突出显示IP地址的最后一个八位字节(数字),单击“添加§”。
                            stockApihttp://192.168.0.1:8080/admin1
                            
                            • 3.切换到“有效负载”选项卡,将有效负载类型更改为“数字”,然后分别在“从”和“到”和“步骤”框中输入 1、255 和 1。
                            • 4.点击“开始攻击”。
                            • 5.单击“状态”列,按状态代码升序排序。您应该会看到一个状态为 200 的条目,显示管理界面。
                            • 6.单击此请求,将其发送到 Burp Repeater,然后将路径更改为:stockApi/admin/delete?username=carlos

                            实验步骤

                            首先打开网页,选一个商品检查库存

                            ed8b36d0-4331-4add-9c7b-6b9fea9dedf7-7e3678d4a6fbb88247767896473341e.png

                            找到post请求端口,修改API,发送,发现说了一句missing parameter,修改ip地址的最后一位

                            09b1868d-74ae-47a9-aedd-655b28fccfb5-2fdc263b91e55f817cb11ff0b5cc462.png

                            发送到Intruder,对 IP 地址的最后一位“添加有效载荷 §”,type 选择 Number,From 1 To 255 Step 1,然后 Start attack。

                            12ffb29a-cd6c-4219-8d58-9fb80464dcf2-3abcad5b6f463df056f823d4cd412a1.png

                            按状态码排序,可以看到有一个特殊,查看回应报文

                            a04e2f73-4a4c-4f31-afeb-855ad1f4a3a9-941317f74c4c26d21728025feec25ec.png

                            通过回应报文找到删除的API

                            http://192.168.0.138:8080/admin/delete?username=carlos
                            

                            86477a48-085d-4db7-a408-dcaa21e4a1c8-e9a636f0ac89145238ed301e52fa3f7.png

                            利用重发器修改API试验结束

                            97b5545a-c185-479e-a78e-1fefaa480565-1720971051763.png

                            1 条回复 最后回复
                            0
                            • C 离线
                              C 离线
                              changuang
                              写于 最后由 编辑
                              #17

                              什么是文件上传漏洞?

                              文件上传漏洞是指 Web 服务器允许用户将文件上传到其文件系统,而无需充分验证其名称、类型、内容或大小等内容。如果不能正确执行这些限制,可能意味着即使是基本的图像上传功能也可以用于上传任意且具有潜在危险的文件。这甚至可能包括支持远程代码执行的服务器端脚本文件。

                              在某些情况下,上传文件的行为本身就足以造成损害。其他攻击可能涉及对文件的后续 HTTP 请求,通常是为了触发服务器执行该文件。

                              文件上传漏洞是如何产生的?

                              鉴于相当明显的危险,现实网站很少对允许用户上传的文件没有任何限制。更常见的是,开发人员实现了他们认为是稳健的验证,这些验证要么存在固有的缺陷,要么很容易被绕过。

                              例如,他们可能会尝试将危险的文件类型列入黑名单,但在检查文件扩展名时未能考虑解析差异。与任何黑名单一样,也很容易意外遗漏可能仍然危险的更小众的文件类型。

                              在其他情况下,网站可能会尝试通过验证,攻击者可以使用 Burp Proxy 或 Repeater 等工具轻松操纵的属性来检查文件类型。

                              最终,即使是强大的验证措施也可能在构成网站的主机和目录网络中不一致地应用,从而导致可以利用的差异。

                              利用不受限制的文件上传来部署 Web Shell

                              从安全角度来看,最糟糕的情况是网站允许您上传服务器端脚本,例如 PHP、Java 或 Python 文件,并且还配置为以代码形式执行它们。这使得在服务器上创建自己的 Web Shell 变得微不足道。

                              Web 外壳
                              Web Shell 是一种恶意脚本(其实就是木马),攻击者只需向正确的端点发送 HTTP 请求,即可在远程 Web 服务器上执行任意命令。
                              

                              如果您能够成功上传 Web Shell,则可以有效地完全控制服务器。这意味着您可以读取和写入任意文件、泄露敏感数据,甚至使用服务器对内部基础设施和网络外部的其他服务器进行攻击。例如,以下 PHP 单行代码可用于从服务器的文件系统中读取任意文件:

                              <?php echo file_get_contents('/path/to/target/file'); ?>
                              

                              上传后,发送此恶意文件的请求将在响应中返回目标文件的内容。

                              一个更通用的 Web shell 可能看起来像这样:

                              <?php echo system($_GET['command']); ?>
                              

                              此脚本允许您通过查询参数传递任意系统命令,如下所示:

                              GET /example/exploit.php?command=id HTTP/1.1
                              

                              利用有缺陷的文件上传验证

                              在外网,您不太可能找到一个没有像我们在实验室中看到的那样无法抵御文件上传攻击的网站。但是,仅仅因为防御措施到位,并不意味着它们是强大的。有时仍可利用这些机制中的缺陷获取用于远程代码执行的 Web Shell。

                              有缺陷的文件类型验证

                              提交 HTML 表单时,浏览器通常会在请求中发送提供的数据,内容类型为 。这对于发送简单的文本(如您的姓名或地址)很好。但是,它不适合发送大量二进制数据,例如整个图像文件或 PDF 文档。在这种情况下,首选内容类型。

                              POST application/x-www-form-url-encodedmultipart/form-data
                              

                              考虑一个表单,其中包含用于上传图像、提供图像描述和输入用户名的字段。提交此类表单可能会导致请求如下所示:

                              POST /images HTTP/1.1
                                  Host: normal-website.com
                                  Content-Length: 12345
                                  Content-Type: multipart/form-data; boundary=---------------------------012345678901234567890123456
                              
                                  ---------------------------012345678901234567890123456
                                  Content-Disposition: form-data; name="image"; filename="example.jpg"
                                  Content-Type: image/jpeg
                              
                                  [...binary content of example.jpg...]
                              
                                  ---------------------------012345678901234567890123456
                                  Content-Disposition: form-data; name="description"
                              
                                  This is an interesting description of my image.
                              
                                  ---------------------------012345678901234567890123456
                                  Content-Disposition: form-data; name="username"
                              
                                  wiener
                                  ---------------------------012345678901234567890123456--
                              

                              如您所见,对于每个表单的输入,消息正文被拆分为单独的部分。每个部件都包含一个标头,该标头提供有关其相关输入字段的一些基本信息。这些单独的部分还可能包含它们自己的标头,该标头告诉服务器使用此输入提交的数据的 MIME 类型。

                              Content-DispositionContent-Type
                              

                              网站可能尝试验证文件上传的一种方法是检查此特定于输入的标头是否与预期的 MIME 类型匹配。例如,如果服务器只需要图像文件,那么它可能只允许像 和 这样的类型。当服务器隐式信任此标头的值时,可能会出现问题。如果没有执行进一步的验证来检查文件的内容是否确实与假定的 MIME 类型匹配,则可以使用 Burp Repeater 等工具轻松绕过此防御。

                              Content-Typeimage/jpegimage/png
                              
                              1 条回复 最后回复
                              0
                              • C 离线
                                C 离线
                                changuang
                                写于 最后由 changuang 编辑
                                #18

                                实验室:通过 Web Shell 上传远程执行代码

                                该实验室包含易受攻击的图像上传功能。在将用户上传的文件存储到服务器的文件系统之前,它不会对它们执行任何验证。

                                要解决实验室问题,请上传一个基本的 PHP Web Shell 并使用它来泄露文件的内容。使用实验室横幅中提供的按钮提交此机密。/home/carlos/secret

                                您可以使用以下凭据登录自己的帐户:wiener:peter

                                • 1.通过 Burp 代理流量时,请登录您的帐户并注意上传头像图像的选项。
                                  1. 上传任意图片,然后返回您的帐户页面。请注意,您的头像预览现在显示在页面上。
                                • 3.在 Burp 中,转到 HTTP 历史记录>代理。单击筛选器栏以打开 HTTP 历史记录筛选器窗口。在“按 MIME 类型筛选”下,启用“图像”复选框,然后应用更改。
                                • 4.在代理历史记录中,请注意,您的图像是使用对 的请求获取的。将此请求发送到 Burp Repeater。
                                GET/files/avatars/<YOUR-IMAGE>
                                
                                • 5.在您的系统上,创建一个名为 的文件,其中包含用于获取 Carlos 秘密文件内容的脚本。例如:exploit.php
                                <?php echo file_get_contents('/home/carlos/secret'); ?>
                                
                                • 6.使用头像上传功能上传您的恶意PHP文件。响应中的消息确认已成功上传。
                                • 7.在 Burp Repeater 中,将请求的路径更改为指向您的 PHP 文件:
                                GET /files/avatars/exploit.php HTTP/1.1
                                
                                • 8.发送请求。请注意,服务器已执行您的脚本,并在响应中返回其输出(Carlos 的秘密)。
                                • 9.提交解决实验室的密钥。

                                实验步骤

                                首先我们随意上传一个文件

                                aeb401cb-2abb-47ea-b2b3-5b7a98a6e775-76934e08b1e1ea99b4edfd47dec7b33.png

                                随后打开http历史记录按照MIME过滤勾选图片

                                8486e0e3-be79-4381-9ebb-13f53ca15ea6-b70240a3c8deb725b303bd7154358ad.png

                                然后发现历史记录有这么一条信息,URL请求的是刚刚上传的软件,然后发给重放器

                                acf28d00-c08a-4ab2-9d39-4d6a093aaa7d-da647a32e7ea015eaae15b10b2a6f7e.png

                                然后新创一个exploit.php文档,内容填写<?php echo file_get_contents('/home/carlos/secret'); ?>

                                3fdb1f61-6680-49dd-a369-7c1332d32516-3b891175f17ceaaf3389f0e1012bc08.png

                                PHP基本格式如图所示

                                ee9df053-d80e-439c-8bde-b9f3511ff784-c8eca0fb9a5c63c0b3a36ef0e77d1c7.png

                                然后里面填写获取文件的地址

                                013e1661-2db9-4c81-a767-35ea3c6be7cd-3e787aa773e00919747ce31548f359d.png

                                然后上传我们的php文档

                                d7f40af1-1ba3-4417-bae0-9afe2c269216-64da6740ec98851f645709e72cae3d1.png

                                然后修改重发器里面的请求报文,将原来的第一行修改为:GET /files/avatars/exploit.php HTTP/1.1,发送请求,观察页面返回的密码。

                                ee5368cb-335d-437e-ac5f-ceffe799fb56-b63c3e7a9dd1c0e7b5b04d0806fdc82.png

                                然后我们将密码提交,实验完成!

                                0a1ca9e6-deac-4e4f-86e5-dd7688f0a24e-6bb92fd10cb371baf087a1953ee1ace.png

                                1 条回复 最后回复
                                0
                                • C 离线
                                  C 离线
                                  changuang
                                  写于 最后由 编辑
                                  #19

                                  实验室:通过绕过内容类型限制上传 Web Shell

                                  该实验室包含易受攻击的图像上传功能。它试图阻止用户上传意外的文件类型,但依靠检查用户可控的输入来验证这一点。

                                  要解决实验室问题,请上传一个基本的 PHP Web Shell 并使用它来泄露文件的内容。使用实验室横幅中提供的按钮提交此机密。/home/carlos/secret

                                  您可以使用以下凭据登录自己的帐户:wiener:peter

                                  • 登录并上传图像作为您的头像,然后返回您的帐户页面。
                                  • 在 Burp 中,转到 HTTP 历史记录>代理,并注意到您的图像是使用对 的请求获取的。将此请求发送到 Burp Repeater。GET/files/avatars/<YOUR-IMAGE>
                                  • 在您的系统上,创建一个名为 的文件,其中包含用于获取 Carlos 秘密内容的脚本。例如:exploit.php
                                  <?php echo file_get_contents('/home/carlos/secret'); ?>
                                  
                                  • 尝试将此脚本上传为您的头像。响应指示您只能上传 MIME 类型或 .image/jpegimage/png
                                  • 在 Burp 中,返回代理历史记录并找到用于提交文件上传的请求。将此发送到 Burp Repeater。POST /my-account/avatar
                                  • 在 Burp Repeater 中,转到包含请求的选项卡。在与文件相关的邮件正文部分中,将指定的更改为 。
                                  POST /my-account/avatarContent-Typeimage/jpeg
                                  
                                  • 发送请求。请注意,响应是否指示您的文件已成功上传。
                                  • 切换到包含请求的另一个 Repeater 选项卡。在路径中,将图像文件的名称替换为并发送请求。请注意,卡洛斯的秘密在响应中被返回。
                                   GET /files/avatars/<YOUR-IMAGE>exploit.php
                                  
                                  • 提交解决实验室的密钥。

                                  实验流程

                                  首先尝试上传php文档发现不行,只能接受img类型或者png类型

                                  602bf402-2478-441e-98cd-96f1b3f05b9b-563e9c9637e2e8d329b82f7d208b5e7.png

                                  随后打开bp的拦截,上传img,看上传的类型,如下图方框所示

                                  da44a766-1593-4b70-9945-cb4e1bd7e841-edf239c91544feb15b834b82bd506b5.png

                                  然后重新上传php文档,修改上传类型,如下图方框所示

                                  73c59054-3382-47cc-967c-0944082dbf59-edf239c91544feb15b834b82bd506b5.png

                                  成功上传php文档

                                  8c0f2d9a-468b-40e5-b410-b0cc0a06fa9c-563e9c9637e2e8d329b82f7d208b5e7.png

                                  随后和上次实验一样请求密码即可

                                  22154fa9-239c-4047-8af5-3b5016c68f05-a72b24679c94b3fd1b0a6ea45d2cbe7.png

                                  1 条回复 最后回复
                                  0
                                  • C 离线
                                    C 离线
                                    changuang
                                    写于 最后由 编辑
                                    #20

                                    什么是操作系统命令注入?

                                    OS 命令注入也称为 shell 注入。它允许攻击者在运行应用程序的服务器上执行操作系统 (OS) 命令,并且通常会完全破坏应用程序及其数据。通常,攻击者可以利用操作系统命令注入漏洞来破坏托管基础结构的其他部分,并利用信任关系将攻击转移到组织内的其他系统。

                                    有用的命令

                                    识别操作系统命令注入漏洞后,执行一些初始命令以获取有关系统的信息非常有用。以下是一些在 Linux 和 Windows 平台上有用的命令的摘要:

                                    307074f9-b1be-4ede-a60d-aa5c50132bc3-image.png

                                    注入操作系统命令

                                    在此示例中,购物应用程序允许用户查看特定商店中的商品是否有库存。此信息可通过 URL 访问:

                                    https://insecure-website.com/stockStatus?productID=381&storeID=29
                                    

                                    若要提供股票信息,应用程序必须查询各种旧系统。由于历史原因,该功能是通过调用带有产品和商店 ID 作为参数的 shell 命令来实现的:

                                    stockreport.pl 381 29
                                    

                                    此命令输出指定物料的库存状态,该状态将返回给用户。

                                    该应用程序不实施任何针对 OS 命令注入的防御措施,因此攻击者可以提交以下输入来执行任意命令:

                                    & echo aiwefwlguh &
                                    

                                    如果在参数中提交此输入,则应用程序执行的命令为:productID

                                    stockreport.pl & echo aiwefwlguh & 29
                                    

                                    该命令使提供的字符串在输出中回显。这是测试某些类型的操作系统命令注入的有用方法。该字符是 shell 命令分隔符。在此示例中,它会导致三个单独的命令一个接一个地执行。返回给用户的输出为:echo&

                                    Error - productID was not provided
                                    aiwefwlguh
                                    29: command not found
                                    

                                    三行输出表明:

                                    • 执行原始命令时没有预期的参数,因此返回错误消息。stockreport.pl
                                    • 已执行注入的命令,并在输出中回显提供的字符串。echo
                                    • 原始参数是作为命令执行的,这会导致错误。29

                                    将附加命令分隔符放在注入的命令之后很有用,因为它将注入的命令与注入点后面的任何命令分开。这样可以减少以下操作阻止执行注入的命令的可能性。&

                                    1 条回复 最后回复
                                    0
                                    • C 离线
                                      C 离线
                                      changuang
                                      写于 最后由 编辑
                                      #21

                                      实验室:操作系统命令注入,简单案例

                                      此实验室在产品库存检查器中包含一个操作系统命令注入漏洞。

                                      应用程序执行包含用户提供的产品和商店 ID 的 shell 命令,并在其响应中返回该命令的原始输出。

                                      若要解决实验室问题,请执行命令以确定当前用户的名称。whoami

                                      • 使用 Burp Suite 拦截和修改检查库存水平的请求。
                                      • 修改参数,为其赋值 。storeID1|whoami
                                      • 请注意,响应是否包含当前用户的名称。

                                      实验步骤

                                      打开bp的拦截,下面一行修改storeid就即可

                                      6f7e732a-3961-4fb4-b347-aefda7a8f8a4-0490b90b744748ff3218c9ef0239569.png

                                      修改为如图所示storeID1|whoami

                                      ba7e4017-6eb9-429d-b0b5-7a2d87fac735-4049c5924c523e7c72269cfa759cea7.png

                                      渗透成功

                                      a50f3bae-528b-4ae4-9fe7-c8bb21232653-d6b0fdedab13df51a04d1cb82fcb5a2.png

                                      1 条回复 最后回复
                                      0
                                      • C 离线
                                        C 离线
                                        changuang
                                        写于 最后由 编辑
                                        #22

                                        什么是 SQL 注入 (SQLi)?

                                        SQL 注入 (SQLi) 是一种 Web 安全漏洞,允许攻击者干扰应用程序对其数据库进行的查询。这可能允许攻击者查看他们通常无法检索的数据。这可能包括属于其他用户的数据,或应用程序可以访问的任何其他数据。在许多情况下,攻击者可以修改或删除此数据,从而导致应用程序的内容或行为持续更改。

                                        在某些情况下,攻击者可以升级 SQL 注入攻击,以破坏底层服务器或其他后端基础结构。它还可以使他们执行拒绝服务攻击。

                                        如何检测 SQL 注入漏洞

                                        您可以使用一组针对应用程序中每个入口点的系统测试来手动检测 SQL 注入。为此,您通常会提交:

                                        • 单引号字符,并查找错误或其他异常。'
                                        • 一些特定于 SQL 的语法,这些语法的计算结果为入口点的基本(原始)值和其他值,并查找应用程序响应中的系统差异。
                                        • 布尔条件(如 和 ),并查找应用程序响应中的差异。OR 1=1OR 1=2
                                        • 有效负载旨在在 SQL 查询中执行时触发时间延迟,并查找响应时间的差异。
                                        • OAST 有效负载旨在在 SQL 查询中执行时触发带外网络交互,并监视任何生成的交互。

                                        或者,您可以使用 Burp Scanner 快速可靠地找到大多数 SQL 注入漏洞。

                                        检索隐藏数据

                                        想象一下,一个显示不同类别产品的购物应用程序。当用户单击“礼品”类别时,其浏览器会请求以下网址:

                                        https://insecure-website.com/products?category=Gifts
                                        

                                        这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:

                                        SELECT * FROM products WHERE category = 'Gifts' AND released = 1
                                        

                                        此 SQL 查询要求数据库返回:

                                        • 所有细节 (*)
                                        • 从表格中products
                                        • 其中 是categoryGifts
                                        • 并且是 .released1
                                          该限制用于隐藏未发布的产品released = 1。我们可以假设对于未发布的产品released = 0

                                        该应用程序不会实现任何针对 SQL 注入攻击的防御措施。这意味着攻击者可以构造以下攻击,例如:

                                        https://insecure-website.com/products?category=Gifts'--
                                        

                                        这会导致 SQL 查询:

                                        SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1
                                        

                                        至关重要的是,请注意,这是 SQL 中的注释指示器。这意味着查询的其余部分被解释为注释,从而有效地将其删除。在此示例中,这意味着查询不再包含 。因此,将显示所有产品,包括尚未发布的产品。

                                        --AND released = 1
                                        

                                        您可以使用类似的攻击使应用程序显示任何类别中的所有产品,包括他们不知道的类别:

                                        https://insecure-website.com/products?category=Gifts'+OR+1=1--
                                        

                                        这会导致 SQL 查询:

                                        SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1
                                        

                                        修改后的查询返回 为 或 等于 的所有项目。与往常一样,查询返回所有项。

                                        categoryGifts111=1
                                        
                                        警告
                                        将条件注入 SQL 查询时要小心。即使它在你注入的上下文中看起来是无害的,应用程序在多个不同的查询中使用来自单个请求的数据也是很常见的。例如,如果您的条件达到 or 语句,则可能会导致意外丢失数据。OR 1=1UPDATEDELETE
                                        

                                        颠覆应用逻辑

                                        想象一下,一个应用程序允许用户使用用户名和密码登录。如果用户提交了用户名和密码,则应用程序通过执行以下 SQL 查询来检查凭据:wienerbluecheese

                                        SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'
                                        

                                        如果查询返回用户的详细信息,则登录成功。否则,它将被拒绝。

                                        在这种情况下,攻击者可以以任何用户身份登录,而无需密码。他们可以使用 SQL 注释序列从查询子句中删除密码检查来执行此操作。例如,提交用户名和空白密码将导致以下查询:--WHEREadministrator'--

                                        SELECT * FROM users WHERE username = 'administrator'--' AND password = ''
                                        

                                        此查询返回其所在用户,并成功将攻击者登录为该用户。usernameadministrator

                                        1 条回复 最后回复
                                        0
                                        • C 离线
                                          C 离线
                                          changuang
                                          写于 最后由 changuang 编辑
                                          #23

                                          实验室:WHERE 子句中允许检索隐藏数据的 SQL 注入漏洞

                                          本实验在产品类别筛选器中包含一个 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询:

                                          SELECT * FROM products WHERE category = 'Gifts' AND released = 1
                                          

                                          若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示一个或多个未发布的产品。

                                          • 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
                                          • 修改参数,为其赋值category'+OR+1=1--
                                          • 提交请求,并验证响应现在是否包含一个或多个未发布的产品。

                                          实验步骤

                                          URL 中输入单引号,查看是否存在漏洞,服务器返回一个错误,借以得知容易受到 SQL 注入攻击

                                          URL 中输入'+OR+1=1-- (查询字符串中空格被编码成+号)

                                          数据库执行的 SQL 查询则为

                                          SELECT * FROM products 
                                          WHERE category = ''or 1=1-- ' AND released = 1
                                          

                                          通过'来闭合参数,-- 来注释后半部分
                                          aa370589-bc55-4f93-9ef2-a48802a6a6bc-db04ea14c31fe071cb9eb2bdde32926.png

                                          1 条回复 最后回复
                                          0
                                          回复
                                          • 在新帖中回复
                                          登录后回复
                                          • 从旧到新
                                          • 从新到旧
                                          • 最多赞同


                                          • 登录

                                          • 第一个帖子
                                            最后一个帖子
                                          0
                                          • 社区首页
                                          • 版块
                                          • 最新
                                          • 标签
                                          • 热门