极客大挑战Java题目WP

本文详细分析了一个Java应用的登录系统,涉及明文传输、登录验证、序列化/反序列化漏洞,以及如何利用这些漏洞修改用户信息并读取文件。重点讲述了序列化过程中hash字段的绕过方法和Java的split特性利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Z3r0ne师傅

Java该题目源码位于https://github.com/yaklang/yaklang/tree/geek2023

 

分析

打开后是一个登录框。

登录

登录是明文传输的,可以直接从源码看密码,也可以爆破一下

通过Header相似度可以找出登录成功的认证信息:admin、123456

登录后是一个表单,修改下信息保存,抓包查看。可以看见保存时先调用了/marshalinfo接口对信息序列化,又调用invoke将序列化信息传给后端更新信息

对序列化信息解析下,可以看到关键字my serilizersr,猜测是魔改了writeObject方法

除此还可以看到一些信息,包括姓名、性别、年龄、和secret,secret是一个文件路径,猜测可以修改文件路径,读取任意文件

可以先尝试直接修改/tmp/admin_secret

改了后调用更新接口

刷新网页,发现性别修改成功,但是secret没修改成功,看来只会修改name、sex、age

题目给了jar包,直接看源码吧,使用jd打开可以看见源码结构

先看更新接口,对输入内容反序列化,然后对旧信息更新(只更新了name、sex、age、hash),然后对更新后的信息进行了序列化,储存到redis

再看input和ouput,对序列化过程进行了一些魔改

可以看见User重写了writeObject和readObject

序列化时把所有字段使用分隔符拼接存到一个字符串中,还有一个hash的字符串,和我们在codec中看到的O.oadminO.o男O.o10O.o/tmp/admin_secret-admin-男-10-/tmp/admin_secret就对得上了

但是注意到,在拼接是跳过了一个字段,也就是hash,所以拼接结果是[hash(隐藏)]-admin-男-10-/tmp/admin_secret

再看反序列化时,是直接split,然后遍历字段赋值。

反序列化漏洞

如果直接修改secretFile字段,在调用update接口时不会更新secretFile,但是会更新hash,而hash又处于拼接时的第一个字段,所以可以造成字符串逃逸的效果

所以在前面脚本基础上,修改rep1(hash字段)

但发生报错

在源码中可以看到,hash做了过滤,不可以存在O.o

Java split特性

java的String.split参数其实是一个正则,所以O.o可以替换为O<任意字符>o绕过

发送payload,更新后可以看到成功读取flag

### BUUCTF 极客挑战 2019 LoveSQL 题目解答 #### SQL 注入基础 在处理 SQL 注入攻击时,了解如何利用特定的 payload 来绕过验证机制至关重要。对于 `LoveSQL` 这道题目,在之前的题目中已经展示了通过万能密码完成注入的方法[^1]。 #### 获取表结构信息 为了进一步探索数据库中的数据,可以使用联合查询(UNION SELECT)来获取更多关于目标数据库的信息。具体来说,可以通过以下 Payload 获得名为 `l0ve1ysq1` 的表字段名称: ```sql 1' UNION SELECT 1,2,GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='l0ve1ysq1'# ``` 这一步骤有助于理解该表的具体结构以及可能存在的敏感信息位置[^2]。 #### 查找 Flag 所在表格 考虑到 CTF 比赛中常见的规律——Flag 往往存储于当前使用的数据库内,因此可以直接尝试提取所有表的名字并寻找其中是否存在潜在的目标对象。此时可采用如下 Payload 实现这一操作: ```sql a' UNION SELECT 1,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE()),3 -- a ``` 此方法能够帮助确认哪些表可能是存放 Flag 的候选者之一[^3]。 #### 数据库元数据访问 除了上述手段外,还可以借助 MySQL 提供的 INFORMATION_SCHEMA.SCHEMA 表来查看整个实例下的所有数据库列表。这对于全面掌握环境背景非常有用: ```sql SHOW DATABASES; ``` 这条命令的结果来源于 SCHEMATA 表,它记录了有关各个数据库的基本详情[^4]。 综上所述,解决 `LoveSQL` 题目的关键是逐步深入挖掘数据库内部结构,并最终定位到包含 Flag 的确切位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值