我正在进行白盒渗透测试,而我对PHP细节的不熟悉使得开发概念验证变得困难。这是一个我认为危险的功能的简化示例。 (为简单起见,我删除了一些验证和错误处理。)
function makeCall($myClass, $method, $args){
$theClass = new $myClass();
return $theClass->$method($args);
}
这个问题是潜在的攻击者可以通过像site.com/program.php/class/method?args=args
之类的东西来控制所有参数。 makeCall
的正常用法是公司制作的某个类和方法作为字符串传递给函数。我能够调用其他显然不打算调用的类,因此这里肯定存在一些问题。
我的目标是能够将exec
用于$method
param(或类似的东西),以证明此代码有多危险 - 远程代码执行是此处的目标。我不能为我的生活找出什么" class" exec
(或类似的)将在其中(或者如果这是正确的问题)。是否有一个内置的类,有一个危险的方法,我可以用来证明我的观点?
例如,在C#中,我可以为类创建System.IO.File
,为方法执行ReadAllLines
,其中args是服务器上的敏感文件。我非常愿意接受#34的回答;这对于任何通用的php方法都不适用#34;但我想确定。