• SQL注入的原理及一般步骤


    原理

    SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行。任何构成SQL语句的过程都应进行注入检查,因为SQL Server将执行其接收到的所有语法有效的查询。
    (摘自微软 SQL注入,但要注意的是,SQL注入并不限于SQL Server,几乎任何数据库引擎都存在这个问题)

    一般利用步骤

    1.判断注入点

    判断注入点有方面的含义,一是找到可能存在注入的位置,二十判断该处能否进行注入。在靶场环境下,我们已经知道,GET的参数id是与数据库进行交互的点,接下来判断能够进行注入。

    id为1,成功查询,回显正常
    lsmIiV.png
    id为1',数据库报错,由报错信息猜测闭合方式为单引号
    lslGGt.png
    id为1' --+,成功查询,回显正常,印证猜测,
    lslaqg.png
    id分别为1' and 1=1 --+和1' and 1=2--+,通过回显情况,进一步判断能否注入
    ls1SJI.png
    ls1PQf.png
    1=1为永真,当1成功查询,若1=1也成功查询,则页面返回正常,1=2为永假,因此若1=2得到执行,则页面必返回不正常。通过对比二者返回结果,可知改点能否进行注入。

    2.判断查询字段数

    为了将我们想要的结果能够显示在页面上,我们需要用到联合查询,联合查询的条件之一是必须保证前后查询语句的字段数相等,因此,我们需要判断查询的字段数。

    一般采用order by或union select如下:

    ls3Iv6.png
    ls3HbD.png
    order by 大于3的数时页面返回不正常,小于等于3时返回正常,得知原查询语句的字段数为3。或
    ls8GGR.png
    当我们联合查询4列时,得到了查询语句由不同的列的错误,查询3列时:
    ls8UsK.png
    成功查询,得原查询语句只有三列。

    3.查数据库名、版本号、用户名等信息

    union联合查询的规则是当前一个查询失败时执行第二个查询,前面我们知道了查询有三个字段,接下来将传入id为0,判断是三个字段的回显位置。
    lsJRUg.png

    再由数据库内置的version()database()user()查询出版本号、数据库当前名和当前用户。
    lsJYDK.png

    4.查询表名

    前面我们查询得知,当前数据库版本为5.5.53,在MySQL5.5后版本都内置了数据库information_schema。它存储了数据库中所有的表名、字段名等信息。从而可以构造查询语句,获取表名。

    payload:?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+
    lstQ61.png

    这里的group_concat()为SQL语句内置的聚合函数,用来将查询的结果作为一个字符串输出。

    (使用payload:?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

    5.查询字段名

    知道了所有的表名,接下来选择一个表,查询其中所有的字段名。

    payload:?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+

    lsaE0P.png

    6.查询记录内容

    有了表名和字段名,便可以爆出数据库中的记录了。

    payload:?id=0' union select 1,group_concat(username),group_concat(password) from users --+

    lsDwes.png

    以上是一般SQL注入的流程,当然还有一些像报错注入,请求头注入、select into outfile 写入一句话木马等姿势未介绍。后续学习过程中再逐渐补充。


    __EOF__

    本文作者iamblackcat
    本文链接https://www.cnblogs.com/iamblackcat/p/15891832.html
    关于博主:评论和私信会在第一时间回复。或者直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    【EI会议征稿】第三届电子信息工程与计算机通信国际学术会议(EIECC 2023)
    并列连词详解
    【风力发电】山顶的白色“大风车”你了解吗?
    Qt for Android设置应用图标及名称
    《动手学深度学习 Pytorch版》 6.3 填充和步幅
    【前端】node.js常用命令
    在MuJoCo环境下详细实现PPO算法与Hopper-v2应用教程: 深度学习强化学习实战指南
    【共享单车数据专题】共享单车数据有哪些应用?
    RAG 高级应用:基于 Nougat、HTML 转换与 GPT-4o 解析复杂 PDF 内嵌表格
    强缓存与协商缓存
  • 原文地址:https://www.cnblogs.com/iamblackcat/p/15891832.html