浅谈CTF中escapeshellarg的利用

本文主要探讨了escapeshellarg函数的利用。该函数可将字符串转码为shell命令参数,在CTF中可能用于参数注入和逃逸字符。参数注入需函数参数可控且命令有执行选项;逃逸字符利用该函数非二进制安全的特性,通过不可见字符绕过正则检测,最终实现代码执行。

浅谈 escapeshellarg 的利用

0 前言

escapeshellarg 的作用是把字符串转码为可以在 shell 命令里使用的参数。(escapeshellarg 和 escapeshellcmd 相似,主要看是否有引号)

在 CTF 可能被用于:

  • 参数注入(开发人员错误的使用 escapeshellarg 函数)
  • 逃逸字符(该函数非二进制安全)

1 参数注入

基本用法:

<?php

echo escapeshellarg('Hello');
// 输出值为:'Hello'
echo escapeshellarg('Hello\'');
// 输出值为:'Hello'\'''(在命令行使用 echo 'Hello'\''',只会输出 Hello')

即前言所说,会把字符串转码为 shell 中的参数。

这里摘录p牛的文章《谈escapeshellarg绕过与参数注入漏洞》中的几句关键的话

  • 这个字符串应该出现在“参数值”的位置,而不是出现在参数选项(option)中。
  • 单引号并不是区分一个字符串是“参数值”或“选项”的标准。

我们需要先理解一下“参数值”和“参数选项”。下面:

21:42:46 ubuntu @ VM-0-12-ubuntu in ~/document on git:(master) ✗
➜ cat -name 
cat: invalid option -- 'a'
Try 'cat --help' for more information.
# 注意上面是 -- 'a',因为命令行在进行分析的时候,-n 被识别为 option

21:44:00 ubuntu @ VM-0-12-ubuntu in ~/document on git:(master) ✗
➜ cat --name
cat: unrecognized option '--name'
Try 'cat --help' for more information.

21:44:07 ubuntu @ VM-0-12-ubuntu in ~/document on git:(master) ✗
➜ cat name  
cat: name: No such file or directory

-----------------------------------------------------------------
21:44:10 ubuntu @ VM-0-12-ubuntu 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值