Tmall_demo商城代码审计
字数 1913 2025-10-01 14:05:44

Tmall_demo商城代码审计教学文档

环境搭建

项目准备

  • 项目地址:https://gitee.com/project_team/Tmall_demo
  • 数据库配置:修改src/main/resources/application.properties中的数据库配置信息
  • 数据库初始化:创建对应数据库并导入SQL文件
  • JDK版本:1.8
  • 前台地址:http://127.0.0.1:8080/tmall
  • 后台地址:http://127.0.0.1:8080/tmall/admin
  • 管理员账户:admin/123456

故障排除

若登录后台出现"500系统错误",需修改src/main/resources/mybatis/mapper/ProductMapper.xml中的最后一条select语句:

<select id="selectTotalByGroupCategory" resultType="map">
    SELECT category.category_name name, COUNT(0) value
    FROM product
    LEFT JOIN category ON category.category_id = product.product_category_id
    GROUP BY category.category_id, category.category_name
    ORDER BY category.category_id
</select>

代码审计发现的安全漏洞

1. 鉴权绕过漏洞

漏洞位置

  • 过滤器中仅检查URL中包含/admin/login/admin/account即放行
  • 未对管理员功能进行完整身份验证

利用方法

  1. 访问需要管理员权限的接口(如人员信息查询)
  2. 在URL前添加/admin/login/admin/account结合目录穿越
  3. 示例:http://example.com/admin/login/../admin/user/list

修复建议

  • 实现完整的身份验证机制
  • 使用权限验证框架(如Shiro, Spring Security)
  • 避免使用简单的字符串匹配进行权限验证

2. 前台文件上传漏洞

漏洞位置

  • 前台个人资料头像上传功能
  • 路由:/user/uploadUserHeadImage

漏洞详情

  • 前端仅校验MIME类型和文件大小
  • 后端未对文件内容进行安全检测
  • 仅对文件名进行UUID编码,但保留原始扩展名
  • 存在JSP解析依赖,可执行Webshell

利用方法

  1. 使用哥斯拉生成JSP木马,后缀改为png
  2. 上传时抓包,将文件名后缀改回jsp
  3. 访问上传的JSP文件获取Webshell

修复建议

  • 后端验证文件类型(检查文件头而非扩展名)
  • 限制上传文件类型白名单
  • 将上传文件存储在非Web可访问目录
  • 对图像文件进行重采样处理

3. 多处SQL注入漏洞

漏洞位置

  • 使用Mybatis框架且使用${}而非#{}进行参数拼接
  • 影响接口:
    • admin/product/{index}/{count}
    • admin/user/{index}/{count}
    • admin/reward/{index}/{count}
    • product/{index}/{count}

漏洞详情

  • orderUtil.orderBy参数直接拼接SQL语句
  • 参数通过get方法获取,用户可控

利用方法

  1. 在orderBy参数中注入SQL语句
  2. 使用SQLMap进行自动化检测:
sqlmap -u "http://example.com/admin/product/1/10?orderBy=id" --dbs

修复建议

  • 使用Mybatis的#{}预编译方式
  • 对orderBy参数进行白名单验证
  • 使用参数化查询

4. 多处跨站脚本(XSS)漏洞

4.1 所有产品处XSS

漏洞位置
  • 商品添加/编辑功能中的输入框
利用方法
  1. 在商品名称等字段插入:<script>alert(1)</script>
  2. 搜索或浏览商品时触发XSS

4.2 前台下单/后台查询订单处XSS

漏洞位置
  • 订单处理功能中的用户输入字段
利用方法
  1. 在下单过程中注入XSS payload
  2. 后台管理员查看订单详情时触发

4.3 管理员昵称处XSS

漏洞位置
  • 管理员个人信息修改功能
利用方法
  1. 修改管理员昵称为XSS payload
  2. 重新登录或查看管理员信息时触发

修复建议

  • 对所有用户输入进行HTML编码
  • 使用CSP(Content Security Policy)策略
  • 设置HttpOnly标志保护Cookie
  • 实施输入验证和输出编码

安全加固建议

1. 身份验证与授权

  • 实现完整的会话管理
  • 使用强密码策略
  • 实施多因素认证
  • 定期审查权限分配

2. 输入验证

  • 实施白名单验证策略
  • 对所有输入数据进行严格验证
  • 使用安全的API处理用户输入

3. 安全编码实践

  • 避免直接拼接SQL语句
  • 使用预编译语句和参数化查询
  • 实施安全的文件上传机制
  • 对所有输出进行适当的编码

4. 安全监控

  • 记录安全相关事件
  • 实施实时入侵检测
  • 定期进行安全审计和代码审查

总结

Tmall_demo商城存在多处严重安全漏洞,包括鉴权绕过、文件上传、SQL注入和XSS漏洞。这些漏洞的组合可能允许攻击者获取系统权限、窃取敏感数据或完全控制应用系统。建议立即修复这些漏洞并实施全面的安全开发生命周期(SDLC)流程。

Tmall_ demo商城代码审计教学文档 环境搭建 项目准备 项目地址 :https://gitee.com/project_ team/Tmall_ demo 数据库配置 :修改 src/main/resources/application.properties 中的数据库配置信息 数据库初始化 :创建对应数据库并导入SQL文件 JDK版本 :1.8 前台地址 :http://127.0.0.1:8080/tmall 后台地址 :http://127.0.0.1:8080/tmall/admin 管理员账户 :admin/123456 故障排除 若登录后台出现"500系统错误",需修改 src/main/resources/mybatis/mapper/ProductMapper.xml 中的最后一条select语句: 代码审计发现的安全漏洞 1. 鉴权绕过漏洞 漏洞位置 过滤器中仅检查URL中包含 /admin/login 或 /admin/account 即放行 未对管理员功能进行完整身份验证 利用方法 访问需要管理员权限的接口(如人员信息查询) 在URL前添加 /admin/login 或 /admin/account 结合目录穿越 示例: http://example.com/admin/login/../admin/user/list 修复建议 实现完整的身份验证机制 使用权限验证框架(如Shiro, Spring Security) 避免使用简单的字符串匹配进行权限验证 2. 前台文件上传漏洞 漏洞位置 前台个人资料头像上传功能 路由: /user/uploadUserHeadImage 漏洞详情 前端仅校验MIME类型和文件大小 后端未对文件内容进行安全检测 仅对文件名进行UUID编码,但保留原始扩展名 存在JSP解析依赖,可执行Webshell 利用方法 使用哥斯拉生成JSP木马,后缀改为png 上传时抓包,将文件名后缀改回jsp 访问上传的JSP文件获取Webshell 修复建议 后端验证文件类型(检查文件头而非扩展名) 限制上传文件类型白名单 将上传文件存储在非Web可访问目录 对图像文件进行重采样处理 3. 多处SQL注入漏洞 漏洞位置 使用Mybatis框架且使用 ${} 而非 #{} 进行参数拼接 影响接口: admin/product/{index}/{count} admin/user/{index}/{count} admin/reward/{index}/{count} product/{index}/{count} 漏洞详情 orderUtil.orderBy 参数直接拼接SQL语句 参数通过 get 方法获取,用户可控 利用方法 在orderBy参数中注入SQL语句 使用SQLMap进行自动化检测: 修复建议 使用Mybatis的 #{} 预编译方式 对orderBy参数进行白名单验证 使用参数化查询 4. 多处跨站脚本(XSS)漏洞 4.1 所有产品处XSS 漏洞位置 商品添加/编辑功能中的输入框 利用方法 在商品名称等字段插入: <script>alert(1)</script> 搜索或浏览商品时触发XSS 4.2 前台下单/后台查询订单处XSS 漏洞位置 订单处理功能中的用户输入字段 利用方法 在下单过程中注入XSS payload 后台管理员查看订单详情时触发 4.3 管理员昵称处XSS 漏洞位置 管理员个人信息修改功能 利用方法 修改管理员昵称为XSS payload 重新登录或查看管理员信息时触发 修复建议 对所有用户输入进行HTML编码 使用CSP(Content Security Policy)策略 设置HttpOnly标志保护Cookie 实施输入验证和输出编码 安全加固建议 1. 身份验证与授权 实现完整的会话管理 使用强密码策略 实施多因素认证 定期审查权限分配 2. 输入验证 实施白名单验证策略 对所有输入数据进行严格验证 使用安全的API处理用户输入 3. 安全编码实践 避免直接拼接SQL语句 使用预编译语句和参数化查询 实施安全的文件上传机制 对所有输出进行适当的编码 4. 安全监控 记录安全相关事件 实施实时入侵检测 定期进行安全审计和代码审查 总结 Tmall_ demo商城存在多处严重安全漏洞,包括鉴权绕过、文件上传、SQL注入和XSS漏洞。这些漏洞的组合可能允许攻击者获取系统权限、窃取敏感数据或完全控制应用系统。建议立即修复这些漏洞并实施全面的安全开发生命周期(SDLC)流程。