beescms代码审计

admin 2023年7月5日09:58:23评论65 views字数 2595阅读8分39秒阅读模式

一、后台登录页面存在sql注入

漏洞点:adminlogin.php

我们找到这个漏洞点,可以看到这个sql语句是没有经过过滤的。定义check_login函数,带两个参数可以看到,sql直接查询这两个参数,然后再进行判断$rel复制是否为空,然后再查询是否正确,所以我们找到这个$user是否可控

$rel=$GLOBALS['mysql']->fetch_asc("select id,admin_name,admin_password,admin_purview,is_disable from ".DB_PRE."admin where admin_name='".$user."' limit 0,1");

beescms代码审计

然后我们找到adminlogin.php文件调用了这个函数存在$user,继续跟踪$user

beescms代码审计

我们可以看到这个是通过POST来传递的

beescms代码审计

然后我们可以看到这是一个判断登录的登录框,就很明显是一个登录框,login.php很明显是一个后台登录点的位置,那我们继续分析这个POST传递进来的参数经过了两个函数的处理

beescms代码审计

首先我们来看第一个fl_value函数,这个是一个过滤函数,进行传递进来的值来匹配是否存在对应的值,如果存在就会进行替换为空,那么这里我们就可以想到绕过,大小写双写之类的绕过,过滤不严谨造成的

return preg_replace('/select|insert | update | and | in | on | left | joins | delete |%|=|/*|*|../|./| union | from | where | group | into |load_file

|outfile/i','',$str);

preg_replace  函数执行一个正则表达式的搜索和替换

beescms代码审计

那么我们来看第二个函数fl_html函数,htmlspecialchars这个就是一个特殊符号的转换函数,然后我们可以看到这个函数的特性就是默认只转换编码和双引号

htmlspecialchars() 把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体

beescms代码审计

beescms代码审计

那么我们知道这个地方是后台的登录地址,那我们我们来抓包测试一下,成功绕过并爆出用户

beescms代码审计

二、后台登录绕过存在变量覆盖

漏洞点:admininit.phpincludesinit.php

从这个页面可以看到是一个检查登录的页面

beescms代码审计

我们来跟踪一下is_login()函数是做什么用的,找到在includesfun.php可以看到是一个判断函数,我们可以看到$_SESSION['login_in']=1&&$_SESSION['admin']$_SESSION['login_time']>3600就会登录

beescms代码审计

然后我们来看login_out()函数,他的作用只是用来判断这些session是否为空,是的话就退出,如果我们传递进来登录之后自动生成所以这里可以不用看

beescms代码审计

既然我们找到了一个判断逻辑的地方,我们需要构造一下payloadpayload不能加上php的单引号,但是我们要找到可以控制session的地方,而且可以调用,那么我们找到一个全局变量的地方可以进行变量覆盖,在这个includesinit.php

_SESSION[login_in]=1&_SESSION[admin]=123&_SESSION[login_time]=123456

beescms代码审计

我们最上面找到一个创建会话的session_start()函数

beescms代码审计

然后创建会话之后,可以通过$_REQUEST传参来进行参数传递(getpostcookie),然后就是fl_value函数处理一些过滤的危险函数

beescms代码审计

beescms代码审计

然后我们可以看到extract()函数,是一个全局变量,可以直接通过$_REQUEST来传参,因为过滤了cookiegetpost没有,所以我们可以post传递

extract() 函数是从数组中把变量导入到当前的符号表中

beescms代码审计

那么到这一步就很明显了,结合两个漏洞就通过变量覆盖绕过后台的目的,首先我们登录检查这里可以通过一下这段参数绕过

_SESSION[login_in]=1&_SESSION[admin]=123&_SESSION[login_time]=12345699999

beescms代码审计

然后我们又找到变量覆盖可以通过POST传参控制session

beescms代码审计

我们抓包通过POST来传参可以看到是成功进入后台的,这里要注意,时间要很大才行,不然进不去,这样就进来了

beescms代码审计

beescms代码审计

三、任意文件删除漏洞

漏洞点:adminadmin_ajax.php

我们就在这个页面找到这一小段代码,只要$action==del_pic,那么我们通过$file获取路径,然后@unlink函数存在就删除,我们可以找一下这个$value变量

beescms代码审计

可以通过request传递

beescms代码审计

我们加上payload就可以直接删除,这里前提是需要登录后台才行

http://192.168.0.102/admin/admin_ajax.php?action=del_pic&value=../123.txt

beescms代码审计

四、后台文件上传

漏洞点:adminupload.php

我们找到这一个文件,这段代码是一个图片上传的地方

beescms代码审计

我们来看一下is_uploaded_file判断是否http协议的post传递的

beescms代码审计

然后判断$up_type是否等于'pic',然后就直接进入判断语句

beescms代码审计

$up_type变量是可以直接通过GET传递进来

beescms代码审计

然后我们可以看到里面的是变量赋值是否为空

beescms代码审计

继续看我们可以看到up_img函数,在includesfun.php文件中可以看到是对类型的判断

beescms代码审计

然后对类型的赋值判断就可以直接上传了

beescms代码审计

通读这整段的代码理解,整个上传流程只是对类型进行了校验,那么我们只需要找到一个图片上传的地方尝试修改后缀就可以上传,图片jpg改成php,上传成功

beescms代码审计

beescms代码审计

beescms代码审计

五、文件包含漏洞

漏洞点:adminadmin_channel.php

通过easy审计系统找到这里的这段代码

beescms代码审计

我们来剖析一下代码

beescms代码审计

beescms代码审计

按照上面的思路来看,只要文件存在就可以包含,没有过滤,那我们后台找一下导入字段的功能点

beescms代码审计

发现是可以包含z.php

beescms代码审计

beescms代码审计

那么我们可以包含,就可以尝试目录穿越达到上传之后目录解析的目的,上一个审计的后台文件上传是可以上传php的,这里就不说了,我们先上传一个php然后去进行包含

beescms代码审计

然后进入导入模块,确定就可以看到解析了

beescms代码审计

beescms代码审计

总结:又是学习做笔记的一天,就这样吧

beescms代码审计

原文始发于微信公众号(半仙想变强):beescms代码审计

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月5日09:58:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   beescms代码审计http://cn-sec.com/archives/1854728.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息