[强网杯 2019]随便注 —— 堆叠注入

本文探讨了堆叠注入漏洞的原理,如何利用分号操纵SQL语句执行多条命令,从发现表结构到动态修改并查询数据的过程。作者通过实例演示了如何利用堆叠注入避开过滤,揭示了数据库操作中的安全挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       [强网杯 2019]随便注


前言

       个人观点,若有误请指教


解题思路及步骤

  • 直接上’引号,结果直接报错了,证明存在sql注入漏洞。
    在这里插入图片描述

  • 判断当前表一共有几列,可得一共两列
    在这里插入图片描述
    在这里插入图片描述

  • 获得当前表的内容,很明显当前表没有flag
    在这里插入图片描述
    注:是不是很蒙?竟然可以直接获得当前表的内容,那我干嘛还要在上面测试表有多少列?其实不是的,你在网页看到一共有几列就证明在数据库中的当前表就只有几列吗?就不能少几列给你看?当然,这道确实显示的列数和在数据库的当前表的列数一样。

  • 尝试联合查询(union),关键词被过滤了
    在这里插入图片描述

  • 至此本人蒙圈了,不知怎解,上网查答案吧🤡。

  • 测试是否存在堆叠注入,顺便查一下所有的数据库名
    在这里插入图片描述
    注:存在堆叠注入

  • 查询当前数据库的表名
    在这里插入图片描述

  • 查看当前数据库的两个表结构,使用desc命令(desc除了降序排列的功能外,还可以查看表结构噢)
    在这里插入图片描述
    在这里插入图片描述
    注:在windows系统下,反单引号 ` 是数据库、表、索引、列和别名用的引用符。也就是说在写表名时应该都加反单引号,但在查words的时候却没有加也能查出来(words加的话也是可以查出来的,而1919810931114514表必须加,不然查不出来),这一点有点奇怪,根据这道题来推测一下吧,只要是全数字的都要反单引号不然查不出来,不是的可加不可加。反正到底是不是影响不大,遇到可以堆叠注入的时候都试一下就好了。

  • 根据上面查询结果,很快可以推断sql语句查询的表是words,而flag在1919810931114514表中,这时候由于后台的sql语句是固定的,所以我们需要将1919810931114514改为words表(原words改成其他名),把列名flag改为id。

//构造payload,记得合起来一起输入
0';
#改变表名
rename table words to words1;
rename table `1919810931114514` to words;
#改列名
alter table words change flag id varchar(100);
#查询表
desc  words;#

在这里插入图片描述


总结

  • 堆叠注入原理
    在sql中,分号表示一条语句的结束。我们就可以构造以下的模板,以至于可以在一次数据库的调用中执行多个语句。
//记得要加#,因为鬼知道后面有没有东西,干脆加上了事
语句; 语句; ··· 语句; #
  • 堆叠注入的局限性(了解一下)
    堆叠注入并不是在每种情况下都能使用的。大多数时候,因为API(应用程序接口)或数据库引擎的不支持,堆叠注入都无法实现。

  • 若题目过滤了太多关键词,极有可能存在堆叠注入!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值