JWT身份伪造
参考文章:
JWT及JWT伪造-CSDN博客
^v^ (cnblogs.com)
JWT概述Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。
在了解JWT之前,先了解一下传统的认证方式。
传统的Session认证http协议是一种无状态的协议,其不保存客户端的任何状态信息,这意味着http本身不具有身份认证作用。也就是说,基于http,服务端并不能知道当前请求源于哪个用户。
为了解决这个问题,需要在服务端存储一份用户登录的信息,这份登录信息会在响应时传递给客户端的浏览器,让客户端的浏览器保存为cookie,以便下次请求时发送给服务端。这样应用就能识别请求源自哪个用户,这就是传统的基于session认证。
随着用户基数的扩大,Session的问题也随之明显:
每次认证通过都需要在服务端做一次记录,通常而言Session都是保存在内存中,而随着认证通过次数的增加,服务端的开销会明显增加。
认证的记录存储在内存中,这意味着用户下次请求还必须要请求在这台服务器上才能拿到授权的资源,这样在分布式的应用上,相应的限 ...
ctf题目练手·四
0x00 前言参考文章:https://www.cnblogs.com/zhengna/p/15905396.html#:~:text=CTFHub_201
需要培养一种能力:根据题目的不同响应去猜测题目的代码逻辑,并找到其中的漏洞。
0x01 题目题目来源:2017-赛客夏令营-Web-Injection V2.0
index.php
题目提示是SQL注入,很明显从这个POST表单入手。
0x02 逻辑概述账号密码登录题,有两种类型:
同时验证:一条语句同时验证用户名和密码
先后验证:先验证用户名,再验证密码
对于不同的类型,通常采用不同的注入方式。
怎么分辨题目属于哪一种类型呢?
如果题目回显:用户名或者密码错误,那么很可能是第一种
如果题目回显:用户不存在、密码错误,那么很可能是第二种
下面谈谈如何应对这两种类型
同时验证代码逻辑如下:
这种类型通常采用:
uname=-1' or 1=1 #&passwd=12313131(这里的passwd已经被注释了,随便写)
此时执行的sql语句即为:
SELECT username, password FROM ...
ctf题目练手·三
0x00 前言如果一道题是你没学过的呢?基于已知信息去得出更多的信息,直到推出正解。
0x01 题目题目来源:2020-数字中国创新大赛虎符网络安全赛道-Web-just_escape
index.php
run.php
0x02 确定语言总结下已知信息:
本题跟逃逸(escape)有关
本题可能是PHP语言,也很可能不是PHP语言,先当做PHP语言看待
基于上述两点,尝试payload:code=phpinfo();
难道是禁用?尝试payload:code=echo 1;
分析报错:
看来不是PHP语言无疑了。那么会是什么语言呢?
每一种语言都有自己的特点,本题给了时间戳,是一个很好的突破口:
通过上面的尝试、异常分析以及信息验证,得出本题看似是PHP语言,实际上是JavaScript语言。
0x03 解决题目确定了语言,下一步就是知道题目逻辑。
本题提示escape,又因为是JavaScript,利用好这两个关键词:
一系列的文章都指向:JavaScript node.js 沙箱逃逸
可是沙箱逃逸也有好几种,到底是哪一种呢?
不同沙箱逃逸的方法基于不 ...
如何解决问题
前言 · 心态每一个问题都是命运的馈赠。此言可以很好的看出我对问题的态度。心态,是解决问题的关键。
心态贯穿于解决问题的全过程,会随之变化,会影响决策。
比如,你卡在HTTP的一个请求头的作用,譬如是认证作用。HTTP有几个请求头都有认证相关的作用,你尝试了几个请求头都失败了,心烦意乱从而不想解题了——心态坏了。
所以,解决问题的前置条件,就是平静的、冷静的心态。
单一型问题 · 针对性在入门阶段,不常遇见复杂型问题,所遇到的问题往往比较直接。可如果这个问题涉及之前所未学过的知识,哪怕再简单,也难以独自想出来。如何解决这样的问题?
首当其冲,便是寻找跟问题有关的信息。现在的应用、工具、编辑器等等,如果报错了往往会给出信息,找到这些关键的、珍贵的、一针见血的信息是必备的一步,也是自学能力的体现。
其次,把这些报错信息反馈到互联网上,总会有前辈遇到过这些问题并留下经验。只需照葫芦画瓢,总能解决问题。
比如下图的问题:
红色的信息就是报错信息:
[Error] expected ';' before '}' token
放到互联网上寻找答案:
再 ...
第一次护网所学
0x00 前言本文主讲思路,切勿用之违法。
0x01 例一寻找子公司我们的目的无非是获得网站数据甚至拿到网站,但是我们已知的网站往往是主站,难以直接攻破。所以我们先收集子公司网站——易于攻破甚至可以接触到主公司。
先查询主公司的股权穿透图,控股权50%以上基本上就是子公司,可以打。
子公司的域名也是二级域名,我们先扫出三级域名——可以使用subfinder。现在我们扫到了OA系统。
弱密码站点首页主要是一个登录表单。我们优先想到弱密码:
账户名称一般是admin
账户密码直接爆破
但是弱密码也需要一些条件:
弱密码的本质是爆破,爆破需要大量发包,如果网站限制请求数量则弱密码难以进行成功
进行多次错误登录,看看网站是否有限制
如果每次登录需要csrf token,那么爆破难度会上升,但是通过特定操作也能解决。
BurpSuite可以进行csrf token追踪
该网站没有限制请求次数和设置csrf token,应该是非常老的系统了,可以直接弱密码——一般使用中国人常用密码字典即可。
爆破成功,以管理员身份登录网站。
寻找该网站是闭源的,我们只能黑盒。不妨从BurpS ...
ctf题目练手·二
0x00 前言无论何处学习,都应勤于思考。本题因为对木马的理解不够深刻,耗了很长一段时间。
最低等的学习即是拿来就用,不去思考这么用的原理是什么,能不能提炼出基于目的的一般性原则甚至方法。更高等的学习即是从特定的方法总结出一般性、普适性的规律和本质。
0x01 题目题目来源:2020-第五空间智能安全大赛-Web-hate-php
过滤了以下内容:
f、l、a、g、p、g(不区分大小写)
.、/、 ;、"、 ‘、|、[、]、_以及反引号
PHP 所有的内置函数
参数在assert()提供的PHP环境里执行。
0x02 解决system()不难看出直接使用system()是不行的,因为题目禁止了PHP 所有的内置函数。但是我们必须要使用内置函数去跟系统交互,那该怎么解决这个问题呢?其实P神早已给出解决方案:
PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过(‘phpinfo’)();来执行函数,第一个括号中可以是任意PHP表达式。
PHP7允许:()();这样的语法。
既然如此,那我们采用取反或者异或等 ...
ctf题目练手·一
0x00 前言多练一点题,重心放在复盘和锻炼思维。
0x01 题目题目来源:浙江省大学生网络与信息安全竞赛-决赛-2019-Web-逆转思维
index.php
后台放dirsearch扫目录,结合题目知道两个文件:
flag.php
useless.php
flag.php直接访问flag.php文件:
难道flag.php里没有flag?
还有一种可能:flag.php文件本身有flag,但是没有被交给HTML文档。
所以我们的目标应该是读取flag.php的完整源码。
useless.php直接访问useless.php文件:
(承包空屏)
看来useless.php文件在前端也不存在有用提示。
现在我们只能从题目入手。
0x02 解题题目源码:
12345678910111213141516171819<?php $text = $_GET["text"];$file = $_GET["file"];$password = $_GET["password"];if(isset($text)& ...
第四次代码审计之DedeCMS
参考文章:通过DedeCMS学习php代码审计 - FreeBuf网络安全行业门户
0x00 前言审计框架:织梦(DedeCms),一个国产内容管理系统
最近更新:最新版dedecms v5.7sp2,最后更新时间大概为2018年
流行程度:大概是2015年前,目前少部分人用
本次审计Dedecms,既因为该框架易于理解,也因为该框架爆过众多漏洞。
0x01 全局分析代码审计一般从入口文件入手,DedeCMS框架的入口文件为index.php。
初看index.php,没有开出个所以然来。
写好一个脚本
闲言作为一名信息安全学习者,编写脚本能力应该是基础能力之一。或许有很多人不注重编写脚本能力,想着自身常备一些脚本即可,然而这样的思维是非常鼠目寸光的,脚本的存在有其必要性,事实上,是不可替代性。
闲言少叙,言归正传。
目标如何写好一个脚本呢?一个好的脚本有如下特征:
脚本效率高
编写省时力
分工精而简
信息反馈足
下面我们会从MoeCTF2024·Web方向的勇闯铜人阵一题讲解一个不错的脚本是如何一步步写出来的。
题目题目入口:
只给玩家三秒的时间,笔者的手速是做不到的,同样如果只是靠手速解决这道题,那么笔者也觉得索然无味。这题并没有过多地涉及漏洞知识,我们只要了解题目机制再编写脚本即可。
这就是写脚本的第一个要求:先明白自己要写的脚本的工作原理、有什么需要注意的。
我们首先要知道参数:
本题有设置Session,这就是我们需要注意的。
我们还要猜想如果成功了会发生什么。因为新生赛不会很难,所以笔者猜想成功后会出现flag:moectf{,如此我们就有了停止标志。
让我们理理题目机制,这样有利于我们编写脚本:
题目会发送五次数字,我们必须爬取数字并返回对应的答案,五次 ...
MoeCTF2024·pop_moe
0x00 前言新生赛的一道题,在反序列化里算是比较简单的,有必要专门拿来写博客吗?
有。其一,这道题能锻炼我的逻辑,写下来更有利于我的思考和逻辑的培养;其二,反思不看重题的难度,更看重自己学到什么。
本篇文章我会说得比较详细,请读者细细品味,多加思考。
0x01 题目题目给了四个类:
class000
class001
class002
class003
然后是主程序:
写前须知:
了解:__invoke()、__set()等魔术方法
了解PHP反序列化
0x02 分析我们的目的是什么?我们要想办法得到flag。因为本题没有直接提示flag在哪,所以我们先尝试getshell。我们要怎么实现getshell?getshell的方式有很多,在本题我们看到了一个危险函数eval()和似乎可控的变量,我们需要利用这段程序实现getshell。那怎么利用eval()和似乎可控的变量实现getshell呢,这需要下文的反序列化构造POP链来实现。
概念和宏析先解释一些概念(我自己编的概念,方便逻辑推理):
起点&终点
起点:反序列化实例化对象后自动触发的点为起点,会引 ...