BUUCTF-easysql

打开页面,有一个搜索框,根据wp这里使用堆叠注入

跑字典发现被过滤的字符

随便输入几个数字,发现返回结果都为1

根据网上的wp解释,这里需要我们对后端的执行语句进行猜测
这里不管我们输入的数字为多少返回的结果始终都是1和输入其它字符的得不到回显,判断后端的语句中存在有||,也就是

select xxx||flag from Flag;

这里就有一个关键的知识点:

||代表的是"或"运算,相当于

0||1=1,1||1=1,0||0=0

只要两个数据有一个为非零数字,那么或运算的结果都为1
所以当我们不管输入0,1,2....时,执行的语句经过运算后结果都为1,从而输出为1

这里的解法就有两种:

  1. 构造payload,就相当于分别执行了select * from Flag;和select 1||flag from Flag;

    *,1 //这里整合之后的语句就为select *,1||flag from Flag;

  2. 官方解法,这里我们需要改变||的作用,不再是做”或“运算,而是作为拼接字符串的作用,payload为

    1;set sql_mode=pipes_as_concat;select 1 //整合之后的语句就为select 1;set sql_mode=pipes_as_concat;select 1||flag from Flag;

原文地址:https://www.cnblogs.com/zesiar0/p/12846379.html