BUUCTF-WEB:[SUCTF 2019]EasySQL 1

解题思路:

①先试试1'# 发现没有回显
②试试 有回显

③试试单引号注入

④试试用order by查询表的列数:1 order by 1

用不了联合注入了!

下面尝试使用堆叠注入:
payload:1;show databases;#

payload:1;show tables;#

payload:1;show columns from Flag;#(查询Flag表中的列)

到这一步,堆叠注入也没办法得出flag

既然同时他也没有报错信息,那报错注入也不用太考虑了。
1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)#      【nonono】
试下布尔盲住,结果发现不管怎么样都是返回nonono,就连数据库长度大于1这种探针都返回nonono,那基本可以放弃布尔盲注了。

小菜鸡做不出来了。。。

接下来是网上的两种解法,参照了网上大佬们的WP

解法1、
1)第一种是猜出了源码select $_POST[‘query’] || flag from Flag,

sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置),|| 就是逻辑或,相当于OR函数
第一种就按默认没有配置来进行,此时||就是逻辑或
||在命令执行中见过,
回顾:
command1;command2顺序执行
command1 || command2
如果command1执行失败,则执行command2
command1 && command2
如果command1执行成功,则执行command2

因此只需要将

$_POST[‘query’]

提交的数据换成*,1(如果直接写的话会被报错,且写在后面会失效)
解释:
sql=select.post[‘query’]."||flag from Flag";(拼接语句)
如果$post[‘query’]的数据为

*,1

sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。
此处的1是临时增加一列,列名为1且这一列的所有值都为1

执行payload:*,1

解法2、
(2)第二种是将||作为字符串连接符,因此需要在语句中更改其配置
sql_mode=PIPES_AS_CONCAT时即可
Payload:1;set sql_mode=PIPES_AS_CONCAT;select 1
拼接完之后:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
相当于是select 1 from Flag和select flag from Flag

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值