something about burpsuite

BurpSuite

BurpSuite 介绍


工作原理

自己理解的 BurpSuite 工作原理:

BurpSuite工作原理

正确设置 BurpSuite 截断后,浏览器发送请求;请求被 BurpSuite 拦截,此时可以分析 拦截下的 http 请求,分析注入点。当 BurpSuite 放行请求后,请求被发送给目标服务器。 服务器返回对应的响应至 BurpSuite , BurpSuite 将对应响应交还至浏览器。

BurpSuite 可以:

  • 重复发送拦截下的请求
  • 可以更改请求内容后,发送请求

基于此,可以对关心的内容设置注入点,使用合适字典,从而达到暴力破解的目的。


BurpSuite 模块

  • Proxy 模块
    • Intercept
      • Intercept is on/off 用于设置截断HTTP请求 开/关
      • Forward 放行HTTP请求
      • Drop 丢弃此次拦截的请求
      • Action 将截断的请求发送到其它模块
      • Spider 模块 Engagement tools-Discover content 爬虫模块(Pro Only)
    • HTTP history 提交过的请求历史记录(支持Filter)
    • Options 配置选项
      • Proxy Listeners 代理监听设置
        • 设置监听端口
      • Intercept Client Requests 截断客户端请求
        • 设置截断规则,优先级由上至下
      • Intercept Server Responses 截断服务器响应
        • 筛选符合条件的HTTP响应,优先级由上至下
      • Intercept WebSockets Messages 截断WebSocket通信
      • Response Modification 服务端响应修改
        • Unhide hidden form fields 将隐藏的表单元素显示化
        • Enable disabled form fields 将disabled表单元素enable化
        • Remove input field length limits 移除输入框长度限制
        • Remove JavaScript form validation 移除JS表单验证
        • Remove all JavaScript 绕过文件上传中的JS验证
          • 搭配 Repeater 模块使用
        • Convert HTTPS links to HTTP 将HTTPS链接转换为HTTP
      • Match and Replace 匹配与替换HTTP消息内容
        • 配置替换HTTP请求头等,用以伪装客户端等
      • TLS Pass Through 配置TLS(SSL)等直连
      • Miscellaneous 其它配置
        • Use HTTP/1.0 in requests to server 配置使用HTTP/1.0协议给服务器发送请求
        • Set response header “Connection: close” 配置响应头 “Connection: close”
        • Suppress Burp error messages in browser 设置不再将Burp的错误消息发送至浏览器

  • Target 模块
    • Scope 作用域
      • 可以对拦截设置更细的粒度
      • 可以设置拦截白名单
      • 可以设置拦截指定文件
    • Site map 站点地图
      • 左侧为访问的URL
      • 右击Menu
        • Engagement tools-Analyze Target 分析站点(Pro Only)
        • Spider 模块 Engagement tools-Discover content 爬虫模块(Pro Only)
        • Compare site map 站点地图比较,比较登录与不登录响应是否不同
      • 右侧为URL详细
      • 支持Filter

  • Intruder 模块
    • 标识符枚举 (注入点字典枚举)
      • Attack type:
        • Sniper 狙击枪模式,精准模式,只针对一个位置进行测试
        • Battering ram 攻城锤模式,针对多个位置使用同一个Payload
        • Pitchfork 单叉模式,针对多个位置使用不同Payload
        • Cluster bomb 激素炮模式,针对多个位置,全部组合
    • 提取有用数据
    • 模糊测试
    • Options
      • Grep - Extract 从Response中获取内容,如不断变化的Token
      • Redirections 配置重定向

  • Repeater 模块

    用于多次重放请求和手工修改请求消息后对服务器端响应进行分析的模块。


  • Sequencer 模块

    用于检测数据样本随机性质量的工具,通常用于检测访问令牌是否可预测,密码重置 是否可预测等场景。


  • Decoder 模块

    用于对字符串进行加密操作。


  • Comparer 模块

    用于对两个不同的HTTP请求进行比较。


BurpSuite 配置

  • 设置代理
    • 使用 SwitchyOmega 设置模式,针对测试主机使用burpsuite代理,其他主机(CDN等)正常访问
    • 设置CA证书
      1. 使用系统管理员权限打开浏览器
      2. 访问 http://burp/ (burpsuite代理)
      3. 在页面下载CA证书
      4. 将下载的CA证书导入浏览器

BurpSuite 截断WebApp

  • 设置 BurpSuite 主机和测试移动设备在同一网段下
  • 设置移动设备代理,代理服务器为 BurpSuite 主机

BurpSuite 目录扫描

利用BurpSuite的Intruder模块进行不断枚举,然后对HTTP状态码进行筛选。
即以GET方式枚举URL路径。

BurpSuite 高级使用


something about git

Git-Flow

不同分支各司其职

分支类型 命名规范 创建自 合并至 说明
main main - - 部署版本分支
develop develop - - 代码集成分支
feature feature/* develop develop 新功能分支
release release/* develop develop和master 新版本发布
hotfix hotfix/* master develop和master 生产环境中发现的紧急bug的修复

git command

  • 分支(branch)

    • 使用 checkout 创建分支

      1
      2
      # 基于main分支创建develop分支
      git checkout -b develop main
    • 使用 switch 创建分支

      1
      2
      # 基于当前分支创建feature/switch分支
      git switch -c feature/switch
    • 使用 switch 切换分支

      1
      2
      # 切换到feature/switch分支
      git switch feature/switch
    • 合并分支(merge)

      1
      2
      3
      4
      # 合并feature/switch分支到当前分支(develop)
      git switch develop
      # --no-ff => no-fast-forward
      git merge --no-ff feature/switch
  • 暂存区(stage)

    • 将内容添加至暂存区

      1
      2
      3
      4
      # 添加当前目录下所有文件更改:
      git add .
      # 添加file文件更改:
      git add file
    • 将文件的部分内容添加至暂存区

      1
      2
      3
      4
      5
      6
      7
      # 对于已经暂存的文件, 开启交互模式后选择需要暂存的hunk
      git add -p <filename>
      # ######################
      # 对于未暂存的文件 先将文件添加至暂存区,但是文件内容不暂存
      git add -N <filename>
      # 然后再开启交互模式选择需要暂存的hunk
      git add -p <filename>
    • 误添加至暂存区的内容 取消添加

      add 进暂存区的内容(还未提交),取消 add,但是本地文件内容不做删除。

      1
      2
      3
      4
      # 将 filename.txt 文件取消 `add`
      git reset HEAD -filename.txt
      # 将当前目录下所有已添加文件,取消`add`
      git reset HEAD .
  • 提交(commit)

    • 将暂存区内容做一次提交

      提交至本地仓库,正式纳入版本记录。
      一次提交,看作一次版本的 原子 操作。

      1
      2
      3
      git commit
      # 随之而来的vim提交窗口中补充commit的对应message。
      # message保持Angular规范

      Angular规范保持 <type>(<scope>): <subject> 格式
      具体要求如下:

      • 主要type
        • feat: 增加新功能
        • fix: 修复bug
      • 特殊type
        • docs: 只改动了文档相关的内容
        • style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
        • build: 构造工具的或者外部依赖的改动,例如webpack,npm
        • refactor: 代码重构时使用
        • revert: 执行git revert打印的message
      • 暂不使用type
        • test: 添加测试或者修改现有测试
        • perf: 提高性能的改动
        • ci: 与CI(持续集成服务)有关的改动
        • chore: 不修改src或者test的其余修改,例如构建过程或辅助工具的变动
    • 修改最后一次提交

      发现提交错了:少提交文件comment写错了时都可以使用git commit命令的--amend参数。

      • 修改comment

        1
        2
        3
        git commit --amend -m "new comment"
        # 或进入vim中编辑`comment`
        git commit --amend
      • 补充漏提交文件

        1
        2
        3
        4
        # 将文件添加至暂存区
        git add file
        # 附加提交
        git commit --amend

        删除多提交文件时,git rm file将文件从暂存区中移除,其它相同。

      • 修改提交时不修改comment

        1
        2
        # 多使用`--no-edit`参数,将以不修改`comment`的方式修改上次的提交内容
        git commit --amend --no-edit
  • 备份(stash)

    • 备份当前工作区内容

      将当前工作区内容保存到Git栈中,工作区回到最近提交状态。

      1
      git stash
    • 从Git栈中恢复最近一次保存的内容

      1
      git stash pop
    • 清空Git栈

      1
      git stash clear
  • 子模块(submodule)

    • 添加子模块

      可以将不同仓库的模块添加至本模块中。

      1
      2
      # git submodule add <url> <path>
      git submodule add git@github.com:username/otherModule.git ~/localModule/otherModule
    • 子模块内容获取

      克隆包含子模块的项目时,子模块信息会克隆下来,但其包含的项目文件未克隆。

      1
      2
      3
      4
      5
      6
      7
      8
      # 使用 init 进行 子模块初始化
      git submodule init
      # 使用 update 进行 子模块获取
      git submodule update
      # 使用 --recursive 参数,获取子模块及包含的"子...子"模块
      git submodule update --recursive
      # 使用 --remote 参数获取子模块最新版本到本地仓库中
      git submodule update --remote
    • 子模块删除

      不需要子模块时,删除相应子模块。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # 1. 删除本地仓库中子模块目录
      rm -rf path/to/remoteModule
      # 2. 删除.gitmodules中相关内容
      vim .gitmodules
      # 3. 删除 .git/config 文件中相关内容
      vim .git/config
      # 4. 删除子模块的追踪块
      rm -rf .git/module/remoteModule
      # 5. 删除子模块缓冲区
      git rm --cached remoteModule

git add -p 参数

选项 说明
y 暂存当前块
n 不暂存当前块
a 暂存当前块及剩余块
d 不暂存当前块及剩余块
g 选择并跳转至指定的块
/ 正则搜索指定的块
j 离开当前未定块,处理下一个 未定
J 离开当前未定块,处理下一个块
k 离开当前未定块,处理上一个 未定
K 离开当前未定块,处理上一个块
s 将当前块分为更小的块
e 手动编辑当前块
? help

something about github

  • 更改github邮箱导致贡献丢失
    1. 克隆目标仓库
      1
      2
      git clone git@github.com:username/target.git
      cd target/
    2. 制作脚本文件
      1
      touch run.sh
    3. 将以下内容添加至 run.sh
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      #!/bin/sh

      # OLD_EMAIL 为旧邮箱
      # CORRECT_NAME 为用户名
      # CORRECT_EMAIL 为新邮箱
      git filter-branch --env-filter '

      OLD_EMAIL="old_mail@xxx.com"
      CORRECT_NAME="correctName"
      CORRECT_EMAIL="new_mail@xxx.com"

      if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
      then
      export GIT_COMMITTER_NAME="$CORRECT_NAME"
      export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
      fi
      if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
      then
      export GIT_AUTHOR_NAME="$CORRECT_NAME"
      export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
      fi
      ' --tag-name-filter cat -- --branches --tags
    4. 在仓库中运行 run.sh
      1
      2
      3
      # 添加执行权限
      chmod u+x ./run.sh
      bash ./run.sh
    5. 检查git log 中对应邮箱是否更改
      1
      git log
    6. 提交至远端
      1
      git push --force --tags origin 'refs/heads/*'