pikachu通关教程-RCE
目录
RCE(remote command/code execute)概述:
exec "ping"
管道符
乱码问题
RCE(remote command/code execute)概述:
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
分为远程代码和远程命令两种.当对方存在或者提供相应的api接口
exec "ping"
这里介绍一下管道符,因为如果对ping命令功能的设计,没有做好防护,比如可以输入多条命令的时候,我们可以通过管道符做一些意想不到的事情。
管道符
管道符 | 实例 | 描述 |
; | A;B | 无论真假,A与B都执行 |
& | A&B | 无论真假,A与B都执行 |
&& | A&&B | A为真时才执行B,否则只执行A |
| | A|B | 显示B的执行结果 |
|| | A||B | A为假时才执行B,否则只执行A |
当我们正常操作的时候,会出现如下操作:
这时候就可以尝试使用管道符,可以尝试简单的操作127.0.0.1|whoami
这样我们可以拿来进行用户的信息获取和一些操作。
代码分析
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){$ip=$_POST['ipaddress'];
// $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255if(stristr(php_uname('s'), 'windows')){
// var_dump(php_uname('s'));$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理}else {$result.=shell_exec('ping -c 4 '.$ip);}}
通过psot,获取ipaddress,然后对操作系统的类型进行一个判断,然后进行一个ping命令的拼接,这里是没有做任何处理的,我们可以看注释,对此类操做我们可以拆分校验,先做一个判断,就可以很好的防止此类型攻击。
乱码问题
打开对应的php文件,输入下面代码,保存即可。
header("Content-type:text/html;charset=gb2312");
exec "eval"
这里要介绍php中的一个函数eval,会将符合PHP 语法规范字符串当作php代码,执行当我们去尝试输入字符串时,会正常显示,但是当我们输入一个phpinfo(); ,这时候就不一样了。
代码分析
当用户点击了提交按钮,并在 txt
输入框中输入了内容时,把用户输入的 txt
内容当成 PHP 代码执行,如果执行失败或返回值为“假”(比如返回 null
或空),则进入 if
语句块。其实只要不要使用类似的函数即可,或者不要将此方法提供给用户。
$html='';
if(isset($_POST['submit']) && $_POST['txt'] != null){if(@!eval($_POST['txt'])){$html.="<p>你喜欢的字符还挺奇怪的!</p>";}}