【Try to Hack】php命令执行和代码执行

举报
开心星人 发表于 2022/10/14 11:17:31 2022/10/14
【摘要】 📒博客主页:开心星人的博客主页🔥系列专栏:Try to Hack🎉欢迎关注🔎点赞👍收藏⭐️留言📝📆首发时间:🌴2022年8月29日🌴🍭作者水平很有限,如果发现错误,还望告知,感谢! 命令执行函数函数/语法描述例子system执行命令并输出结果system('id');exec执行命令 不输出结果只可获取最后一行结果exec('id',$a); print_r($a);pa...

📒博客主页:开心星人的博客主页
🔥系列专栏:Try to Hack
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年8月29日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!

命令执行函数

函数/语法 描述 例子
system 执行命令并输出结果 system('id');
exec 执行命令 不输出结果只可获取最后一行结果 exec('id',$a); print_r($a);
passthru 同 system passthru(‘id’);
shell_exec (反引号)| 执行命令并返回结果| a = s h e l l e x e c ( i d ) ; p r i n t r ( a=shell_exec('id');print_r( a); `
popen 执行命令并建立管道 返回一个指针 使用fread等函数操作指针进行读写 $a=popen("id", "r"); echo fread($a, 2096);
proc_open 同 popen (进程控制功能更强大)
pcntl_exec 执行命令 只返回是否发生错误 pcntl_exec('id');

命令执行防护

escapeshellarg 传入参数添加单引号并转义原有单引号 用于防止命令注入
例 传入 'id# 处理后 '\'id#' 处理后的字符串可安全的添加到命令执行参数

escapeshellcmd 转义字符串中的特殊符号 用于防止命令注入
反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ’ 和 " 仅在不配对儿的时候被转义

代码执行函数

函数/语法 描述 例子
eval 将传入的参数内容作为PHP代码执行 eval 不是函数 是一种语法结构 不能当做函数动态调用 eval('phpinfo();');
assert 将传入的参数内容作为PHP代码执行 版本在PHP7以下是函数 PHP7及以上为语法结构 assert('phpinfo();');
preg_replace 当preg_replace使用/e修饰符且原字符串可控时时 有可能执行php代码 echo preg_replace("/e","{${PHPINFO()}}","123");
call_user_func 把第一个参数作为回调函数调用 需要两个参数都完全可控才可利用 只能传入一个参数调用 call_user_func('assert', 'phpinfo();');
call_user_func_array 同call_user_func 可传入一个数组带入多个参数调用函数 call_user_func_array ('file_put_contents', ['1.txt','6666']);
create_function 根据传递的参数创建匿名函数,并为其返回唯一名称 利用需要第二个参数可控 且创建的函数被执行 $f = create_function('','system($_GET[123]);'); $f();
<?php
//?cmd=phpinfo();
@eval($_GET['cmd']);
?>
<?php
//?cmd=${phpinfo()}
$str=$_GET['cmd'];
eval ('$str="'.$str.'";')
?>
php代码可以这样在双引号中被执行(bash中双引号和单引号解析变量是有区别的。在解析单引号的时候 , 被单引号包裹的内容中如果有变量 , 这个变量名是不会被解析成值的,但是双引号不同 , bash 会将变量名解析成变量的值再使用。)
<?php
//?cmd=%27)phpinfo();//
$str=$_GET['cmd'];
eval ("strtolower('$str');")
?>
<?php
preg_replace("/<php>(.*?)<\/php>/e",'\1',"<php>phpinfo()</php>");
//等价于
preg_replace("/<php>(.*?)<\/php>/e",'${1}',"<php>phpinfo()</php>");
?>

https://github.com/Bypass007/Learn-security-from-0
https://www.yuque.com/burpheart/phpaudit/php-chang-jian-lou-dong_dai-ma-zhu-ru

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。