RCE介绍
RCE(Remote Code/Command Execute)为远程代码/命令执行的漏洞。
攻击者可以直接在web页面向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。
题目
eval执行
调用系统函数system查看目录。
注:命令后的分号不可省略,不然无回显。
/?cmd=system('ls');
查看上一级。(如果用bp抓的包,空格的地方用%20代替)
/?cmd=system('ls /');
看到flag文件,查看。
/?cmd=system('cat /flag_26509');
成功拿到flag!!!
文件包含
先简单分析一下,我们要传入一个不带"flag"字样的文件;
接着往下看,它给我们提供了一个"shell.txt"文件,还有一个"shell"入口信息, 那我们就点开"shell"来看看里面写了什么?
看到这句话就知道可以通过关键参数ctfhub来连接靶机服务器。
结合本题给出的 文件入口 / 文件 / shell入口 三个关键信息,我们就可以入侵服务器了。
get传参
?file=shell.txt&ctfhub=system("cat /flag");
post传参
结果:
成功拿到flag!!!(这里卡了一会,是因为这里给的是文件入口,所以地址后应该要加一个?file=shell.txt)
php://input
作用:可用于查看源码,同时是要查看未压缩文件的只读流。在post请求中能查看请求的原始数据,并将post请求中的post数据当作php代码执行。(只读流是说只能进行读操作的数据)。
条件:allow_url_fopen=off/on;allow_url_include=on。
点击题中phpinfo查看。
由此可以确定此题考查php://input。
使用bp抓包,将get改为post:
POST /?file=php://input HTTP/1.1
然后再添加php代码查看目录情况。
<?php system('ls /');?>
查看flag。
<?php system('cat /flag_5901');?>
成功拿到flag!!!
读取源代码
在php伪协议中还存在:php://filter
作用:用过滤器读写数据流
条件:allow_url_fopen=off/on;allow_url_include=off/on
php:filter
参数 | 描述 |
read | 用读链的过滤器读数据流 |
write | 用写链的过滤器写数据流 |
resource | 声明过滤哪一个数据流 |
不指定读写 | 当不指定读写时会自己根据情况而定 |
题中说到flag在in /flag,所以可以直接构造:
/?file=php://filter/resource=../../../flag
成功拿到flag!!!(上一个题其实也可以用,但是前提条件是得知道flag文件名字。)
远程包含
跟前面php://input一样做法。
成功拿到flag!!!
命令注入