php的webshell或者rce时容易被忽略的一个函数

admin 2024年2月15日19:22:14评论12 views字数 1129阅读3分45秒阅读模式

一,背

最近在做一个靶场题目,这个靶场的环境是登录网页版的虚拟机(攻击机),然后再访问内网靶机地址来进行答题。开发者使用这种模式应该是为了避免靶机放在公网上被恶意攻击。但是,这对于我来说,存在一个很大的不便:就是脚本无法上传至攻击机(其实是因为我是脚本小子)

二,解决的问题

前期通过文件上传获得了一个webshell,过程不再赘述,但是这个webshell不能执行命令,过滤的函数如下:

php的webshell或者rce时容易被忽略的一个函数

看到这里,我的思路有两个:

  1. 使用类似中国蚁剑的disable function bypass插件进行绕过。

  2. 寻找这些禁用的函数有没有漏网之鱼。

第一个思路,我看了很多的思路,攻击机提供的蚁剑并没有下载插件,而且攻击机不出网,显然直接使用插件行不通。我在网上看了很多思路,大部分都是需要下载或者编译c文件和后缀名为so的文件,这些思路也不行,因为根本不能进行文件传输。

于是,我开始尝试第二个思路,我在网上翻阅资料,发现一个叫做pcntl_exec()的函数能够代替其他命令执行函数进行命令执行,条件是:

标机器安装并启用了php组件Pcntl。

正好,我这个靶机的 phpinfo里面显示pcntl组件是enabled状态,于是,我开始着手使用pcntl_exec()函数进行命令执行,翻阅网上资料,php代码如下:

<?php pcntl_exec("/bin/bash", array("/tmp/1.sh"));?>

1.sh的文件内容如下:

#!/bin/bashls -l /

这里说明一下:因为不能命令执行,所以想运行php文件还比较麻烦,我上传了一个很古老的php大马,这个木马正好带有php语言执行功能可以运行以上php代码(实际上可以通过上传php文件然后网页访问即可执行)。

结果,提示502错误,我懵逼了:

php的webshell或者rce时容易被忽略的一个函数

停顿了好久,我就想,会不会函数已经执行成功了但是返回结果遇到了一些错误?如果是这样,不妨试一下反弹shell,说干就干,修改sh文件:

php的webshell或者rce时容易被忽略的一个函数

果然,接收到了shell,但是此时是www权限,flag在/root目录下,于是,我立马想到了suid提权:

php的webshell或者rce时容易被忽略的一个函数

看到这里,下面就不用说了,suid直接获取了root权限,渗透测试结束!

三,总结

当php的很多命令函数被禁用时,可以仔细查找各个命令执行函数,有没有漏网之鱼,如:pcntl_exec()的函数就能够代替其他命令执行函数进行命令执行,条件是:目标机器安装并启用了php组件Pcntl。

这里顺便贴上一些命令执行函数:

assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open

原文始发于微信公众号(小猪网络安全):php的webshell或者rce时容易被忽略的一个函数

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日19:22:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   php的webshell或者rce时容易被忽略的一个函数https://cn-sec.com/archives/2214568.html

发表评论

匿名网友 填写信息