ctf.show_web11

简单的代码审计,这段代码定义了一个名为replaceSpecialChar的函数,该函数接受一个字符串$strParam作为参数。函数内部使用了正则表达式$regex来匹配SQL语句中的一些关键字,包括select、from、where、join、sleep、and、空格\s、union和逗号,。preg_replace($regex,"",$strParam)函数会将匹配到的任何关键字替换为空字符串,从而移除这些关键字。strlen($password)计算原始密码字符串的长度。strlen(replaceSpecialChar($password))计算经过replaceSpecialChar函数处理后的密码字符串的长度。如果处理后的密码字符串长度与原始密码字符串长度不同,说明原始密码中包含了正则表达式匹配的关键字,代码会调用die("sql inject error")终止脚本并输出错误信息“sql inject error”
验证用户输入的密码是否与存储在会话($_SESSION)中的密码匹配。
如果两个密码相等,代码会输出一个变量$flag的内容,这个变量通常用于存储某种标志或成功消息。
如果两个密码不相等,代码会输出“error”,表示密码验证失败。
最后这个password和session中的password对比非常关键,正常来说既要绕过过滤还要保证前后 长度相同还是很难的,但是这里给了一条生路就是你可以抓包然后把session的值改为和你登陆密码一样的值就可以获得flag了


