首页 > 数据库 >SQL注入

SQL注入

时间:2023-08-01 16:36:23浏览次数:23  
标签:语句 查询 报错 SQL 格式 select 注入

前言

  本文只作为技术探讨,请不要用于非法目的或侵犯他人隐私。

漏洞原理

  sql注入指的是web应用程序没有对用户输入的数据进行合法化的判断或过滤,前端传入的参数攻击者可以进行控制。攻击者可以通过构造恶意slq代码注入到应用程序的数据库中查询,从而执行一些未授权的数据库操作。

  例如,有一条sql语句如下:

  select*from students where username='张三' and password='xxx'

  这条语句的意思是查询张三的信息。他有两个条件,username和password,当我们输入这两个参数并且全部正确时,他才会返回张三信息。假设这里没有对用户输入的数据进行判断,此时有位攻击者在username中输入了这样的数据:张三’and 1=1#。此时这条sql语句就变成了下面这样:

  select*from students where username='张三’ and 1=1#' and password='xxx'

       可以看到,攻击者输入的张三’与前面的单引号闭合了,形成了一个完整的参数,而后面的and1=1成为了sql语句的一部分,最后#为注释,把后面的语句注释掉了,此时这条语句变成了这样:

  select*from students where username='张三’ and 1=1

  可以看到,张三的信息在没有输入密码的情况下就显示出来了。这个例子就是sql注入。

SQL注入的分类

 报错注入

   利用数据库的机制,故意制造错误使数据库报错,从而获得一些想要的信息。

  extractvalue()函数报错注入:

    对XML文档进行查询的函数,格式为extractvalue(目标xml文档,xml路径)。函数的第二个参数为可控的,xml文件中查询使用的是/xx/xx/的格式,如果我们写成其他的格式,就会                    报错,并且会返回我们写入的非法格式内容,而这个非法格式的内容就是我们想要查询的内容,如果是正常的格式,即查询不到也不会报错。

    构造一个正常格式的语句:select extractvalue(1,concat('/',(select database())));结果既没数据返回也没有报错:

       

    构造非正常格式的语句:select extractvalue(1,concat(0x5c,(select database())));

    0x5c相当于‘\’也可以‘\\’

    还可以使用0x7e (~)

                 

     可以看到查询出来了数据库名称。

  updatexml函数报错注入:

   大佬写的文章:https://blog.csdn.net/m0_60988110/article/details/123544853

    updatexml(xml_doument,XPath_string,new_value)
    第一个参数:XML的内容
    第二个参数:是需要update的位置XPATH路径
    第三个参数:是更新后的内容
    所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式
    函数利用和语法明白了,下面注入的payload就清楚明白

   payload:updatexml("anything",concat('~',(select语句())),"anything")

  exp()函数报错注入:

   原理可以参考这位大佬:https://blog.csdn.net/weixin_41594045/article/details/83547103

    exp()数学函数,用于计算e的x次方的函数。

    版本约束:5.5<mysql版本<5.6

   payload:select exp(~(select*from(select user())a))

  联合查询注入

  布尔盲注

  时间盲注

  堆叠查询注入

  宽字节注入     

SQL注入常用payload

SQL注入的绕过

SQL注入的防御

 

 

标签:语句,查询,报错,SQL,格式,select,注入
From: https://www.cnblogs.com/fangao/p/17596867.html

相关文章

  • web渗透测试(8):SQL注入
    SQL注入是最常见的(web)漏洞之一。所有SQL注入练习,在这里找到,使用MySQL作为后端。当SQL查询中包含SQL注入时,缺少用户控制输入的编码/转义。 根据信息在查询中的添加方式,您需要不同的东西来破坏语法。有三种不同的方法可以在SQL语句中回显信息:使用引号:单引号或双引号。使用反......
  • PostgreSQL-PITR 增量备份与恢复
    Point-in-TimeRecovery(PITR)基于时间点的备份(恢复)。归档对于PITR(增量备份与恢复)至关重要,如果归档不一致,会产生各种各样的问题。以下的测试截图中,我将归档清零,重新生成,再做相关PITR的操作。这里是简单的操作过程,详情查看相关的官方文档说明 26.3.ContinuousArchivingandPoi......
  • mysql安装及使用语句
    http://www.mysql.com/downloads/ubuntu安装sqlite http://blog.chinaunix.net/uid-20672803-id-3049747.htmlhttp://wenku.baidu.com/link?url=dl9lRAhX82e9Lg5EnQB7l1fWtdBueLoiyKuzxPhDiOxxuxPQpORaD-_jxFajOkpQfw-BEG1VYwAZBxbAYzJK5QA_8grUtGJU41Wyo43wGzihttp://www.yiiba......
  • ubuntu安装mysql数据库
    http://www.2cto.com/database/201401/273423.htmlhttp://www.linuxidc.com/Linux/2013-01/78716.htm......
  • 《为研发同学定制的MySQL面试指南》-- 连载中
    一、给研发同学看的面试指南1、MySQL的修仙之路,图文谈谈如何学MySQL、如何进阶!2、数据库面经,常见的面试题....3、谈谈MySQL中基数是什么?4、聊聊什么是慢查?如何监控?如何排查?5、对NotNull字段插入Null值有啥现象?6、能谈谈year、date、datetime、time、timestamp的区别吗?7、你有没有......
  • MySQL的修仙者之旅,不来看看你的修为如何吗?
    目录因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气、筑基、结丹、元婴、化神、飞升六个段位,你可以看下你大概在哪个段位上哦!本文目录:我为什么要写这篇文章都这么卷了,是时候好好学MySQL了!勾勒脑图练气期筑基期结丹期元婴期化神期飞......
  • PostgreSQL-由于与数据库的某些自动连接而无法删除数据库
    PostgreSQL常见问题解决1.删除databaseDROPDATABASEviid; 执行上述sql报错信息如下:ERROR:database"viid"isbeingaccessedbyotherusersDETAIL:Thereis1othersessionusingthedatabase. 原因是有其他的session正在使用该数据库 解决方法:强......
  • MySQL 账号密码永不过期为什么不起作用?
    背景客户反馈MySQL账号已经设置成密码永不过期了,但是在登录后总是提示报错ERROR1862(HY000):Yourpasswordhasexpired.Tologinyoumustchangeitusingaclientthatsupportsexpiredpasswords.排查方法首先检查一下MySQL服务器设置的密码过期时间,可以看到默认密......
  • sql语言主要分为哪几类?
    1、sql语言主要分为哪几类?2、sql语言的特点3、SQL是一种什么样的语言?4、sql是什么sql语言主要分为哪几类?1、SQL包含四种程序设计语言类别的语句:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事物控制语言(TCL)。2、SQL语言包括三种主要程序设计语言类别的语句:数......
  • mysql 分区表 partion
    1.1.场景在每个系统中都会生成一些日志,往往有些日志都是需要记录的,比如:生成订单的过程的一些记录、某个账号活动的一些信息。这样一来每天生成的日志会很多,而且还会生成到数据库中。像这些记录信息在某段时间过后就没用了。为了节省空间资源,和产品确认这些信息只保留3个月的。3个......