一、后台登录页面存在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"); |
然后我们找到adminlogin.php文件调用了这个函数存在$user,继续跟踪$user
我们可以看到这个是通过POST来传递的
然后我们可以看到这是一个判断登录的登录框,就很明显是一个登录框,login.php很明显是一个后台登录点的位置,那我们继续分析这个POST传递进来的参数经过了两个函数的处理
首先我们来看第一个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 函数执行一个正则表达式的搜索和替换 |
那么我们来看第二个函数fl_html函数,htmlspecialchars这个就是一个特殊符号的转换函数,然后我们可以看到这个函数的特性就是默认只转换编码和双引号
htmlspecialchars() 把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体 |
那么我们知道这个地方是后台的登录地址,那我们我们来抓包测试一下,成功绕过并爆出用户
二、后台登录绕过存在变量覆盖
漏洞点:admininit.php和includesinit.php
从这个页面可以看到是一个检查登录的页面
我们来跟踪一下is_login()函数是做什么用的,找到在includesfun.php可以看到是一个判断函数,我们可以看到$_SESSION['login_in']=1&&$_SESSION['admin']和$_SESSION['login_time']>3600就会登录
然后我们来看login_out()函数,他的作用只是用来判断这些session是否为空,是的话就退出,如果我们传递进来登录之后自动生成所以这里可以不用看
既然我们找到了一个判断逻辑的地方,我们需要构造一下payload,payload不能加上php的单引号,但是我们要找到可以控制session的地方,而且可以调用,那么我们找到一个全局变量的地方可以进行变量覆盖,在这个includesinit.php
_SESSION[login_in]=1&_SESSION[admin]=123&_SESSION[login_time]=123456 |
我们最上面找到一个创建会话的session_start()函数
然后创建会话之后,可以通过$_REQUEST传参来进行参数传递(getpostcookie),然后就是fl_value函数处理一些过滤的危险函数
然后我们可以看到extract()函数,是一个全局变量,可以直接通过$_REQUEST来传参,因为过滤了cookie和get,post没有,所以我们可以post传递
extract() 函数是从数组中把变量导入到当前的符号表中 |
那么到这一步就很明显了,结合两个漏洞就通过变量覆盖绕过后台的目的,首先我们登录检查这里可以通过一下这段参数绕过
_SESSION[login_in]=1&_SESSION[admin]=123&_SESSION[login_time]=12345699999 |
然后我们又找到变量覆盖可以通过POST传参控制session
我们抓包通过POST来传参可以看到是成功进入后台的,这里要注意,时间要很大才行,不然进不去,这样就进来了
三、任意文件删除漏洞
漏洞点:adminadmin_ajax.php
我们就在这个页面找到这一小段代码,只要$action==del_pic,那么我们通过$file获取路径,然后@unlink函数存在就删除,我们可以找一下这个$value变量
可以通过request传递
我们加上payload就可以直接删除,这里前提是需要登录后台才行
http://192.168.0.102/admin/admin_ajax.php?action=del_pic&value=../123.txt |
四、后台文件上传
漏洞点:adminupload.php
我们找到这一个文件,这段代码是一个图片上传的地方
我们来看一下is_uploaded_file判断是否http协议的post传递的
然后判断$up_type是否等于'pic',然后就直接进入判断语句
$up_type变量是可以直接通过GET传递进来
然后我们可以看到里面的是变量赋值是否为空
继续看我们可以看到up_img函数,在includesfun.php文件中可以看到是对类型的判断
然后对类型的赋值判断就可以直接上传了
通读这整段的代码理解,整个上传流程只是对类型进行了校验,那么我们只需要找到一个图片上传的地方尝试修改后缀就可以上传,图片jpg改成php,上传成功
五、文件包含漏洞
漏洞点:adminadmin_channel.php
通过easy审计系统找到这里的这段代码
我们来剖析一下代码
按照上面的思路来看,只要文件存在就可以包含,没有过滤,那我们后台找一下导入字段的功能点
发现是可以包含z.php的
那么我们可以包含,就可以尝试目录穿越达到上传之后目录解析的目的,上一个审计的后台文件上传是可以上传php的,这里就不说了,我们先上传一个php然后去进行包含
然后进入导入模块,确定就可以看到解析了
总结:又是学习做笔记的一天,就这样吧
原文始发于微信公众号(半仙想变强):beescms代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论