- 简介
- 一、基础知识篇
- 二、工具篇
- 三、分类专题篇
- 四、技巧篇
- 五、高级篇
- 六、题解篇
- 6.1 Pwn
- 6.1.1 pwn HCTF2016 brop
- 6.1.2 pwn NJCTF2017 pingme
- 6.1.3 pwn XDCTF2015 pwn200
- 6.1.4 pwn BackdoorCTF2017 Fun-Signals
- 6.1.5 pwn GreHackCTF2017 beerfighter
- 6.1.6 pwn DefconCTF2015 fuckup
- 6.1.7 pwn 0CTF2015 freenote
- 6.1.8 pwn DCTF2017 Flex
- 6.1.9 pwn RHme3 Exploitation
- 6.1.10 pwn 0CTF2017 BabyHeap2017
- 6.1.11 pwn 9447CTF2015 Search-Engine
- 6.1.12 pwn N1CTF2018 vote
- 6.1.13 pwn 34C3CTF2017 readme_revenge
- 6.1.14 pwn 32C3CTF2015 readme
- 6.1.15 pwn 34C3CTF2017 SimpleGC
- 6.1.16 pwn HITBCTF2017 1000levels
- 6.1.17 pwn SECCONCTF2016 jmper
- 6.1.18 pwn HITBCTF2017 Sentosa
- 6.1.19 pwn HITBCTF2018 gundam
- 6.1.20 pwn 33C3CTF2016 babyfengshui
- 6.1.21 pwn HITCONCTF2016 Secret_Holder
- 6.1.22 pwn HITCONCTF2016 Sleepy_Holder
- 6.1.23 pwn BCTF2016 bcloud
- 6.1.24 pwn HITCONCTF2016 HouseofOrange
- 6.1.25 pwn HCTF2017 babyprintf
- 6.1.26 pwn 34C3CTF2017 300
- 6.1.27 pwn SECCONCTF2016 tinypad
- 6.1.28 pwn ASISCTF2016 b00ks
- 6.1.29 pwn Insomni'hackteaserCTF2017 TheGreatEscapepart-3
- 6.1.30 pwn HITCONCTF2017 Ghostinthe_heap
- 6.1.31 pwn HITBCTF2018 mutepig
- 6.1.32 pwn SECCONCTF2017 vmnofun
- 6.1.33 pwn 34C3CTF2017 LFA
- 6.1.34 pwn N1CTF2018 memsafety
- 6.1.35 pwn 0CTF2018 heapstorm2
- 6.1.36 pwn NJCTF2017 messager
- 6.1.37 pwn sixstarctf2018 babystack
- 6.1.38 pwn HITCONCMT2017 pwn200
- 6.1.39 pwn BCTF2018 houseofAtum
- 6.1.40 pwn LCTF2016 pwn200
- 6.1.41 pwn PlaidCTF2015 PlaidDB
- 6.1.42 pwn hacklu2015 bookstore
- 6.1.43 pwn 0CTF2018 babyheap
- 6.1.44 pwn ASIS2017 start_hard
- 6.1.45 pwn LCTF2016 pwn100
- 6.2 Reverse
- 6.3 Web
- 6.1 Pwn
- 七、实战篇
- 7.1 CVE
- 7.1.1 CVE-2017-11543 tcpdump sliplink_print 栈溢出漏洞
- 7.1.2 CVE-2015-0235 glibc _nsshostnamedigitsdots 堆溢出漏洞
- 7.1.3 CVE-2016-4971 wget 任意文件上传漏洞
- 7.1.4 CVE-2017-13089 wget skipshortbody 栈溢出漏洞
- 7.1.5 CVE–2018-1000001 glibc realpath 缓冲区下溢漏洞
- 7.1.6 CVE-2017-9430 DNSTracer 栈溢出漏洞
- 7.1.7 CVE-2018-6323 GNU binutils elfobjectp 整型溢出漏洞
- 7.1.8 CVE-2010-2883 Adobe CoolType SING 表栈溢出漏洞
- 7.1.9 CVE-2010-3333 Microsoft Word RTF pFragments 栈溢出漏洞
- 7.1 CVE
- 八、学术篇
- 8.1 The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86)
- 8.2 Return-Oriented Programming without Returns
- 8.3 Return-Oriented Rootkits: Bypassing Kernel Code Integrity Protection Mechanisms
- 8.4 ROPdefender: A Detection Tool to Defend Against Return-Oriented Programming Attacks
- 8.5 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks
- 8.7 What Cannot Be Read, Cannot Be Leveraged? Revisiting Assumptions of JIT-ROP Defenses
- 8.9 Symbolic Execution for Software Testing: Three Decades Later
- 8.10 AEG: Automatic Exploit Generation
- 8.11 Address Space Layout Permutation (ASLP): Towards Fine-Grained Randomization of Commodity Software
- 8.13 New Frontiers of Reverse Engineering
- 8.14 Who Allocated My Memory? Detecting Custom Memory Allocators in C Binaries
- 8.21 Micro-Virtualization Memory Tracing to Detect and Prevent Spraying Attacks
- 8.22 Practical Memory Checking With Dr. Memory
- 8.23 Evaluating the Effectiveness of Current Anti-ROP Defenses
- 8.24 How to Make ASLR Win the Clone Wars: Runtime Re-Randomization
- 8.25 (State of) The Art of War: Offensive Techniques in Binary Analysis
- 8.26 Driller: Augmenting Fuzzing Through Selective Symbolic Execution
- 8.27 Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware
- 8.28 Cross-Architecture Bug Search in Binary Executables
- 8.29 Dynamic Hooks: Hiding Control Flow Changes within Non-Control Data
- 8.30 Preventing brute force attacks against stack canary protection on networking servers
- 8.33 Under-Constrained Symbolic Execution: Correctness Checking for Real Code
- 8.34 Enhancing Symbolic Execution with Veritesting
- 8.38 TaintEraser: Protecting Sensitive Data Leaks Using Application-Level Taint Tracking
- 8.39 DART: Directed Automated Random Testing
- 8.40 EXE: Automatically Generating Inputs of Death
- 8.41 IntPatch: Automatically Fix Integer-Overflow-to-Buffer-Overflow Vulnerability at Compile-Time
- 8.42 Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software
- 8.43 DTA++: Dynamic Taint Analysis with Targeted Control-Flow Propagation
- 8.44 Superset Disassembly: Statically Rewriting x86 Binaries Without Heuristics
- 8.45 Ramblr: Making Reassembly Great Again
- 8.46 FreeGuard: A Faster Secure Heap Allocator
- 8.48 Reassembleable Disassembling
- 九、附录
1.4.2 HTTP 协议基础
什么是 HTTP
HTTP 是 Web 领域的核心通信协议。最初的 HTTP 支持基于文本的静态资源获取,随着协议版本的不断迭代,它已经支持如今常见的复杂分布式应用程序。
HTTP 使用一种基于消息的模型,建立于 TCP 层之上。由客户端发送一条请求消息,而后由服务器返回一条响应消息。
HTTP 请求与响应
一次完整的请求或响应由消息头、一个空白行和消息主体构成。以下是一个典型的 HTTP 请求:
GET / HTTP/1.1
Host: www.github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Cookie: logged_in=yes;
Connection: close
第一行分别是请求方法,请求的资源路径和使用的 HTTP 协议版本,第二至九行为消息头键值对。
以下是对上面请求的回应(并不一定和真实访问相同,这里只是做为示例):
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2017 02:28:53 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Server: GitHub.com
Status: 200 OK
Cache-Control: no-cache
Vary: X-PJAX
X-UA-Compatible: IE=Edge,chrome=1
Set-Cookie: user_session=37Q; path=/;
X-Request-Id: e341
X-Runtime: 0.538664
Content-Security-Policy: default-src 'none';
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Public-Key-Pins: max-age=0;
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Runtime-rack: 0.547600
Vary: Accept-Encoding
X-GitHub-Request-Id: 7400
Content-Length: 128504
<!DOCTYPE html>
......
第一行为协议版本、状态号和对应状态的信息,第二至二十二为返回头键值对,紧接着为一个空行和返回的内容实体。
HTTP 方法
在提到 HTTP 方法之前,我们需要先讨论一下 HTTP 版本问题。HTTP 协议现在共有三个大版本,版本差异会导致一些潜在的漏洞利用方式。
版本 | 简述 |
---|---|
HTTP 0.9 | 该版本只允许 GET 方法,具有典型的无状态性,无协议头和状态码,支持纯文本 |
HTTP 1.0 | 增加了 HEAD 和 POST 方法,支持长连接、缓存和身份认证 |
HTTP 1.1 | 增加了 Keep-alive 机制和 PipeLining 流水线,新增了 OPTIONS、PUT、DELETE、TRACE、CONNECT 方法 |
HTTP 2.0 | 增加了多路复用、头部压缩、随时复位等功能 |
请求方法 | 描述 |
---|---|
GET | 请求获取 URL 资源 |
POST | 执行操作,请求 URL 资源后附加新的数据 |
HEAD | 只获取资源响应消息报头 |
PUT | 请求服务器存储一个资源 |
DELETE | 请求服务器删除资源 |
TRACE | 请求服务器回送收到的信息 |
OPTIONS | 查询服务器的支持选项 |
URL
URL 是统一资源定位符,它代表了 Web 资源的唯一标识,如同电脑上的盘符路径。最常见的 URL 格式如下所示:
protocol://[user[:password]@]hostname[:post]/[path]/file[?param=value]
协议 分隔符 用户信息 域名 端口 路径 资源文件 参数键 参数值
下面是一张具体案例分析
HTTP 消息头
HTTP 支持许多不同的消息头,一些有着特殊作用,而另一些则特定出现在请求或者响应中。
消息头 | 描述 | 备注 |
---|---|---|
Connection | 告知通信另一端,在完成HTTP传输后是关闭 TCP 连接,还是保持连接开放 | |
Content-Encoding | 规定消息主体内容的编码形式 | |
Content-Length | 规定消息主体的字节长度 | |
Content-Type | 规定消息主体的内容类型 | |
Accept | 告知服务器客户端愿意接受的内容类型 | 请求 |
Accept-Encoding | 告知服务器客户端愿意接受的内容编码 | 请求 |
Authorization | 进行内置 HTTP 身份验证 | 请求 |
Cookie | 用于向服务器提交 cookie | 请求 |
Host | 指定所请求的完整 URL 中的主机名称 | 请求 |
Origin | 跨域请求中的请求域 | 请求 |
Referer | 指定提出当前请求的原始 URL | 请求 |
User-Agent | 提供浏览器或者客户端软件的有关信息 | 请求 |
Cache-Control | 向浏览器发送缓存指令 | 响应 |
Location | 重定向响应 | 响应 |
Server | 提供所使用的服务器软件信息 | 响应 |
Set-Cookie | 向浏览器发布 cookie | 响应 |
WWW-Authenticate | 提供服务器支持的验证信息 | 响应 |
Cookie
Cookie 是大多数 Web 应用程序所依赖的关键组成部分,它用来弥补 HTTP 的无状态记录的缺陷。服务器使用 Set-Cookie 发布 cookie,浏览器获取 cookie 后每次请求会在 Cookie 字段中包含 cookie 值。
Cookie 是一组键值对,另外还包括以下信息:
- expires,用于设定 cookie 的有效时间。
- domain,用于指定 cookie 的有效域。
- path,用于指定 cookie 的有效 URL 路径。
- secure,指定仅在 HTTPS 中提交 cookie。
- HttpOnly,指定无法通过客户端 JavaScript 直接访问 cookie。
状态码
状态码表明资源的请求结果状态,由三位十进制数组成,第一位代表基本的类别:
- 1xx,提供信息
- 2xx,请求成功提交
- 3xx,客户端重定向其他资源
- 4xx,请求包含错误
- 5xx,服务端执行遇到错误
常见的状态码及短语如下所示:
状态码 | 短语 | 描述 |
---|---|---|
100 | Continue | 服务端已收到请求并要求客户端继续发送主体 |
200 | Ok | 已成功提交,且响应主体中包含请求结果 |
201 | Created | PUT 请求方法的返回状态,请求成功提交 |
301 | Moved Permanently | 请求永久重定向 |
302 | Found | 暂时重定向 |
304 | Not Modified | 指示浏览器使用缓存中的资源副本 |
400 | Bad Request | 客户端提交请求无效 |
401 | Unauthorized | 服务端要求身份验证 |
403 | Forbidden | 禁止访问被请求资源 |
404 | Not Found | 所请求的资源不存在 |
405 | Method Not Allowed | 请求方法不支持 |
413 | Request Entity Too Large | 请求主体过长 |
414 | Request URI Too Long | 请求URL过长 |
500 | Internal Server Error | 服务器执行请求时遇到错误 |
503 | Service Unavailable | Web 服务器正常,但请求无法被响应 |
401 状态支持的 HTTP 身份认证:
- Basic,以 Base64 编码的方式发送证书
- NTLM,一种质询-响应机制
- Digest,一种质询-响应机制,随同证书一起使用一个随机的 MD5 校验和
HTTPS
HTTPS 用来弥补 HTTP 明文传输的缺陷。通过使用安全套接字 SSL,在端与端之间传输加密后的消息,保护传输数据的隐密性和完整性,并且原始的 HTTP 协议依然按照之前同样的方式运作,不需要改变。
参考资料
- URL
- HTTP 协议版本对比
- 《黑客攻防技术宝典——Web 实战篇》
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论