前言
经过上一篇文案咱们已然大概的认识sql注入去怎么样审计了。然则在实质的网站中和用户的输入输出接口不可能想那样无防御办法的。此刻各大网站都在运用waf对网站或APP的业务流量进行恶意特征识别及防护,,避免网站服务器被恶意入侵。因此咱们就必须绕过waf,这篇文案就用代码审计的方式给大众讲解有些sql的绕过技巧。
关键字过滤
部分waf会对关键字进行过滤,咱们能够用体积写或双写关键字来绕过。
源代码分析
<?php
require db.php;
header(Content-type:text/html;charset=utf8);
$username=dl($_POST[username]);
$password=dl($_POST[password]);
$dl="SELECT * FROM xs WHERE username=$username and password=$password"; //登录界面后台处理
$ck=mysqli_query($db,$dl);
$row = mysqli_fetch_array($ck);
if($_POST[login]){
if($row) {
echo"你的暗码".$row[username];
}else{
echo"登录失败";
}
}
function dl($gl){
$gl=str_replace(array("union","UNION"),"","$gl");
$gl=str_replace(array("select","SELECT"),"","$gl");
$gl=str_replace(array("database","DATABASE"),"","$gl");
$gl=str_replace(array("sleep","SLEEP"),"","$gl");
$gl=str_replace(array("if","IF"),"","$gl");
$gl=str_replace("--","","$gl");
$gl=str_replace("order","","$gl");
return $gl;
}
分析一下代码,首要获取了数据,加载dl函数以后带入了数据库中执行,而后if判定是不是有提交,是不是登录成功,登录成功后回显用户的账号,这是一个非常简单的后台登录代码。往下看有一个自定义函数dl,函数内运用了str_replace(),str_replace()的功效是替换字符串,这儿union,select,database ,if这些常用的注入字符体积写都被替换成空。做了一个简单的危险字符过滤自定义函数。
关键字过滤注入办法
用体积写和双写关键字来尝试绕过,返回代码里有回显位因此能够union注入,dl函数把union,select这些字符替换成空然则mysql中是不不区分体积写的,因此能够体积写混写来绕过dl函数的过滤。例如Select Union DAtabase()这般的字符是能够执行的。亦能够用双写的手法,例如seselectlect这般的语句, dl函数会把里面的select替换为空这般两边的字符凑在一块刚好又是一个select这般就起到了绕过的功效。
体积写绕过语句为 -1’ unioN Select dataBASE(),2 #
|