杂记 01:F12、编码识别、Requests 与 Linux 文件命令

一、浏览器 F12 开发者工具详解

F12 或页面右键【检查】即可打开开发者工具,是前端调试与 Web 渗透的基础利器。

1.1 顶部核心标签

标签作用使用场景
元素(Elements) ⭐最常用查看、临时修改网页 HTML 结构 + CSS 样式改页面文字、调布局、看 DOM
控制台(Console)JS 运行窗口,打印日志与报错信息,可直接执行 JS 代码排查报错、快速测试脚本
源代码(Sources)查看网页加载的 JS / CSS / 图片等原始文件,支持断点调试分析前端逻辑、下断点
网络(Network) ⭐渗透常用监控页面所有请求:接口、图片、AJAX、表单提交抓接口、看请求参数与响应
性能(Performance)录制页面运行过程,分析卡顿、加载慢的原因前端性能优化

Network 面板核心信息:请求 URL、请求方法(GET/POST)、请求头、响应内容、状态码(200 成功 / 404 不存在 / 500 服务器错误)。勾选【保留日志】可防止页面跳转后清空记录。

1.2 元素(Elements)面板分区

  • 上半区:DOM 树 —— 网页 HTML 树形结构,html → head → body 层层嵌套,即网页骨架。:before / :after 是 CSS 伪元素,不是真实 HTML 标签。

  • 下半区:样式面板

    • 样式:当前选中元素生效的 CSS,可勾选禁用、修改数值实时调试;

    • 已计算:查看元素最终生效的真实宽、高、字体、颜色;

    • 布局:查看盒模型(margin、border、padding、content 尺寸)。

核心技巧:点击左上角箭头图标(选择元素),再点网页任意内容,可自动定位到对应 DOM 代码。所有修改只作用于本地浏览器显示,不修改服务器原始代码,刷新即恢复,可放心试错。

1.3 高频实操场景

场景操作
查看 / 临时修改网页文字Elements 中找到对应 <div>,双击文字直接修改,浏览器立即生效
抓取接口、查看提交数据Network 中刷新页面,筛选 Fetch/XHR 查看前后端接口通信
页面排版错乱,调试 CSS选中错乱元素,在样式面板修改 width、display、flex、grid 等参数
查找网页报错切到 Console,红色报错即为 JS 代码问题,逐条排查

1.4 快捷键速查

快捷键功能
F12 / Ctrl+Shift+I打开 / 关闭开发者工具
Ctrl+Shift+C快速激活【选取元素】箭头
Ctrl+R刷新页面
Esc底部调出控制台(其他标签页可同时显示 Console)

二、五种常见编码识别速查表(CTF 必背)

核心认知:编码 ≠ 加密,以上五种编码均可逆向还原。做题时先看特征,一秒判断类型。

2.1 特征识别总表(先看格式)

编码标志性外观特征识别口诀
Base64字符集 A-Z a-z 0-9 + /,末尾常有 = 填充大小写字母数字 + /,末尾可能带 =
HEX(十六进制)只有 0-9 a-f,常两两一组,有时空格分隔只有 09、af,两字符代表 1 字节
HTML 实体编码&# 开头:&#十进制;&#x十六进制;看到 &# / &#x → HTML 实体
Unicode 转义(\u)\u + 4 位十六进制,如 \u597D看到 \uXXXX → JS/JSON Unicode 转义
URL 编码(百分号编码)% + 两位十六进制,如 %66%6c看到大量 %xx → URL 编码

2.2 五种编码详解(统一明文:flag{abc}

① URL 编码(百分号编码)

  • 格式:% + 两位十六进制

  • 示例:

%66%6c%61%67%7b%61%62%63%7d
  • JS 解码:decodeURIComponent();Python 解码:urllib.parse.unquote()

  • 用途:HTTP URL、GET/POST 参数中传输特殊字符

  • 双重编码特征:% 被编码为 %25

② HEX 十六进制编码

  • 格式:连续或空格分隔的 0-9 a-f,每 2 字符 = 1 字节

  • 示例:

66 6c 61 67 7b 61 62 63 7d
  • JS 解码:String.fromCharCode(parseInt(xx, 16));Python 解码:bytes.fromhex(...)

  • 用途:流量抓包、二进制数据展示、文件十六进制视图

③ Base64

  • 字符:大小写字母、数字、+ /,结尾 = 填充

  • 示例:

​​​​​​​ZmxhZ3thYmN9
  • JS 解码:atob();Python 解码:base64.b64decode()

  • 用途:二进制转文本,图片、文件、Cookie 中常见

④ HTML 实体编码

  • 十进制:

​​​​​​​&#102;&#108;&#97;&#103;&#123;&#97;&#98;&#99;&#125;
  • 十六进制:

​​​​​​​&#x66;&#x6c;&#x61;&#x67;&#x7b;&#x61;&#x62;&#x63;&#x7d;
  • JS 解码:新建 div,innerHTML 赋值后读取 innerText;Python 解码:html.unescape()

  • 用途:网页源码转义 < > & " 等特殊符号、防 XSS

⑤ Unicode 转义(\uXXXX,JS/JSON)

  • 格式:\u + 4 位十六进制

  • 示例:

\u0066\u006c\u0061\u0067\u007b\u0061\u0062\u0063\u007d
  • 中文示例:\u597D(好)

  • JS 特性:放入字符串引号内自动解析,无需额外函数

  • ⚠️ 注意区分:\uXXXX(JS 字符串)vs &#xXXXX;(网页 HTML 实体),二者极易混淆

2.3 快速判断流程(做题步骤)

  1. 字符串大量 %xxURL 编码

  2. 字符串大量 &#x / &#数字HTML 实体

  3. 字符串大量 \uXXXXUnicode 转义

  4. 只有 0-9 a-f、两两一组 → HEX 十六进制

  5. 大小写字母数字、含 +/、末尾可能有 =Base64

2.4 常见陷阱:多层嵌套编码

题目常出现"两次编码",如:明文 → HTML 实体 → Base64 包装。解码顺序:从外层向内层逐层解开,切忌一步到位。


三、Python Requests 库详解

Requests 是 Python 第三方 HTTP/1.1 客户端库,口号 HTTP for Humans(作者 Kenneth Reitz),底层封装 urllib3,API 简洁,是爬虫、接口测试、CTF Web 最常用的库。支持 GET/POST/PUT/DELETE、自动连接池、Cookie 持久化、SSL 校验、代理、文件上传、自动编码处理。

3.1 六个基础请求方法

requests.get()     # 获取资源
requests.post()    # 提交数据(表单 / json,靶场代码最常用)
requests.put()     # 更新资源
requests.delete()  # 删除资源
requests.head()    # 只拿响应头,不下载 body
requests.options() # 获取服务器支持的请求方法

3.2 通用参数详解

① headers —— 请求头(字典)

模拟浏览器,携带 UA、Cookie、Token、Content-Type:

​​​​​​​headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Firefox/143.0",
    "Referer": "http://xxx",
    "Cookie": "PHPSESSID=abc123"
}
res = requests.get(url, headers=headers)

② params —— GET 查询参数

自动拼接到 ? 后面并编码,避免手动拼接 URL 出错:

payload = {"name": "admin", "id": 1}
res = requests.get("http://httpbin.org/get", params=payload)
# 等价于 http://httpbin.org/get?name=admin&id=1
print(res.url)

③ POST 核心:data vs json(CTF 高频考点)

参数提交格式Content-Type适用场景
data={}表单键值对 a=1&b=2application/x-www-form-urlencoded传统表单(靶场代码常用)
json={}JSON 字符串(自动 json.dumps 序列化)application/jsonREST 接口
# 表单提交
res = requests.post(url, data={"flag": "1"})
# JSON 提交,请求体为 {"flag": "1"}
res = requests.post(url, json={"flag": "1"})

④ timeout —— 超时(生产 / 靶场必加)

超过设定时间未返回直接抛异常,防止脚本卡死:

res = requests.get(url, timeout=5)          # 统一超时
res = requests.get(url, timeout=(3, 10))    # (连接超时, 读取超时)

⑤ cookies —— 手动传入 Cookie 字典

cookies = {"PHPSESSID": "xxxx"}
res = requests.get(url, cookies=cookies)

⑥ verify —— SSL 证书校验

HTTPS 默认校验证书,靶场自签名证书会报错,可关闭(仅限练习环境):

res = requests.get("https://xxx", verify=False)

⑦ proxies —— 代理(Burp 抓包必备)

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080"
}
res = requests.get(url, proxies=proxies, verify=False)

⑧ allow_redirects —— 是否跟随重定向

默认 True;CTF 遇到 302 跳转想查看原始响应时关闭:

res = requests.get(url, allow_redirects=False)

⑨ files —— 文件上传(multipart/form-data)

files = {"upload": open("test.txt", "rb")}
res = requests.post(url, files=files)

3.3 Response 对象(请求返回结果,核心)

res = requests.get(url)
属性 / 方法含义
res.status_codeHTTP 状态码:200 成功、404 不存在、401 未授权、500 服务器错误
res.text自动解码后的字符串文本(网页源码、flag)
res.content原始 bytes 二进制,下载图片、文件用
res.json()将返回文本解析为 Python 字典(接口返回 JSON 才可用,否则抛异常)
res.headers服务器响应头(字典)
res.cookies服务器返回的 CookieJar 对象
res.url最终请求的 URL(重定向后的地址)
res.encoding当前编码,可手动设置 res.encoding = "utf-8"
res.raise_for_status()状态码为 4xx/5xx 时主动抛出 HTTPError 异常

⚠️ 重点区分:text 是字符串(网页、flag 文本),content 是字节(图片、压缩包),json()方法,括号不能丢

3.4 Session 会话对象

普通 requests.get/post 每次请求都是全新连接,不会自动保存 Cookie

Session() 自动持久化 Cookie、复用 TCP 连接,可完整模拟浏览器登录状态:

import requests
​
s = requests.Session()
# 登录后,服务器 set-cookie 自动存入 session
s.post("http://xxx/login", data={"user": "admin", "pass": "123456"})
# 访问需要登录的 flag 页面,自动携带 Cookie
res = s.get("http://xxx/flag")
print(res.text)

还可设置全局默认请求头:

s.headers.update({"User-Agent": "Firefox/143"})

3.5 异常体系(写稳健脚本必备)

所有异常均继承自 requests.exceptions.RequestException

异常触发场景
ConnectionError网络不通、DNS 失败、拒绝连接
Timeout请求超时(含 ConnectTimeout / ReadTimeout 子类)
HTTPError调用 raise_for_status() 后,4xx/5xx 抛出
TooManyRedirects重定向次数超限
SSLErrorSSL 证书校验失败

统一捕获示例:

import requests
​
try:
    res = requests.get(url, timeout=3)
    res.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")

四、Linux 常用文件命令速查

4.1 文件查看类

① cat —— 查看文件内容

cat /tmp/flag.txt
  • cat > test.txt:创建并写入文件;

  • cat file1 file2:拼接多个文件

② tac —— 反向输出(行倒序)

tac /tmp/flag.txt

cat 从上往下读,tac 从最后一行向上输出,顺序恰好相反。

③ head —— 查看文件开头(默认前 10 行)

head /tmp/flag.txt      # 默认前 10 行
head -n 3 /tmp/flag.txt # 指定前 3 行

④ tail —— 查看文件末尾(默认最后 10 行)

tail /tmp/flag.txt       # 默认最后 10 行
tail -n 3 /tmp/flag.txt  # 取最后 3 行
tail -f /tmp/flag.txt    # 实时监听新增内容(看日志常用)

⑤ more —— 分页浏览(只能向下翻页)

more /tmp/flag.txt

交互按键:空格翻页、回车下一行、q 退出。

⑥ less —— more 增强版(推荐)

less /tmp/flag.txt

常用交互:空格下一页、b 上一页、/关键词 向下搜索、?关键词 向上搜索、q 退出。

⑦ nl —— 打印行号

nl /tmp/flag.txt     # 默认空行不显示行号
nl -b a /tmp/flag.txt  # 空行也添加行号

区别:cat -n 所有行都编号;nl 默认空行不显示行号。

4.2 文本处理类

⑧ sort —— 按行排序(默认字典序)

sort /tmp/flag.txt          # 字典序排序
sort /tmp/flag.txt | uniq   # 排序后去重
sort -r /tmp/flag.txt       # 逆序
sort -n /tmp/flag.txt       # 按数字大小排序

⑨ uniq —— 去除相邻连续重复行

sort /tmp/flag.txt | uniq    # 排序后全局去重
sort /tmp/flag.txt | uniq -c # 统计各行重复次数

uniq 单独使用只能去除相邻重复行,全局去重需搭配 sort。 参数:-c 统计次数、-d 只显示重复行、-u 只显示唯一不重复行。

4.3 文件操作类

⑩ cp —— 复制文件或目录

cp /tmp/flag.txt /home/flag.txt  # 文件复制
cp -r 源目录 目标目录             # 递归复制目录

⑪ mv —— 移动文件 / 重命名

mv /tmp/flag.txt /home/  # 移动文件
mv old.txt new.txt       # 重命名

参考资料

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值