网络安全-Mysql注入知识点

news/2025/2/22 15:16:34

本篇文章介绍sql注入时数据库是Mysql时需要掌握的知识点。以Navicat、mysql 5.7.4为例。

注释

#或--空格是单行注释

/**/是内联注释

SQL语句

查询语句

SELECT〈目标列组〉
     FROM〈数据源〉
     [WHERE〈元组选择条件〉]
     [GROUP BY〈分列组〉[HAVING 〈组选择条件〉]]
     [ORDER BY〈排序列1〉〈排序要求1〉 [,…n]];

UNION

用于union注入攻击

UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数:

  • expression1, expression2, ... expression_n: 表达式,sql注入时通常是database()函数等我们需要的信息。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

LIMIT

语法:

limit m,n

从m位置开始,取n条记录

ORDER BY

order by 后面可以加列名,也可以加数字,数字应是小于等于查询结果的列数,所以可以慢慢增加,当出错时,查询结果就是出错时的数字-1。

information_schema

mysql 5.0之后有这个数据库,包含数据库的很多信息,常用表SCHEMATA、TABLES、COLUMNS。

SCHEMATA

SCHEMATA表存储数据库名,字段为SCHEMA_NAME

网络安全-Mysql注入知识点_网络安全

SCHEMATA表

sql语句

SELECT schema_name FROM information_schema.schemata

    网络安全-Mysql注入知识点_数据库_02

    查询结果

    TABLES

    TABLES表存储表名及表所属数据库,字段为TABLE_NAME、TABLE_SCHEMA

    网络安全-Mysql注入知识点_数据库_03

    TABLES表

     一般是查询当前数据库或者从上面得到的数据库中指定一个。

    查询当前数据库sql语句

    SELECT table_name FROM information_schema.`TABLES` WHERE table_schema=database()

      网络安全-Mysql注入知识点_<a class=mysql_04" height="406" src="https://i-blog.csdnimg.cn/img_convert/5db50ff2264f3bfcc9d42f8928a51e60.png" width="789" />

      当前数据库的表

       指定数据库sql语句,以pikachu为例

      SELECT table_name FROM information_schema.`TABLES` WHERE table_schema='pikachu'

        网络安全-Mysql注入知识点_<a class=mysql_05" height="286" src="https://i-blog.csdnimg.cn/img_convert/988e7c159ddf9568f45407b30349e9f9.png" width="778" />

        结果

        COLUMNS 

        COLUMNS表存储列名及所属数据库名、所属表名,字段为COLUMN_NAME、TABLE_SCHEMA、TABLE_NAME

        网络安全-Mysql注入知识点_sql_06

        COLUMNS表

        查询当前表的列,sql语句

        SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name=table_name

          网络安全-Mysql注入知识点_sql_07

          结果

          查询指定表的列,通过上面,我们已经知道pikachu数据库有表users,以这个为例。

          sql语句

          SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='pikachu' AND table_name='users'

            网络安全-Mysql注入知识点_网络安全_08

            结果

            字段值

            通过利用这个数据库我们已经知道了所有的数据库、表、列,接下来我们就可以得到想要的数据了。以数据库pikachu的users表的username和password为例。

            sql语句

            SELECT username,password FROM pikachu.users

               结果:

              网络安全-Mysql注入知识点_<a class=mysql_09" height="274" src="https://i-blog.csdnimg.cn/img_convert/4174c7728543e9e24932721f3c7d90d0.png" width="448" />

              结果

              当然,实际的sql注入没有这么简单,本篇文章列出所有知识点,接下来的文章以本地靶机讲解几种注入技术,然后再分析dvwa的过滤代码以及绕过,都学完后差不多就可以解决中低级的sql注入问题,然后可以去一些CTF在线靶场来进一步提高了。

              常用函数

              在上面的Sql语句中,我们提到了databse(),这是mysql的函数,接下来我们就看看在sql注入时常用到的函数。

              基本函数

              1.返回当前使用数据库的用户
              user()/system_user()/current_user()/session_user()
              2. 返回当前数据库的版本
              version()/@@version
              3. 返回当前使用的数据库
              database()
              4. 返回当前数据库所在位置
              @@datadir
              5. 返回当前操作系统版本
              @@version_compile_os
              6.将多个字符串连接成一个字符串

              concat(s1,s2...sn)
              7.将多行字符串拼接成一行
              group_concat()语法如下:

              group_concat(

              [DISTINCT] 要连接的字段

              [Order BY 排序字段 ASC/DESC]

              [Separator ‘分隔符’]

              )

              主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用。 

              盲注(字符串处理函数)

              length(s) :返回目标字符串的长度
              常用于盲注时数据库等信息的判断,sql语句

              select length(database());

                网络安全-Mysql注入知识点_数据库_10

                结果

                substr(),substring(),mid():用法基本相同,截取字符串的一部分,会一个就可以了

                SUBSTR(s, start, length)

                SUBSTRING(s, start, length)

                MID(s, start, length)

                从字符串s的start(包含且>=1)位置开始截取length个字符。

                常用于盲注时截取字符串的某一个字符,判断是什么,例如使用substr(database(),1,1)获取数据库的第一个字符进行判断,再结合length函数,最后拼接成整个数据库名。

                ascii(s)/ord(s):返回字符串s的第一个字符对应的ASCII码,记一个就可以了

                常用于盲注,结合substr函数

                sql语句

                SELECT ascii(substr(database(),1,1))

                  网络安全-Mysql注入知识点_<a class=mysql_11" height="182" src="https://i-blog.csdnimg.cn/img_convert/1cd69730ae8ae13357a5ddf0433bf5cb.png" width="405" />

                  结果


                  再查询ascii码表就知道105对应的是字符i。

                  char(num):返回ASCII码对应的字符

                  上面函数的逆函数
                  sql语句

                  SELECT char(97)

                    97对应的是字符a

                    网络安全-Mysql注入知识点_网络安全_12

                    结果

                    hex():将目标字符串装换成16进制格式的数据
                    select hex(“dvwa”)
                    返回结果:70696B61636875
                    unhex():将16进制格式的数据装换成原字符串
                    语句:unhex(64767761)
                    解释:返回结果:dvwa

                    left()/right() :从规定字符串的左边/右边开始截取字符串
                    LEFT(s,n) 、RIGHT(s,n)
                    从字符串s左/右边开始截取n位字符串

                    报错注入

                    UPDATEXML函数

                    UPDATEXML (XML_document, XPath_string, new_value); 
                    第一个参数:XML_document是String格式,为XML文档对象的名称,一般写1就可以了
                    第二个参数:XPath_string (Xpath格式的字符串) ,不必了解Xpath语法,我们一般是写sql语句查询表名等,通过报错信息显示出来。
                    第三个参数:new_value,String格式,替换查找到的符合条件的数据,一般写1就可以了
                    作用:改变文档中符合条件的节点的值

                    还有floor、extractvalue等函数也可以用于报错注入

                    时间盲注

                    sleep(N)函数

                    运行N秒。

                    IF(expr,v1,v2)函数

                    如果表达式expr成立,返回v1,否则返回v2。与sleep函数结合通过网页多久后返回来判断结果。

                    sql语句

                    SELECT ascii(substr(database(),1,1)) and if(length(database())>17,sleep(2),1)

                       等待2秒后,返回0

                      网络安全-Mysql注入知识点_数据库_13

                      2秒后返回

                      SELECT ascii(substr(database(),1,1)) and if(length(database())>18,sleep(2),1)

                        网络安全-Mysql注入知识点_<a class=mysql_14" height="204" src="https://i-blog.csdnimg.cn/img_convert/f1f54d1434b3713b58f9cee0af8dc026.png" width="753" />

                        立刻返回

                         数据库长度>17但不>18,即数据库长度为18。

                        网络安全学习路线

                        对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

                        同时每个成长路线对应的板块都有配套的视频提供:

                        需要网络安全学习路线和视频教程的可以在评论区留言哦~

                        最后

                        给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

                        黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)

                        结语

                        网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

                        特别声明:
                        此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失


                        http://www.niftyadmin.cn/n/5862438.html

                        相关文章

                        MySql面试宝典【刷题系列】

                        文章目录 一、Mysql 的存储引擎 myisam 和 innodb 的区别。二、MySQL数据库作发布系统的存储&#xff0c;一天五万条以上的增量&#xff0c;预计运维三年,怎么优化&#xff1f;三、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题&#xff1f;四、锁的优化策略…

                        代码随想录算法训练day59---图论系列4

                        代码随想录算法训练 —day59 文章目录 代码随想录算法训练前言一、110.字符串接龙二、105.有向图的完全可达性dfs版本1dfs版本2bfs版本 三、100. 岛屿的最大面积方法一方法二 总结 前言 今天是算法营的第59天&#xff0c;希望自己能够坚持下来&#xff01; 今天继续图论part&…

                        工控自动化领域:数字量信号与模拟量信号的差异解析

                        在工控自动化的神秘世界里&#xff0c;信号如同传递指令和信息的使者&#xff0c;而数字量信号和模拟量信号则是其中的两大主角。它们各自有着独特的 “性格” 和 “使命”&#xff0c;在不同的场景中发挥着关键作用。下面&#xff0c;就让我们一起来深入了解一下它们的区别。 …

                        x安全服务 y安全体系 z网络安全模型 网络安全体系设计

                        这一年来&#xff0c;网络安全行业兴奋异常。各种会议、攻防大赛、黑客秀&#xff0c;马不停蹄。随着物联网大潮的到来&#xff0c;在这个到处都是安全漏洞的世界&#xff0c;似乎黑客才是安全行业的主宰。然而&#xff0c;我们看到的永远都是自己的世界&#xff0c;正如医生看…

                        关于css中bfc的理解

                        首先需要了解的是bfc的缩写是block formatting context 块级格式化上下文 那么块级格式化上下文意味着我们在bfc的区域内生成了一块独立于当前文本流的样式、它不受外界样式的影响、有着专属于自己的样式。 基于这样的定义我们可以避免一些样式冲突、在我们开发者面对复杂布局…

                        今天踩个大坑,jdk1.8版本对应可使用的gradle

                        这俩版本都是基于jdk1.8版本的as可以使用的gradle版本

                        直播美颜SDK的底层技术解析:图像处理与深度学习的结合

                        直播美颜SDK通过高效的图像处理技术和深度学习算法&#xff0c;使得用户在直播过程中可以获得更为自然、精致的美颜效果。本文将深入解析直播美颜SDK的底层技术&#xff0c;探讨图像处理与深度学习如何在这一领域实现完美结合&#xff0c;提升用户体验并推动行业创新。 一、直…

                        算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)

                        文章目录 【题目一】移动零题目要求算法原理&#xff08;思路讲解 画图模拟演示&#xff09;代码实现 【题目二】复写零题目要求算法原理&#xff08;思路讲解 画图模拟演示&#xff09;代码实现 【题目一】移动零 题目要求 给定一个数组 nums&#xff0c;编写一个函数将所…