再次触发格式化字符串,覆写返回地址为libc的one_gadget,直接getshell。 完整exp如下: frompwnimport*fromctypesimport*fromCrypto.Util.numberimport*context.arch='amd64'libc=CDLL('/lib/x86_64-linux-gnu/libc.so.6')context.log_level='debug'r=process('./babygame')# r=gdb.debug('./babygame')ogg=...
接着使用admin,admin123登录访问api/flag,即可得到flag 参考: https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html https://jwt.io/ # web安全# 系统安全# 数据安全# 网络安全技术 本文为蚁景科技独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022...
那这里很明显去controllers看看: const crypto = require('crypto'); const fs = require('fs') const jwt = require('jsonwebtoken') const APIError = require('../rest').APIError; module.exports = { 'POST /api/register': async (ctx, next) => { const {username, password} = ctx.request....
1.const secret = crypto.randomBytes(18).toString('hex'); 2.const secretid = global.secrets.length; 3.global.secrets.push(secret) 4.const token = jwt.sign({secretid, username, password}, secret, {algorithm: 'HS256'} 看看各种条件,这里会先对sid进行验证,我们需要绕过这条认证,下面还有一个jw...
username || username === 'admin'){ throw new APIError('register error', 'wrong username'); } if(global.secrets.length > 100000) { global.secrets = []; } const secret = crypto.randomBytes(18).toString('hex'); const secretid = global.secrets.length; global.secrets.push(secret) const...
一道关于jwt的ctf。 FreeBuf_355336 337782围观·242020-11-12 CTF-misc中文件的识别、合并和分离 其他 前言刚开始学习ctf杂项题型,做下笔记,方便以后查看知识点。这篇是最基础的一点知识,共有三部分,分别是文件类型的识别、文件分离和文件合并。这...
一道关于jwt的ctf。 FreeBuf_355336 337994围观·242020-11-12 CTF-misc中文件的识别、合并和分离 其他 前言刚开始学习ctf杂项题型,做下笔记,方便以后查看知识点。这篇是最基础的一点知识,共有三部分,分别是文件类型的识别、文件分离和文件合并。这...
username || username === 'admin'){ throw new APIError('register error', 'wrong username'); } if(global.secrets.length > 100000) { global.secrets = []; } const secret = crypto.randomBytes(18).toString('hex'); const secretid = global.secrets.length; global.secrets.push(secret) const...
再次触发格式化字符串,覆写返回地址为libc的one_gadget,直接getshell。 完整exp如下: frompwnimport*fromctypesimport*fromCrypto.Util.numberimport*context.arch='amd64'libc=CDLL('/lib/x86_64-linux-gnu/libc.so.6')context.log_level='debug'r=process('./babygame')# r=gdb.debug('./babygame')ogg=...
username || username === 'admin'){ throw new APIError('register error', 'wrong username'); } if(global.secrets.length > 100000) { global.secrets = []; } const secret = crypto.randomBytes(18).toString('hex'); const secretid = global.secrets.length; global.secrets.push(secret) const...