代码审计-3 文件包含漏洞
创始人
2024-03-15 22:49:27

文章目录

  • 代码审计-文件包含漏洞
  • 文件包含漏洞种类
    • 当检测到目标存在文件包含漏洞时可以怎么利用
    • 文件包含中php可使用的协议
  • PHPCMS V9.6.3后台文件包含漏洞
    • 后台路由分析
    • 漏洞寻找

代码审计-文件包含漏洞

在这里插入图片描述
在这里插入图片描述

文件包含漏洞种类

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

当检测到目标存在文件包含漏洞时可以怎么利用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

文件包含中php可使用的协议

在这里插入图片描述在这里插入图片描述

PHPCMS V9.6.3后台文件包含漏洞

后台路由分析

访问后台登录页面
在这里插入图片描述
从url可猜测出来大致的路由 m为模块,c为控制器,a为方法,pc_hash为参数
使用admin模块中的index控制器中的login方法在这里插入图片描述

漏洞寻找

当我们拿到源码后,可通过seay对文件包含的关键函数进行大致的正则搜索

在这里插入图片描述
此处为此CMS包含漏洞产生的php文件

在这里插入图片描述打开文件查看,此处对$filepath这个变量内容进行了包含
在这里插入图片描述通过分析$filepath的由来我们可以知道,$filepath变量存放的是一个文件的路径
并且在下面还通过file_put_contens函数来将$str中的内容写入到了这个文件中
然后进行include包含此文件

因为会把$str变量中的内容写到这个文件中,所以如果我们能控制$str变量中的内容就能把恶意代码写到此文件中,最后include还会来包含这个文件
在这里插入图片描述
接下来关注点就在$str变量上了,让我们看一下$str变量是怎么来的
通过代码可以看到,$str变量是由$template变量经过两个函数处理后得到的

在这里插入图片描述
继续跟踪下$template变量的由来

如果 isset($_POST['template']) && trim($_POST['template'])为真就将POST传入的参数名为template的值赋给变量$template,如果为假就赋值为空

isset():检测变量是否为NULL
trim():去除字符串两的空格

在这里插入图片描述

可以看到此处只是接收了POST方式传递的值赋给了$template

让我们看一下上面的两个函数new_stripslashestemplate_parse$template做了什么操作才赋值给的$str

new_stropslashes函数

此函数中调用了stripslashes函数来去除反斜杠
如果传入的参数是字符串就直接将addslashes()函数添加反斜杠去除并返回
如果传入的是数组就循环递归将数组中的字符串中的反斜杠去除并返回
在这里插入图片描述
template_parse函数

此函数主要对模板{}中的内容进行替换,也不会影响恶意代码的写入
在这里插入图片描述

经过分析,这两个函数都没有对我们需要写入的恶意代码造成威胁
现在我们则需要知道怎样才能将恶意代码写入到$template变量中

此处可以看到
&data['type']==1时直接返回错误提示
&data['type']==2时才会向下执行,将我们POST[‘template’]传入的值赋给$template,再将$template的值赋给$str,再将$str的内容写入到$filepath变量所存放的路径对应的php文件中,并包含

在这里插入图片描述
跟踪一下&data['type']==2的由来
发现$data中的数据是根据$id这个变量通过get_one()来查询数据库得到的,get_one()的参数是一个数组,键为'id',值为我们传入的$id

也就是说GET['id']传进来的值赋给$id,然后执行get_one()函数get_one()的参数为一个数组,键为字符串'id',值为变量$id

在这里插入图片描述
继续跟踪get_one()函数查看
此函数执行的是一个sql语句的查询操作
因为我们想让$data['type']的值等于2,就需要寻找添加的操作也就是找此处的$data['type']是从哪里添加的
在这里插入图片描述
此函数为添加的函数
此处对数据库进行添加操作的sql语句中的参数都是可以用户传入的
只要根据上面的内容对参数url进行构造让type的值传入为2就可以了

在这里插入图片描述
url进行构造

index.php路由到modules目录m选择block模块c选择block_admin控制器a选择add方法posGET方式提交的参数

dosubmit=1&name=test&type=2POST方式提交的必要参数

dosubmit=1因为ifPOST传递的dosubmit的值做了判断,如果不存在就不会向下执行
POST方式传递的nametype都是下面必要的参数,存在时才会进行赋值给对应的$name$type变量

在这里插入图片描述
访问该地址

在这里插入图片描述
cms是通过pc_hash的值来判断是否登录,登录后重新访问该地址在url后加上pc_hash的值

在这里插入图片描述POST提交之前构造好的参数,此时页面显示操作成功

在这里插入图片描述
此时跳转到该页面,上面添加操作的sql语句也成功执行

在这里插入图片描述

在这里插入图片描述

此页面对应的函数位置
需要的参数有GET传的id,通过对id进行查询返回结果为数组赋值给$data
此时返回的内容就是我们之前进行添加的,所以$data['type']2,继续向下执行

在这里插入图片描述
这里需要POST参数

在这里插入图片描述
所以我们在页面处通过POST将需要的参数传入
函数上面的POST可以不用传,当没有值时就将空赋值给变量了,并不会阻断程序执行不产生影响
下面的POST['template']就是对应的碎片模块的输入框,点击预览进行提交
在这里插入图片描述
写入恶意代码点击预览后$template变量接收到POST传递的值,再将值赋给$str变量
file_put_content函数将$str中的恶意代码写入到$filepath变量中存放的文件路径对应的文件中
最后include$filepath变量中存放的文件路径对应的文件进行包含,导致恶意代码执行

在这里插入图片描述新建test_shell.php成功
在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...