PHP-代码执行函数-命令执行函数
短信预约 -IT技能 免费直播动态提醒
目录
代码执行函数:
主要有(9个):eval(), assert(), call_user_func(), create_function(), array_map(), call_user_func_array(), array_filter(), uasort(), preg_replace()
1.eval()函数
eval() 函数把字符串按照 PHP 代码来计算命令执行:cmd=system(whoami);
注意这里是POST型,所以以火狐的插件HackBar作实验:
2.assert() 函数
与eval类似,assert函数是直接将传入的参数字符串当成PHP代码直接 命令执行:cmd=system(whoami) 菜刀连接密码:cmd
3.call_user_func()函数
函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数,也可以这么说传入的参数作为assert函数的参数 命令执行:cmd=system(whoami) 菜刀连接密码:cmd
//post:fun=assert¶=phpinfo();
4- create_function()函数
创建了一个匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。创建匿名函数执行代码执行命令和上传文件参考eval函数(必须加分号)。
//post:func=phpinfo();
5- array_map()函数
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 命令执行http://localhost/123.php?func=system cmd=whoami 菜刀连接http://localhost/123.php?func=assert 密码:cmd
6- call_user_func_array() 函数
将传入的参数作为数组的第一个值传递给assert函数 cmd=system(whoami) 菜刀连接密码:cmd
7- array_filter()函数
用回调函数过滤数组中的元素:array_filter(数组,函数) 命令执行func=system&cmd=whoami
8、usort()、uasort() 函数
usort() 通过用户自定义的比较函数对数组进行排序。uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。php环境>=<5.6才能用 命令执行:http://localhost/123.php?1=1+1&2=eval($_GET[cmd])&cmd=system(whoami);
9- preg_replace() 函数
preg_replace('正则规则','替换字符','目标字符')执行命令和上传文件参考assert函数(不需要加分号)。将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。这里可以使用chr()函数转换ASCII编码来执行代码。 #phpinfo();eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))
命令执行函数
主要有(7个):system(), passthru(), exec(), shell_exec(),popen()/ proc_popen(),反引号 ``
1- system()函数
作用将字符串作为OS命令执行,自带输出功能。
2-passthru()函数
作用将字符串作为OS命令执行,不需要输出执行结果,且输出全部的内容。
3- exec()函数
作用将字符串作为OS命令执行,需要输出执行结果,且它只会输出最后一行的内容。 //他的输出结果需要打印,system()不用打印
4- shell_exec()函数
作用将字符串作为OS命令执行,需要输出执行结果,且输出全部的内容。
5- popen()/proc_open()函数
作用该函数也可以将字符串当作OS命令来执行,但是该函数返回的是文件指针而非命令执行结果。该函数有两个参数。> 1.txt"; //此时的$cmd=ipconfig >> 1.txt popen("$cmd",'r'); //实际上就是 popen("ipconfig >> 1.txt", "r"),把执行结果放入1.txt文件,通过访问1.txt文件查看执行结果。 ?>
6- 反引号 ``函数
作用[``]反引号里面的代码也会被当作OS命令来执行或者:
代码执行与命令执行区别
代码执行与命令执行的不同:
代码执行本质上是调用后端语言(PHP,JAVA……)来执行特定代码,而命令执行本质是调用系统的命令执行的接口,
命令执行漏洞是可以直接调用操作系统命令,代码执行漏洞是靠执行脚本代码调用操作系统命令
参考为:
来源地址:https://blog.csdn.net/weixin_47112073/article/details/127440686
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341