CTF|入门题目when_did_you_born解题思路以个人总结

本文介绍了CTF入门题目'when_did_you_born'的解题思路,分析了文件类型和执行流程,强调了栈溢出利用和gets()函数的安全问题。通过理解大端序和小端序的概念,利用缓冲区溢出修改变量v5的值为1926,成功获取flag。

CTF|入门题目when_did_you_born解题思路以个人总结

解题思路

拿到题目我们放入ubuntu里面通过file born(此处born是文件名)
来查看文件信息在这里插入图片描述
得到信息:
ELF:文件elf格式
64-bit:64位文件
LSB:文件小端序(什么是小端序个人总结会写)
executable:顾名思义,可执行的文件

接下我们运行下文件./born 并过一遍文件流程
在这里插入图片描述
比较简单,输入生日birth 输入名字name 输出文字

将文件拖入反编译工具IDA F5 查看伪代码
在这里插入图片描述
得到伪代码后需要特别关注v4、v5两个变量的空间的大小
代码中间有个gets()函数,没有对用户输入的v4做限制,很可能被利用来栈溢出
同时,我们也得到了得到flag的方法:
函数希望v5的值为1926这样就可以cat flag,但是第一次输入的时候又不能输入1926,所以我们的思路是:通过输入v4后造成gets函数的栈溢出,将第一次v5的值覆盖成1926就可以得到flag了
总体思路比较简单

双击v4进入几个变量在栈中的位置‘

### 关于 SWPUCTF 2021 新生赛 Do_you_know_http 题目解析 #### 题目背景 `Do_you_know_http` 是 SWPUCTF 2021 新生赛中的一个 web 方向题目,主要考察选手对 HTTP 协议的理解以及如何通过修改请求头来完成特定的任务。此题的核心在于理解并利用 User-Agent 字段的特性。 --- #### 解题思路题目要求参赛者访问目标站点 `hello.php` 并获取隐藏的信息。然而,服务器端会对客户端发出的 HTTP 请求进行验证,只有当请求头中的 User-Agent 值满足特定条件时才会返回正确的响应数据[^3]。 为了成功解题,可以按照以下逻辑分析问题: 1. **了解 User-Agent 的作用** - User-Agent 是 HTTP 请求头部的一个字段,用于告知服务器当前用户的设备环境、浏览器类型及其版本号等信息。 - 此处需要将默认的 User-Agent 修改为指定值(如 WLLM),从而触发后台逻辑判断[^3]。 2. **工具使用** - 使用 Burp Suite 或其他抓包工具捕获原始请求,并将其转发至 Repeater 模块以便进一步编辑。 - 在 Repeater 中定位到请求头部分,找到现有的 User-Agent 参数并将之替换为目标字符串 “WLLM”。 3. **测试与提交** - 发送调整后的请求给服务端观察反馈;如果一切正常,则会收到预期的结果页面或者 flag 提示。 - 将最终获得的数据作为答案输入答题框即可完成挑战[^3]。 --- #### 相关知识点总结 ##### 1. HTTP 请求结构概述 HTTP 协议由多个组成部分构成,其中包括但不限于以下几个方面: - 方法(Method): 如 GET, POST 等表示操作类型的指令集; - URL 地址资源路径说明位置关系; - 版本号(Http Version)声明所遵循的标准协议层次级别; - 头部信息(Request Headers),即附加属性集合用来传递额外元数据比如身份认证凭据、缓存控制策略等等[^2]。 ##### 2. 自定义 Header 实践意义 在实际开发过程中,开发者经常借助自定义 header 来实现某些功能需求,例如跨域资源共享(CORS)设置、API 密钥管理或是像本案例里提到的身份标识确认机制——User-Agent 替代方案设计[^3]。 ##### 3. 安全隐患探讨 尽管更改 user-agent 可能看似无害甚至有益于兼容性调试工作,但从安全性角度来看却存在潜在风险。攻击者可能借此伪装成合法应用程序发起恶意活动,因此建议网站管理员加强对这类动态参数的有效校验措施以防止滥用行为发生[^2]。 --- ```python import requests url = 'http://example.com/hello.php' headers = { 'User-Agent': 'WLLM' # 设置特殊的 User-Agent 值 } response = requests.get(url, headers=headers) if response.status_code == 200: print(response.text) else: print(f'Request failed with status code {response.status_code}') ``` 以上脚本展示了如何通过 Python 编程语言调用 Requests 库模拟发送带有定制化 header 的网络请求过程[^3]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值