米酷CMS 7.0.4代码审计
工具:seay源代码审计系统
源代码:网上很好找,这里就懒得贴上了,找不到的话可以给我留言
后面一段时间会深入学习安全开发,代码审计,内网渗透和免杀,快快成长。
审这个系统是因为在先知上看到一篇审它老版本的文章,索性拿来练一下生疏的手。
部署也不再赘述,直接使用phpstudy快速部署,放置源代码后访问路径下
/install/index.php
部署后的界面如下:
源代码放进seay进行白盒审计
挨个进行查看
第一个疑似注入点,可以看到包含了inc.php文件,先看一下过滤没有
套娃,在library.php里面发现了全局过滤
贴出源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | if (!get_magic_quotes_gpc()) { if (! empty ( $_GET )) { $_GET = addslashes_deep( $_GET ); } if (! empty ( $_POST )) { $_POST = addslashes_deep( $_POST ); } $_COOKIE = addslashes_deep( $_COOKIE ); $_REQUEST = addslashes_deep( $_REQUEST ); } function addslashes_deep( $_var_0 ) { if ( empty ( $_var_0 )) { return $_var_0 ; } else { return is_array ( $_var_0 ) ? array_map ( 'addslashes_deep' , $_var_0 ) : addslashes ( $_var_0 ); } } |
即没有开启gpc过滤敏感字符则使用addslashes_deep函数,addslashes_deep函数是一个魔改addslashes函数的函数,起到过滤敏感字符的作用。
可以看到此处的过滤没有过滤$_SERVER参数,后面有相关的地方可以留意一下。
SESSION在Cookie参数中,所以被过滤了,继续往后面看
来到很多文章都写过的ucenter位置,reg.php内容中有这样一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php include ( '../system/inc.php' ); if (isset( $_SESSION [ 'user_name' ])){ header( 'location:index.php' ); }; if (isset( $_POST [ 'submit' ])){ $username = stripslashes (trim( $_POST [ 'name' ])); // 检测用户名是否存在 $query = mysqli_query( $conn , "select u_id from mkcms_user where u_name='$username'" ); if (mysqli_fetch_array( $query )){ echo '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>' ; exit ; } $result = mysqli_query( $conn , 'select * from mkcms_user where u_email = "' . $_POST [ 'email' ]. '"' ); if (mysqli_fetch_array( $result )){ echo '<script>alert("邮箱已存在,请换个其他的邮箱");window.history.go(-1);</script>' ; exit ; } |
这里获取到了我们POST输入的name
1 | $username = stripslashes (trim( $_POST [ 'name' ])); |
而因为include了inc.php文件,$_POST进来的输入被全局过滤了,如果我们使用了单引号就会被加上反斜杠,但是!
这里又在外面使用了
stripslashes
函数,关于该函数:
同时我们可以通过页面返回的值来判断查询结果是否正确,即该位置存在布尔注入
使用方法:
查询一个已注册的用户名,然后进行布尔注入
本地测试(POST payload 注意test用户已注册)
永真式:
name=test' and '1'='1&email=test%40qq.com&password=test&submit=
永假式:
name=test' and '1'='2&email=test%40qq.com&password=test&submit=
burp抓包放进sqlmap里面跑
可以直接使用工具跑出来
接着全局搜索使用了stripslashes函数的位置
active.php代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php include ( '../system/inc.php' ); $verify = stripslashes (trim( $_GET [ 'verify' ])); $nowtime = time(); $query = mysqli_query( $conn , "select u_id from mkcms_user where u_question='$verify'" ); $row = mysqli_fetch_array( $query ); if ( $row ){ echo $row [ 'u_id' ]; $sql = 'update mkcms_user set u_status=1 where u_id="' . $row [ 'u_id' ]. '"' ; if (mysqli_query( $conn , $sql )) { alert_href( '激活成功!' , 'login.php' ); } } else { $msg = 'error.' ; } echo $msg ; ?> |
我们可以通过是否echo $row['u_id']来进行注入
去数据库里面查一下u_question是多少:
其逻辑在reg.php中,简单贴一下代码:
1 2 | $token = md5( $username . $password . $regtime ); //创建用于激活识别码 $data [ 'u_question' ] = $token ; |
实际上真实环境中我们应该是拿不到u_question的,但是这里我们可以使用时间盲注来获取数据库内容
repass.php也是类似的点存在注入
1 2 3 4 | $username = stripslashes (trim( $_POST [ 'name' ])); $email = trim( $_POST [ 'email' ]); // 检测用户名是否存在 $query = mysqli_query( $conn , "select u_id from mkcms_user where u_name='$username' and u_email='$email'" ); |
而除了因为stripslashes导致的注入外,代码里面还有因为直接拼接SQL语句而导致的注入,简单举两处:
admin_edit.php里
1 2 3 4 5 6 | $sql = 'update mkcms_manager set ' . arrtoupdate( $_data ) . ' where m_id = ' . $_GET [ 'id' ] . '' ; if (mysqli_query( $conn , $sql )) { alert_href( '管理员修改成功!' , 'cms_admin.php' ); } else { alert_back( '修改失败!' ); } |
这里的 $id 直接进行拼接,从而造成了注入,因为不需要使用引号进行闭合,所以之前的全局过滤也形同虚设了。
ad.php 里
1 2 3 4 5 6 7 8 | if (isset( $_GET [ 'del' ])) { $sql = 'delete from mkcms_ad where id = ' . $_GET [ 'del' ] . '' ; if (mysqli_query( $conn , $sql )) { alert_href( '删除成功!' , 'cms_ad.php' ); } else { alert_back( '删除失败!' ); } } |
这里也是通过拼接组成的SQL语句,存在SQL注入漏洞
逻辑漏洞以前有老哥提到过验证码复用+暴力遍历从而任意用户密码重置,下次还是审一个没人审的小众代码吧太菜了
参考链接:
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/13993849.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-11-17 Syclover 第十次极客大挑战web题题解