代码审计实战之SQL注入漏洞
作者复现的是Axublog1.1.0版本下对用户输入过滤不严导致login.php页面存在SQL注入漏洞,攻击者可以利用漏洞进行SQL注入直接登录网站后台。 使用’进行闭合and1=1#,密码随便填写即可
登录成功
来看到login.php的代码,user和psw直接接收用户输入的参数,并没有过滤机制
追踪登录验证函数jsloginpost,位于文件c_login.php中
可以看到user和psw未经过滤便作为SQL语句中的一部分去执行
临时修补方案(过滤、或者使用预编译等等,这里我写个过滤的方案): 首先介绍这几个函数: array_map:array_map()函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组。这里我们用array_map去调用SqlInjectionDenied函数将传入的值进行处理。 get_magic_quotes_gpc:出现在函数SqlInjectionDenied中,目的是得到环境变量magic_quotes_gpc的值,即检查是否开启魔术引号。 strip_tags:剥去字符串中的HTML、XML以及PHP的标签。 addcslashes:返回在预定义的字符前添加反斜杠的字符串,即转义。 代码如下,将其添加到c_login.php页面中即可:
来看到这里,user输出不是admin而是被转义后的admi\’\’\’n
接着我们再次使用jadore’and1=1#进行登录,发现无法登录成功。