sql怎么继续编辑已经保存的代码_某团购CMS的GETSHELL操作代码审计

634e120abcd3808866c7d5571e57cec8.png

作者:会上树的猪合天智汇

0x00 写点废话

在渗透测试中,获取一个webshell应该是我们不屑的追求,今天要通过这个CMS从代码的角度看一下可利用的getshell的方法。这一次的代码审计需要借助工具来定位可能存在的漏洞点,选择Seay源代码审计系统。步入正题。

0x01文件上传getshell:

40279b1e91b4976ff72c346c5cd93a00.png

1、/kindupload.php:通过获取文件最后一个扩展名进行白名单匹配,且添加随机数命名新文件名,应该不存在文件上传漏洞

5ac6701f8e274a9e05804e296d976004.png

2、/upload.php:此文件属于测试文件

f9d59895154d40a0c877baba1f132ebf.png

3、include/function/common.php:关于$image变量的来源有两个,为null时强制转换jpg格式,当对有图片项目进行编辑时,$image变量就是之前上传的文件地址,这样的话想进行任意文件上传应该就没有可能了。。。。。。

cd6ded3ad68961c1189b4c96fe31f1d2.png

0x02 文件写入+文件包含getshll:

在进行任意文件删除/读取/修改漏洞审计时发现支付日志位置可以向日志文件写入任意内容:漏洞位置:/alifast/alipay.function.php

24097a7e0012786245b90c0985c7ab0b.png

根据定位,可以找到logResult函数:

48936f4a1e031fa5cadf4c6c98c14137.png

可以看到其中的$word变量未经过任何check便写入到log.txt文件中(此处写入文件可能比较鸡肋,但如果可以找到任意文件包含,便可以直接getshell)而其中$word变量来源于对函数的引用,我们全局搜索一下看有哪些地方调用了logResult函数:

961e29b412fe635e56099621c906211d.png

可以找到一处调用,在/alifast/lib/alipay_notify_class.php文件中:

8bad63fe767c61cbb6b4f7626623f7c7.png

通过verifyNotify函数,当POST数据不为空时就会调用logResult函数进行日志写入,那之后就转到查找何处调用了verifyNotify函数,找到一处调用:/alifast/returnadd_url.php

4d2022a8512035d0e57affffb943d960.png

ca0c9c42851566a1ced2d5cb32e5f8f1.png

而且可以发现此处文件应该不需要登录便可以直接访问:

8fd0e9e25b3e0221ac0d30d425780ed8.png

之后我们传入一个payload,然后开启DEBUG调试一下,看一下参数传递:

b1ded66efcf6f1234c0fbb0734f1886e.png

ed303d86cebb78d78a5b9e4ce8185f32.png

最后可以看一下log.txt文件,成功写入payload:

a281d0ab2b5d297d6a4bd94d69b65224.png

这需要结合文件读取漏洞才能利用,否则写入到txt文件属于鸡肋,之后便通过对扫描到的可能存在文件包含漏洞的点进行验证,未发现可利用的文件包含漏洞,上面这个任意写入真的鸡肋了。

0c353a975c247ead3760fcfb85b3d16b.png

不过作为一个搞信息安全的弱鸡,我是不会放弃的。

d5dab4a12d304a06cee151e4e41244cb.png

0x03后台通过修改模板getshell:

感觉模板渲染位置最容易存在代码执行漏洞了,之前审计一些其他的CMS也在类似模板渲染位置发现了漏洞,导致getshell。因为系统存在很多模板,便只举一个模板当作栗子。

此处漏洞位置:/include/function/template.php

877e5192f3c14f7ae543df418344ebcf.png

在__parse函数中存在preg_replace函数通过e参数进行代码执行。

我们先看在哪些地方对__parse函数进行了调用:

ba5c9299c7e7fcd61e31557fa7ac3efa.png

在同文件下58行,通过__tempate函数进行调用。

3258be811db5220561e571664477f593.png

再搜索有哪些地方对__template函数进行了调用:

e3c3aacf3866bc5aa873f1d95288374c.png

在/include/function/common.php文件下存在对__template函数的调用:

d6d4369ecbbdb41cf59c5ae95c55a4fd.png

最后就是看有哪些地方调用了template函数:

e7968fba3ace83f68e06366a68fa7356.png

这些调用基本都是进行模板加载的位置,我们先随便找一处:(团购信息提交)

99b05ffa42fe746b1731daba37f4c145.png

接下来还是要开启debug,然后跟踪一下程序执行的逻辑:

  1. 访问链接,触发模板解析函数:注意此处采用的include的方式进行模板加载。

394c9ee5ffe1267500d2eef6a16d5a4a.png

2、进入template函数之后,会根据传递的参数加载不同的模板。

0bd227bf5546586feebbe7441ae9b06d.png

3、当进入__template函数之后要先根据传递的参数加载模板的绝对位置,这里注意,存在一个模板和一个编译后的模板,模板是.html文件,而编译后的模板是.php文件,程序在此处将模板文件路径存在变量$tfile,编译后的模板文件路径存在变量$cFile,之后会利用filemtime函数来比较两个文件的修改时间,如果模板的修改时间小于编译后的模板文件,那说明已经对模板进行过编译,直接返回编译后的模板文件路径。反之才会调用__parse函数对模板进行重新编译。

0ae5e99d0ca0432142cb0258003b2110.png

根据上面的分析,我们要找到可以修改模板的功能点,不然此处漏洞便无法利用,因为无法满足文件修改时间的检查,除非站长刚好改了模板文件。不过一般站点都提供了模板修改功能,这个CMS也不例外:

8e6c1e1a2188cb218936b82fc9de68ec.png

既然后台可以修改模板文件,那就保证模板文件修改时间大于编译后的模板文件,这样就会进入重新编译环节。

e8292bae2964c5ef2f78bc49a7fa3f8a.png

我们通过第20行的preg_replace来进行分析:

preg_replace("/<!--s*${(.+?)}s*-->/ies", "__replace('<?php 1; ?>')", $fileContent);

eaf72f9d05ffa5008d0d2622ba7ca8d8.png

这个正则表达式会怎么匹配不太好说,直接举一下编译前和编译后的栗子出来就能明白了:

11598e65e40ba52fcf3785c70afdf7cc.png

ac844c3fb28ed9b717f3b5467055aedd.png

上面那个正则是如何处理的应该就清楚了。接下来还是继续debug,跟踪模板渲染的具体逻辑:

81a9f71cd4fa2519984e88fd0c728c62.png

通过正则表达式将模板进行渲染,然后通过file_put_content函数将内容全部写入到渲染后的模板,写入成功则返回true。

4e317436dd3726ed515e666684e5a63b.png

值得注意的是最后返回的是渲染后的模板的物理路径,然后通过include方式加载模板,此时可以看到模板已经通过正则全部替换为php代码。

ba65cf10cc6cf346c8643ef92b00c9c5.png

在这个地方存在一个之前的想法错误,其实并不是通过preg_replace来进行代码执行,因为通过/e参数调用的函数是__replace方法,只进行了简单的替换,最后还是通过文件包含的方法来包含存在恶意代码的模板。

24778f5efd8df67fcf0278c5ffe6e516.png

1a61ead62fa0793666874e65cea5c36c.png

既然已经清楚模板渲染的流程,接下来尝试getshell操作,首先将模板修改成如下形式:记得闭合双引号,括号等等。

9f5cccd0cf3228076943efede50724e6.png

通过编译函数之后模板应该是下面这个样子的:

99e40d72adde4fd0c702420f4f0da5b9.png

最后通过include包含这个含有恶意代码的模板:

1a74738ab98b8263dc7ff2957da347a8.png

0x04数据库备份getshell:

在一般系统中通常会存在数据库备份的功能,在渗透测试中利用数据库备份getshell也是常用操作,在这个CMS系统中同样发现了数据库备份与还原功能。

3217157928d17284a4eeb0c4c399a436.png

但是此处数据库备份的文件是默认的用户不可控的,未发现将恶意代码备份到.php文件当中的操作:

b8a27634988a6701b69f7143af99e7e2.png

但是在之后对从本地文件恢复数据库的功能进行审计发现,此处存在任意SQL语句执行,相当于给我们提供了一个执行任意SQL语句的接口,那么便可以尝试通过SQL命令导出文件getshell和MySQL日志getshell。先来看一下程序逻辑:

在数据库恢复功能提供了从本地文件恢复的功能:

bdc26d50f36d7de83b9466fa0e1370b2.png

当本地文件上传到服务器,会通过一个backup_import的函数执行文件内的SQL语句:

14d3c1095bfc60fab59d91808aa427d8.png

我们跟踪一下这个函数:

90b658c8cc34698618ac362da92b230d.png

可以看到从文件中读取到SQL语句之后只去掉了几个特殊符号,便通过DB::Query方法直接执行,其中可以再看一下Query方法:未经过任何处理,直接执行SQL语句。

0043b7f806e68b911080a07f7840273d.png

已经明白程序的运行逻辑,那么我们便只要构造可以getshell的SQL语句,然后通过备份还原的功能执行SQL语句便能够成功getshell。

上面说MySQL有两种常用的方法getshell:文件导出和日志记录。因为新版的MySQL添加了secure_file_priv参数对文件导入导出进行了限制,这个参数需要修改数据库配置文件,利用困难。

0e971fe27169acf93a2506cac4e5711a.png

所以为了提高成功率优先选择利用日志功能getshell。这里还是先介绍一下利用log日志getshell。在MySQL日志功能中:

  1. General_log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
  2. General_log_file 指的是日志的保存路径。
  3. 关于开启general_log参数的作用:
    1. 开启它可以记录用户输入的每条命令,会把其保存再general_log_file指定的目录下,就是日志文件。这个参数是可以直接通过mysqld进行设置。
    2. 我们的利用的思路是开启general_log之后把general_log_file的值修改为我们网站默认路径下一个自定义的php文件中,然后我们通过log日志进行写入一句话后门到上面去,然后再进一步利用。

通过上面的介绍我们知道要实现日志getshell,要做的以下三步:开启日志功能,重定义日志输出文件(需要绝对路径),执行恶意SQL语句写入日志,具体SQL语句如下:

303ebf1ffef91259ed9d55ff925705be.png

之后上传文件执行SQL语句,然后在之前设置的日志路径下便可以看到带有恶意payload的日志文件了:

774662a8813a743346651ebbf20fa58f.png

aeb9c38632351a4821d19fa7d0ad7dae.png

访问一下链接,成功getshell

a9521784e916d83fef02512ad4650b43.png

0x05 收尾:

还是来点骚话收尾,上述只是我找到的一些getshell的操作,肯定还会有其他getshll的操作没有被我发现。但是用代码审计的方式从代码角度去看待漏洞形成的原因对漏洞的理解还是有很大帮助的,还是那句话,代码审计一时爽,一直审计一直爽,大家也可以加入代码审计的大军,有兴趣和我这个菜鸡一起成长进步。

abed1bb242a17e11749f24a158b573a9.png

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测温枪的工作原理全面解析,如何测出你的温度

来源&#xff1a;世界先进制造技术论坛内容来源&#xff1a;网络测温枪&#xff0c;学名是“红外线测温仪”或者“红外线辐射测温仪”。它的原理是&#xff1a;被动吸收目标的红外辐射能量&#xff0c;从而获得物体温度数值。这次疫情&#xff0c;让这个小东西一下子&#xff0…

mysql不要放docker,Docker从入门到放弃

本文将以比较简单的的方式让大家理解docker&#xff0c;以平时常用到的测试环境为主&#xff0c;从用开始&#xff0c;慢慢理解docker。0x00 用docker进行漏洞测试0x01 docker运行busybox0x02 Docker 搭建运行apache-php环境0x03 用Dockerfile自动化构建可ssh登陆的镜像0x04 Do…

一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...

来源&#xff1a;返朴撰文 &#xff1a;董唯元、杨凌、顾舒晨、洪俊贤、太阁尔、姜小满目 录1. 一个对称性解释三个宇宙学难题2. 引力波碰撞会发光&#xff1f;3. 粘液霉菌助力寻找宇宙网4. 听&#xff0c;是杂质原子的声音5. 更快了&#xff01;地球的大型生态系统在崩溃6. 究…

一ElasticSearch安装启动

参考官方&#xff1a;https://www.elastic.co/downloads/elasticsearch 转载于:https://www.cnblogs.com/tangyongathuse/p/6840231.html

结构化数据不应该被人工智能忘之脑后 !

来源&#xff1a;Ihab Ilyas在处理非结构化数据的问题上&#xff0c;人工智能和深度学习方法一直都表现出众且广为人知&#xff0c;无论是在自然语言处理、知识库自动构建&#xff0c;还是图像视频的识别和生成应用中&#xff0c;都有很多成熟案例。然而对于结构化数据的研究&a…

导入自定义模块syntaxerror: invalid syntax_技术分享 | Quill的模块机制

DevUI技术体验部是一支兼具设计视角和工程视角的团队&#xff0c;服务于华为云DevCloud平台和华为内部上百个中后台系统&#xff0c;主打产品 DevUI Design 服务于设计师和前端工程师。官方网站&#xff1a;devui.design。Ng组件库&#xff1a;ng-devui。DevUI Design&#xff…

我们对时间的理解错了吗?

来源&#xff1a; 利维坦文/Claudia Hammond译/boomchacha校对/Rachel原文/www.bbc.com/future/article/20191203-what-we-get-wrong-about-time“时间”是常见的名词。我们都熟知时间流逝的感觉&#xff1a;现在变成过去&#xff1b;今天变成昨天。你要是住在温带&#xff0c;…

SVN使用过程中遇到的一些问题

更新svn的客户端TortoiseSVN后 &#xff0c;之前使用svn管理的文件的关联图标消失了 说明:下面的解决方法及图片来自博客&#xff1a;装了SVN&#xff0c;你的关联图标变了没有&#xff1f; 解决办法&#xff1a;在同步的文件点击右键如下图 ...现则Settings&#xff0c;出现的…

脑神经计算建模揭示前额叶皮层不同类型中间神经元在信息维持中的作用

来源&#xff1a;智能的本质与未来尽管占比相对锥形神经元数量少&#xff0c;但是中间神经元在大脑皮层实现认知功能中的作用却不容小觑。中间神经元的显著特点就是种类丰富&#xff0c;因此对不同类型中间经元在特定认知功能的分工作用的探索是揭示智能机制的关键之一。中国科…

支付宝支付-刷卡支付(条码支付)

此项目已开源欢迎Start、PR、发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen205/IJPay 在官方的产品是叫做当面付 1、什么是当面付呢&#xff1f; 简单的讲就是条码支付(刷卡支付)、扫码支付、声波支付。 【官方是这样解释的…

solr做索引时抛出异常_Solr---gt;01

Solr介绍 什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中的数据总体分为两种&#xff1a;结构化数据和非结构化数据。 1、结构化数据&#xff1a;指具有固定格式或有限长度的数据&#xff0c;如数据库&#xff0c;元数据等。 2、非结构化数据&a…

新冠肺炎疫情把科研推上“云端”

来源&#xff1a;新华网美国威斯康星国家灵长类动物研究中心的戴夫奥康纳清晨收到在伦敦的一名合作伙伴发来的论文预印本。这项研究在中国完成&#xff0c;两人通过企业协同云端办公软件Slack讨论了一上午。下午2点&#xff0c;奥康纳打开高清会议系统GoToMeeting&#xff0c;和…

CSDN专訪:大数据时代下的商业存储

原文地址&#xff1a;http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop摘要&#xff1a;EMC公司作为全球信息存储及管理产品方面的率先公司&#xff0c;不久前。EMC宣布收购DSSD加强和巩固了其在行业内的领导地位&#xff0c;日前我们有幸採訪到EMC中国的张安…

兵棋推演有助于我们了解哪些战争知识?

来源&#xff1a;兵推天下菲利普塞班博士是英国伦敦国王学院战争研究系的战略研究教授&#xff0c;他也是兵棋专家和兵棋设计师。在30多年的教学生涯中&#xff0c;他将兵棋融合到了课堂教学中&#xff0c;向学生展示兵棋推演对军事规划工作的实际作用。在一次访谈中&#xff0…

2020 五大技术趋势:无人驾驶发展、机器视觉崛起、区块链实用化、人类增强技术、超自动化...

来源&#xff1a;机器人创新生态__自动驾驶技术的发展_近年来&#xff0c;自动驾驶技术一直在发展&#xff0c;特斯拉、英特尔等大公司在这一领域取得了长足的进展。虽然我们还没有达到L4级或L5级自动驾驶汽车的水平&#xff0c;但我们已经很接近了。为了解释每个级别的含义&am…

基于java的qq屏幕截图工具的设计与实现论文_众包学习:Web界面众包评估的通用工具包...

论文&#xff1a;Nebeling M , Speicher M , Norrie M C . CrowdStudy: general toolkit for crowdsourced evaluation of web interfaces[C]// Acm Sigchi Symposium on Engineering Interactive Computing Systems. ACM, 2013.摘要&#xff1a;传统的可用性测试方法既费时又昂…

福布斯2020年AI领域10大预测:人工智能越来越“边缘化”!

来源&#xff1a;人工智能和大数据毫无疑问&#xff0c;人工智能&#xff08;AI&#xff09;一直是2010年代的技术主题&#xff0c;随着新的十年的来临&#xff0c;这一趋势似乎不会消失。在过去的十年中&#xff0c;人们会回想起真正可以被视为“智能”机器的时代&#xff0c;…

spss数据_职场白骨精进阶秘籍——SPSS数据分析基础

点击上方“蓝字”关注我们吧&#xff01;想做数据分析&#xff0c;不会编程怎么办&#xff1f;如何让自己的数据分析更加专业&#xff1f;职场打拼&#xff0c;如何快速提升自己的竞争力&#xff1f;著名的未来学家托夫勒在其所著的《第三次浪潮》中将“大数据”称颂为“第三次…

人工智能和自主系统在美军联合职能中的应用

来源&#xff1a;知远战略与防务研究所【知远导读】随着人工智能/自主系统技术的快速发展及其在军事领域的持续应用&#xff0c;智能化、无人化日渐成为未来战争的发展方向。美国作为世界军事发展潮流的引领者&#xff0c;正在积极探索人工智能/自主系统与联合部队作战职能的融…

oracle怎么把整形,【用bbed工具对Oracle进行微整形】

CUUG ORACLE大师网络免费课程——将个人姓名、电话发送到SIGNUPCUUG.COM即可报名CUUG新增“即时同步互动远程授课”&#xff0c;足不出户学ORACLE!详情见&#xff1a;HTTP://ORACLE.CUUG.COM/DBA1.HTML2013韩国小姐选美比赛佳丽样貌神似&#xff0c;难以分辨&#xff0c;无论是…