新锋管理商城系统

ewbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Pinia+Vant 4) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign+ELK)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。

pom.xml

![](https://img-blog.csdnimg.cn/img_convert/3841d60a542abcd50a889c43be037754.png)

有用的基本就这个 mybatis容易存在SQL注入漏洞

SQL注入

使用mybatis的依赖

直接搜索 ${

<select id="findNewBeeMallGoodsList" parameterType="Map" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List"/>
  from tb_newbee_mall_goods_info
  <where>
    <if test="goodsName!=null and goodsName!=''">
      and goods_name like CONCAT('%','${goodsName}','%')
    </if>
    <if test="goodsSellStatus!=null and goodsSellStatus!=''">
      and goods_sell_status = #{goodsSellStatus}
    </if>
    <if test="startTime != null and startTime.trim() != ''">
      and create_time &gt; #{startTime}
    </if>
    <if test="endTime != null and endTime.trim() != ''">
      and create_time &lt; #{endTime}
    </if>
  </where>
  order by goods_id desc
  

跳转到NewBeeMallGoodsMapper.xml

参数 goodName

点击绿色小箭头

跳转到这里 点击 java文件

@Override
public PageResult getNewBeeMallGoodsPage(PageQueryUtil pageUtil) {
List<NewBeeMallGoods> goodsList = goodsMapper.findNewBeeMallGoodsList(pageUtil);
int total = goodsMapper.getTotalNewBeeMallGoods(pageUtil);
PageResult pageResult = new PageResult(goodsList, total, pageUtil.getLimit(), pageUtil.getPage());
return pageResult;
}

点击 getNewBeeMallGoodsPage 跳转

跳转到 controller 层 admin后台管理

先登录后台

在商品管理处找到接口

但是这里要自己添加参数上去

goodsName

/admin/goods/list?_search=false&nd=1725359475161&limit=20&page=1&sidx=&order=asc&goodsName=1

单引号报错

闭合正常

交给sqlmap

存在sql注入

权限绕过

后台系统身份验证拦截器 AdminLoginInterceptor.java 存在权限绕过漏洞。

漏洞代码位于:src/main/java/ltd/newbee/mall/interceptor/AdminLoginInterceptor.java

@Component
public class AdminLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        String uri = request.getRequestURI();
        if (uri.startsWith("/admin") && null == request.getSession().getAttribute("loginUser")) {
            request.getSession().setAttribute("errorMsg", "请登陆");
            response.sendRedirect(request.getContextPath() + "/admin/login");
            return false;
        } else {
            request.getSession().removeAttribute("errorMsg");
            return true;
        }
    }

关键点是第 23 行,使用了 request.getRequestURI() 方法获取路径。如果使用该方法获取的路径进行权限判断是极易出现权限绕过漏洞的

<font style="color:#DF2A3F;">getRequestURI</font> 方法返回的路径是未经过服务器端处理的原始路径,可能包含特殊字符或路径跳转,从而绕过服务器端的安全控制。

第 24 行使用了 uri.startsWith(“/admin”) 判断 Uri 路径中是否以 /admin 开头,以及获取并判断 Session 中的 loginUser 属性是否为 null,两个条件&&在一起结果为 True 的话进入条件代码,提示需要登录并跳转到后台登录页面中。

既然这样,我们知道 a && b 需要两者都为 True 整体则为 True 才会进入条件判断代码中,如果另其中一个条件为 False 则整体就为 False,就不会进入条件判断中去了。

找一些特殊字符绕过路径判断,并且不影响整体接口

/1/../
//
/;/
URL编码

删除cookie之后就是直接从后台sql注入变成了前台sql注入

还有一个前台sql注入 也是一样的 。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值