一文带你快速回忆SQL注入

什么是 SQL 注入?

SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 代码,从而控制或破坏目标数据库。通常,这种漏洞存在于应用程序对用户输入未进行充分过滤和处理的情况下。

SQL 注入的存在位置

SQL 注入漏洞可能出现在任何与用户输入交互的地方,包括但不限于:

  • 表单输入字段
  • URL 参数
  • Cookies
  • HTTP 头信息

SQL 注入的分类

  1. 根据是否有回显:

    • 盲注:无直接回显,通过布尔逻辑或时间延迟等方式推断。
    • 有回显注入:直接返回错误信息,或通过联合查询等方式返回结果。
      • 报错注入
      • 联合注入
  2. 根据输入的类型:

    • 数字型注入
    • 字符型注入

常用的 SQL 注入函数

  • 报错函数updatexml()extractvalue()convert()floor()exp()
  • 聚合函数group_concat()concat()
  • 睡眠函数sleep()benchmark()

举例子:(具体用法跳转:SQL注入报错注入函数[通俗易懂]-腾讯云开发者社区-腾讯云

  • 报错函数:

    ?id=1' or updatexml(0,concat(0x7e,select database()),1)'SELECT extractvalue(null, 1' and extractvalue(1,concat(0x7e,user(),0x7e,database())) #
    SELECT convert((SELECT database()) USING utf8);
    SELECT floor(rand()*2);
    SELECT exp(~(SELECT * FROM (SELECT 1 UNION SELECT 2)t));
    
  • 聚合函数:

    SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='users';
    SELECT concat(username, password) FROM users;
    
  • 睡眠函数:

    SELECT sleep(5);  -- 延迟 5 秒
    SELECT benchmark(1000000, md5('test'));  -- 测试函数

如何判断页面是否存在 SQL 注入

  1. 在 URL 或抓包数据中发现参数的地方,可尝试输入 ''' 等特殊字符,观察回显是否不同。某些页面可能直接报错。
  2. 对字符型输入,可以尝试:
    ' AND 1='1' -- 返回结果正常
    ' AND 1='2' -- 返回结果异常
    
    如果返回结果不同,则可能存在 SQL 注入。
  3. 使用 1=1a 测试:
    • 对于字符型输入:返回 true,因为数据库会将 1a 解释为 1
    • 对于数字型输入:返回 false,因为 1a 会被视为非法数字。

如何判断数据库类型

  1. 通过端口扫描
    常见数据库端口:

    • MySQL - 3306
    • Oracle - 1521
    • PostgreSQL - 5432
    • Redis - 6379
    • MSSQL - 1433
    • MongoDB - 27017
  2. 通过技术栈搭配判断

    • MySQL 通常与 Java/PHP 搭配。
    • MSSQL 通常与 IIS 搭配。
  3. 观察页面回显

    • 有回显:使用直接注入方式。
    • 无回显:使用布尔注入。
    • 如果布尔注入无明显区别:尝试时间盲注。

常见的 SQL 注入 bypass 方式

传送门:Sql注入bypass的示例分析 • Worktile社区

  1. 编码绕过

    •  将 payload 进行 URL 编码、双重编码、Base64 编码、ASCII编码等方式进行传输,绕过简单的过滤规则。
  2. 空格绕过

    • 使用注释符号(如 /**/)、替换空格为括号、换行符或其它特殊字符。
  3. 大小写绕过

    • 将 SQL 关键字的大小写混合使用,如 sElEcTUnIoN 等,绕过字面过滤。
  4. 逻辑绕过

    • 使用布尔表达式、函数、字符拼接等方式,如 1 OR 1=11' OR '1'='1
  5. 异构语句绕过

    • 将注入语句拆分成多行、使用重复关键字、加入无关子查询等方式。
  6. 使用字符集绕过

    • 利用数据库特定的字符集、编码方式(如 UTF-7)进行绕过。
  7. 双写符号绕过

    • 将单引号、双引号
    • 防御 SQL 注入的方式

      1. 使用预编译语句(Prepared Statements): 确保 SQL 语句在执行前已经被参数化,不允许用户输入直接嵌入 SQL 语句。
      2. 加装waf。
      3. 输入验证与过滤: 对所有用户输入进行严格的验证和过滤。确保输入只能包含预期的字符和格式。可以使用正则表达式或者黑名单的方式。
      4. 最小化数据库权限: 只授予应用程序最小化的数据库访问权限,尽可能限制其对数据库的操作权限。
      5. 使用框架内置的防护机制

印象最深的几个sql注入? 

关键字:绕过+提权+sqlmap高级用法(编码)+伪静态

场景1:发现一个伪静态页面》绕过》获取账号密码》登陆博客后台》上传一句话木马文件》getshell 》提升权限 》上传免杀cs》权限维持》隧道建立》nps代理》内网扫描资产》内网数据库弱口令扫描出50000+医院名单

场景2: sqlmap进行base64编码操作》绕过签名机制》跑了900多张很多表》过滤有password字段的表》登陆数据库》udf提权》内网扩大伤害

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eclipse是一个开放源代码的集成开发环境(IDE),可用于Java开发,但也可以用于其他编程语言的开发。在本文中,我将向你展示如何使用Eclipse进行Java开发。 1. 下载Eclipse 首先,你需要从Eclipse官方网站下载Eclipse IDE。下载页面上将提供几个不同的版本,包括Eclipse IDE for Java Developers、Eclipse IDE for JavaScript and Web Developers,以及Eclipse IDE for C/C++ Developers等。选择适合你的版本,然后按照安装向导进行安装。 2. 创建Java项目 一旦你安装了Eclipse,你可以启动它并创建一个新的Java项目。选择“File”->“New”->“Java Project”,然后按照向导创建一个新的Java项目。在创建项目时,你需要指定项目名称、项目类型以及JRE版本等信息。 3. 创建Java类 一旦你创建了一个Java项目,你就可以创建一个Java类。选择你的Java项目,在“src”文件夹上右键单击,然后选择“New”->“Class”。输入类名和选择要继承的类(如果有的话),然后点击“Finish”。 4. 编写Java代码 现在你已经创建了一个Java类,可以开始编写Java代码了。在Eclipse的编辑器中,你可以输入Java代码并保存它。当你保存Java文件时,Eclipse会自动编译你的代码,并在Problems视图中显示任何编译错误。 5. 运行Java程序 一旦你编写了Java代码并保存了它,你可以运行Java程序。右键单击Java文件,然后选择“Run As”->“Java Application”。如果一切顺利,你的Java程序将在控制台中输出结果。 6. 调试Java程序 如果你的Java程序出现了错误或不按预期运行,你可以使用Eclipse的调试器来调试它。在Eclipse的编辑器中,你可以设置断点并启动调试器。当程序执行到断点时,调试器会暂停程序并允许你检查变量、运行代码等。 7. 导入外部JAR包 有时,你可能需要使用外部JAR包来完成你的Java项目。在Eclipse中,你可以简单地将外部JAR包导入到你的项目中。右键单击Java项目,然后选择“Build Path”->“Configure Build Path”。在“Libraries”选项卡上,你可以添加外部JAR包。 总结 在本文中,我们介绍了如何使用Eclipse进行Java开发。我们学习了如何创建Java项目、创建Java类、编写Java代码、运行Java程序、调试Java程序以及导入外部JAR包。Eclipse具有强大的功能,可以大大提高Java开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值