vlambda博客
学习文章列表

SQL注入--堆叠注入

SQL注入——堆叠注入


  • 定义:Stacked injections(堆叠注入),指的是多条sql语句一起执行。

  • 原理:mysql_multi_query() 支持多语句同时执行。在sql中 符号【;】表示一条SQL语句的结束,这可以使得题目中的前提(原先)函数结束运行,打破原先函数的限制,可以用一堆函数进行注入操作。大致操作就是,在原来的语句构造完成后,加入【;】,再继续输入一个全新任意的语句,进行注入操作。区别于联合注入,是其任意性。

  • 适用范围:堆叠注入的使用条件比较窄(很少遇到,但是危害大),过滤不说,网站往往调用mysqli_ query()函数,只能执行一条语句,而且可能还受用户权限的限制,还有数据库引擎、API。(这点不太知道,详细文末链接)

  • 推荐例题:https://buuoj.cn/   [SUCTF 2019]EasySQL  、[强网杯 2019]随便注 、[SWPU2019]Web4

  • 总结:sql注入姿势太多了,这个算是冷门里的一个,考题遇到时,一时还真想不到,通常会和后端知识点一起考察。


  • 例题讲解   [SUCTF 2019]EasySQL

    •  在报错注入、联合查询注入、盲注都不适用后(后面fuzz跑字典,过滤太多),尝试了堆叠注入。

SQL注入--堆叠注入

  • 在读flag表时回显:

到此一步,只靠堆叠注入没用了,要对后端语句进行猜测。

由于在此前输入数字(非零)有回显,但是其他字符均无回显,猜测后端语句中含有||

故后端语句大概为  select 输入的数据||内置的一个列名 from 表名

select post进去的数据||flag from Flag

猜测了后端语句后,输入 *,1


就相当于   select *,1||flag from Flag   即   select *,1 from Flag    select * from flag

参考:

  1. https://www.cnblogs.com/backlion/p/9721687.html

  2. https://www.cnblogs.com/0nth3way/articles/7128189.html

  3. https://www.sqlinjection.net/stacked-queries/

  4. https://blog.csdn.net/bin789456/article/details/120253257

  5. https://blog.csdn.net/qq_45552960/article/details/104185620

  6. https://blog.csdn.net/weixin_44866139/article/details/105857487  例题解法

  7. https://www.cnblogs.com/gtx690/p/13176458.html  例题解法

  8. https://www.cnblogs.com/chrysanthemum/p/11729891.html例题解法