(CTF学习)CTFHUB-WEB-RCE

CTFHUB-WEB-RCE

  • RCE
  • eval执行
  • 文件包含
    • strpos()的漏洞
  • php://input
    • 知识点 php://input
  • 远程包含
  • 读取源代码
    • php://filter
  • 命令注入
    • linux中命令的链接符号
  • 过滤cat
    • linux查看文本的命令
  • 过滤空格
  • 过滤目录分隔符
  • 过滤运算符
  • 综合过滤练习

RCE

RCE英文全称:remote command/code execute(远程命令/代码执行漏洞)
分为远程命令执行ping和远程代码执行evel。
漏洞出现的原因:没有在输入口做输入处理。
我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。相当于直接操控服务器电脑的cmd命令行!高危漏洞!
(CTF学习)CTFHUB-WEB-RCE_第1张图片

eval执行

(CTF学习)CTFHUB-WEB-RCE_第2张图片
靶机环境
(CTF学习)CTFHUB-WEB-RCE_第3张图片
PHP代码显示,要求将命令赋值给cmd然后执行,
先查看一下根目录文件 /?cmd=system("ls");
!切记最后的分号不可省略!
在这里插入图片描述
没有有用的文件。查看上一级的文件夹/?cmd=system("ls /");
在这里插入图片描述
打开flag文件发现FLAG, /?cmd=system("cat flag_9759");
在这里插入图片描述

文件包含

strpos()的漏洞

strpos函数的定义

strpos — 查找字符串首次出现的位置
作用:主要是用来查找字符在字符串中首次出现的位置。
结构:int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

(CTF学习)CTFHUB-WEB-RCE_第4张图片
在上面这个例子中,strpos 函数返回查找到的子字符串的下标。如果字符串开头就是我们要搜索的目标,则返回下标 0 ;如果搜索不到,则返回 false 。在这道题目中,开发者只考虑到 strpos 函数返回 false 的情况,却忽略了匹配到的字符在首位时会返回 0 的情况,因为 false和 0 的取反均为 true 。 这样我们就可以在用户名和密码首字符注入 < 符号,从而注入xml数据。

靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第5张图片
点击shell,出现如下界面
在这里插入图片描述
request = post + get
打开火狐浏览器渗透便携版,构造payload,往ctfhub里传参。先查看当前目录下的文件ls
(CTF学习)CTFHUB-WEB-RCE_第6张图片
发现没有flag相关文件,查看上一级文件ls /

(CTF学习)CTFHUB-WEB-RCE_第7张图片
发现flag信息,打开flag文件,获得flag
(CTF学习)CTFHUB-WEB-RCE_第8张图片

php://input

知识点 php://input

php:// — 访问各个输入/输出流(I/O streams)
php://input 是个可以访问请求的原始数据的只读流.
可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第9张图片
查看phpinfo,发现以下字段,证明是可以使用php://input的。
在这里插入图片描述
使用burp suite抓包,发送到repeater中,构造包
将方法修改为POST
目标换成:/?file=php://input
body: 查看上一级文件目录,发现flag文件
(CTF学习)CTFHUB-WEB-RCE_第10张图片
打开flag文件,获得falg
(CTF学习)CTFHUB-WEB-RCE_第11张图片

远程包含

靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第12张图片
查看PHPinfo文件,发现可以使用php://input
在这里插入图片描述
打开火狐浏览器渗透测试版
构造payload,使用php://input
POST里传参:
发现存放flag的文件
(CTF学习)CTFHUB-WEB-RCE_第13张图片
打开文件,获得falg
(CTF学习)CTFHUB-WEB-RCE_第14张图片

读取源代码

靶机环境
(CTF学习)CTFHUB-WEB-RCE_第15张图片
使用php://input,发现不管用
(CTF学习)CTFHUB-WEB-RCE_第16张图片

php://filter

(CTF学习)CTFHUB-WEB-RCE_第17张图片

使用filter将源码通过base64回显。
Payload:

http://URL/?file=php://filter/read=convert.base64-encode/resource=../../../flag

(CTF学习)CTFHUB-WEB-RCE_第18张图片
然后使用burp suite解码,得到flag
(CTF学习)CTFHUB-WEB-RCE_第19张图片

命令注入

题目:
这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag。
(CTF学习)CTFHUB-WEB-RCE_第20张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第21张图片
有个输入框,是通过输入框进行注入的
输个ip试一试
(CTF学习)CTFHUB-WEB-RCE_第22张图片

linux中命令的链接符号

1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。

使用&连接符,连接别的命令试一下,发现也执行了后面的命令,且文件夹下有个php文件
(CTF学习)CTFHUB-WEB-RCE_第23张图片
试着打开php文件,发现打不开。
(CTF学习)CTFHUB-WEB-RCE_第24张图片

应该是文件中包含特殊字符,使用管道运行base64加密内容

ip & cat *.php | base64

(CTF学习)CTFHUB-WEB-RCE_第25张图片
输出了flag的base64加密密文,进行解码,得到flag
(CTF学习)CTFHUB-WEB-RCE_第26张图片

过滤cat

题目:
(CTF学习)CTFHUB-WEB-RCE_第27张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第28张图片
使用&拼接命令,ls 发现了flag文件
(CTF学习)CTFHUB-WEB-RCE_第29张图片
根据提示,过滤了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
(CTF学习)CTFHUB-WEB-RCE_第30张图片
解码,得到flag

过滤空格

题目:
(CTF学习)CTFHUB-WEB-RCE_第31张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第32张图片
根据提示,过滤了空格,使用<代替空格(这一步也可以用/**/代替空格,但是下一步就不管用了,不知道为啥)
查看文件

12.0.0.1/**/&/**/ls

(CTF学习)CTFHUB-WEB-RCE_第33张图片
得到flag的base64密文
127.0.0.1|cat (CTF学习)CTFHUB-WEB-RCE_第34张图片
解码,得到flag

过滤目录分隔符

题目:
(CTF学习)CTFHUB-WEB-RCE_第35张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第36张图片
ls查看文件夹,发现了flag的子文件夹

12.0.0.1;ls

(CTF学习)CTFHUB-WEB-RCE_第37张图片

根据提示,不能用/

12.0.0.1;cd flag_is_here;ls

(CTF学习)CTFHUB-WEB-RCE_第38张图片
查看存放flag的文件

12.0.0.1;cd flag_is_here;cat flag_173323177320747.php|base64

(CTF学习)CTFHUB-WEB-RCE_第39张图片
解码,得到flag

过滤运算符

题目:
(CTF学习)CTFHUB-WEB-RCE_第40张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第41张图片
查看文件

12.0.0.1;ls

(CTF学习)CTFHUB-WEB-RCE_第42张图片
过滤了管道符|,不能再使用了
base64 1.php".这个与****|base64是等价的

12.0.0.1 ; base64 flag_27475302269053.php

(CTF学习)CTFHUB-WEB-RCE_第43张图片
解码,得到flag

综合过滤练习

题目:
(CTF学习)CTFHUB-WEB-RCE_第44张图片
靶机环境:
(CTF学习)CTFHUB-WEB-RCE_第45张图片

审计代码,过滤了| & ; cat flag ctfhub 空格

空格可以用${IFS}
cat可以用more
flag可以用正则f***
ctfhub应该用不到
查了一下,在linux下,命令分隔符除了;还有%0a
有了;就可以不用运算符了

然后按着之前的思路去做就可以了

因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码
查看目录
(CTF学习)CTFHUB-WEB-RCE_第46张图片

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als

(CTF学习)CTFHUB-WEB-RCE_第47张图片
读取文件的base64

ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_16941904629849.php

(CTF学习)CTFHUB-WEB-RCE_第48张图片
解码,得到flag

(菜鸟一个,纯属记录自己的解题过程……)

你可能感兴趣的:(CTF,linux,安全,安全漏洞)