0x02 escapeshellarg为什么没有奏效?...导致这个漏洞的原因,有几点: 开发者对于escapeshellarg函数的误解,造成参数注入 git grep的参数--open-files-in-pager的值,将被直接执行 理论上,在经过query...[A-Za-z0-9\-]+)/', '', $query); $query = escapeshellarg($query); try { $results = $this...但我在0x02中也已经说清楚了,如果开发者在拼接命令的时候,将$query直接给拼接在“参数选项”的位置上,那用escapeshellarg也就没任何效果了。...但可惜的是,python帮开发者做的操作,也仅仅相当于是PHP中的escapeshellarg。我们可以试试令query等于--open-files-in-pager=id;: ?
我们先来看一下 escapeshellarg 函数的定义: escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数 功能 :escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号...-d a=1 由于escapeshellarg先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。...另外针对传入的数据,调用了 escapeshellarg 函数来转义特殊符号,防止注入参数。...然而这样做,就引入了我们上面讨论的问题,即同时使用 escapeshellarg 函数和 escapeshellcmd() 函数,导致单引号逃逸。...这里其实有个很奇妙的漏洞,针对用户输入使用 escapeshellarg 函数进行处理。
我们先来看一下 escapeshellarg 函数的定义: escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数 功能 :escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号...然而 escapeshellcmd() 和 escapeshellarg 一起使用,会造成特殊字符逃逸,下面我们给个简单例子理解一下: ?...另外针对传入的数据,调用了 escapeshellarg 函数来转义特殊符号,防止注入参数。...然而这样做,就引入了我们上面讨论的问题,即同时使用 escapeshellarg 函数和 escapeshellcmd() 函数,导致单引号逃逸。...这里其实有个很奇妙的漏洞,针对用户输入使用 escapeshellarg 函数进行处理。
escapeshellarg【http://www.php.net/manual/zh/function.escapeshellarg.php】 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号...一个简单结论 对于单个单引号,escapeshellarg函数转义后,还会在被转义字符的左右字符串各加一个单引号进行连接,而escapeshellcmd函数是直接转义。...对于成对的单引号,escapeshellcmd函数不转义,但escapeshellarg函数转义。 一个简单举例 "; $host=escapeshellarg($host); echo $host."...Refer 谈谈escapeshellarg参数绕过和注入的问题【http://u3v.cn/4qLoRw】 利用/绕过 PHP escapeshellarg/escapeshellcmd函数【http
escapeshellarg:把字符串转码为可以在 shell 命令里使用的参数,escapeshellarg ( string $arg ) : string,功能是将字符串$arg增加一个单引号并且能引用或者转码任何已经存在的单引号...(PHP - escapeshellarg) 前期踩点非常关键!...($tmpDir) . " " . escapeshellarg($zipFn));unlink( $zipFn ); 早前有案例分析,由于 escapeshellarg 函数会在字符串外部添加单引号进行包裹...这样来看,即使Dell Kace K1000 v9版本程序采用了看似不安全的escapeshellarg 函数调用,但它在其中已进行过安全修复。...基于早前的escapeshellarg绕过隐患分析,而对于现场目标系统的Dell Kace K1000 v6版本我仍不确定是否存在此隐患。
5、使用escapeshellarg函数处理相关参数。...Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg
this->func)) { if($this->func === "shell_exec") { # ($this->func)("echo " . escapeshellarg...user模块的 save方法虽然对 shell_exec的参数进行了 escapeshellarg处理,且要求自定义函数名开头不能为字母,但是我们可以通过php全局命名空间 \进行绕过, ?...this->func)) { if($this->func === "shell_exec") { ($this->func)("echo " . escapeshellarg
php.ini 提高安全性: 搜索 /disable_functions 如下就是通常被认为比较危险的函数: disable_functions = eval,assert,popen,passthru,escapeshellarg...,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec
(详细请参考 php.net相关说明) 这里,最好使用Escapeshellarg方法函数,Escapeshellarg()会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号...“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令绕过或注入攻击的目的
php$str="a'( -X/home/www/backdoor.php -OQueueDirectory=/tmp )@qq.com";$c=escapeshellarg($str);echo $c...;echo "";$str="a( -X/home/www/backdoor.php -OQueueDirectory=/tmp )@qq.com";$b=escapeshellarg($str...escapeshellcmd与escapeshellarg导致参数注入 当$this->sender同时被这两个参数处理的话,就会导致单引号逃逸,如下代码测试 <?...php$str="a'( -X/home/www/backdoor.php -OQueueDirectory=/tmp )@qq.com";$c=escapeshellarg($str);echo $c
.safe_mode = On //避免本地包含、文件打开、命令执行 (4).disable_functions = phpinfo,exec,system,passthru,shell_exec,escapeshellarg
Shell_exec函数 string shell_exec ( string $cmd ) $cmd 要执行的命令 反引号(`)则调用此函数 5.过滤函数 Escapeshellcmd() 过滤整条命令 Escapeshellarg
popen,shell_exec,proc_open,proc_terminate,curl_exec,curl_multi_exec,show_source,touch,escapeshellcmd,escapeshellarg
disable_functions = 改为: disable_functions = passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg
,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec...disable_functions //安全函数 eval 之前提到的一句话木马涉及到的函数,如果把这个函数禁用,那么那个木马将不会生效 eval,assert,popen,passthru,escapeshellarg...,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec.../php.ini 搜索 /disable 在disable_functions =后禁掉一些危险的函数 disable_functions =eval,assert,popen,passthru,escapeshellarg...,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec
下面我们给出建议的禁用功能设置: disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg
disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot...,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl
• 使用 escapeshellarg 函数处理相关参数,escapeshellarg 函数会将用户引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“’”,双引号“"”会被转义为“"”,分号“...;”会被转义为“;”,这样 escapeshellarg 会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
preg_match('/flag/i',$cmd)) { $cmd = escapeshellarg($cmd); system('cat ' ....这肯定就是管理员请求的flag路由 到这里你是不是要兴冲冲的去直接去看这个文件里的内容了呢,这肯定是不行的,因为正则表达式过滤掉了flag这个单词,正则表达式肯定没那么容易绕过,这时候能动手脚的就只有escapeshellarg...函数了,那么他是用来干什么的呢 escapeshellarg:https://www.php.net/manual/zh/function.escapeshellarg.php 其实这个链接下面的用户贡献笔记早就有人写了这个漏洞了
pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,show_source,escapeshellcmd,escapeshellarg
领取专属 10元无门槛券
手把手带您无忧上云