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
这里的解法就有两种:
-
构造payload,就相当于分别执行了select * from Flag;和select 1||flag from Flag;
*,1 //这里整合之后的语句就为select *,1||flag from Flag;
-
官方解法,这里我们需要改变||的作用,不再是做”或“运算,而是作为拼接字符串的作用,payload为
1;set sql_mode=pipes_as_concat;select 1 //整合之后的语句就为select 1;set sql_mode=pipes_as_concat;select 1||flag from Flag;