freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

记一次java代码审计学习
scrip2 2023-10-11 15:39:46 163618

学了java se的一些知识,了解了web请求在代码层的一些实现,也就是Java的分层原理什么的,还有漏洞原理。所以基础铺的差不多了,就开始找一些cms去审计,从中遇坑,排错,慢慢提高了。

这次专门找了一个cms审计一下。如何刚开始学的话,可以看一些网上审计的文章,跟着复现一下,对应源码分析一下。之后自己审一下已经爆出的漏洞系统,再去看一下网上的对应分析文章。如果一直跟着做的话,进步不了。还是要自己去做一遍。

拿到源码的话,我通常会看一下登录逻辑和拦截器。当然还有第三方组件。

先看登录的代码实现。

1696588612_651fe3443447f68697971.png!small

1696589131_651fe54b83e4ac3f89f88.png!small

1696591485_651fee7d6d7d719a40f68.png!small

最重要的是这段代码

SysUser user = service.findByName(site.getId(), username);

一步步跟进发现如下

1696591535_651feeaf998059c94271c.png!small

Hibernate 框架的HQL

书上的一段话

正确使用以下几种 HQL 参数绑定的方式可以有效避免注入的产生。

1)位置参数(Positional parameter)。

String parameter = "z1ng";

Query<User> query = session.createQuery("from com.z1ng.bean.Userwhere name

= ?1", User.class);

query.setParameter(1, parameter);

2)命名参数(named parameter)。

Query<User> query = session.createQuery("from com.z1ng.bean.Userwhere name

= ?1", User.class);String parameter = "z1ng";

Query<User> query = session.createQuery("from com.z1ng.bean.Userwhere name

= :name", User.class);

query.setParameter("name", parameter);

3)命名参数列表(named parameter list)。

List<String> names = Arrays.asList("z1ng", "z2ng");

Query<User> query = session.createQuery("from com.z1ng.bean.User where name in

(:names)", User.class);

query.setParameter("names", names);

4)类实例(JavaBean)。

user1.setName("z1ng");

Query<User> query = session.createQuery("from com.z1ng.bean.User where name

=:name", User.class);

query.setProperties(user1)

所以说预处理了。不存在注入。

isLocked的代码逻辑如下

1696650418_6520d4b24c46afa001fbf.png!small

接着往下

1696645662_6520c21e304625a34da5e.png!small

||与&&的区别就不说了

上图代码,如果ip没有锁定,验证码不为空,启用了验证码功能,代码执行的含义如下。

获取名为 "captcha" 的 Session 属性,然后,将验证码从会话中移除,以避免重复使用或造成安全问题。

之后判断验证码错误或者验证码与sessionCaptcha不相等,就会对

ITEM_TYPE_LOGIN,ITEM_TYPE_IP_LOGI类型进行加锁操作,就是往数据库增加值,满次数后就会锁定。并将错误信息保存到日志中。这里进行了

Hibernate 持久化类的对象操作。向数据库进行了查询。ITEM_TYPE_LOGIN,ITEM_TYPE_IP_LOGI分别代表

userLogin与ipLogin

可试读前30%内容
¥ 9.9 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# xss
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 scrip2 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
scrip2 LV.4
这家伙太懒了,还未填写个人描述!
  • 6 文章数
  • 14 关注者
分享一个自己APP测试遇到的抓包问题与APP登录密码加密
2023-11-21
记一次众测的两个洞
2023-09-26
记一次前端密码加密,利用python实现加密+暴力破解
2023-09-17