php命令注入及其实例
php命令注入及其实例
mengnankkzhouphp注入概述
rce概念:remote command/code execute,远程命令/代码执行。
php代码执行:在web中,php代码执行是指应用程序过滤不严,用户可通过http请求将代码注入到应用中执行
php代码注入与sql注入比较:
注入的思想类似,均是构造语句绕过服务器的过滤去执行。
区别在于sql注入是将语句注入到数据库中执行,而php代码执行是可以将代码注入到应用中,最终由服务器运行。
php代码注入的条件:
1.程序中含有可以执行php代码的函数或者语言结构
2.传入该函数或者语言结构的参数是可以由客户端控制的(可以直接修改或者造成影响)且应用过滤不严。
危害:
这样的漏洞如果没有特殊的过滤,相当于一个web后门的存在,攻击者可以执行漏洞继承web用户权限,执行任意代码。如果服务器没有正确配置或者web用户权限比较高的话,还可以读写靶机服务器任意文件的内容,甚至控制整个网站或者服务器。
相关的函数或语言结构
1.eval()函数
作用:该函数的作用是将字符串作为PHP代码执行。
例:
1 | <?php |
通过浏览器访问上述函数所在网页时,可以通过传递参数该code来执行PHP探针。主要方式有以下几种:
①普通方式提交变量:?code=phpinfo();
②以语句块方式提交变量:?code={phpinfo();}
③以多语句方式提交参数:?code=1;phpinfo();
payload:?code=
2.assert()函数
作用:该函数的作用是将字符串作为PHP代码执行。如果它的条件返回错误,则终止程序执行。
例:
1 | <?php |
普通方式提交变量:?code=phpinfo()
或者?code=phpinfo();
与eval()函数有别的是,该函数不能执行传入语句块或多语句作为参数。
3.preg_replace()函数
作用:该函数用于对字符串进行正则处理。
解析:preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行
1 | <?php @preg_replace("/abcd/e",$_POST['hacker'],"abcdefg"); ?> |
通过浏览器访问上述函数所在网页时,可以通过传递参数该code来执行PHP探针。主要方式有以下几种:
①普通方式提交变量:?code=[phpinfo();],[]是由于preg_replace的第一个参数有分号。
②以语句块方式提交变量:?code={[phpinfo();]}
③以多语句方式提交参数:?code=1;[phpinfo();]