Httpd类Pwn题目剖析
最近见到许多将Web和Pwn结合起来考察的题目,本文拟对以httpd为核心考点的题目作出展开
Httpd
什么是httpd
httpd
指的是 Hypertext Transfer Protocol
Daemon,通常用于描述实现 HTTP/HTTPS
协议的网络服务器软件,最著名的 httpd
实现之一是
Apache HTTP Server,因此有时候也用 httpd
来特指 Apache Web 服务器
HTTP/HTTPS 简介
HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。
HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。
HTTP 请求结构
HTTP 请求由客户端(如浏览器)向服务器发送,用于请求获取资源(如网页、文件等)。一个完整的 HTTP 请求通常由以下几个部分构成:
1. 请求行 (Request Line)
请求行包含三部分信息:
请求方法:指定客户端想对资源执行的操作,常见方法有:
请求方法 描述 GET 请求指定的资源,用于获取数据而不做更改 POST 向服务器提交数据,常用于表单提交 PUT 上传指定的资源,常用于更新资源 DELETE 删除指定资源 PATCH 对资源进行部分修改,常用于部分更新资源 HEAD 用于获取报头信息 OPTIONS 获取服务器支持的HTTP方法 TRACE 回显服务器收到的请求,主要用于诊断,客户端可以查看请求在服务器中的处理路径 CONNECT 建立一个到由目标资源标识的服务器的隧道 请求路径 (Request-URI):指客户端请求的资源路径,比如
/index.html
,可以带参数,如/search?q=example
协议版本:指使用的 HTTP 协议版本,比如
HTTP/1.1
或HTTP/2.0
示例:
1 | GET /index.html |
2. 请求头 (Request Headers)
请求头是以键值对为格式呈现的信息,通常用来传递附加信息。常见的请求头有:
Host
:指定请求的目标主机名和端口号User-Agent
:指客户端的类型(例如浏览器类型、操作系统等)Accept
:指定客户端能够处理的媒体类型(如text/html
,application/json
等)Content-Type
:在POST
或PUT
请求中,指定请求体中数据的媒体类型Authorization
:提供身份验证信息,如 API 密钥或 TokenCookie
:客户端存储的会话信息
示例: 1
2
3Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
3. 空行
请求头之后有一个空行,表示请求头的结束。
4. 请求体 (Request Body)
请求体通常只有在 POST
、PUT
等请求方法中才会存在,用于携带数据。请求体包含的内容可以是表单数据、JSON、XML、文件等。
示例: 1
2
3
4
5
6POST /submit
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=user&password=123
综上,HTTP 请求的完整结构可以表示如下:
1 | 请求行 |
示例完整 HTTP 请求:
1 | GET /index.html |
请求的核心要点:
- 请求方法决定了操作的类型(获取、提交等)。
- 请求路径指明了资源的位置。
- 请求头携带了客户端的一些附加信息(如认证、缓存控制等)。
- 请求体在特定请求(如
POST
)中携带要提交的内容。
羊城杯 2024 httpd
从程序Entry Point 0x00012c0
往下走,看到大量汇编压栈指令处,此处即为程序main逻辑点,从0x000013ED
开始至0x00001F73
结束,基本实现一个简单的处理GET
请求的HTTP服务器
其中函数sub_1F74
对请求行参数进行了过滤了以下符号:
&
、|
、;
、$
、{
、}
、`、
bin
、sh
故将flag移到当前目录下读取即可
1 | from pwn import * |
也可以通过BurpSuite发包解题