一、堆叠注入产生原因
平常我们注入时都是通过对原来sql语句传输数据的地方进行相关修改,注入情况会因为该语句本身的情况而受到相关限制,例如一个select语句,那么我们注入时也只能执行select操作,无法进行增、删、改,其他语句也同理,所以可以说我们能够注入的十分有限。但堆叠注入则完全打破了这种限制,其名字顾名思义,就是可以堆一堆sql注入进行注入,这个时候我们就不受前面语句的限制可以为所欲为了。其原理也很简单,就是将原来的语句构造完后加上分号,代表该语句结束,后面在输入的就是一个全新的sql语句了,这个时候我们使用增删查改毫无限制。
简洁版:可以在语句结束后增加另外一个查询语句数据库会执行我们加入的语句
二、使用条件
堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
简洁版:
- 要看数据库是否支撑此类语句
- 看源码是否应用相应的函数(黑盒猜)
例如:
三、堆叠注入语句
根据数据库类型决定是否支持多条语句执行(核心)
1、查看数据库
';show databases;
2、查看表格
';show tables;
3、查看列
';show columns from `1919810931114514`;
4、查看数据
';select flag from `1919810931114514`;
四、16进制类型(绕过)
';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
五、堆叠应用:
堆叠注入(条件苛刻)要拿权限的话可以用堆叠注入创建一个数据库账号然后登录,如果权限限制比较严格的话试试提权或其他方式进行一个组合