又是被大佬带飞的一天
babyphp
1 |
|
父进程调用了pntcl_wait,之后调用pcntl_wifexited,子进程如果异常退出,父进程就会展示phpinfo,用一些disable_functionFuzz了一下a,直接到pfsockopen导致进程异常终止直接输出phpinfo了,Ctrl+f搜索flag
大概就是函数造成回调使得进程异常退出,代码就执行phpinfo了,类似的函数还有stream_socket_client
babyunserialize
dirsearch扫出www.zip,下载源码下来发现是和WMCTF2020 webweb一样的框架,代码也没怎么改,所有利用链可以一样,参考
后来传入的时候发现把很多函数都过滤了,最后是想到phpinfo也算函数,再给它传个整数,成功得到phpinfo
1 |
|
看着师傅们的wp分析下应该是预期解的笔记吧
全局搜索destruct函数
跟进write
又调用了Base的write方法,继续跟进
$file和$data都可控,exp:
1 |
|
rceme
1 |
|
zzzcms的模改,参考
parserIfLabel函数应该就是它的魔改,但用原来的payload肯定不行,文件包含函数和命令执行函数过滤了很多,所以我们在{if:assert($_request[phpinfo()])}phpinfo();{end if}的基础上改一下
1 | {if:assert($_request[phpinfo()])}phpinfo();{end if} 失败 |
但题中源码是遍历数组元素过滤,我们拼接一下函数不就可以绕过了吗,所以
1 | {if:('sys'.'tem')('ls')}{end if} |
那么直接读取根目录文件,读取根目录flag即可
littlegame
直接看路由里的index.js,可以看到得到flag的条件如果是
就会直接往服务端发送flag,来看下admin
获得的是环境变量中传入的值,接着往下看有几个方法
SpawnPoint方法向服务端发送开始指令
Privilage方法接受NewAttributeKey和NewAttributeValue,假如为空则重定向,不为空则传入key和value并将他们传到session中
再看wp的时候学到了一招,在给了package.json的情况下可以直接运行npm audit命令查看存在的漏洞
这里就直接说明了是set-value造成的原型链污染,参考
实践一下,首先开始
创建key和value
检查
easytrick
1 |
|
要求传序列化字符串,传进去之后强制类型转换,数组绕过强碰撞没了,传入的元素长度必须在5以下,那么一些已知的相同MD5的字符串也没了,如果类型不等,值不等,他们的md5相等,就给flag
php的一个小trick
即如果小数点后面超过14位php就会四舍五入
这样的话我们构造trick1=2,trick2=2.00000000000000112,序列化之后md5的值就都是2了满足了两个md5强相等
而其他两个条件也满足
全部满足,所以构造
1 | O:5:"trick":2:{s:6:"trick1";i:2;s:6:"trick2";d: 2.00000000000000112;} |
看wp还有一种payload,利用的是NAN和INF的性质,他们分别代表非数字和无穷大,与任何数据类型(除了true)做强类型或弱类型比较均为false,参考
1 |
|
或者
1 |
|