BWVS-SQL报错型注入

本文深入探讨报错型SQL注入原理,特别是在PHP环境中利用特殊函数导致MySQL错误回显的技巧。通过分析实际代码示例,如使用extractvalue和updatexml函数,揭示了如何在留言板和用户更新页面中利用此漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 报错型注入

什么是报错型注入呢?

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


0x01 漏洞位置:/messageSub.php

在这里插入图片描述
其实就是这里的留言板,先看源码

<?php
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 '<script type="text/javascript"> alert("留言成功!"); window.location='.'\''.'./message.php'.'\''.'</script>';
        }else{
                echo '<script type="text/javascript"> alert("抱歉,留言不可为空!"); window.location='.'\''.'./message.php'.'\''.'</script>';
        }
}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))#的时候发现报的错很奇怪
在这里插入图片描述
还换了几个其他的函数试过了,都是同样的,最后去查数据库的日志才发现,原来少了一个括号
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后面的括号给闭合起来,才能成功报错。
在这里插入图片描述


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baynk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值